diff options
Diffstat (limited to 'binfilter/bf_sc/source/ui')
178 files changed, 69522 insertions, 0 deletions
diff --git a/binfilter/bf_sc/source/ui/app/makefile.mk b/binfilter/bf_sc/source/ui/app/makefile.mk new file mode 100644 index 000000000000..f68e708c63b8 --- /dev/null +++ b/binfilter/bf_sc/source/ui/app/makefile.mk @@ -0,0 +1,75 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +EXTERNAL_WARNINGS_NOT_ERRORS := TRUE +PRJ=..$/..$/..$/.. +BFPRJ=..$/..$/.. + +PRJNAME=binfilter +TARGET=sc_app + +NO_HIDS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk +.INCLUDE : $(BFPRJ)$/util$/makefile.pmk +INC+= -I$(PRJ)$/inc$/bf_sc +# --- Files -------------------------------------------------------- + +SLOFILES = \ + $(SLO)$/sc_scmod.obj \ + $(SLO)$/sc_scmod2.obj \ + $(SLO)$/sc_scdll.obj \ + $(SLO)$/sc_rfindlst.obj \ + $(SLO)$/sc_uiitems.obj \ + $(SLO)$/sc_msgpool.obj + +EXCEPTIONSFILES= \ + $(SLO)$/sc_scmod2.obj \ + $(SLO)$/sc_scmod.obj + +DEPOBJFILES=$(SLO)$/sc_sclib.obj + +# --- Targets ------------------------------------------------------- + +.INCLUDE : target.mk + +ALLTAR : $(DEPOBJFILES) + +$(SLO)$/sc_sclib.obj : $(INCCOM)$/scdll0.hxx +#$(OBJ)$/sc_sclib.obj : $(INCCOM)$/scdll0.hxx + +$(INCCOM)$/scdll0.hxx: makefile.mk +.IF "$(GUI)"=="UNX" + echo \#define DLL_NAME \"libbf_sc$(DLLPOSTFIX)$(DLLPOST)\" >$@ +.ELSE # "$(GUI)"=="UNX" + echo \#define DLL_NAME \"bf_sc$(DLLPOSTFIX).DLL\" >$@ +.ENDIF # "$(GUI)"=="UNX" + +$(SRS)$/sc_app.srs: $(PRJ)$/inc$/bf_svx$/globlmn.hrc + diff --git a/binfilter/bf_sc/source/ui/app/sc_msgpool.cxx b/binfilter/bf_sc/source/ui/app/sc_msgpool.cxx new file mode 100644 index 000000000000..4d463e25f43f --- /dev/null +++ b/binfilter/bf_sc/source/ui/app/sc_msgpool.cxx @@ -0,0 +1,128 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "scitems.hxx" +#include <bf_svx/dialogs.hrc> + +#include "bf_sc.hrc" +#include "docpool.hxx" + +#include "msgpool.hxx" +namespace binfilter { + +//------------------------------------------------------------------------ + +/*N*/ static SfxItemInfo __READONLY_DATA aMsgItemInfos[] = +/*N*/ { +/*N*/ { 0, SFX_ITEM_POOLABLE }, // SCITEM_STRING +/*N*/ { 0, SFX_ITEM_POOLABLE }, // SCITEM_SEARCHDATA - nicht mehr benutzt !!! +/*N*/ { SID_SORT, SFX_ITEM_POOLABLE }, // SCITEM_SORTDATA +/*N*/ { SID_QUERY, SFX_ITEM_POOLABLE }, // SCITEM_QUERYDATA +/*N*/ { SID_SUBTOTALS, SFX_ITEM_POOLABLE }, // SCITEM_SUBTDATA +/*N*/ { SID_CONSOLIDATE, SFX_ITEM_POOLABLE }, // SCITEM_CONSOLIDATEDATA +/*N*/ { SID_PIVOT_TABLE, SFX_ITEM_POOLABLE }, // SCITEM_PIVOTDATA +/*N*/ { SID_SOLVE, SFX_ITEM_POOLABLE }, // SCITEM_SOLVEDATA +/*N*/ { SID_SCUSERLISTS, SFX_ITEM_POOLABLE }, // SCITEM_USERLIST +/*N*/ { SID_PRINTER_NOTFOUND_WARN, SFX_ITEM_POOLABLE } // SCITEM_PRINTWARN +/*N*/ }; + +//------------------------------------------------------------------------ + +/*N*/ ScMessagePool::ScMessagePool() +/*N*/ : SfxItemPool ( String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("ScMessagePool")), +/*N*/ MSGPOOL_START, MSGPOOL_END, +/*N*/ aMsgItemInfos, NULL ), +/*N*/ // +/*N*/ aGlobalStringItem ( SfxStringItem ( SCITEM_STRING, String() ) ), +/*N*/ aGlobalSearchItem ( SvxSearchItem ( SCITEM_SEARCHDATA ) ), +/*N*/ aGlobalSortItem ( ScSortItem ( SCITEM_SORTDATA, NULL ) ), +/*N*/ aGlobalQueryItem ( ScQueryItem ( SCITEM_QUERYDATA, NULL, NULL ) ), +/*N*/ aGlobalSubTotalItem ( ScSubTotalItem ( SCITEM_SUBTDATA, NULL, NULL ) ), +/*N*/ aGlobalConsolidateItem ( ScConsolidateItem ( SCITEM_CONSOLIDATEDATA, NULL ) ), +/*N*/ aGlobalPivotItem ( ScPivotItem ( SCITEM_PIVOTDATA, NULL, NULL, FALSE ) ), +/*N*/ aGlobalSolveItem ( ScSolveItem ( SCITEM_SOLVEDATA, NULL ) ), +/*N*/ aGlobalUserListItem ( ScUserListItem ( SCITEM_USERLIST ) ), +/*N*/ // +/*N*/ aPrintWarnItem ( SfxBoolItem ( SCITEM_PRINTWARN, FALSE ) ) +/*N*/ { +/*N*/ ppPoolDefaults = new SfxPoolItem*[MSGPOOL_END - MSGPOOL_START + 1]; +/*N*/ +/*N*/ ppPoolDefaults[SCITEM_STRING - MSGPOOL_START] = &aGlobalStringItem; +/*N*/ ppPoolDefaults[SCITEM_SEARCHDATA - MSGPOOL_START] = &aGlobalSearchItem; +/*N*/ ppPoolDefaults[SCITEM_SORTDATA - MSGPOOL_START] = &aGlobalSortItem; +/*N*/ ppPoolDefaults[SCITEM_QUERYDATA - MSGPOOL_START] = &aGlobalQueryItem; +/*N*/ ppPoolDefaults[SCITEM_SUBTDATA - MSGPOOL_START] = &aGlobalSubTotalItem; +/*N*/ ppPoolDefaults[SCITEM_CONSOLIDATEDATA - MSGPOOL_START] = &aGlobalConsolidateItem; +/*N*/ ppPoolDefaults[SCITEM_PIVOTDATA - MSGPOOL_START] = &aGlobalPivotItem; +/*N*/ ppPoolDefaults[SCITEM_SOLVEDATA - MSGPOOL_START] = &aGlobalSolveItem; +/*N*/ ppPoolDefaults[SCITEM_USERLIST - MSGPOOL_START] = &aGlobalUserListItem; +/*N*/ ppPoolDefaults[SCITEM_PRINTWARN - MSGPOOL_START] = &aPrintWarnItem; +/*N*/ +/*N*/ SetDefaults( ppPoolDefaults ); +/*N*/ +/*N*/ pDocPool = new ScDocumentPool; +/*N*/ +/*N*/ SetSecondaryPool( pDocPool ); +/*N*/ } + + +/*N*/ __EXPORT ScMessagePool::~ScMessagePool() +/*N*/ { +/*N*/ Delete(); +/*N*/ SetSecondaryPool( NULL ); // before deleting defaults (accesses defaults) +/*N*/ +/*N*/ for ( USHORT i=0; i <= MSGPOOL_END-MSGPOOL_START; i++ ) +/*N*/ SetRefCount( *ppPoolDefaults[i], 0 ); +/*N*/ +/*N*/ delete[] ppPoolDefaults; +/*N*/ +/*N*/ delete pDocPool; +/*N*/ } + + +/*N*/ SfxMapUnit __EXPORT ScMessagePool::GetMetric( USHORT nWhich ) const +/*N*/ { +/*N*/ // eigene Attribute: Twips, alles andere 1/100 mm +/*N*/ +/*N*/ if ( nWhich >= ATTR_STARTINDEX && nWhich <= ATTR_ENDINDEX ) +/*N*/ return SFX_MAPUNIT_TWIP; +/*N*/ else +/*N*/ return SFX_MAPUNIT_100TH_MM; +/*N*/ } + + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/app/sc_rfindlst.cxx b/binfilter/bf_sc/source/ui/app/sc_rfindlst.cxx new file mode 100644 index 000000000000..3959b7767e81 --- /dev/null +++ b/binfilter/bf_sc/source/ui/app/sc_rfindlst.cxx @@ -0,0 +1,60 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "rfindlst.hxx" +namespace binfilter { + +// STATIC DATA ----------------------------------------------------------- + +#define SC_RANGECOLORS 8 + +/*N*/ static ColorData aColNames[SC_RANGECOLORS] = +/*N*/ { COL_LIGHTBLUE, COL_LIGHTRED, COL_LIGHTMAGENTA, COL_GREEN, +/*N*/ COL_BLUE, COL_RED, COL_MAGENTA, COL_BROWN }; + +//================================================================== + +ScRangeFindList::~ScRangeFindList() +{ + void* pEntry = aEntries.First(); + while ( pEntry ) + { + delete (ScRangeFindData*) aEntries.Remove( pEntry ); + pEntry = aEntries.Next(); + } +} + +//================================================================== + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/app/sc_scdll.cxx b/binfilter/bf_sc/source/ui/app/sc_scdll.cxx new file mode 100644 index 000000000000..8e02bef1b2ff --- /dev/null +++ b/binfilter/bf_sc/source/ui/app/sc_scdll.cxx @@ -0,0 +1,136 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <bf_svx/eeitem.hxx> +#define ITEMID_FIELD EE_FEATURE_FIELD + +#include "scitems.hxx" // fuer tbxctrls etc. +#include "scmod.hxx" +#include "scresid.hxx" +#include "bf_sc.hrc" +#include "cfgids.hxx" + +//! die Registrierung wird wegen CLOOKs in ein eigenes File wandern muessen... + +// Interface-Registrierung +#include "docsh.hxx" +#include "docpool.hxx" +#include "appoptio.hxx" + +#include <bf_svx/itemdata.hxx> + + +#include <bf_svtools/imgdef.hxx> + +#include <bf_svx/svdfield.hxx> // SdrRegisterFieldClasses +#include <rtl/logfile.hxx> + +namespace binfilter { + +//------------------------------------------------------------------ + +/*N*/ ScResId::ScResId( USHORT nId ) : +/*N*/ ResId( nId, *SC_MOD()->GetResMgr() ) +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ void ScDLL::Init() +/*N*/ { +/*N*/ RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDLL::Init" ); +/*N*/ +/*N*/ // called directly after loading the DLL +/*N*/ // do whatever you want, you may use Sxx-DLL too +/*N*/ +/*N*/ ScDocumentPool::InitVersionMaps(); // wird im ScModule ctor gebraucht +/*N*/ +/*N*/ // the ScModule must be created +/*N*/ ScModuleDummy **ppShlPtr = (ScModuleDummy**) GetAppData(BF_SHL_CALC); +/*N*/ SvFactory *pFact = (SvFactory*)(*ppShlPtr)->pScDocShellFactory; +/*N*/ delete (*ppShlPtr); +/*N*/ ScModule* pMod = new ScModule((SfxObjectFactory*)pFact); +/*N*/ (*ppShlPtr) = pMod; +/*N*/ (*ppShlPtr)->pScDocShellFactory = pFact; +/*N*/ +/*N*/ ScGlobal::Init(); // erst wenn der ResManager initialisiert ist +/*N*/ // erst nach ScGlobal::Init duerfen die App-Optionen +/*N*/ // initialisiert werden +/*N*/ +/*N*/ // Edit-Engine-Felder, soweit nicht schon in OfficeApplication::Init +/*N*/ +/*N*/ SvClassManager& rClassManager = SvxFieldItem::GetClassManager(); +/*N*/ // rClassManager.SV_CLASS_REGISTER( SvxURLField ); +/*N*/ // rClassManager.SV_CLASS_REGISTER( SvxDateField ); +/*N*/ // rClassManager.SV_CLASS_REGISTER( SvxPageField ); +/*N*/ rClassManager.SV_CLASS_REGISTER( SvxPagesField ); +/*N*/ // rClassManager.SV_CLASS_REGISTER( SvxTimeField ); +/*N*/ rClassManager.SV_CLASS_REGISTER( SvxFileField ); +/*N*/ // rClassManager.SV_CLASS_REGISTER( SvxExtFileField ); +/*N*/ rClassManager.SV_CLASS_REGISTER( SvxTableField ); +/*N*/ +/*N*/ SdrRegisterFieldClasses(); // SvDraw-Felder registrieren +/*N*/ +/*N*/ pMod->PutItem( SfxUInt16Item( SID_ATTR_METRIC, pMod->GetAppOptions().GetAppMetric() ) ); +/*N*/ +/*N*/ // StarOne Services are now handled in the registry +/*N*/ } + +/*N*/ void ScDLL::Exit() +/*N*/ { +/*N*/ // called directly befor unloading the DLL +/*N*/ // do whatever you want, Sxx-DLL is accessible +/*N*/ +/*N*/ // the SxxModule must be destroyed +/*N*/ ScModuleDummy **ppShlPtr = (ScModuleDummy**) GetAppData(BF_SHL_CALC); +/*N*/ delete (*ppShlPtr); +/*N*/ (*ppShlPtr) = NULL; +/*N*/ +/*N*/ // auf keinen Fall ein neues ScModuleDummy anlegen, weil dessen vtable sonst +/*N*/ // in der DLL waere und das Loeschen im LibExit schiefgehen wuerde +/*N*/ +/*N*/ // ScGlobal::Clear ist schon im Module-dtor +/*N*/ } + +//------------------------------------------------------------------ +// Statusbar +//------------------------------------------------------------------ + +#define TEXT_WIDTH(s) rStatusBar.GetTextWidth((s)) + + +#undef TEXT_WIDTH + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/app/sc_sclib.cxx b/binfilter/bf_sc/source/ui/app/sc_sclib.cxx new file mode 100644 index 000000000000..2356c2afc82f --- /dev/null +++ b/binfilter/bf_sc/source/ui/app/sc_sclib.cxx @@ -0,0 +1,656 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#define _SCALC_EXE + +#ifdef WIN +#include <svwin.h> +#endif + +#include <bf_svtools/inettype.hxx> +#include <comphelper/classids.hxx> +#include <bf_sfx2/fcontnr.hxx> +#include <bf_sfx2/docfile.hxx> +#include <bf_sfx2/app.hxx> +#include <unotools/configitem.hxx> +#include <comphelper/types.hxx> +#include <sal/macros.h> + +#include <sot/formats.hxx> +#define SOT_FORMATSTR_ID_STARCALC_30 SOT_FORMATSTR_ID_STARCALC + +#include <signal.h> + + +#include "docsh.hxx" +#include "bf_sc.hrc" +#include "scdll0.hxx" +namespace binfilter { + + +//------------------------------------------------------------------ + +// Filter-Namen (wie in docsh.cxx) + +static const sal_Char __FAR_DATA pFilterSc50[] = "StarCalc 5.0"; +static const sal_Char __FAR_DATA pFilterSc50Temp[] = "StarCalc 5.0 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterSc40[] = "StarCalc 4.0"; +static const sal_Char __FAR_DATA pFilterSc40Temp[] = "StarCalc 4.0 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterSc30[] = "StarCalc 3.0"; +static const sal_Char __FAR_DATA pFilterSc30Temp[] = "StarCalc 3.0 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterSc10[] = "StarCalc 1.0"; +static const sal_Char __FAR_DATA pFilterXML[] = "StarOffice XML (Calc)"; +static const sal_Char __FAR_DATA pFilterAscii[] = "Text - txt - csv (StarCalc)"; +static const sal_Char __FAR_DATA pFilterLotus[] = "Lotus"; +static const sal_Char __FAR_DATA pFilterExcel4[] = "MS Excel 4.0"; +static const sal_Char __FAR_DATA pFilterEx4Temp[] = "MS Excel 4.0 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterExcel5[] = "MS Excel 5.0/95"; +static const sal_Char __FAR_DATA pFilterEx5Temp[] = "MS Excel 5.0/95 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterExcel95[] = "MS Excel 95"; +static const sal_Char __FAR_DATA pFilterEx95Temp[] = "MS Excel 95 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterExcel97[] = "MS Excel 97"; +static const sal_Char __FAR_DATA pFilterEx97Temp[] = "MS Excel 97 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterDBase[] = "dBase"; +static const sal_Char __FAR_DATA pFilterDif[] = "DIF"; +static const sal_Char __FAR_DATA pFilterSylk[] = "SYLK"; +static const sal_Char __FAR_DATA pFilterHtml[] = "HTML (StarCalc)"; +static const sal_Char __FAR_DATA pFilterHtmlWeb[] = "calc_HTML_WebQuery"; +static const sal_Char __FAR_DATA pFilterRtf[] = "Rich Text Format (StarCalc)"; + +//------------------------------------------------------------------ + +// filter detection can't use ScFilterOptions (in sc-dll), +// so access to wk3 flag must be implemented here again + +/*N*/ class ScLibOptions : public ::utl::ConfigItem +/*N*/ { +/*N*/ BOOL bWK3Flag; +/*N*/ +/*N*/ public: +/*N*/ ScLibOptions(); +/*N*/ BOOL GetWK3Flag() const { return bWK3Flag; } + + virtual void Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames ); + virtual void Commit(); + +/*N*/ }; + +void ScLibOptions::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames ) {} +void ScLibOptions::Commit() {} + +#define CFGPATH_LIBFILTER "Office.Calc/Filter/Import/Lotus123" +#define ENTRYSTR_WK3 "WK3" + +/*N*/ ScLibOptions::ScLibOptions() : +/*N*/ ConfigItem( ::rtl::OUString::createFromAscii( CFGPATH_LIBFILTER ) ), +/*N*/ bWK3Flag( FALSE ) +/*N*/ { +/*N*/ ::com::sun::star::uno::Sequence<rtl::OUString> aNames(1); +/*N*/ aNames[0] = ::rtl::OUString::createFromAscii( ENTRYSTR_WK3 ); +/*N*/ ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any> aValues = GetProperties(aNames); +/*N*/ if ( aValues.getLength() == 1 && aValues[0].hasValue() ) +/*N*/ bWK3Flag = comphelper::getBOOL( aValues[0] ); +/*N*/ } + +//------------------------------------------------------------------ + +extern "C" { static void SAL_CALL thisModule() {} } + +// GlobalName der aktuellen Version: +/*N*/ SFX_IMPL_OBJECTFACTORY_LIB(ScDocShell, SFXOBJECTSHELL_STD_NORMAL, scalc, +/*N*/ SvGlobalName(BF_SO3_SC_CLASSID), Sc, +/*N*/ String( RTL_CONSTASCII_USTRINGPARAM( DLL_NAME ) )) +/*N*/ { +/*N*/ ((SfxObjectFactory&)Factory()). +/*N*/ SetDocumentServiceName( ::rtl::OUString::createFromAscii( +/*N*/ "com.sun.star.sheet.SpreadsheetDocument" ) ); +/*N*/ +/*N*/ const String aEmptyStr; +/*N*/ // Clipboard-IDs: +/*N*/ const ULONG nSc50Format = SOT_FORMATSTR_ID_STARCALC_50; +/*N*/ +/*N*/ String aVndCalc = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(CONTENT_TYPE_STR_APP_VND_CALC)); +/*N*/ +/*N*/ Factory().GetFilterContainer()->SetDetectFilter( ScDLL::DetectFilter ); +/*N*/ +/*N*/ // 5.0 muss mit vnd-Mime-Type registriert werden, aeltere mit dem alten x-starcalc +/* + SFX_OWN_FILTER_REGISTRATION( ScDLL::DetectFilter, + String::CreateFromAscii(pFilterSc50), + String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("*.sdc")), + SFX_FILTER_OWN | SFX_FILTER_TEMPLATE | + SFX_FILTER_IMPORT | SFX_FILTER_EXPORT, + nSc50Format, + String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("SVsc0.sdc")), + String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("StarCalc 5.0")), + RID_SCICN_DOCUMENT, + aVndCalc, aEmptyStr ); + + SFX_OWN_FILTER_REGISTRATION( ScDLL::DetectFilter, + String::CreateFromAscii(pFilterSc50Temp), + String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("*.vor")), + SFX_FILTER_OWN | SFX_FILTER_TEMPLATE | SFX_FILTER_TEMPLATEPATH | + SFX_FILTER_IMPORT | SFX_FILTER_EXPORT, + nSc50Format, + String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("SVsc1.vor")), + String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("StarCalc 5.0")), + RID_SCICN_TEMPLATE, + aVndCalc, aEmptyStr ); +*/ +/*N*/ // alle Im-/Exportfilter werden nur noch per install.ini registriert, +/*N*/ // damit sie bei der Installation weggelassen werden koennen. +/*N*/ } + + +// this is the right place for SFX_OBJECTFACTORY_LIB + +//------------------------------------------------------------------ +// +// ScModuleDummy::Load() muss zur App gelinkt werden: +// +//------------------------------------------------------------------ + +SfxModule* ScModuleDummy::Load() +{ + if ( LoadLibSc() ) + { + ScModuleDummy* pMod = SC_DLL(); + return pMod; + } + return NULL; +} + +//------------------------------------------------------------------ + +/*N*/ ScDLL::ScDLL() +/*N*/ { +/*N*/ // the ctor is called at the beginning of SfxApplication-subclass::Main() +/*N*/ // do whatever you want, but no calls to Sxx-DLL-code! +/*N*/ } + +/*N*/ ScDLL::~ScDLL() +/*N*/ { +/*N*/ // the dtor is called at the end of SfxApplication-subclass::Main() +/*N*/ // do whatever you want, but no calls to Sxx-DLL-code! +/*N*/ } + +/*N*/ void ScDLL::LibInit() +/*N*/ { +/*N*/ // this method is called before Application::Execute() +/*N*/ // do whatever you want, but no calls to Sxx-DLL-code! +/*N*/ +/*N*/ // RegisterFactory must now be before ScModuleDummy is created +/*N*/ ScDocShell::RegisterFactory( SDT_SC_DOCFACTPRIO ); +/*N*/ +/*N*/ // create a dummy-module for Object-Factory-Pointer +/*N*/ ScModuleDummy* pMod = new ScModuleDummy( NULL, TRUE, &ScDocShell::Factory() ); +/*N*/ SC_DLL() = pMod; +/*N*/ } + +/*N*/ void ScDLL::PreExit() +/*N*/ { +/*N*/ // PreExit wird aus Exit() gerufen und loescht das Module. +/*N*/ // Der Module-dtor muss alle Daten loeschen, die z.B. noch die Svx-DLL brauchen. +/*N*/ +/*N*/ ScModuleDummy **ppShlPtr = (ScModuleDummy**) GetAppData(BF_SHL_CALC); +/*N*/ SvFactory *pFact = (SvFactory*)(*ppShlPtr)->pScDocShellFactory; +/*N*/ delete (*ppShlPtr); +/*N*/ (*ppShlPtr) = new ScModuleDummy( NULL, TRUE, NULL); +/*N*/ (*ppShlPtr)->pScDocShellFactory = pFact; +/*N*/ +/*N*/ // Der ModuleDummy mit der Factory wird z.B. noch bei SvFactory::DeInit() gebraucht. +/*N*/ } + +/*N*/ void ScDLL::LibExit() +/*N*/ { +/*N*/ // LibExit wird am Ende von Main() gerufen und gibt die DLL selber frei +/*N*/ +/*N*/ FreeLibSc(); // DLL freigeben (ruft ScDLL::Exit) +/*N*/ +/*N*/ // das sollte jetzt nur noch ein Dummy sein: +/*N*/ +/*N*/ ScModuleDummy **ppShlPtr = (ScModuleDummy**) GetAppData(BF_SHL_CALC); +/*N*/ delete (*ppShlPtr); +/*N*/ (*ppShlPtr) = NULL; +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ BOOL lcl_MayBeAscii( SvStream& rStream ) +/*N*/ { +/*N*/ // ASCII is considered possible if there are no null bytes +/*N*/ +/*N*/ rStream.Seek(STREAM_SEEK_TO_BEGIN); +/*N*/ +/*N*/ BOOL bNullFound = FALSE; +/*N*/ BYTE aBuffer[ 4097 ]; +/*N*/ const BYTE* p = aBuffer; +/*N*/ ULONG nBytesRead = rStream.Read( aBuffer, 4096 ); +/*N*/ +/*N*/ if ( nBytesRead >= 2 && +/*N*/ ( ( aBuffer[0] == 0xff && aBuffer[1] == 0xfe ) || +/*N*/ ( aBuffer[0] == 0xfe && aBuffer[1] == 0xff ) ) ) +/*N*/ { +/*N*/ // unicode file may contain null bytes +/*N*/ return TRUE; +/*N*/ } +/*N*/ +/*N*/ while( nBytesRead-- ) +/*N*/ if( !*p++ ) +/*N*/ { +/*N*/ bNullFound = TRUE; +/*N*/ break; +/*N*/ } +/*N*/ +/*N*/ return !bNullFound; +/*N*/ } + +/*N*/ BOOL lcl_MayBeDBase( SvStream& rStream ) +/*N*/ { +/*N*/ // for dBase, look for the 0d character at the end of the header +/*N*/ +/*N*/ rStream.Seek(STREAM_SEEK_TO_END); +/*N*/ ULONG nSize = rStream.Tell(); +/*N*/ +/*N*/ // length of header starts at 8 +/*N*/ +/*N*/ if ( nSize < 10 ) +/*N*/ return FALSE; +/*N*/ rStream.Seek(8); +/*N*/ USHORT nHeaderLen; +/*N*/ rStream >> nHeaderLen; +/*N*/ +/*N*/ if ( nHeaderLen < 32 || nSize < nHeaderLen ) +/*N*/ return FALSE; +/*N*/ +/*N*/ // last byte of header must be 0d +/*N*/ +/*N*/ rStream.Seek( nHeaderLen - 1 ); +/*N*/ BYTE nEndFlag; +/*N*/ rStream >> nEndFlag; +/*N*/ +/*N*/ return ( nEndFlag == 0x0d ); +/*N*/ } + +BOOL lcl_IsAnyXMLFilter( const SfxFilter* pFilter ) +{ + DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if ( !pFilter ) + return FALSE; +} + +/*N*/ ULONG __EXPORT ScDLL::DetectFilter( SfxMedium& rMedium, const SfxFilter** ppFilter, +/*N*/ SfxFilterFlags nMust, SfxFilterFlags nDont ) +/*N*/ { +/*N*/ // #59915# laut MBA darf hier nur ERRCODE_NONE, ERRCODE_ABORT und ERRCODE_FORCEQUIET +/*N*/ // zurueckgegeben werden... +/*N*/ +/*N*/ if ( SVSTREAM_OK != rMedium.GetError() ) +/*N*/ return ERRCODE_ABORT; // ERRCODE_IO_GENERAL +/*N*/ +/*N*/ // Formate, die sicher erkannt werden: +/*N*/ +/*N*/ SvStorage* pStorage = rMedium.GetStorage(); +/*N*/ if ( pStorage ) +/*N*/ { +/*N*/ String aStreamName; +/*N*/ +/*N*/ // Erkennung ueber contained streams +/*N*/ // Excel-5 / StarCalc 3.0 +/*N*/ +/*N*/ aStreamName = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Workbook")); +/*N*/ BOOL bExcel97Stream = ( pStorage->IsContained( aStreamName ) && pStorage->IsStream( aStreamName ) ); +/*N*/ +/*N*/ aStreamName = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Book")); +/*N*/ BOOL bExcel5Stream = ( pStorage->IsContained( aStreamName ) && pStorage->IsStream( aStreamName ) ); +/*N*/ +/*N*/ if ( bExcel97Stream ) +/*N*/ { +/*?*/ String aOldName; +/*?*/ if ( *ppFilter ) aOldName = (*ppFilter)->GetFilterName(); +/*?*/ if ( aOldName.EqualsAscii(pFilterEx97Temp) ) +/*?*/ { +/*?*/ // Excel 97 template selected -> keep selection +/*?*/ } +/*?*/ else if ( bExcel5Stream && +/*?*/ ( aOldName.EqualsAscii(pFilterExcel5) || aOldName.EqualsAscii(pFilterEx5Temp) || +/*?*/ aOldName.EqualsAscii(pFilterExcel95) || aOldName.EqualsAscii(pFilterEx95Temp) ) ) +/*?*/ { +/*?*/ // dual format file and Excel 5 selected -> keep selection +/*?*/ } +/*?*/ else +/*?*/ { +/*?*/ // else use Excel 97 filter +/*?*/ *ppFilter = SFX_APP()->GetFilter( ScDocShell::Factory(), +/*?*/ String::CreateFromAscii(pFilterExcel97) ); +/*?*/ } +/*?*/ return ERRCODE_NONE; +/*N*/ } +/*N*/ if ( bExcel5Stream ) +/*N*/ { +/*?*/ String aOldName; +/*?*/ if ( *ppFilter ) aOldName = (*ppFilter)->GetFilterName(); +/*?*/ if ( aOldName.EqualsAscii(pFilterExcel95) || aOldName.EqualsAscii(pFilterEx95Temp) || +/*?*/ aOldName.EqualsAscii(pFilterEx5Temp) ) +/*?*/ { +/*?*/ // Excel 95 oder Vorlage (5 oder 95) eingestellt -> auch gut +/*?*/ } +/*?*/ else if ( aOldName.EqualsAscii(pFilterEx97Temp) ) +/*?*/ { +/*?*/ // #101923# auto detection has found template -> return Excel5 template +/*?*/ *ppFilter = SFX_APP()->GetFilter( ScDocShell::Factory(), +/*?*/ String::CreateFromAscii(pFilterEx5Temp) ); +/*?*/ } +/*?*/ else +/*?*/ { +/*?*/ // sonst wird als Excel 5-Datei erkannt +/*?*/ *ppFilter = SFX_APP()->GetFilter( ScDocShell::Factory(), +/*?*/ String::CreateFromAscii(pFilterExcel5) ); +/*?*/ } +/*?*/ return ERRCODE_NONE; +/*N*/ } +/*N*/ +/*N*/ aStreamName = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(STRING_SCSTREAM)); +/*N*/ if ( pStorage->IsContained( aStreamName ) && pStorage->IsStream( aStreamName ) ) +/*N*/ { +/*N*/ // Unterscheidung 3.0 / 4.0 / 5.0 ueber Clipboard-Id +/*N*/ ULONG nStorFmt = pStorage->GetFormat(); +/*N*/ if ( nStorFmt == SOT_FORMATSTR_ID_STARCALC_30 ) +/*?*/ *ppFilter = SFX_APP()->GetFilter( ScDocShell::Factory(), +/*?*/ String::CreateFromAscii(pFilterSc30) ); +/*N*/ else if ( nStorFmt == SOT_FORMATSTR_ID_STARCALC_40 ) +/*?*/ *ppFilter = SFX_APP()->GetFilter( ScDocShell::Factory(), +/*?*/ String::CreateFromAscii(pFilterSc40) ); +/*N*/ else +/*N*/ *ppFilter = SFX_APP()->GetFilter( ScDocShell::Factory(), +/*N*/ String::CreateFromAscii(pFilterSc50) ); +/*N*/ return ERRCODE_NONE; +/*N*/ } +/*N*/ +/*N*/ // XML package file: Stream "Content.xml" or "content.xml" +/*?*/ aStreamName = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("content.xml")); +/*?*/ String aOldXML = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Content.xml")); +/*?*/ if ( ( pStorage->IsContained( aStreamName ) && pStorage->IsStream( aStreamName ) ) || +/*?*/ ( pStorage->IsContained( aOldXML ) && pStorage->IsStream( aOldXML ) ) ) +/*?*/ { +/*?*/ // #85794# don't accept other applications' xml formats, +/*?*/ // recognized by clipboard id +/*?*/ ULONG nStorageFormat = pStorage->GetFormat(); +/*?*/ if ( nStorageFormat == 0 || nStorageFormat == SOT_FORMATSTR_ID_STARCALC_60 ) +/*?*/ { +/*?*/ // if XML template is set, don't modify +/*?*/ if (!lcl_IsAnyXMLFilter(*ppFilter)) +/*?*/ *ppFilter = SFX_APP()->GetFilter( ScDocShell::Factory(), +/*?*/ String::CreateFromAscii(pFilterXML) ); +/*?*/ return ERRCODE_NONE; +/*?*/ } +/*?*/ } +/*N*/ } +/*N*/ else // no storage +/*N*/ { +/*N*/ SvStream &rStr = *rMedium.GetInStream(); +/*N*/ if ( &rStr == NULL ) +/*N*/ return ERRCODE_ABORT; // ERRCODE_IO_GENERAL +/*N*/ +/*N*/ // Tabelle mit Suchmustern +/*N*/ // Bedeutung der Sequenzen +/*N*/ // 0x00??: genau Byte 0x?? muss an dieser Stelle stehen +/*N*/ // 0x0100: ein Byte ueberlesen (don't care) +/*N*/ // 0x02nn: ein Byte aus 0xnn Alternativen folgt +/*N*/ // 0x8000: Erkennung abgeschlossen +/*N*/ // +/*N*/ +/*N*/ #define M_DC 0x0100 +/*N*/ #define M_ALT(ANZ) 0x0200+ANZ +/*N*/ #define M_ENDE 0x8000 +/*N*/ +/*N*/ const UINT16 pLotus[] = // Lotus 1/1A/2 +/*N*/ { 0x0000, 0x0000, 0x0002, 0x0000, +/*N*/ M_ALT(2), 0x0004, 0x0006, +/*N*/ 0x0004, M_ENDE }; +/*N*/ +/*N*/ const UINT16 pExcel1[] = // Excel Biff/3/4 Tabellen +/*N*/ { 0x0009, +/*N*/ M_ALT(2), 0x0002, 0x0004, +/*N*/ 0x0006, 0x0000, M_DC, M_DC, 0x0010, 0x0000, +/*N*/ M_DC, M_DC, M_ENDE }; +/*N*/ +/*N*/ const UINT16 pExcel2[] = // Excel Biff3/4 Workbooks +/*N*/ { 0x0009, +/*N*/ M_ALT(2), 0x0002, 0x0004, +/*N*/ 0x0006, 0x0000, M_DC, M_DC, 0x0000, 0x0001, +/*N*/ M_DC, M_DC, M_ENDE }; +/*N*/ +/*N*/ const UINT16 pExcel3[] = // Excel Biff2 Tabellen +/*N*/ { 0x0009, 0x0000, 0x0004, 0x0000, +/*N*/ M_DC, M_DC, 0x0010, 0x0000, M_ENDE }; +/*N*/ +/*N*/ const UINT16 pSc10[] = // StarCalc 1.0 Dokumente +/*N*/ { 'B', 'l', 'a', 'i', 's', 'e', '-', 'T', 'a', 'b', 'e', 'l', 'l', +/*N*/ 'e', 0x000A, 0x000D, 0x0000, // Sc10CopyRight[16] +/*N*/ M_DC, M_DC, M_DC, M_DC, M_DC, M_DC, M_DC, M_DC, M_DC, M_DC, M_DC, +/*N*/ M_DC, M_DC, // Sc10CopyRight[29] +/*N*/ M_ALT(2), 0x0065, 0x0066, // Versionsnummer 101 oder 102 +/*N*/ 0x0000, +/*N*/ M_ENDE }; +/*N*/ +/*N*/ const UINT16 pLotus2[] = // Lotus >3 +/*N*/ { 0x0000, 0x0000, 0x001A, 0x0000, // Rec# + Len (26) +/*N*/ M_ALT(2), 0x0000, 0x0002, // File Revision Code +/*N*/ 0x0010, +/*N*/ 0x0004, 0x0000, // File Revision Subcode +/*N*/ M_ENDE }; +/*N*/ +/*N*/ const UINT16 pDIF1[] = // DIF mit CR-LF +/*N*/ { +/*N*/ 'T', 'A', 'B', 'L', 'E', +/*N*/ M_DC, M_DC, +/*N*/ '0', ',', '1', +/*N*/ M_DC, M_DC, +/*N*/ '\"', +/*N*/ M_ENDE }; +/*N*/ +/*N*/ const UINT16 pDIF2[] = // DIF mit CR oder LF +/*N*/ { +/*N*/ 'T', 'A', 'B', 'L', 'E', +/*N*/ M_DC, +/*N*/ '0', ',', '1', +/*N*/ M_DC, +/*N*/ '\"', +/*N*/ M_ENDE }; +/*N*/ +/*N*/ const UINT16 pSylk[] = // Sylk +/*N*/ { +/*N*/ 'I', 'D', ';', 'P', +/*N*/ M_ENDE }; +/*N*/ +/*N*/ #ifdef SINIX +/*N*/ const UINT16 nAnzMuster = 9; // sollte fuer indiz. Zugriff stimmen... +/*N*/ UINT16 *ppMuster[ nAnzMuster ]; // Arrays mit Suchmustern +/*N*/ ppMuster[ 0 ] = pLotus; +/*N*/ ppMuster[ 1 ] = pExcel1; +/*N*/ ppMuster[ 2 ] = pExcel2; +/*N*/ ppMuster[ 3 ] = pExcel3; +/*N*/ ppMuster[ 4 ] = pSc10; +/*N*/ ppMuster[ 5 ] = pDIF1; +/*N*/ ppMuster[ 6 ] = pDIF2; +/*N*/ ppMuster[ 7 ] = pSylk; +/*N*/ ppMuster[ 8 ] = pLotus2; // Lotus immer ganz hinten wegen Ini-Eintrag +/*N*/ #else +/*N*/ const UINT16 *ppMuster[] = // Arrays mit Suchmustern +/*N*/ { +/*N*/ pLotus, +/*N*/ pExcel1, +/*N*/ pExcel2, +/*N*/ pExcel3, +/*N*/ pSc10, +/*N*/ pDIF1, +/*N*/ pDIF2, +/*N*/ pSylk, +/*N*/ pLotus2 +/*N*/ }; +/*N*/ const UINT16 nAnzMuster = SAL_N_ELEMENTS(ppMuster); +/*N*/ #endif +/*N*/ +/*N*/ const sal_Char* pFilterName[ nAnzMuster ] = // zugehoerige Filter +/*N*/ { +/*N*/ pFilterLotus, +/*N*/ pFilterExcel4, +/*N*/ pFilterExcel4, +/*N*/ pFilterExcel4, +/*N*/ pFilterSc10, +/*N*/ pFilterDif, +/*N*/ pFilterDif, +/*N*/ pFilterSylk, +/*N*/ pFilterLotus +/*N*/ }; +/*N*/ +/*N*/ // suchen Sie jetzt! +/*N*/ // ... realisiert ueber 'Mustererkennung' +/*N*/ +/*N*/ BYTE nAkt; +/*N*/ BOOL bSync; // Datei und Muster stimmen ueberein +/*N*/ USHORT nFilter; // Zaehler ueber alle Filter +/*N*/ const UINT16 *pSearch; // aktuelles Musterwort +/*N*/ UINT16 nFilterLimit = nAnzMuster; +/*N*/ +/*N*/ // nur solange, bis es etwas Globales gibt +/*N*/ // funzt nur, solange Eintraege fuer WK3 letzte Muster-Tabelle ist! +/*N*/ ScLibOptions aLibOpt; +/*N*/ if( !aLibOpt.GetWK3Flag() ) +/*N*/ nFilterLimit--; +/*N*/ +/*N*/ for ( nFilter = 0 ; nFilter < nFilterLimit ; nFilter++ ) +/*N*/ { +/*N*/ rStr.Seek( 0 ); // am Anfang war alles Uebel... +/*N*/ rStr >> nAkt; +/*N*/ pSearch = ppMuster[ nFilter ]; +/*N*/ bSync = TRUE; +/*N*/ while( !rStr.IsEof() && bSync ) +/*N*/ { +/*N*/ register UINT16 nMuster = *pSearch; +/*N*/ +/*N*/ if( nMuster < 0x0100 ) +/*N*/ { // direkter Byte-Vergleich +/*N*/ if( ( BYTE ) nMuster != nAkt ) +/*N*/ bSync = FALSE; +/*N*/ } +/*N*/ else if( nMuster & M_DC ) +/*N*/ { // don't care +/*N*/ } +/*N*/ else if( nMuster & M_ALT(0) ) +/*N*/ { // alternative Bytes +/*N*/ BYTE nAnzAlt = ( BYTE ) nMuster; +/*N*/ bSync = FALSE; // zunaechst unsynchron +/*N*/ while( nAnzAlt > 0 ) +/*N*/ { +/*N*/ pSearch++; +/*N*/ if( ( BYTE ) *pSearch == nAkt ) +/*N*/ bSync = TRUE; // jetzt erst Synchronisierung +/*N*/ nAnzAlt--; +/*N*/ } +/*N*/ } +/*N*/ else if( nMuster & M_ENDE ) +/*N*/ { // Format detected +/*?*/ if ( pFilterName[nFilter] == pFilterExcel4 && *ppFilter && +/*?*/ (*ppFilter)->GetFilterName().EqualsAscii(pFilterEx4Temp) ) +/*?*/ { +/*?*/ // Excel 4 erkannt, Excel 4 Vorlage eingestellt -> auch gut +/*?*/ } +/*?*/ else +/*?*/ { // gefundenen Filter einstellen +/*?*/ *ppFilter = SFX_APP()->GetFilter( +/*?*/ ScDocShell::Factory(), +/*?*/ String::CreateFromAscii(pFilterName[ nFilter ]) ); +/*?*/ } +/*?*/ +/*?*/ return ERRCODE_NONE; +/*N*/ } +/*N*/ else +/*N*/ { // Tabellenfehler +/*N*/ DBG_ERROR( "-ScApplication::DetectFilter(): Fehler in Mustertabelle"); +/*N*/ } +/*N*/ +/*N*/ pSearch++; +/*N*/ rStr >> nAkt; +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ String aPresetFilterName; +/*N*/ if ( *ppFilter ) +/*N*/ aPresetFilterName = (*ppFilter)->GetFilterName(); +/*N*/ +/*N*/ // ASCII cannot be recognized. +/*N*/ // #i3341# But if the Text/CSV filter was set (either by the user or +/*N*/ // file extension) it takes precedence over HTML and RTF and dBase +/*N*/ // detection. Otherwise something like, for example, "lala <SUP> gugu" +/*N*/ // would trigger HTML to be recognized. +/*N*/ +/*N*/ if ( aPresetFilterName.EqualsAscii(pFilterAscii) && lcl_MayBeAscii( rStr ) ) +/*N*/ return ERRCODE_NONE; +/*N*/ +/*N*/ // get file header +/*N*/ +/*N*/ rStr.Seek( 0 ); +/*N*/ const int nTrySize = 80; +/*N*/ ByteString aHeader; +/*N*/ for ( int j = 0; j < nTrySize && !rStr.IsEof(); j++ ) +/*N*/ { +/*N*/ sal_Char c; +/*N*/ rStr >> c; +/*N*/ aHeader += c; +/*N*/ } +/*N*/ aHeader += '\0'; + + // test for HTML + + // #97832#; we don't have a flat xml filter +/* if ( aHeader.CompareTo( "<?xml", 5 ) == COMPARE_EQUAL ) + { + // if XML template is set, don't modify + if (!lcl_IsAnyXMLFilter(*ppFilter)) + *ppFilter = SFX_APP()->GetFilter( ScDocShell::Factory(), + String::CreateFromAscii(pFilterXML) ); + return ERRCODE_NONE; + }*/ + + // dBase cannot safely be recognized - only test if the filter was set +/*N*/ if ( aPresetFilterName.EqualsAscii(pFilterDBase) && lcl_MayBeDBase( rStr ) ) +/*N*/ return ERRCODE_NONE; +/*N*/ } +/*N*/ +/*N*/ return ERRCODE_ABORT; // war nix +/*N*/ } + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/app/sc_scmod.cxx b/binfilter/bf_sc/source/ui/app/sc_scmod.cxx new file mode 100644 index 000000000000..ecc472bb6cc1 --- /dev/null +++ b/binfilter/bf_sc/source/ui/app/sc_scmod.cxx @@ -0,0 +1,440 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> +#include <comphelper/processfactory.hxx> + +// INCLUDE --------------------------------------------------------------- + +#include "scitems.hxx" + +#include <bf_svx/eeitem.hxx> +#define ITEMID_FIELD EE_FEATURE_FIELD + +#include <tools/pstm.hxx> + +#include <bf_svtools/poolitem.hxx> + +#include <bf_svx/itemdata.hxx> + +#include <tools/date.hxx> + +#include <tools/time.hxx> + +#include <bf_svx/flditem.hxx> +#include <bf_svx/outliner.hxx> +#include "bf_basic/sbstar.hxx" + +#include <bf_svtools/ehdl.hxx> +#include <bf_svtools/ctloptions.hxx> +#include <vcl/status.hxx> +#include <bf_sfx2/request.hxx> + +#include <bf_sfx2/macrconf.hxx> +#include <bf_sfx2/printer.hxx> +#include <bf_svx/langitem.hxx> +#include <bf_svtools/colorcfg.hxx> + +#include <bf_svtools/whiter.hxx> +#include <bf_offmgr/app.hxx> +#include <vcl/msgbox.hxx> +#include <bf_offmgr/ofaids.hrc> +#include <bf_svtools/inethist.hxx> +#include <vcl/waitobj.hxx> + +#define ITEMID_SPELLCHECK 0 + +#include "scmod.hxx" +#include "global.hxx" +#include "viewopti.hxx" +#include "docoptio.hxx" +#include "appoptio.hxx" +#include "inputopt.hxx" +#include "printopt.hxx" +#include "navicfg.hxx" +#include "docsh.hxx" +#include "drwlayer.hxx" +#include "uiitems.hxx" +#include "bf_sc.hrc" +#include "cfgids.hxx" + +#include "msgpool.hxx" +#include "scresid.hxx" +#include "teamdlg.hxx" +#include "formdata.hxx" +#include "tpusrlst.hxx" +#include "tpcalc.hxx" +#include "tpprint.hxx" +#include "detfunc.hxx" + +#include <legacysmgr/legacy_binfilters_smgr.hxx> //STRIP002 +#define SC_IDLE_MIN 150 +#define SC_IDLE_MAX 3000 +#define SC_IDLE_STEP 75 +#define SC_IDLE_COUNT 50 +namespace binfilter { + +static USHORT nIdleCount = 0; + +//------------------------------------------------------------------ + +/*N*/ ScModule::ScModule( SfxObjectFactory* pFact ) : +/*N*/ ScModuleDummy( SFX_APP()->CreateResManager( "bf_sc" ), FALSE, pFact ), //STRIP005 +/*N*/ bIsWaterCan( FALSE ), +/*N*/ bIsInEditCommand( FALSE ), +/*N*/ pRefInputHandler( NULL ), +/*N*/ pViewCfg( NULL ), +/*N*/ pDocCfg( NULL ), +/*N*/ pAppCfg( NULL ), +/*N*/ pInputCfg( NULL ), +/*N*/ pPrintCfg( NULL ), +/*N*/ pNavipiCfg( NULL ), +/*N*/ pColorConfig( NULL ), +/*N*/ pCTLOptions( NULL ), +/*N*/ pTeamDlg( NULL ), +/*N*/ nCurRefDlgId( 0 ), +/*N*/ pErrorHdl( NULL ), +/*N*/ pSvxErrorHdl( NULL ), +/*N*/ pMessagePool( NULL ), +/*N*/ pFormEditData( NULL ) +/*N*/ { +/*N*/ // im ctor ist der ResManager (DLL-Daten) noch nicht initialisiert! +/*N*/ +/*N*/ SetName(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("StarCalc"))); // fuer Basic +/*N*/ +/*N*/ ResetDragObject(); +/*N*/ +/*N*/ // InputHandler braucht nicht mehr angelegt zu werden +/*N*/ +/*N*/ // ErrorHandler anlegen - war in Init() +/*N*/ // zwischen OfficeApplication::Init und ScGlobal::Init +/*N*/ // pSvxErrorHdl = new SvxErrorHandler(); +/*N*/ pErrorHdl = new SfxErrorHandler( RID_ERRHDLSC, +/*N*/ ERRCODE_AREA_SC, +/*N*/ ERRCODE_AREA_APP2-1, +/*N*/ GetResMgr() ); +/*N*/ +/*N*/ aSpellTimer.SetTimeout(10); +/*N*/ aSpellTimer.SetTimeoutHdl( LINK( this, ScModule, SpellTimerHdl ) ); +/*N*/ aIdleTimer.SetTimeout(SC_IDLE_MIN); +/*N*/ aIdleTimer.SetTimeoutHdl( LINK( this, ScModule, IdleHandler ) ); +/*N*/ aIdleTimer.Start(); +/*N*/ +/*N*/ pMessagePool = new ScMessagePool; +/*N*/ pMessagePool->FreezeIdRanges(); +/*N*/ SetPool( pMessagePool ); +/*N*/ ScGlobal::InitTextHeight( pMessagePool ); +/*N*/ +/*N*/ StartListening( *SFX_APP() ); // for SFX_HINT_DEINITIALIZING +/*N*/ } + +/*N*/ ScModule::~ScModule() +/*N*/ { +/*N*/ DELETEZ( pMessagePool ); +/*N*/ +/*N*/ DELETEZ( pFormEditData ); +/*N*/ +/*N*/ delete pErrorHdl; +/*N*/ // delete pSvxErrorHdl; +/*N*/ +/*N*/ ScGlobal::Clear(); // ruft auch ScDocumentPool::DeleteVersionMaps(); +/*N*/ +/*N*/ DeleteCfg(); // wurde mal aus Exit() gerufen +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ void ScModule::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +/*N*/ { +/*N*/ if ( rHint.ISA(SfxSimpleHint) ) +/*N*/ { +/*N*/ ULONG nHintId = ((SfxSimpleHint&)rHint).GetId(); +/*N*/ if ( nHintId == SFX_HINT_DEINITIALIZING ) +/*N*/ { +/*N*/ // ConfigItems must be removed before ConfigManager +/*N*/ DeleteCfg(); +/*N*/ } +/*N*/ else if ( nHintId == SFX_HINT_COLORS_CHANGED || nHintId == SFX_HINT_ACCESSIBILITY_CHANGED ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if ( ScDetectiveFunc::IsColorsInitialized() ) +/*N*/ } +/*N*/ else if ( nHintId == SFX_HINT_CTL_SETTINGS_CHANGED ) +/*N*/ {DBG_BF_ASSERT(0, "STRIP"); //STRIP001 +/*N*/ } +/*N*/ } +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ void ScModule::DeleteCfg() +/*N*/ { +/*N*/ DELETEZ( pViewCfg ); // Speichern passiert vor Exit() automatisch +/*N*/ DELETEZ( pDocCfg ); +/*N*/ DELETEZ( pAppCfg ); +/*N*/ DELETEZ( pInputCfg ); +/*N*/ DELETEZ( pPrintCfg ); +/*N*/ DELETEZ( pNavipiCfg ); +/*N*/ +/*N*/ if ( pColorConfig ) +/*N*/ { +/*N*/ EndListening(*pColorConfig); +/*N*/ DELETEZ( pColorConfig ); +/*N*/ } +/*N*/ if ( pCTLOptions ) +/*N*/ { +/*N*/ EndListening(*pCTLOptions); +/*N*/ DELETEZ( pCTLOptions ); +/*N*/ } +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ SfxModule* ScModule::Load() +/*N*/ { +/*N*/ return this; // ist schon geladen +/*N*/ } + +/*N*/ SfxModule* ScModuleDummy::Load() +/*N*/ { +/*N*/ return NULL; // Dummy zum Linken der DLL, wird nicht gerufen +/*N*/ } + +//------------------------------------------------------------------ + +#define TEXT_WIDTH(s) rStatusBar.GetTextWidth((s)) + +/*N*/ void ScModule::FillStatusBar(StatusBar& rStatusBar) +/*N*/ { +/*N*/ } + +#undef TEXT_WIDTH + +//------------------------------------------------------------------ +// +// von der Applikation verschoben: +// +//------------------------------------------------------------------ + +/*N*/ void ScModule::ResetDragObject() +/*N*/ { +/*N*/ aDragData.aLinkDoc.Erase(); +/*N*/ aDragData.aLinkTable.Erase(); +/*N*/ aDragData.aLinkArea.Erase(); +/*N*/ aDragData.pJumpLocalDoc = NULL; +/*N*/ aDragData.aJumpTarget.Erase(); +/*N*/ aDragData.aJumpText.Erase(); +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ const ScViewOptions& ScModule::GetViewOptions() +/*N*/ { +/*N*/ if ( !pViewCfg ) +/*N*/ pViewCfg = new ScViewCfg; +/*N*/ +/*N*/ return *pViewCfg; +/*N*/ } + + +/*N*/ const ScDocOptions& ScModule::GetDocOptions() +/*N*/ { +/*N*/ if ( !pDocCfg ) +/*N*/ pDocCfg = new ScDocCfg; +/*N*/ +/*N*/ return *pDocCfg; +/*N*/ } + +#ifndef LRU_MAX +#define LRU_MAX 10 +#endif + + +/*N*/ void ScModule::RecentFunctionsChanged() +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); +/*N*/ } + +/*N*/ void ScModule::SetAppOptions( const ScAppOptions& rOpt ) +/*N*/ { +/*N*/ if ( !pAppCfg ) +/*N*/ pAppCfg = new ScAppCfg; +/*N*/ +/*N*/ pAppCfg->SetOptions( rOpt ); +/*N*/ } + +/*N*/ void global_InitAppOptions() +/*N*/ { +/*N*/ SC_MOD()->GetAppOptions(); +/*N*/ } + +/*N*/ const ScAppOptions& ScModule::GetAppOptions() +/*N*/ { +/*N*/ if ( !pAppCfg ) +/*N*/ pAppCfg = new ScAppCfg; +/*N*/ +/*N*/ return *pAppCfg; +/*N*/ } + +/*N*/ void ScModule::SetInputOptions( const ScInputOptions& rOpt ) +/*N*/ { +/*N*/ if ( !pInputCfg ) +/*N*/ pInputCfg = new ScInputCfg; +/*N*/ +/*N*/ pInputCfg->SetOptions( rOpt ); +/*N*/ } + +/*N*/ const ScInputOptions& ScModule::GetInputOptions() +/*N*/ { +/*N*/ if ( !pInputCfg ) +/*N*/ pInputCfg = new ScInputCfg; +/*N*/ +/*N*/ return *pInputCfg; +/*N*/ } + +/*N*/ void ScModule::SetPrintOptions( const ScPrintOptions& rOpt ) +/*N*/ { +/*N*/ if ( !pPrintCfg ) +/*N*/ pPrintCfg = new ScPrintCfg; +/*N*/ +/*N*/ pPrintCfg->SetOptions( rOpt ); +/*N*/ } + +/*N*/ const ScPrintOptions& ScModule::GetPrintOptions() +/*N*/ { +/*N*/ if ( !pPrintCfg ) +/*N*/ pPrintCfg = new ScPrintCfg; +/*N*/ +/*N*/ return *pPrintCfg; +/*N*/ } + + ColorConfig& ScModule::GetColorConfig() +/*N*/ { +/*N*/ if ( !pColorConfig ) +/*N*/ { +/*N*/ pColorConfig = new ColorConfig; +/*N*/ StartListening(*pColorConfig); +/*N*/ } +/*N*/ +/*N*/ return *pColorConfig; +/*N*/ } + +/*N*/ SvtCTLOptions& ScModule::GetCTLOptions() +/*N*/ { +/*N*/ if ( !pCTLOptions ) +/*N*/ { +/*N*/ pCTLOptions = new SvtCTLOptions; +/*N*/ StartListening(*pCTLOptions); +/*N*/ } +/*N*/ +/*N*/ return *pCTLOptions; +/*N*/ } + +/*N*/ USHORT ScModule::GetOptDigitLanguage() +/*N*/ { +/*N*/ SvtCTLOptions::TextNumerals eNumerals = GetCTLOptions().GetCTLTextNumerals(); +/*N*/ return ( eNumerals == SvtCTLOptions::NUMERALS_ARABIC ) ? LANGUAGE_ENGLISH_US : +/*N*/ ( eNumerals == SvtCTLOptions::NUMERALS_HINDI) ? LANGUAGE_ARABIC_SAUDI_ARABIA : +/*N*/ LANGUAGE_SYSTEM; +/*N*/ } + +//------------------------------------------------------------------ +// +// Idle / Online-Spelling +// +//------------------------------------------------------------------ + +/*N*/ void ScModule::AnythingChanged() +/*N*/ { +/*N*/ ULONG nOldTime = aIdleTimer.GetTimeout(); +/*N*/ if ( nOldTime != SC_IDLE_MIN ) +/*N*/ aIdleTimer.SetTimeout( SC_IDLE_MIN ); +/*N*/ +/*N*/ nIdleCount = 0; +/*N*/ } + +/*N*/ IMPL_LINK( ScModule, IdleHandler, Timer*, pTimer ) +/*N*/ { +/*N*/ if ( Application::AnyInput( INPUT_MOUSEANDKEYBOARD ) ) +/*N*/ { +/*N*/ aIdleTimer.Start(); // Timeout unveraendert +/*N*/ return 0; +/*N*/ } +/*N*/ +/*N*/ BOOL bMore = FALSE; +/*N*/ ScDocShell* pDocSh = PTR_CAST( ScDocShell, SfxObjectShell::Current() ); +/*N*/ if ( pDocSh ) +/*N*/ { +/*?*/ ScDocument* pDoc = pDocSh->GetDocument(); +/*?*/ if ( pDoc->IsLoadingDone() ) +/*?*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 BOOL bLinks = pDoc->IdleCheckLinks(); +/*?*/ } +/*N*/ } +/*N*/ +/*N*/ ULONG nOldTime = aIdleTimer.GetTimeout(); +/*N*/ ULONG nNewTime = nOldTime; +/*N*/ if ( bMore ) +/*N*/ { +/*?*/ nNewTime = SC_IDLE_MIN; +/*?*/ nIdleCount = 0; +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ // SC_IDLE_COUNT mal mit initialem Timeout, dann hochzaehlen +/*N*/ +/*N*/ if ( nIdleCount < SC_IDLE_COUNT ) +/*N*/ ++nIdleCount; +/*N*/ else +/*N*/ { +/*N*/ nNewTime += SC_IDLE_STEP; +/*N*/ if ( nNewTime > SC_IDLE_MAX ) +/*N*/ nNewTime = SC_IDLE_MAX; +/*N*/ } +/*N*/ } +/*N*/ if ( nNewTime != nOldTime ) +/*N*/ aIdleTimer.SetTimeout( nNewTime ); +/*N*/ +/*N*/ aIdleTimer.Start(); +/*N*/ return 0; +/*N*/ } + +IMPL_LINK( ScModule, SpellTimerHdl, Timer*, pTimer ) +{ + DBG_BF_ASSERT(0, "STRIP"); //STRIP001 //STRIP001 if ( Application::AnyInput( INPUT_KEYBOARD ) ) + return 0; +} + +/*N*/ IMPL_LINK( ScModule, CalcFieldValueHdl, EditFieldInfo*, pInfo ) +/*N*/ { +DBG_BF_ASSERT(0, "STRIP"); //STRIP001 //STRIP001 if (pInfo) +/*N*/ return 0; +/*N*/ } + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/app/sc_scmod2.cxx b/binfilter/bf_sc/source/ui/app/sc_scmod2.cxx new file mode 100644 index 000000000000..57d664e45d5d --- /dev/null +++ b/binfilter/bf_sc/source/ui/app/sc_scmod2.cxx @@ -0,0 +1,88 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef PCH +#include "ui_pch.hxx" +#endif + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +//------------------------------------------------------------------ + +#include <bf_svx/unolingu.hxx> +#include <bf_svtools/lingucfg.hxx> + +#include <com/sun/star/linguistic2/XThesaurus.hpp> +#include <com/sun/star/lang/Locale.hpp> + +using namespace ::com::sun::star; + +#include "scmod.hxx" +namespace binfilter { + +//------------------------------------------------------------------ + +//#define LINGUPROP_DEFLOCALE "DefaultLocale" +//#define LINGUPROP_CJKLOCALE "DefaultLocale_CJK" +//#define LINGUPROP_CTLLOCALE "DefaultLocale_CTL" +#define LINGUPROP_AUTOSPELL "IsSpellAuto" +#define LINGUPROP_HIDEAUTO "IsSpellHide" + +//------------------------------------------------------------------ + +// static +/*N*/ void ScModule::GetSpellSettings( USHORT& rDefLang, USHORT& rCjkLang, USHORT& rCtlLang, +/*N*/ BOOL& rAutoSpell, BOOL& rHideAuto ) +/*N*/ { +/*N*/ // use SvtLinguConfig instead of service LinguProperties to avoid +/*N*/ // loading the linguistic component +/*N*/ SvtLinguConfig aConfig; +/*N*/ +/*N*/ SvtLinguOptions aOptions; +/*N*/ aConfig.GetOptions( aOptions ); +/*N*/ +/*N*/ rDefLang = aOptions.nDefaultLanguage; +/*N*/ rCjkLang = aOptions.nDefaultLanguage_CJK; +/*N*/ rCtlLang = aOptions.nDefaultLanguage_CTL; +/*N*/ rAutoSpell = aOptions.bIsSpellAuto; +/*N*/ rHideAuto = aOptions.bIsSpellHideMarkings; +/*N*/ } + +// static + +// static + + +// static + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/app/sc_uiitems.cxx b/binfilter/bf_sc/source/ui/app/sc_uiitems.cxx new file mode 100644 index 000000000000..a455d5b180b4 --- /dev/null +++ b/binfilter/bf_sc/source/ui/app/sc_uiitems.cxx @@ -0,0 +1,350 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + + +#include "userlist.hxx" +#include "uiitems.hxx" +#include "dpsave.hxx" +namespace binfilter { + +// STATIC DATA ----------------------------------------------------------- + +/*N*/ TYPEINIT1(ScSortItem, SfxPoolItem); +/*N*/ TYPEINIT1(ScQueryItem, SfxPoolItem); +/*N*/ TYPEINIT1(ScSubTotalItem, SfxPoolItem); +/*N*/ TYPEINIT1(ScUserListItem, SfxPoolItem); +/*N*/ TYPEINIT1(ScConsolidateItem, SfxPoolItem); +/*N*/ TYPEINIT1(ScPivotItem, SfxPoolItem); +/*N*/ TYPEINIT1(ScSolveItem, SfxPoolItem); + +/*N*/ TYPEINIT1(ScTablesHint, SfxHint); +/*N*/ TYPEINIT1(ScEditViewHint, SfxHint); +/*N*/ TYPEINIT1(ScIndexHint, SfxHint); + + +// ----------------------------------------------------------------------- +// ScTablesHint - Views anpassen, wenn Tabellen eingefuegt / geloescht +// ----------------------------------------------------------------------- + +/*N*/ ScTablesHint::ScTablesHint(USHORT nNewId, USHORT nTable1, USHORT nTable2) : +/*N*/ nId( nNewId ), +/*N*/ nTab1( nTable1 ), +/*N*/ nTab2( nTable2 ) +/*N*/ { +/*N*/ } + +/*N*/ ScTablesHint::~ScTablesHint() +/*N*/ { +/*N*/ } + + + +/*N*/ ScIndexHint::~ScIndexHint() +/*N*/ { +/*N*/ } + + +// ----------------------------------------------------------------------- +// ScEditViewHint - neue EditView fuer Cursorposition anlegen +// ----------------------------------------------------------------------- + +/*N*/ ScEditViewHint::~ScEditViewHint() +/*N*/ { +/*N*/ } + +// ----------------------------------------------------------------------- +// ScSortItem - Daten fuer den Sortierdialog +// ----------------------------------------------------------------------- + +/*N*/ ScSortItem::ScSortItem( USHORT nWhich, +/*N*/ const ScSortParam* pSortData ) : +/*N*/ SfxPoolItem ( nWhich ), +/*N*/ pViewData ( NULL ) +/*N*/ { +/*N*/ if ( pSortData ) theSortData = *pSortData; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ ScSortItem::ScSortItem( const ScSortItem& rItem ) : +/*N*/ SfxPoolItem ( rItem ), +/*N*/ pViewData ( rItem.pViewData ), +/*N*/ theSortData ( rItem.theSortData ) +/*N*/ { +/*N*/ } + +/*N*/ __EXPORT ScSortItem::~ScSortItem() +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + +// ----------------------------------------------------------------------- +// ScQueryItem - Daten fuer den Filterdialog +// ----------------------------------------------------------------------- + +/*N*/ ScQueryItem::ScQueryItem( USHORT nWhich, +/*N*/ ScViewData* ptrViewData, +/*N*/ const ScQueryParam* pQueryData ) : +/*N*/ SfxPoolItem ( nWhich ), +/*N*/ bIsAdvanced ( FALSE ), +/*N*/ pViewData ( ptrViewData ) +/*N*/ { +/*N*/ if ( pQueryData ) theQueryData = *pQueryData; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ ScQueryItem::ScQueryItem( const ScQueryItem& rItem ) : +/*N*/ SfxPoolItem ( rItem ), +/*N*/ bIsAdvanced ( rItem.bIsAdvanced ), +/*N*/ aAdvSource ( rItem.aAdvSource ), +/*N*/ pViewData ( rItem.pViewData ), +/*N*/ theQueryData( rItem.theQueryData ) +/*N*/ { +/*N*/ } + +/*N*/ __EXPORT ScQueryItem::~ScQueryItem() +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------ + + + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + +// ----------------------------------------------------------------------- +// ScSubTotalItem - Daten fuer den Zwischenergebnisdialog +// ----------------------------------------------------------------------- + +/*N*/ ScSubTotalItem::ScSubTotalItem( USHORT nWhich, +/*N*/ ScViewData* ptrViewData, +/*N*/ const ScSubTotalParam* pSubTotalData ) : +/*N*/ SfxPoolItem ( nWhich ), +/*N*/ pViewData ( ptrViewData ) +/*N*/ { +/*N*/ if ( pSubTotalData ) theSubTotalData = *pSubTotalData; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ ScSubTotalItem::ScSubTotalItem( const ScSubTotalItem& rItem ) : +/*N*/ SfxPoolItem ( rItem ), +/*N*/ pViewData ( rItem.pViewData ), +/*N*/ theSubTotalData ( rItem.theSubTotalData ) +/*N*/ { +/*N*/ } + +/*N*/ __EXPORT ScSubTotalItem::~ScSubTotalItem() +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + +// ----------------------------------------------------------------------- +// ScUserListItem - Transporter fuer den Benutzerlisten-TabPage +// ----------------------------------------------------------------------- + +/*N*/ ScUserListItem::ScUserListItem( USHORT nWhich ) +/*N*/ : SfxPoolItem ( nWhich ), +/*N*/ pUserList ( NULL ) +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ ScUserListItem::ScUserListItem( const ScUserListItem& rItem ) +/*N*/ : SfxPoolItem ( rItem ) +/*N*/ { +/*N*/ if ( rItem.pUserList ) +/*N*/ pUserList = new ScUserList( *(rItem.pUserList) ); +/*N*/ else +/*N*/ pUserList = NULL; +/*N*/ } + +/*N*/ __EXPORT ScUserListItem::~ScUserListItem() +/*N*/ { +/*N*/ delete pUserList; +/*N*/ } + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + +// ----------------------------------------------------------------------- +// ScConsolidateItem - Daten fuer den Konsolidieren-Dialog +// ----------------------------------------------------------------------- + +/*N*/ ScConsolidateItem::ScConsolidateItem( +/*N*/ USHORT nWhich, +/*N*/ const ScConsolidateParam* pConsolidateData ) : +/*N*/ SfxPoolItem ( nWhich ) +/*N*/ { +/*N*/ if ( pConsolidateData ) theConsData = *pConsolidateData; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ ScConsolidateItem::ScConsolidateItem( const ScConsolidateItem& rItem ) : +/*N*/ SfxPoolItem ( rItem ), +/*N*/ theConsData ( rItem.theConsData ) +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ __EXPORT ScConsolidateItem::~ScConsolidateItem() +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + + +// ----------------------------------------------------------------------- +// ScPivotItem - Daten fuer den Pivot-Dialog +// ----------------------------------------------------------------------- + +/*N*/ ScPivotItem::ScPivotItem( USHORT nWhich, const ScDPSaveData* pData, +/*N*/ const ScRange* pRange, BOOL bNew ) : +/*N*/ SfxPoolItem ( nWhich ) +/*N*/ { +/*N*/ // pSaveData must always exist +/*N*/ if ( pData ) +/*?*/ pSaveData = new ScDPSaveData(*pData); +/*N*/ else +/*N*/ pSaveData = new ScDPSaveData; +/*N*/ if ( pRange ) aDestRange = *pRange; +/*N*/ bNewSheet = bNew; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ ScPivotItem::ScPivotItem( const ScPivotItem& rItem ) : +/*N*/ SfxPoolItem ( rItem ), +/*N*/ aDestRange ( rItem.aDestRange ), +/*N*/ bNewSheet ( rItem.bNewSheet ) +/*N*/ { +/*N*/ DBG_ASSERT(rItem.pSaveData, "pSaveData"); +/*N*/ pSaveData = new ScDPSaveData(*rItem.pSaveData); +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ __EXPORT ScPivotItem::~ScPivotItem() +/*N*/ { +/*N*/ delete pSaveData; +/*N*/ } + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + + +// ----------------------------------------------------------------------- +// ScSolveItem - Daten fuer den Solver-Dialog +// ----------------------------------------------------------------------- + +/*N*/ ScSolveItem::ScSolveItem( USHORT nWhich, +/*N*/ const ScSolveParam* pSolveData ) +/*N*/ : SfxPoolItem ( nWhich ) +/*N*/ { +/*N*/ if ( pSolveData ) theSolveData = *pSolveData; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ ScSolveItem::ScSolveItem( const ScSolveItem& rItem ) +/*N*/ : SfxPoolItem ( rItem ), +/*N*/ theSolveData ( rItem.theSolveData ) +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ __EXPORT ScSolveItem::~ScSolveItem() +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/dbgui/asciiopt.hrc b/binfilter/bf_sc/source/ui/dbgui/asciiopt.hrc new file mode 100644 index 000000000000..7a7a9bc69b49 --- /dev/null +++ b/binfilter/bf_sc/source/ui/dbgui/asciiopt.hrc @@ -0,0 +1,55 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#include "bf_sc.hrc" +//#define RID_SCDLG_ASCII 256 +#define RB_SEPARATED 1 +#define RB_FIXED 2 +#define FT_CHARSET 3 +#define LB_CHARSET 4 +#define FL_SEPOPT 5 +#define FT_FIELDSEP 6 +#define CB_FIELDSEP 7 +#define FT_TEXTSEP 8 +#define CB_TEXTSEP 9 +#define FL_FIELDOPT 10 +#define FT_TYPE 12 +#define FT_PREVIEW 13 +#define LB_TYPE1 23 +#define FL_WIDTH 30 +#define BTN_OK 31 +#define BTN_CANCEL 32 +#define BTN_HELP 33 +#define CTR_TABLEBOX 41 +#define CKB_TAB 51 +#define CKB_SPACE 52 +#define CKB_SEMICOLON 53 +#define CKB_COMMA 54 +#define CKB_OTHER 55 +#define ED_OTHER 56 +#define FT_AT_ROW 59 +#define NF_AT_ROW 60 +#define CB_ASONCE 90 diff --git a/binfilter/bf_sc/source/ui/dbgui/imoptdlg.hrc b/binfilter/bf_sc/source/ui/dbgui/imoptdlg.hrc new file mode 100644 index 000000000000..6e93c76ce554 --- /dev/null +++ b/binfilter/bf_sc/source/ui/dbgui/imoptdlg.hrc @@ -0,0 +1,43 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#include "bf_sc.hrc" + +//#define RID_SCDLG_IMPORTOPT 2256 + +#define BTN_OK 1 +#define BTN_CANCEL 2 +#define BTN_HELP 3 +#define FT_FIELDSEP 4 +#define ED_FIELDSEP 5 +#define FT_TEXTSEP 6 +#define ED_TEXTSEP 7 +#define FT_FONT 8 +#define DDLB_FONT 9 +#define LB_FONT 10 +#define FL_FIELDOPT 11 +#define CB_FIXEDWIDTH 12 + diff --git a/binfilter/bf_sc/source/ui/dbgui/makefile.mk b/binfilter/bf_sc/source/ui/dbgui/makefile.mk new file mode 100644 index 000000000000..3b55a0fec89a --- /dev/null +++ b/binfilter/bf_sc/source/ui/dbgui/makefile.mk @@ -0,0 +1,59 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +EXTERNAL_WARNINGS_NOT_ERRORS := TRUE +PRJ=..$/..$/..$/.. +BFPRJ=..$/..$/.. + +PRJNAME=binfilter +TARGET=sc_dbgui + +NO_HIDS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk +.INCLUDE : $(BFPRJ)$/util$/makefile.pmk +INC+= -I$(PRJ)$/inc$/bf_sc +# --- Files -------------------------------------------------------- + +SLOFILES = \ + $(SLO)$/sc_imoptdlg.obj \ + $(SLO)$/sc_asciiopt.obj + +SRS1NAME=$(TARGET) +SRC1FILES = \ + sc_pivot.src \ + sc_imoptdlg.src \ + sc_asciiopt.src \ + sc_outline.src + +# --- Tagets ------------------------------------------------------- + +.INCLUDE : target.mk + + diff --git a/binfilter/bf_sc/source/ui/dbgui/pivot.hrc b/binfilter/bf_sc/source/ui/dbgui/pivot.hrc new file mode 100644 index 000000000000..4988a177f18f --- /dev/null +++ b/binfilter/bf_sc/source/ui/dbgui/pivot.hrc @@ -0,0 +1,73 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#include "bf_sc.hrc" // ->RID_SCDLG_PIVOT_LAYOUT + +#define BTN_OK 1 +#define BTN_CANCEL 2 +#define BTN_HELP 3 +#define BTN_MORE 4 +#define BTN_REMOVE 5 +#define BTN_OPTIONS 6 + +#define FL_LAYOUT 10 +#define WND_COL 11 +#define WND_ROW 12 +#define WND_DATA 13 +#define WND_SELECT 14 +#define WND_FIELD 15 +#define WND_FIELD_SPACE 16 +#define WND_HSCROLL 17 +#define FT_COL 31 +#define FT_ROW 32 +#define FT_DATA 33 +#define STR_SELECT 34 + +#define PTR_FIELD 18 +#define FT_INFO 19 + +#define FL_OUTPUT 20 +#define FT_OUTAREA 21 +#define LB_OUTAREA 22 +#define ED_OUTAREA 23 +#define RB_OUTAREA 24 +#define BTN_IGNEMPTYROWS 25 +#define BTN_DETECTCAT 26 +#define BTN_TOTALCOL 27 +#define BTN_TOTALROW 28 + +#define PIVOTSTR_SUM 1 +#define PIVOTSTR_COUNT 2 +#define PIVOTSTR_AVG 3 +#define PIVOTSTR_MAX 4 +#define PIVOTSTR_MIN 5 +#define PIVOTSTR_PROD 6 +#define PIVOTSTR_COUNT2 7 +#define PIVOTSTR_DEV 8 +#define PIVOTSTR_DEV2 9 +#define PIVOTSTR_VAR 10 +#define PIVOTSTR_VAR2 11 + diff --git a/binfilter/bf_sc/source/ui/dbgui/pvglob.hxx b/binfilter/bf_sc/source/ui/dbgui/pvglob.hxx new file mode 100644 index 000000000000..6c9b6e79408d --- /dev/null +++ b/binfilter/bf_sc/source/ui/dbgui/pvglob.hxx @@ -0,0 +1,47 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_PVGLOB_HXX +#define SC_PVGLOB_HXX +namespace binfilter { + +//------------------------------------------------------------------- + +class PivotGlobal +{ +public: + static long nObjHeight; + static long nObjWidth; + static long nSelSpace; +}; + + +} //namespace binfilter +#endif // SC_PVGLOB_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/dbgui/sc_asciiopt.cxx b/binfilter/bf_sc/source/ui/dbgui/sc_asciiopt.cxx new file mode 100644 index 000000000000..456cc5172ab8 --- /dev/null +++ b/binfilter/bf_sc/source/ui/dbgui/sc_asciiopt.cxx @@ -0,0 +1,214 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "asciiopt.hxx" +#include "asciiopt.hrc" + +#include <rtl/tencinfo.h> +namespace binfilter { + + +// ============================================================================ + +//! TODO make dynamic +#ifdef WIN +const sal_Int32 ASCIIDLG_MAXROWS = 10000; +#else +const sal_Int32 ASCIIDLG_MAXROWS = 32000; +#endif + +static const sal_Char __FAR_DATA pStrFix[] = "FIX"; +static const sal_Char __FAR_DATA pStrMrg[] = "MRG"; + + +// ============================================================================ + +/*N*/ ScAsciiOptions::ScAsciiOptions() : +/*N*/ bFixedLen ( FALSE ), +/*N*/ aFieldSeps ( ';' ), +/*N*/ bMergeFieldSeps ( FALSE ), +/*N*/ cTextSep ( 34 ), +/*N*/ eCharSet ( gsl_getSystemTextEncoding() ), +/*N*/ bCharSetSystem ( FALSE ), +/*N*/ nStartRow ( 1 ), +/*N*/ nInfoCount ( 0 ), +/*N*/ pColStart ( NULL ), +/*N*/ pColFormat ( NULL ) +/*N*/ { +/*N*/ } + + +/*N*/ ScAsciiOptions::ScAsciiOptions(const ScAsciiOptions& rOpt) : +/*N*/ bFixedLen ( rOpt.bFixedLen ), +/*N*/ aFieldSeps ( rOpt.aFieldSeps ), +/*N*/ bMergeFieldSeps ( rOpt.bMergeFieldSeps ), +/*N*/ cTextSep ( rOpt.cTextSep ), +/*N*/ eCharSet ( rOpt.eCharSet ), +/*N*/ bCharSetSystem ( rOpt.bCharSetSystem ), +/*N*/ nStartRow ( rOpt.nStartRow ), +/*N*/ nInfoCount ( rOpt.nInfoCount ) +/*N*/ { +/*N*/ if (nInfoCount) +/*N*/ { +/*N*/ pColStart = new xub_StrLen[nInfoCount]; +/*N*/ pColFormat = new BYTE[nInfoCount]; +/*N*/ for (USHORT i=0; i<nInfoCount; i++) +/*N*/ { +/*N*/ pColStart[i] = rOpt.pColStart[i]; +/*N*/ pColFormat[i] = rOpt.pColFormat[i]; +/*N*/ } +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ pColStart = NULL; +/*N*/ pColFormat = NULL; +/*N*/ } +/*N*/ } + + +/*N*/ ScAsciiOptions::~ScAsciiOptions() +/*N*/ { +/*N*/ delete[] pColStart; +/*N*/ delete[] pColFormat; +/*N*/ } + + + + + + + + + +// +// Der Options-String darf kein Semikolon mehr enthalten (wegen Pickliste) +// darum ab Version 336 Komma stattdessen +// + + +/*N*/ void ScAsciiOptions::ReadFromString( const String& rString ) +/*N*/ { +/*N*/ xub_StrLen nCount = rString.GetTokenCount(','); +/*N*/ String aToken; +/*N*/ xub_StrLen nSub; +/*N*/ xub_StrLen i; +/*N*/ +/*N*/ // +/*N*/ // Feld-Trenner +/*N*/ // +/*N*/ +/*N*/ if ( nCount >= 1 ) +/*N*/ { +/*N*/ bFixedLen = bMergeFieldSeps = FALSE; +/*N*/ aFieldSeps.Erase(); +/*N*/ +/*N*/ aToken = rString.GetToken(0,','); +/*N*/ if ( aToken.EqualsAscii(pStrFix) ) +/*N*/ bFixedLen = TRUE; +/*N*/ nSub = aToken.GetTokenCount('/'); +/*N*/ for ( i=0; i<nSub; i++ ) +/*N*/ { +/*N*/ String aCode = aToken.GetToken( i, '/' ); +/*N*/ if ( aCode.EqualsAscii(pStrMrg) ) +/*N*/ bMergeFieldSeps = TRUE; +/*N*/ else +/*N*/ { +/*N*/ sal_Int32 nVal = aCode.ToInt32(); +/*N*/ if ( nVal ) +/*N*/ aFieldSeps += (sal_Unicode) nVal; +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ // +/*N*/ // Text-Trenner +/*N*/ // +/*N*/ +/*N*/ if ( nCount >= 2 ) +/*N*/ { +/*N*/ aToken = rString.GetToken(1,','); +/*N*/ sal_Int32 nVal = aToken.ToInt32(); +/*N*/ cTextSep = (sal_Unicode) nVal; +/*N*/ } +/*N*/ +/*N*/ // +/*N*/ // Zeichensatz +/*N*/ // +/*N*/ +/*N*/ if ( nCount >= 3 ) +/*N*/ { +/*N*/ aToken = rString.GetToken(2,','); +/*N*/ eCharSet = ScGlobal::GetCharsetValue( aToken ); +/*N*/ } +/*N*/ +/*N*/ // +/*N*/ // Startzeile +/*N*/ // +/*N*/ +/*N*/ if ( nCount >= 4 ) +/*N*/ { +/*N*/ aToken = rString.GetToken(3,','); +/*N*/ nStartRow = aToken.ToInt32(); +/*N*/ } +/*N*/ +/*N*/ // +/*N*/ // Spalten-Infos +/*N*/ // +/*N*/ +/*N*/ if ( nCount >= 5 ) +/*N*/ { +/*N*/ delete[] pColStart; +/*N*/ delete[] pColFormat; +/*N*/ +/*N*/ aToken = rString.GetToken(4,','); +/*N*/ nSub = aToken.GetTokenCount('/'); +/*N*/ nInfoCount = nSub / 2; +/*N*/ if (nInfoCount) +/*N*/ { +/*N*/ pColStart = new xub_StrLen[nInfoCount]; +/*N*/ pColFormat = new BYTE[nInfoCount]; +/*N*/ for (USHORT nInfo=0; nInfo<nInfoCount; nInfo++) +/*N*/ { +/*N*/ pColStart[nInfo] = (xub_StrLen) aToken.GetToken( 2*nInfo, '/' ).ToInt32(); +/*N*/ pColFormat[nInfo] = (BYTE) aToken.GetToken( 2*nInfo+1, '/' ).ToInt32(); +/*N*/ } +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ pColStart = NULL; +/*N*/ pColFormat = NULL; +/*N*/ } +/*N*/ } +/*N*/ } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/dbgui/sc_asciiopt.src b/binfilter/bf_sc/source/ui/dbgui/sc_asciiopt.src new file mode 100644 index 000000000000..b1ee9cf29864 --- /dev/null +++ b/binfilter/bf_sc/source/ui/dbgui/sc_asciiopt.src @@ -0,0 +1,66 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#define NO_LOCALIZE_EXPORT + +#include "asciiopt.hrc" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/binfilter/bf_sc/source/ui/dbgui/sc_imoptdlg.cxx b/binfilter/bf_sc/source/ui/dbgui/sc_imoptdlg.cxx new file mode 100644 index 000000000000..b976f77559ac --- /dev/null +++ b/binfilter/bf_sc/source/ui/dbgui/sc_imoptdlg.cxx @@ -0,0 +1,72 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "imoptdlg.hxx" +#include "imoptdlg.hrc" + +#include <rtl/tencinfo.h> + +static const sal_Char pStrFix[] = "FIX"; + +namespace binfilter { + +class ScDelimiterTable +{ +public: + ScDelimiterTable( const String& rDelTab ) + : theDelTab ( rDelTab ), + cSep ( '\t' ), + nCount ( rDelTab.GetTokenCount('\t') ), + nIter ( 0 ) + {} + + String FirstDel() { nIter = 0; return theDelTab.GetToken( nIter, cSep ); } + String NextDel() { nIter +=2; return theDelTab.GetToken( nIter, cSep ); } + +private: + const String theDelTab; + const sal_Unicode cSep; + const xub_StrLen nCount; + xub_StrLen nIter; +}; + +//------------------------------------------------------------------------ + +/*N*/ void ScImportOptions::SetTextEncoding( rtl_TextEncoding nEnc ) +/*N*/ { +/*N*/ eCharSet = (nEnc == RTL_TEXTENCODING_DONTKNOW ? +/*N*/ gsl_getSystemTextEncoding() : nEnc); +/*N*/ aStrFont = ScGlobal::GetCharsetString( nEnc ); +/*N*/ } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/dbgui/sc_imoptdlg.src b/binfilter/bf_sc/source/ui/dbgui/sc_imoptdlg.src new file mode 100644 index 000000000000..0c4afc05d1c0 --- /dev/null +++ b/binfilter/bf_sc/source/ui/dbgui/sc_imoptdlg.src @@ -0,0 +1,43 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#define NO_LOCALIZE_EXPORT + + +#include "imoptdlg.hrc" + + + + + + + + + + + + + diff --git a/binfilter/bf_sc/source/ui/dbgui/sc_outline.src b/binfilter/bf_sc/source/ui/dbgui/sc_outline.src new file mode 100644 index 000000000000..6b9331adb706 --- /dev/null +++ b/binfilter/bf_sc/source/ui/dbgui/sc_outline.src @@ -0,0 +1,37 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#define NO_LOCALIZE_EXPORT + +#include "bf_sc.hrc" + + +// Imageliste hier, damit sie nicht in ui.src beim Zusammenbauen der +// "echten" Imagelisten stoert + + + + diff --git a/binfilter/bf_sc/source/ui/dbgui/sc_pivot.src b/binfilter/bf_sc/source/ui/dbgui/sc_pivot.src new file mode 100644 index 000000000000..3754accd49f6 --- /dev/null +++ b/binfilter/bf_sc/source/ui/dbgui/sc_pivot.src @@ -0,0 +1,50 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#define NO_LOCALIZE_EXPORT + + +#include "pivot.hrc" + + + + + + + + + + + + + + + + + + + + diff --git a/binfilter/bf_sc/source/ui/docshell/makefile.mk b/binfilter/bf_sc/source/ui/docshell/makefile.mk new file mode 100644 index 000000000000..b73ff86d0c12 --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/makefile.mk @@ -0,0 +1,70 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +EXTERNAL_WARNINGS_NOT_ERRORS := TRUE +PRJ=..$/..$/..$/.. +BFPRJ=..$/..$/.. + +PRJNAME=binfilter +TARGET=sc_docshell + +NO_HIDS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk +.INCLUDE : $(BFPRJ)$/util$/makefile.pmk +INC+= -I$(PRJ)$/inc$/bf_sc +# --- Files -------------------------------------------------------- + +SLOFILES = \ + $(SLO)$/sc_docsh.obj \ + $(SLO)$/sc_docsh2.obj \ + $(SLO)$/sc_docsh3.obj \ + $(SLO)$/sc_docsh4.obj \ + $(SLO)$/sc_docsh5.obj \ + $(SLO)$/sc_docsh6.obj \ + $(SLO)$/sc_tablink.obj \ + $(SLO)$/sc_arealink.obj \ + $(SLO)$/sc_dbdocfun.obj \ + $(SLO)$/sc_dbdocimp.obj \ + $(SLO)$/sc_impex.obj \ + $(SLO)$/sc_docfunc.obj \ + $(SLO)$/sc_olinefun.obj \ + $(SLO)$/sc_pntlock.obj \ + $(SLO)$/sc_sizedev.obj \ + $(SLO)$/sc_editable.obj + + +EXCEPTIONSFILES= \ + $(SLO)$/sc_dbdocimp.obj + + +# --- Tagets ------------------------------------------------------- + +.INCLUDE : target.mk + diff --git a/binfilter/bf_sc/source/ui/docshell/sc_arealink.cxx b/binfilter/bf_sc/source/ui/docshell/sc_arealink.cxx new file mode 100644 index 000000000000..fd886ef41433 --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_arealink.cxx @@ -0,0 +1,392 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +// INCLUDE --------------------------------------------------------- + +#include <bf_sfx2/app.hxx> +#include <bf_sfx2/docfile.hxx> +#include <bf_svtools/stritem.hxx> +#include <vcl/msgbox.hxx> + +#include "arealink.hxx" + +#include "tablink.hxx" +#include "docsh.hxx" +#include "rangenam.hxx" +#include "dbcolect.hxx" +#include "globstr.hrc" +#include "markdata.hxx" +#include "hints.hxx" + +#include "attrib.hxx" // raus, wenn ResetAttrib am Dokument +#include "patattr.hxx" // raus, wenn ResetAttrib am Dokument +#include "docpool.hxx" // raus, wenn ResetAttrib am Dokument +namespace binfilter { + +/*N*/ TYPEINIT1(ScAreaLink,::binfilter::SvBaseLink); + +//------------------------------------------------------------------------ + +/*N*/ ScAreaLink::ScAreaLink( SfxObjectShell* pShell, const String& rFile, +/*N*/ const String& rFilter, const String& rOpt, +/*N*/ const String& rArea, const ScRange& rDest, +/*N*/ ULONG nRefresh ) : +/*N*/ ::binfilter::SvBaseLink(::binfilter::LINKUPDATE_ONCALL,FORMAT_FILE), +/*N*/ ScRefreshTimer ( nRefresh ), +/*N*/ pDocShell ((ScDocShell*)pShell), +/*N*/ aFileName (rFile), +/*N*/ aFilterName (rFilter), +/*N*/ aOptions (rOpt), +/*N*/ aSourceArea (rArea), +/*N*/ aDestArea (rDest), +/*N*/ bAddUndo (TRUE), +/*N*/ bInCreate (FALSE), +/*N*/ bDoInsert (TRUE) +/*N*/ { +/*N*/ DBG_ASSERT(pShell->ISA(ScDocShell), "ScAreaLink mit falscher ObjectShell"); +/*N*/ SetRefreshHandler( LINK( this, ScAreaLink, RefreshHdl ) ); +/*N*/ SetRefreshControl( pDocShell->GetDocument()->GetRefreshTimerControlAddress() ); +/*N*/ } + +/*N*/ __EXPORT ScAreaLink::~ScAreaLink() +/*N*/ { +/*N*/ StopRefreshTimer(); +/*N*/ } + + +/*N*/ void __EXPORT ScAreaLink::DataChanged( const String&, +/*N*/ const ::com::sun::star::uno::Any& ) +/*N*/ { + DBG_BF_ASSERT(0, "STRIP"); //STRIP001 /*?*/ // bei bInCreate nichts tun, damit Update gerufen werden kann, um den Status im +/*N*/ } + + +/*N*/ void ScAreaLink::SetDestArea(const ScRange& rNew) +/*N*/ { +/*N*/ aDestArea = rNew; // fuer Undo +/*N*/ } + + + +// find a range with name >rAreaName< in >pSrcDoc<, return it in >rRange< +/*N*/ BOOL ScAreaLink::FindExtRange( ScRange& rRange, ScDocument* pSrcDoc, const String& rAreaName ) +/*N*/ { +/*N*/ BOOL bFound = FALSE; +/*N*/ ScRangeName* pNames = pSrcDoc->GetRangeName(); +/*N*/ USHORT nPos; +/*N*/ if (pNames) // benannte Bereiche +/*N*/ { +/*N*/ if (pNames->SearchName( rAreaName, nPos )) +/*N*/ if ( (*pNames)[nPos]->IsReference( rRange ) ) +/*N*/ bFound = TRUE; +/*N*/ } +/*N*/ if (!bFound) // Datenbankbereiche +/*N*/ { +/*N*/ ScDBCollection* pDBColl = pSrcDoc->GetDBCollection(); +/*N*/ if (pDBColl) +/*N*/ if (pDBColl->SearchName( rAreaName, nPos )) +/*N*/ { +/*N*/ USHORT nTab,nCol1,nRow1,nCol2,nRow2; +/*N*/ (*pDBColl)[nPos]->GetArea(nTab,nCol1,nRow1,nCol2,nRow2); +/*N*/ rRange = ScRange( nCol1,nRow1,nTab, nCol2,nRow2,nTab ); +/*N*/ bFound = TRUE; +/*N*/ } +/*N*/ } +/*N*/ if (!bFound) // direct reference (range or cell) +/*N*/ { +/*N*/ if ( rRange.ParseAny( rAreaName, pSrcDoc ) & SCA_VALID ) +/*N*/ bFound = TRUE; +/*N*/ } +/*N*/ return bFound; +/*N*/ } + +// ausfuehren: + +/*N*/ BOOL ScAreaLink::Refresh( const String& rNewFile, const String& rNewFilter, +/*N*/ const String& rNewArea, ULONG nNewRefresh ) +/*N*/ { +/*N*/ // Dokument laden - wie TabLink +/*N*/ +/*N*/ if (!rNewFile.Len() || !rNewFilter.Len()) +/*N*/ return FALSE; +/*N*/ +/*N*/ String aNewUrl( ScGlobal::GetAbsDocName( rNewFile, pDocShell ) ); +/*N*/ BOOL bNewUrlName = (aNewUrl != aFileName); +/*N*/ +/*N*/ const SfxFilter* pFilter = SFX_APP()->GetFilter( pDocShell->GetFactory(), rNewFilter ); +/*N*/ if (!pFilter) +/*N*/ return FALSE; +/*N*/ +/*N*/ ScDocument* pDoc = pDocShell->GetDocument(); +/*N*/ +/*N*/ BOOL bUndo (pDoc->IsUndoEnabled()); +/*N*/ pDoc->SetInLinkUpdate( TRUE ); +/*N*/ +/*N*/ // wenn neuer Filter ausgewaehlt wurde, Optionen vergessen +/*N*/ if ( rNewFilter != aFilterName ) +/*N*/ aOptions.Erase(); +/*N*/ +/*N*/ // ItemSet immer anlegen, damit die DocShell die Optionen setzen kann +/*N*/ SfxItemSet* pSet = new SfxAllItemSet( SFX_APP()->GetPool() ); +/*N*/ if ( aOptions.Len() ) +/*N*/ pSet->Put( SfxStringItem( SID_FILE_FILTEROPTIONS, aOptions ) ); +/*N*/ +/*N*/ SfxMedium* pMed = new SfxMedium(aNewUrl, STREAM_STD_READ, FALSE, pFilter); +/*N*/ +/*N*/ ScDocShell* pSrcShell = new ScDocShell(SFX_CREATE_MODE_INTERNAL); +/*N*/ SvEmbeddedObjectRef aRef = pSrcShell; +/*N*/ pSrcShell->DoLoad(pMed); +/*N*/ +/*N*/ ScDocument* pSrcDoc = pSrcShell->GetDocument(); +/*N*/ +/*N*/ // Optionen koennten gesetzt worden sein +/*N*/ String aNewOpt = ScDocumentLoader::GetOptions(*pMed); +/*N*/ if (!aNewOpt.Len()) +/*N*/ aNewOpt = aOptions; +/*N*/ +/*N*/ // correct source range name list for web query import +/*N*/ String aTempArea; +/*N*/ +/*N*/ if( rNewFilter == ScDocShell::GetWebQueryFilterName() ) +/*?*/ {DBG_BF_ASSERT(0, "STRIP");} //STRIP001 /*?*/ aTempArea = ScHTMLImport::GetHTMLRangeNameList( pSrcDoc, rNewArea ); +/*N*/ else +/*N*/ aTempArea = rNewArea; +/*N*/ +/*N*/ // find total size of source area +/*N*/ USHORT nWidth = 0; +/*N*/ USHORT nHeight = 0; +/*N*/ xub_StrLen nTokenCnt = aTempArea.GetTokenCount( ';' ); +/*N*/ xub_StrLen nStringIx = 0; +/*N*/ xub_StrLen nToken; +/*N*/ +/*N*/ for( nToken = 0; nToken < nTokenCnt; nToken++ ) +/*N*/ { +/*N*/ String aToken( aTempArea.GetToken( 0, ';', nStringIx ) ); +/*N*/ ScRange aTokenRange; +/*N*/ if( FindExtRange( aTokenRange, pSrcDoc, aToken ) ) +/*N*/ { +/*N*/ // columns: find maximum +/*N*/ nWidth = Max( nWidth, (USHORT)(aTokenRange.aEnd.Col() - aTokenRange.aStart.Col() + 1) ); +/*N*/ // rows: add row range + 1 empty row +/*N*/ nHeight += aTokenRange.aEnd.Row() - aTokenRange.aStart.Row() + 2; +/*N*/ } +/*N*/ } +/*N*/ // remove the last empty row +/*N*/ if( nHeight ) +/*N*/ nHeight--; +/*N*/ +/*N*/ // alte Daten loeschen / neue kopieren +/*N*/ +/*N*/ ScAddress aDestPos = aDestArea.aStart; +/*N*/ USHORT nDestTab = aDestPos.Tab(); +/*N*/ ScRange aOldRange = aDestArea; +/*N*/ ScRange aNewRange = aDestArea; // alter Bereich, wenn Datei nicht gefunden o.ae. +/*N*/ if (nWidth && nHeight) +/*N*/ { +/*N*/ aNewRange.aEnd.SetCol( aNewRange.aStart.Col() + nWidth - 1 ); +/*N*/ aNewRange.aEnd.SetRow( aNewRange.aStart.Row() + nHeight - 1 ); +/*N*/ } +/*N*/ +/*N*/ BOOL bCanDo = pDoc->CanFitBlock( aOldRange, aNewRange ); //! nach bDoInsert unterscheiden +/*N*/ if (bCanDo) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( *pDocShell ); +/*N*/ +/*N*/ USHORT nStartX = aDestPos.Col(); +/*N*/ USHORT nStartY = aDestPos.Row(); +/*N*/ USHORT nOldEndX = aOldRange.aEnd.Col(); +/*N*/ USHORT nOldEndY = aOldRange.aEnd.Row(); +/*N*/ USHORT nNewEndX = aNewRange.aEnd.Col(); +/*N*/ USHORT nNewEndY = aNewRange.aEnd.Row(); +/*N*/ ScRange aMaxRange( aDestPos, +/*N*/ ScAddress(Max(nOldEndX,nNewEndX), Max(nOldEndY,nNewEndY), nDestTab) ); +/*N*/ +/*N*/ // Undo initialisieren +/*N*/ +/*N*/ ScDocument* pUndoDoc = NULL; +/*N*/ ScDocument* pRedoDoc = NULL; +/*N*/ if ( bAddUndo && bUndo ) +/*N*/ { +/*N*/ pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); +/*N*/ if ( bDoInsert ) +/*N*/ { +/*N*/ if ( nNewEndX != nOldEndX || nNewEndY != nOldEndY ) // Bereich veraendert? +/*N*/ { +/*N*/ pUndoDoc->InitUndo( pDoc, 0, pDoc->GetTableCount()-1 ); +/*N*/ pDoc->CopyToDocument( 0,0,0,MAXCOL,MAXROW,MAXTAB, +/*N*/ IDF_FORMULA, FALSE, pUndoDoc ); // alle Formeln +/*N*/ } +/*N*/ else +/*N*/ pUndoDoc->InitUndo( pDoc, nDestTab, nDestTab ); // nur Zieltabelle +/*N*/ pDoc->CopyToDocument( aOldRange, IDF_ALL, FALSE, pUndoDoc ); +/*N*/ } +/*N*/ else // ohne Einfuegen +/*N*/ { +/*N*/ pUndoDoc->InitUndo( pDoc, nDestTab, nDestTab ); // nur Zieltabelle +/*N*/ pDoc->CopyToDocument( aMaxRange, IDF_ALL, FALSE, pUndoDoc ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ // Zellen einfuegen / loeschen +/*N*/ // DeleteAreaTab loescht auch MERGE_FLAG Attribute +/*N*/ +/*N*/ if (bDoInsert) +/*N*/ pDoc->FitBlock( aOldRange, aNewRange ); // incl. loeschen +/*N*/ else +/*N*/ pDoc->DeleteAreaTab( aMaxRange, IDF_ALL ); +/*N*/ +/*N*/ // Daten kopieren +/*N*/ +/*N*/ if (nWidth && nHeight) +/*N*/ { +/*N*/ ScDocument aClipDoc( SCDOCMODE_CLIP ); +/*N*/ ScRange aNewTokenRange( aNewRange.aStart ); +/*N*/ nStringIx = 0; +/*N*/ for( nToken = 0; nToken < nTokenCnt; nToken++ ) +/*N*/ { +/*N*/ String aToken( aTempArea.GetToken( 0, ';', nStringIx ) ); +/*N*/ ScRange aTokenRange; +/*N*/ if( FindExtRange( aTokenRange, pSrcDoc, aToken ) ) +/*N*/ { +/*N*/ USHORT nSrcTab = aTokenRange.aStart.Tab(); +/*N*/ ScMarkData aSourceMark; +/*N*/ aSourceMark.SelectOneTable( nSrcTab ); // selektieren fuer CopyToClip +/*N*/ aSourceMark.SetMarkArea( aTokenRange ); +/*N*/ +/*N*/ pSrcDoc->CopyToClip( aTokenRange.aStart.Col(), aTokenRange.aStart.Row(), +/*N*/ aTokenRange.aEnd.Col(), aTokenRange.aEnd.Row(), +/*N*/ FALSE, &aClipDoc, FALSE, &aSourceMark ); +/*N*/ +/*N*/ if ( aClipDoc.HasAttrib( 0,0,nSrcTab, MAXCOL,MAXROW,nSrcTab, +/*N*/ HASATTR_MERGED | HASATTR_OVERLAPPED ) ) +/*N*/ { +/*N*/ //! ResetAttrib am Dokument !!! +/*N*/ +/*N*/ ScPatternAttr aPattern( pSrcDoc->GetPool() ); +/*N*/ aPattern.GetItemSet().Put( ScMergeAttr() ); // Defaults +/*N*/ aPattern.GetItemSet().Put( ScMergeFlagAttr() ); +/*N*/ aClipDoc.ApplyPatternAreaTab( 0,0, MAXCOL,MAXROW, nSrcTab, aPattern ); +/*N*/ } +/*N*/ +/*N*/ aNewTokenRange.aEnd.SetCol( aNewTokenRange.aStart.Col() + (aTokenRange.aEnd.Col() - aTokenRange.aStart.Col()) ); +/*N*/ aNewTokenRange.aEnd.SetRow( aNewTokenRange.aStart.Row() + (aTokenRange.aEnd.Row() - aTokenRange.aStart.Row()) ); +/*N*/ ScMarkData aDestMark; +/*N*/ aDestMark.SelectOneTable( nDestTab ); +/*N*/ aDestMark.SetMarkArea( aNewTokenRange ); +/*N*/ pDoc->CopyFromClip( aNewTokenRange, aDestMark, IDF_ALL, NULL, &aClipDoc, FALSE ); +/*N*/ aNewTokenRange.aStart.SetRow( aNewTokenRange.aEnd.Row() + 2 ); +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ String aErr = ScGlobal::GetRscString(STR_LINKERROR); +/*N*/ pDoc->SetString( aDestPos.Col(), aDestPos.Row(), aDestPos.Tab(), aErr ); +/*N*/ } +/*N*/ +/*N*/ // Undo eintragen +/*N*/ +/*N*/ if ( bAddUndo && bUndo) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 pRedoDoc = new ScDocument( SCDOCMODE_UNDO ); +/*N*/ } +/*N*/ +/*N*/ // neue Einstellungen merken +/*N*/ +/*N*/ if ( bNewUrlName ) +/*N*/ aFileName = aNewUrl; +/*N*/ if ( rNewFilter != aFilterName ) +/*N*/ aFilterName = rNewFilter; +/*N*/ if ( rNewArea != aSourceArea ) +/*N*/ aSourceArea = rNewArea; +/*N*/ if ( aNewOpt != aOptions ) +/*N*/ aOptions = aNewOpt; +/*N*/ +/*N*/ if ( aNewRange != aDestArea ) +/*N*/ aDestArea = aNewRange; +/*N*/ +/*N*/ if ( nNewRefresh != GetRefreshDelay() ) +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 SetRefreshDelay( nNewRefresh ); +/*N*/ +/*N*/ USHORT nPaintEndX = Max( aOldRange.aEnd.Col(), aNewRange.aEnd.Col() ); +/*N*/ USHORT nPaintEndY = Max( aOldRange.aEnd.Row(), aNewRange.aEnd.Row() ); +/*N*/ +/*N*/ if ( aOldRange.aEnd.Col() != aNewRange.aEnd.Col() ) +/*N*/ nPaintEndX = MAXCOL; +/*N*/ if ( aOldRange.aEnd.Row() != aNewRange.aEnd.Row() ) +/*N*/ nPaintEndY = MAXROW; +/*N*/ +/*N*/ if ( !pDocShell->AdjustRowHeight( aDestPos.Row(), nPaintEndY, nDestTab ) ) +/*N*/ pDocShell->PostPaint( aDestPos.Col(),aDestPos.Row(),nDestTab, +/*N*/ nPaintEndX,nPaintEndY,nDestTab, PAINT_GRID ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ // CanFitBlock FALSE -> Probleme mit zusammengefassten Zellen +/*N*/ // oder Tabellengrenze erreicht! +/*N*/ //! Zellschutz ??? +/*N*/ +/*N*/ //! Link-Dialog muss Default-Parent setzen +/*N*/ // "kann keine Zeilen einfuegen" +/*N*/ InfoBox aBox( Application::GetDefDialogParent(), +/*N*/ ScGlobal::GetRscString( STR_MSSG_DOSUBTOTALS_2 ) ); +/*N*/ aBox.Execute(); +/*N*/ } +/*N*/ +/*N*/ // aufraeumen +/*N*/ +/*N*/ aRef->DoClose(); +/*N*/ +/*N*/ pDoc->SetInLinkUpdate( FALSE ); +/*N*/ +/*N*/ if (bCanDo) +/*N*/ { +/*N*/ // notify Uno objects (for XRefreshListener) +/*N*/ //! also notify Uno objects if file name was changed! +/*N*/ ScLinkRefreshedHint aHint; +/*N*/ aHint.SetAreaLink( aDestPos ); +/*N*/ pDoc->BroadcastUno( aHint ); +/*N*/ } +/*N*/ +/*N*/ return bCanDo; +/*N*/ } + + +/*N*/ IMPL_LINK( ScAreaLink, RefreshHdl, ScAreaLink*, pCaller ) +/*N*/ { + DBG_BF_ASSERT(0, "STRIP"); return 0; //STRIP001 long nRes = Refresh( aFileName, aFilterName, aSourceArea, +/*N*/ } + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_dbdocfun.cxx b/binfilter/bf_sc/source/ui/docshell/sc_dbdocfun.cxx new file mode 100644 index 000000000000..010bf2155f9f --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_dbdocfun.cxx @@ -0,0 +1,996 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +// INCLUDE --------------------------------------------------------------- + +#include <bf_sfx2/app.hxx> +#include <vcl/msgbox.hxx> +#include <vcl/waitobj.hxx> + + +#include "dbdocfun.hxx" +#include "bf_sc.hrc" +#include "dbcolect.hxx" +#include "undodat.hxx" +#include "docsh.hxx" +#include "docfunc.hxx" +#include "globstr.hrc" +#include "patattr.hxx" +#include "rangenam.hxx" +#include "dpobject.hxx" +#include "editable.hxx" +namespace binfilter { + +// ----------------------------------------------------------------- + +/*N*/ BOOL ScDBDocFunc::AddDBRange( const String& rName, const ScRange& rRange, BOOL bApi ) +/*N*/ { +/*N*/ +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScDBCollection* pDocColl = pDoc->GetDBCollection(); +/*N*/ +/*N*/ ScDBData* pNew = new ScDBData( rName, rRange.aStart.Tab(), +/*N*/ rRange.aStart.Col(), rRange.aStart.Row(), +/*N*/ rRange.aEnd.Col(), rRange.aEnd.Row() ); +/*N*/ +/*N*/ pDoc->CompileDBFormula( TRUE ); // CreateFormulaString +/*N*/ BOOL bOk = pDocColl->Insert( pNew ); +/*N*/ pDoc->CompileDBFormula( FALSE ); // CompileFormulaString +/*N*/ if (!bOk) +/*N*/ { +/*N*/ delete pNew; +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_DBAREAS_CHANGED ) ); +/*N*/ return TRUE; +/*N*/ } +/*N*/ +/*N*/ BOOL ScDBDocFunc::DeleteDBRange( const String& rName, BOOL bApi ) +/*N*/ { +/*N*/ BOOL bDone = FALSE; +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScDBCollection* pDocColl = pDoc->GetDBCollection(); +/*N*/ +/*N*/ USHORT nPos = 0; +/*N*/ if (pDocColl->SearchName( rName, nPos )) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ pDoc->CompileDBFormula( TRUE ); // CreateFormulaString +/*N*/ pDocColl->AtFree( nPos ); +/*N*/ pDoc->CompileDBFormula( FALSE ); // CompileFormulaString +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_DBAREAS_CHANGED ) ); +/*N*/ bDone = TRUE; +/*N*/ } +/*N*/ +/*N*/ return bDone; +/*N*/ } + +/*N*/ BOOL ScDBDocFunc::RenameDBRange( const String& rOld, const String& rNew, BOOL bApi ) +/*N*/ { +/*N*/ BOOL bDone = FALSE; +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScDBCollection* pDocColl = pDoc->GetDBCollection(); +/*N*/ +/*N*/ USHORT nPos = 0; +/*N*/ USHORT nDummy = 0; +/*N*/ if ( pDocColl->SearchName( rOld, nPos ) && +/*N*/ !pDocColl->SearchName( rNew, nDummy ) ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDBData* pData = (*pDocColl)[nPos]; +/*N*/ ScDBData* pNewData = new ScDBData(*pData); +/*N*/ pNewData->SetName(rNew); +/*N*/ +/*N*/ ScDBCollection* pUndoColl = new ScDBCollection( *pDocColl ); +/*N*/ +/*N*/ pDoc->CompileDBFormula( TRUE ); // CreateFormulaString +/*N*/ pDocColl->AtFree( nPos ); +/*N*/ BOOL bInserted = pDocColl->Insert( pNewData ); +/*N*/ if (!bInserted) // Fehler -> alten Zustand wiederherstellen +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 delete pNewData; +/*N*/ } +/*N*/ pDoc->CompileDBFormula( FALSE ); // CompileFormulaString +/*N*/ +/*N*/ if (bInserted) // Einfuegen hat geklappt +/*N*/ { +/*N*/ delete pUndoColl; +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_DBAREAS_CHANGED ) ); +/*N*/ bDone = TRUE; +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ return bDone; +/*N*/ } + +/*N*/ BOOL ScDBDocFunc::ModifyDBData( const ScDBData& rNewData, BOOL bApi ) +/*N*/ { +/*N*/ BOOL bDone = FALSE; +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScDBCollection* pDocColl = pDoc->GetDBCollection(); +/*N*/ +/*N*/ USHORT nPos = 0; +/*N*/ if (pDocColl->SearchName( rNewData.GetName(), nPos )) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDBData* pData = (*pDocColl)[nPos]; +/*N*/ +/*N*/ ScRange aOldRange, aNewRange; +/*N*/ pData->GetArea(aOldRange); +/*N*/ rNewData.GetArea(aNewRange); +/*N*/ BOOL bAreaChanged = ( aOldRange != aNewRange ); // dann muss neu compiliert werden +/*N*/ +/*N*/ +/*N*/ *pData = rNewData; +/*N*/ if (bAreaChanged) +/*N*/ pDoc->CompileDBFormula(); +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ bDone = TRUE; +/*N*/ } +/*N*/ +/*N*/ return bDone; +/*N*/ } + +// ----------------------------------------------------------------- + +/*N*/ BOOL ScDBDocFunc::RepeatDB( const String& rDBName, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ //! auch fuer ScDBFunc::RepeatDB benutzen! +/*N*/ +/*N*/ BOOL bDone = FALSE; +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ if (bRecord && !pDoc->IsUndoEnabled()) +/*N*/ bRecord = FALSE; +/*N*/ ScDBCollection* pColl = pDoc->GetDBCollection(); +/*N*/ USHORT nIndex; +/*N*/ if ( pColl && pColl->SearchName( rDBName, nIndex ) ) +/*N*/ { +/*N*/ ScDBData* pDBData = (*pColl)[nIndex]; +/*N*/ +/*N*/ ScQueryParam aQueryParam; +/*N*/ pDBData->GetQueryParam( aQueryParam ); +/*N*/ BOOL bQuery = aQueryParam.GetEntry(0).bDoQuery; +/*N*/ +/*N*/ ScSortParam aSortParam; +/*N*/ pDBData->GetSortParam( aSortParam ); +/*N*/ BOOL bSort = aSortParam.bDoSort[0]; +/*N*/ +/*N*/ ScSubTotalParam aSubTotalParam; +/*N*/ pDBData->GetSubTotalParam( aSubTotalParam ); +/*N*/ BOOL bSubTotal = aSubTotalParam.bGroupActive[0] && !aSubTotalParam.bRemoveOnly; +/*N*/ +/*N*/ if ( bQuery || bSort || bSubTotal ) +/*N*/ { +/*N*/ BOOL bQuerySize = FALSE; +/*N*/ ScRange aOldQuery; +/*N*/ ScRange aNewQuery; +/*N*/ if (bQuery && !aQueryParam.bInplace) +/*N*/ { +/*N*/ ScDBData* pDest = pDoc->GetDBAtCursor( aQueryParam.nDestCol, aQueryParam.nDestRow, +/*N*/ aQueryParam.nDestTab, TRUE ); +/*N*/ if (pDest && pDest->IsDoSize()) +/*N*/ { +/*N*/ pDest->GetArea( aOldQuery ); +/*N*/ bQuerySize = TRUE; +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ USHORT nTab; +/*N*/ USHORT nStartCol; +/*N*/ USHORT nStartRow; +/*N*/ USHORT nEndCol; +/*N*/ USHORT nEndRow; +/*N*/ pDBData->GetArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow ); +/*N*/ +/*N*/ ScDocument* pUndoDoc = NULL; +/*N*/ ScOutlineTable* pUndoTab = NULL; +/*N*/ ScRangeName* pUndoRange = NULL; +/*N*/ ScDBCollection* pUndoDB = NULL; +/*N*/ +/*N*/ if (bRecord) +/*N*/ { +/*N*/ USHORT nTabCount = pDoc->GetTableCount(); +/*N*/ pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); +/*N*/ ScOutlineTable* pTable = pDoc->GetOutlineTable( nTab ); +/*N*/ if (pTable) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 pUndoTab = new ScOutlineTable( *pTable ); +/*N*/ } +/*N*/ else +/*N*/ pUndoDoc->InitUndo( pDoc, nTab, nTab, FALSE, TRUE ); +/*N*/ +/*N*/ // Datenbereich sichern - incl. Filter-Ergebnis +/*N*/ pDoc->CopyToDocument( 0,nStartRow,nTab, MAXCOL,nEndRow,nTab, IDF_ALL, FALSE, pUndoDoc ); +/*N*/ +/*N*/ // alle Formeln wegen Referenzen +/*N*/ pDoc->CopyToDocument( 0,0,0, MAXCOL,MAXROW,nTabCount-1, IDF_FORMULA, FALSE, pUndoDoc ); +/*N*/ +/*N*/ // DB- und andere Bereiche +/*N*/ ScRangeName* pDocRange = pDoc->GetRangeName(); +/*N*/ if (pDocRange->GetCount()) +/*N*/ pUndoRange = new ScRangeName( *pDocRange ); +/*N*/ ScDBCollection* pDocDB = pDoc->GetDBCollection(); +/*N*/ if (pDocDB->GetCount()) +/*N*/ pUndoDB = new ScDBCollection( *pDocDB ); +/*N*/ } +/*N*/ +/*N*/ if (bSort && bSubTotal) +/*N*/ { +/*N*/ // Sortieren ohne SubTotals +/*N*/ +/*N*/ aSubTotalParam.bRemoveOnly = TRUE; // wird unten wieder zurueckgesetzt +/*N*/ DoSubTotals( nTab, aSubTotalParam, NULL, FALSE, bApi ); +/*N*/ } +/*N*/ +/*N*/ if (bSort) +/*N*/ { +/*N*/ pDBData->GetSortParam( aSortParam ); // Bereich kann sich geaendert haben +/*N*/ Sort( nTab, aSortParam, FALSE, FALSE, bApi ); +/*N*/ } +/*N*/ if (bQuery) +/*N*/ { +/*N*/ pDBData->GetQueryParam( aQueryParam ); // Bereich kann sich geaendert haben +/*N*/ ScRange aAdvSource; +/*N*/ if (pDBData->GetAdvancedQuerySource(aAdvSource)) +/*N*/ Query( nTab, aQueryParam, &aAdvSource, FALSE, bApi ); +/*N*/ else +/*N*/ Query( nTab, aQueryParam, NULL, FALSE, bApi ); +/*N*/ +/*N*/ // bei nicht-inplace kann die Tabelle umgestellt worden sein +/*N*/ // if ( !aQueryParam.bInplace && aQueryParam.nDestTab != nTab ) +/*N*/ // SetTabNo( nTab ); +/*N*/ } +/*N*/ if (bSubTotal) +/*N*/ { +/*N*/ pDBData->GetSubTotalParam( aSubTotalParam ); // Bereich kann sich geaendert haben +/*N*/ aSubTotalParam.bRemoveOnly = FALSE; +/*N*/ DoSubTotals( nTab, aSubTotalParam, NULL, FALSE, bApi ); +/*N*/ } +/*N*/ +/*N*/ if (bRecord) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 USHORT nDummy; +/*N*/ } +/*N*/ +/*N*/ rDocShell.PostPaint( 0,0,nTab, MAXCOL,MAXROW,nTab, +/*N*/ PAINT_GRID | PAINT_LEFT | PAINT_TOP | PAINT_SIZE ); +/*N*/ bDone = TRUE; +/*N*/ } +/*N*/ else if (!bApi) // "Keine Operationen auszufuehren" +/*N*/ rDocShell.ErrorMessage(STR_MSSG_REPEATDB_0); +/*N*/ } +/*N*/ +/*N*/ return bDone; +/*N*/ } + +// ----------------------------------------------------------------- + +/*N*/ BOOL ScDBDocFunc::Sort( USHORT nTab, const ScSortParam& rSortParam, +/*N*/ BOOL bRecord, BOOL bPaint, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ if (bRecord && !pDoc->IsUndoEnabled()) +/*N*/ bRecord = FALSE; +/*N*/ USHORT nSrcTab = nTab; +/*N*/ +/*N*/ ScDBData* pDBData = pDoc->GetDBAtArea( nTab, rSortParam.nCol1, rSortParam.nRow1, +/*N*/ rSortParam.nCol2, rSortParam.nRow2 ); +/*N*/ if (!pDBData) +/*N*/ { +/*N*/ DBG_ERROR( "Sort: keine DBData" ); +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ ScDBData* pDestData = NULL; +/*N*/ ScRange aOldDest; +/*N*/ BOOL bCopy = !rSortParam.bInplace; +/*N*/ if ( bCopy && rSortParam.nDestCol == rSortParam.nCol1 && +/*N*/ rSortParam.nDestRow == rSortParam.nRow1 && rSortParam.nDestTab == nTab ) +/*N*/ bCopy = FALSE; +/*N*/ ScSortParam aLocalParam( rSortParam ); +/*N*/ if ( bCopy ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 aLocalParam.MoveToDest(); +/*N*/ } +/*N*/ +/*N*/ ScEditableTester aTester( pDoc, nTab, aLocalParam.nCol1,aLocalParam.nRow1, +/*N*/ aLocalParam.nCol2,aLocalParam.nRow2 ); +/*N*/ if (!aTester.IsEditable()) +/*N*/ { +/*N*/ if (!bApi) +/*N*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ if ( aLocalParam.bIncludePattern && pDoc->HasAttrib( +/*N*/ aLocalParam.nCol1, aLocalParam.nRow1, nTab, +/*N*/ aLocalParam.nCol2, aLocalParam.nRow2, nTab, +/*N*/ HASATTR_MERGED | HASATTR_OVERLAPPED ) ) +/*N*/ { +/*N*/ // Merge-Attribute wuerden beim Sortieren durcheinanderkommen +/*N*/ if (!bApi) +/*N*/ rDocShell.ErrorMessage(STR_SORT_ERR_MERGED); +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ +/*N*/ // ausfuehren +/*N*/ +/*N*/ WaitObject aWait( rDocShell.GetDialogParent() ); +/*N*/ +/*N*/ BOOL bRepeatQuery = FALSE; // bestehenden Filter wiederholen? +/*N*/ ScQueryParam aQueryParam; +/*N*/ pDBData->GetQueryParam( aQueryParam ); +/*N*/ if ( aQueryParam.GetEntry(0).bDoQuery ) +/*N*/ bRepeatQuery = TRUE; +/*N*/ +/*N*/ if (bRepeatQuery && bCopy) +/*N*/ { +/*N*/ if ( aQueryParam.bInplace || +/*N*/ aQueryParam.nDestCol != rSortParam.nDestCol || +/*N*/ aQueryParam.nDestRow != rSortParam.nDestRow || +/*N*/ aQueryParam.nDestTab != rSortParam.nDestTab ) // Query auf selben Zielbereich? +/*N*/ bRepeatQuery = FALSE; +/*N*/ } +/*N*/ +/*N*/ if ( bRecord ) +/*N*/ { +/*?*/ // Referenzen ausserhalb des Bereichs werden nicht veraendert ! +/*?*/ +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocument* pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); +/*N*/ } +/*N*/ +/*N*/ if ( bCopy ) +/*N*/ { +/*N*/ if (pDestData) +/*N*/ pDoc->DeleteAreaTab(aOldDest, IDF_CONTENTS); // Zielbereich vorher loeschen +/*N*/ +/*N*/ ScRange aSource( rSortParam.nCol1,rSortParam.nRow1,nSrcTab, +/*N*/ rSortParam.nCol2,rSortParam.nRow2,nSrcTab ); +/*N*/ ScAddress aDest( rSortParam.nDestCol, rSortParam.nDestRow, rSortParam.nDestTab ); +/*N*/ +/*N*/ rDocShell.GetDocFunc().MoveBlock( aSource, aDest, FALSE, FALSE, FALSE, TRUE ); +/*N*/ } +/*N*/ +/*N*/ // #105780# don't call ScDocument::Sort with an empty SortParam (may be empty here if bCopy is set) +/*N*/ if ( aLocalParam.bDoSort[0] ) +/*N*/ pDoc->Sort( nTab, aLocalParam, bRepeatQuery ); +/*N*/ +/*N*/ BOOL bSave = TRUE; +/*N*/ if (bCopy) +/*N*/ { +/*N*/ ScSortParam aOldSortParam; +/*N*/ pDBData->GetSortParam( aOldSortParam ); +/*N*/ if ( aOldSortParam.bDoSort[0] && aOldSortParam.bInplace ) // Inplace-Sortierung gemerkt? +/*N*/ { +/*N*/ bSave = FALSE; +/*N*/ aOldSortParam.nDestCol = rSortParam.nDestCol; +/*N*/ aOldSortParam.nDestRow = rSortParam.nDestRow; +/*N*/ aOldSortParam.nDestTab = rSortParam.nDestTab; +/*N*/ pDBData->SetSortParam( aOldSortParam ); // dann nur DestPos merken +/*N*/ } +/*N*/ } +/*N*/ if (bSave) // Parameter merken +/*N*/ { +/*N*/ pDBData->SetSortParam( rSortParam ); +/*N*/ pDBData->SetHeader( rSortParam.bHasHeader ); //! ??? +/*N*/ pDBData->SetByRow( rSortParam.bByRow ); //! ??? +/*N*/ } +/*N*/ +/*N*/ if (bCopy) // neuen DB-Bereich merken +/*N*/ { +/*N*/ // Tabelle umschalten von aussen (View) +/*N*/ //! SetCursor ??!?! +/*N*/ +/*N*/ ScRange aDestPos( aLocalParam.nCol1, aLocalParam.nRow1, nTab, +/*N*/ aLocalParam.nCol2, aLocalParam.nRow2, nTab ); +/*N*/ ScDBData* pNewData; +/*N*/ if (pDestData) +/*N*/ pNewData = pDestData; // Bereich vorhanden -> anpassen +/*N*/ else // Bereich ab Cursor/Markierung wird angelegt +/*N*/ pNewData = rDocShell.GetDBData(aDestPos, SC_DB_MAKE, TRUE ); +/*N*/ if (pNewData) +/*N*/ { +/*N*/ pNewData->SetArea( nTab, +/*N*/ aLocalParam.nCol1,aLocalParam.nRow1, +/*N*/ aLocalParam.nCol2,aLocalParam.nRow2 ); +/*N*/ pNewData->SetSortParam( aLocalParam ); +/*N*/ pNewData->SetHeader( aLocalParam.bHasHeader ); //! ??? +/*N*/ pNewData->SetByRow( aLocalParam.bByRow ); +/*N*/ } +/*N*/ else +/*N*/ DBG_ERROR("Zielbereich nicht da"); +/*N*/ } +/*N*/ +/*N*/ ScRange aDirtyRange( aLocalParam.nCol1, aLocalParam.nRow1, nTab, +/*N*/ aLocalParam.nCol2, aLocalParam.nRow2, nTab ); +/*N*/ pDoc->SetDirty( aDirtyRange ); +/*N*/ +/*N*/ if (bPaint) +/*N*/ { +/*N*/ USHORT nPaint = PAINT_GRID; +/*N*/ USHORT nStartX = aLocalParam.nCol1; +/*N*/ USHORT nStartY = aLocalParam.nRow1; +/*N*/ USHORT nEndX = aLocalParam.nCol2; +/*N*/ USHORT nEndY = aLocalParam.nRow2; +/*N*/ if ( bRepeatQuery ) +/*N*/ { +/*N*/ nPaint |= PAINT_LEFT; +/*N*/ nStartX = 0; +/*N*/ nEndX = MAXCOL; +/*N*/ } +/*N*/ if (pDestData) +/*N*/ { +/*N*/ if ( nEndX < aOldDest.aEnd.Col() ) +/*N*/ nEndX = aOldDest.aEnd.Col(); +/*N*/ if ( nEndY < aOldDest.aEnd.Row() ) +/*N*/ nEndY = aOldDest.aEnd.Row(); +/*N*/ } +/*N*/ rDocShell.PostPaint( nStartX, nStartY, nTab, nEndX, nEndY, nTab, nPaint ); +/*N*/ } +/*N*/ +/*N*/ // AdjustRowHeight( aLocalParam.nRow1, aLocalParam.nRow2, bPaint ); +/*N*/ rDocShell.AdjustRowHeight( aLocalParam.nRow1, aLocalParam.nRow2, nTab ); +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +// ----------------------------------------------------------------- + +/*N*/ BOOL ScDBDocFunc::Query( USHORT nTab, const ScQueryParam& rQueryParam, +/*N*/ const ScRange* pAdvSource, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ if (bRecord && !pDoc->IsUndoEnabled()) +/*N*/ bRecord = FALSE; +/*N*/ ScDBData* pDBData = pDoc->GetDBAtArea( nTab, rQueryParam.nCol1, rQueryParam.nRow1, +/*N*/ rQueryParam.nCol2, rQueryParam.nRow2 ); +/*N*/ if (!pDBData) +/*N*/ { +/*N*/ DBG_ERROR( "Query: keine DBData" ); +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ // Wechsel von Inplace auf nicht-Inplace, dann erst Inplace aufheben: +/*N*/ // (nur, wenn im Dialog "Persistent" ausgewaehlt ist) +/*N*/ +/*N*/ if ( !rQueryParam.bInplace && pDBData->HasQueryParam() && rQueryParam.bDestPers ) +/*N*/ { +/*N*/ ScQueryParam aOldQuery; +/*N*/ pDBData->GetQueryParam(aOldQuery); +/*N*/ if (aOldQuery.bInplace) +/*N*/ { +/*N*/ // alte Filterung aufheben +/*N*/ +/*N*/ USHORT nEC = aOldQuery.GetEntryCount(); +/*N*/ for (USHORT i=0; i<nEC; i++) +/*N*/ aOldQuery.GetEntry(i).bDoQuery = FALSE; +/*N*/ aOldQuery.bDuplicate = TRUE; +/*N*/ Query( nTab, aOldQuery, NULL, bRecord, bApi ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ ScQueryParam aLocalParam( rQueryParam ); // fuer Paint / Zielbereich +/*N*/ BOOL bCopy = !rQueryParam.bInplace; // kopiert wird in Table::Query +/*N*/ ScDBData* pDestData = NULL; // Bereich, in den kopiert wird +/*N*/ BOOL bDoSize = FALSE; // Zielgroesse anpassen (einf./loeschen) +/*N*/ USHORT nFormulaCols = 0; // nur bei bDoSize +/*N*/ BOOL bKeepFmt = FALSE; +/*N*/ ScRange aOldDest; +/*N*/ ScRange aDestTotal; +/*N*/ if ( bCopy && rQueryParam.nDestCol == rQueryParam.nCol1 && +/*N*/ rQueryParam.nDestRow == rQueryParam.nRow1 && rQueryParam.nDestTab == nTab ) +/*N*/ bCopy = FALSE; +/*N*/ USHORT nDestTab = nTab; +/*N*/ if ( bCopy ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 aLocalParam.MoveToDest(); +/*N*/ } +/*N*/ +/*N*/ // ausfuehren +/*N*/ +/*N*/ WaitObject aWait( rDocShell.GetDialogParent() ); +/*N*/ +/*N*/ BOOL bKeepSub = FALSE; // bestehende Teilergebnisse wiederholen? +/*N*/ ScSubTotalParam aSubTotalParam; +/*N*/ if (rQueryParam.GetEntry(0).bDoQuery) // nicht beim Aufheben +/*N*/ { +/*N*/ pDBData->GetSubTotalParam( aSubTotalParam ); // Teilergebnisse vorhanden? +/*N*/ +/*N*/ if ( aSubTotalParam.bGroupActive[0] && !aSubTotalParam.bRemoveOnly ) +/*N*/ bKeepSub = TRUE; +/*N*/ } +/*N*/ +/*N*/ if ( bRecord ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 const ScRange* pOld = 0; +/*N*/ } +/*N*/ +/*N*/ ScDocument* pAttribDoc = NULL; +/*N*/ ScRange aAttribRange; +/*N*/ if (pDestData) // Zielbereich loeschen +/*N*/ { +/*N*/ if ( bKeepFmt ) +/*N*/ { +/*N*/ // kleinere der End-Spalten, Header+1 Zeile +/*N*/ aAttribRange = aOldDest; +/*N*/ if ( aAttribRange.aEnd.Col() > aDestTotal.aEnd.Col() ) +/*N*/ aAttribRange.aEnd.SetCol( aDestTotal.aEnd.Col() ); +/*N*/ aAttribRange.aEnd.SetRow( aAttribRange.aStart.Row() + +/*N*/ ( aLocalParam.bHasHeader ? 1 : 0 ) ); +/*N*/ +/*N*/ // auch fuer aufgefuellte Formeln +/*N*/ aAttribRange.aEnd.SetCol( aAttribRange.aEnd.Col() + nFormulaCols ); +/*N*/ +/*N*/ pAttribDoc = new ScDocument( SCDOCMODE_UNDO ); +/*N*/ pAttribDoc->InitUndo( pDoc, nDestTab, nDestTab, FALSE, TRUE ); +/*N*/ pDoc->CopyToDocument( aAttribRange, IDF_ATTRIB, FALSE, pAttribDoc ); +/*N*/ } +/*N*/ +/*N*/ if ( bDoSize ) +/*N*/ pDoc->FitBlock( aOldDest, aDestTotal ); +/*N*/ else +/*N*/ pDoc->DeleteAreaTab(aOldDest, IDF_ALL); // einfach loeschen +/*N*/ } +/*N*/ +/*N*/ // Filtern am Dokument ausfuehren +/*N*/ USHORT nCount = pDoc->Query( nTab, rQueryParam, bKeepSub ); +/*N*/ if (bCopy) +/*N*/ { +/*N*/ aLocalParam.nRow2 = aLocalParam.nRow1 + nCount; +/*N*/ if (!aLocalParam.bHasHeader && nCount) +/*N*/ --aLocalParam.nRow2; +/*N*/ +/*N*/ if ( bDoSize ) +/*N*/ { +/*N*/ // auf wirklichen Ergebnis-Bereich anpassen +/*N*/ // (das hier ist immer eine Verkleinerung) +/*N*/ +/*N*/ ScRange aNewDest( aLocalParam.nCol1, aLocalParam.nRow1, nDestTab, +/*N*/ aLocalParam.nCol2, aLocalParam.nRow2, nDestTab ); +/*N*/ pDoc->FitBlock( aDestTotal, aNewDest, FALSE ); // FALSE - nicht loeschen +/*N*/ +/*N*/ if ( nFormulaCols ) +/*N*/ { +/*N*/ // Formeln ausfuellen +/*N*/ //! Undo (Query und Repeat) !!! +/*N*/ +/*N*/ ScRange aNewForm( aLocalParam.nCol2+1, aLocalParam.nRow1, nDestTab, +/*N*/ aLocalParam.nCol2+nFormulaCols, aLocalParam.nRow2, nDestTab ); +/*N*/ ScRange aOldForm = aNewForm; +/*N*/ aOldForm.aEnd.SetRow( aOldDest.aEnd.Row() ); +/*N*/ pDoc->FitBlock( aOldForm, aNewForm, FALSE ); +/*N*/ +/*N*/ ScMarkData aMark; +/*N*/ aMark.SelectOneTable(nDestTab); +/*N*/ USHORT nFStartY = aLocalParam.nRow1 + ( aLocalParam.bHasHeader ? 1 : 0 ); +/*N*/ pDoc->Fill( aLocalParam.nCol2+1, nFStartY, +/*N*/ aLocalParam.nCol2+nFormulaCols, nFStartY, aMark, +/*N*/ aLocalParam.nRow2 - nFStartY, +/*N*/ FILL_TO_BOTTOM, FILL_SIMPLE ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ if ( pAttribDoc ) // gemerkte Attribute zurueckkopieren +/*N*/ { +/*N*/ // Header +/*N*/ if (aLocalParam.bHasHeader) +/*N*/ { +/*N*/ ScRange aHdrRange = aAttribRange; +/*N*/ aHdrRange.aEnd.SetRow( aHdrRange.aStart.Row() ); +/*N*/ pAttribDoc->CopyToDocument( aHdrRange, IDF_ATTRIB, FALSE, pDoc ); +/*N*/ } +/*N*/ +/*N*/ // Daten +/*N*/ USHORT nAttrEndCol = aAttribRange.aEnd.Col(); +/*N*/ USHORT nAttrRow = aAttribRange.aStart.Row() + ( aLocalParam.bHasHeader ? 1 : 0 ); +/*N*/ for (USHORT nCol = aAttribRange.aStart.Col(); nCol<=nAttrEndCol; nCol++) +/*N*/ { +/*N*/ const ScPatternAttr* pSrcPattern = pAttribDoc->GetPattern( +/*N*/ nCol, nAttrRow, nDestTab ); +/*N*/ DBG_ASSERT(pSrcPattern,"Pattern ist 0"); +/*N*/ if (pSrcPattern) +/*N*/ pDoc->ApplyPatternAreaTab( nCol, nAttrRow, nCol, aLocalParam.nRow2, +/*N*/ nDestTab, *pSrcPattern ); +/*N*/ const ScStyleSheet* pStyle = pSrcPattern->GetStyleSheet(); +/*N*/ if (pStyle) +/*N*/ pDoc->ApplyStyleAreaTab( nCol, nAttrRow, nCol, aLocalParam.nRow2, +/*N*/ nDestTab, *pStyle ); +/*N*/ } +/*N*/ +/*N*/ delete pAttribDoc; +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ // speichern: Inplace immer, sonst je nach Einstellung +/*N*/ // alter Inplace-Filter ist ggf. schon aufgehoben +/*N*/ +/*N*/ BOOL bSave = rQueryParam.bInplace || rQueryParam.bDestPers; +/*N*/ if (bSave) // merken +/*N*/ { +/*N*/ pDBData->SetQueryParam( rQueryParam ); +/*N*/ pDBData->SetHeader( rQueryParam.bHasHeader ); //! ??? +/*N*/ pDBData->SetAdvancedQuerySource( pAdvSource ); // after SetQueryParam +/*N*/ } +/*N*/ +/*N*/ if (bCopy) // neuen DB-Bereich merken +/*N*/ { +/*N*/ // selektieren wird hinterher von aussen (dbfunc) +/*N*/ // momentan ueber DB-Bereich an der Zielposition, darum muss dort +/*N*/ // auf jeden Fall ein Bereich angelegt werden. +/*N*/ +/*N*/ ScDBData* pNewData; +/*N*/ if (pDestData) +/*N*/ pNewData = pDestData; // Bereich vorhanden -> anpassen (immer!) +/*N*/ else // Bereich anlegen +/*N*/ pNewData = rDocShell.GetDBData( +/*N*/ ScRange( aLocalParam.nCol1, aLocalParam.nRow1, nDestTab, +/*N*/ aLocalParam.nCol2, aLocalParam.nRow2, nDestTab ), +/*N*/ SC_DB_MAKE, TRUE ); +/*N*/ +/*N*/ if (pNewData) +/*N*/ { +/*N*/ pNewData->SetArea( nDestTab, aLocalParam.nCol1, aLocalParam.nRow1, +/*N*/ aLocalParam.nCol2, aLocalParam.nRow2 ); +/*N*/ +/*N*/ // Query-Param wird am Ziel nicht mehr eingestellt, fuehrt nur zu Verwirrung +/*N*/ // und Verwechslung mit dem Query-Param am Quellbereich (#37187#) +/*N*/ } +/*N*/ else +/*N*/ DBG_ERROR("Zielbereich nicht da"); +/*N*/ } +/*N*/ +/*N*/ if (!bCopy) +/*N*/ pDoc->UpdatePageBreaks( nTab ); +/*N*/ +/*N*/ ScRange aDirtyRange( aLocalParam.nCol1, aLocalParam.nRow1, nDestTab, +/*N*/ aLocalParam.nCol2, aLocalParam.nRow2, nDestTab ); +/*N*/ pDoc->SetDirty( aDirtyRange ); +/*N*/ +/*N*/ if (bCopy) +/*N*/ { +/*N*/ USHORT nEndX = aLocalParam.nCol2; +/*N*/ USHORT nEndY = aLocalParam.nRow2; +/*N*/ if (pDestData) +/*N*/ { +/*N*/ if ( aOldDest.aEnd.Col() > nEndX ) +/*N*/ nEndX = aOldDest.aEnd.Col(); +/*N*/ if ( aOldDest.aEnd.Row() > nEndY ) +/*N*/ nEndY = aOldDest.aEnd.Row(); +/*N*/ } +/*N*/ if (bDoSize) +/*N*/ nEndY = MAXROW; +/*N*/ rDocShell.PostPaint( aLocalParam.nCol1, aLocalParam.nRow1, nDestTab, +/*N*/ nEndX, nEndY, nDestTab, PAINT_GRID ); +/*N*/ } +/*N*/ else +/*N*/ rDocShell.PostPaint( 0, rQueryParam.nRow1, nTab, MAXCOL, MAXROW, nTab, +/*N*/ PAINT_GRID | PAINT_LEFT ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +// ----------------------------------------------------------------- + +/*N*/ BOOL ScDBDocFunc::DoSubTotals( USHORT nTab, const ScSubTotalParam& rParam, +/*N*/ const ScSortParam* pForceNewSort, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ //! auch fuer ScDBFunc::DoSubTotals benutzen! +/*N*/ // dann bleibt aussen: +/*N*/ // - neuen Bereich (aus DBData) markieren +/*N*/ // - SelectionChanged (?) +/*N*/ +/*N*/ BOOL bDo = !rParam.bRemoveOnly; // FALSE = nur loeschen +/*N*/ BOOL bRet = FALSE; +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ if (bRecord && !pDoc->IsUndoEnabled()) +/*N*/ bRecord = FALSE; +/*N*/ ScDBData* pDBData = pDoc->GetDBAtArea( nTab, rParam.nCol1, rParam.nRow1, +/*N*/ rParam.nCol2, rParam.nRow2 ); +/*N*/ if (!pDBData) +/*N*/ { +/*N*/ DBG_ERROR( "SubTotals: keine DBData" ); +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ ScEditableTester aTester( pDoc, nTab, 0,rParam.nRow1+1, MAXCOL,MAXROW ); +/*N*/ if (!aTester.IsEditable()) +/*N*/ { +/*N*/ if (!bApi) +/*N*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ if (pDoc->HasAttrib( rParam.nCol1, rParam.nRow1+1, nTab, +/*N*/ rParam.nCol2, rParam.nRow2, nTab, HASATTR_MERGED | HASATTR_OVERLAPPED )) +/*N*/ { +/*N*/ if (!bApi) +/*N*/ rDocShell.ErrorMessage(STR_MSSG_INSERTCELLS_0); // nicht in zusammengefasste einfuegen +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ BOOL bOk = TRUE; +/*N*/ BOOL bDelete = FALSE; +/*N*/ if (rParam.bReplace) +/*?*/ {DBG_BF_ASSERT(0, "STRIP"); }//STRIP001 if (pDoc->TestRemoveSubTotals( nTab, rParam )) +/*N*/ +/*N*/ if (bOk) +/*N*/ { +/*N*/ WaitObject aWait( rDocShell.GetDialogParent() ); +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScSubTotalParam aNewParam( rParam ); // Bereichsende wird veraendert +/*N*/ ScDocument* pUndoDoc = NULL; +/*N*/ ScOutlineTable* pUndoTab = NULL; +/*N*/ ScRangeName* pUndoRange = NULL; +/*N*/ ScDBCollection* pUndoDB = NULL; +/*N*/ USHORT nTabCount = 0; // fuer Referenz-Undo +/*N*/ +/*N*/ if (bRecord) // alte Daten sichern +/*N*/ { +/*N*/ BOOL bOldFilter = bDo && rParam.bDoSort; +/*N*/ +/*N*/ nTabCount = pDoc->GetTableCount(); +/*N*/ pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); +/*N*/ ScOutlineTable* pTable = pDoc->GetOutlineTable( nTab ); +/*N*/ if (pTable) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 pUndoTab = new ScOutlineTable( *pTable ); +/*N*/ } +/*N*/ else +/*N*/ pUndoDoc->InitUndo( pDoc, nTab, nTab, FALSE, bOldFilter ); +/*N*/ +/*N*/ // Datenbereich sichern - incl. Filter-Ergebnis +/*N*/ pDoc->CopyToDocument( 0,rParam.nRow1+1,nTab, MAXCOL,rParam.nRow2,nTab, +/*N*/ IDF_ALL, FALSE, pUndoDoc ); +/*N*/ +/*N*/ // alle Formeln wegen Referenzen +/*N*/ pDoc->CopyToDocument( 0,0,0, MAXCOL,MAXROW,nTabCount-1, +/*N*/ IDF_FORMULA, FALSE, pUndoDoc ); +/*N*/ +/*N*/ // DB- und andere Bereiche +/*N*/ ScRangeName* pDocRange = pDoc->GetRangeName(); +/*N*/ if (pDocRange->GetCount()) +/*N*/ pUndoRange = new ScRangeName( *pDocRange ); +/*N*/ ScDBCollection* pDocDB = pDoc->GetDBCollection(); +/*N*/ if (pDocDB->GetCount()) +/*N*/ pUndoDB = new ScDBCollection( *pDocDB ); +/*N*/ } +/*N*/ +/*N*/ // pDoc->SetOutlineTable( nTab, NULL ); +/*N*/ ScOutlineTable* pOut = pDoc->GetOutlineTable( nTab ); +/*N*/ if (pOut) +/*?*/ { DBG_BF_ASSERT(0, "STRIP"); }//STRIP001 pOut->GetRowArray()->RemoveAll(); // nur Zeilen-Outlines loeschen +/*N*/ +/*N*/ if (rParam.bReplace) +/*?*/ {DBG_BF_ASSERT(0, "STRIP");} //STRIP001 pDoc->RemoveSubTotals( nTab, aNewParam ); +/*N*/ BOOL bSuccess = TRUE; +/*N*/ if (bDo) +/*N*/ { +/*?*/ // Sortieren +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if ( rParam.bDoSort || pForceNewSort ) +/*N*/ } +/*N*/ ScRange aDirtyRange( aNewParam.nCol1, aNewParam.nRow1, nTab, +/*N*/ aNewParam.nCol2, aNewParam.nRow2, nTab ); +/*N*/ pDoc->SetDirty( aDirtyRange ); +/*N*/ +/*N*/ if (bRecord) +/*N*/ { +/*N*/ // ScDBData* pUndoDBData = pDBData ? new ScDBData( *pDBData ) : NULL; +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 rDocShell.GetUndoManager()->AddUndoAction( +/*N*/ } +/*N*/ +/*N*/ if (!bSuccess) +/*N*/ { +/*N*/ // "Kann keine Zeilen einfuegen" +/*N*/ if (!bApi) +/*N*/ rDocShell.ErrorMessage(STR_MSSG_DOSUBTOTALS_2); +/*N*/ } +/*N*/ +/*N*/ // merken +/*N*/ pDBData->SetSubTotalParam( aNewParam ); +/*N*/ pDBData->SetArea( nTab, aNewParam.nCol1,aNewParam.nRow1, aNewParam.nCol2,aNewParam.nRow2 ); +/*N*/ pDoc->CompileDBFormula(); +/*N*/ +/*N*/ rDocShell.PostPaint( 0,0,nTab, MAXCOL,MAXROW,nTab, +/*N*/ PAINT_GRID | PAINT_LEFT | PAINT_TOP | PAINT_SIZE ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ bRet = bSuccess; +/*N*/ } +/*N*/ return bRet; +/*N*/ } + +//================================================================== + +/*N*/ BOOL ScDBDocFunc::DataPilotUpdate( ScDPObject* pOldObj, const ScDPObject* pNewObj, +/*N*/ BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ WaitObject aWait( rDocShell.GetDialogParent() ); +/*N*/ +/*N*/ BOOL bDone = FALSE; +/*N*/ BOOL bUndoSelf = FALSE; +/*N*/ USHORT nErrId = 0; +/*N*/ +/*N*/ ScDocument* pOldUndoDoc = NULL; +/*N*/ ScDocument* pNewUndoDoc = NULL; +/*N*/ ScDPObject* pUndoDPObj = NULL; +/*N*/ if ( bRecord && pOldObj ) +/*N*/ pUndoDPObj = new ScDPObject( *pOldObj ); // copy old settings for undo +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ if (bRecord && !pDoc->IsUndoEnabled()) +/*N*/ bRecord = FALSE; +/*N*/ if ( !rDocShell.IsEditable() || pDoc->GetChangeTrack() ) +/*N*/ { +/*N*/ // not recorded -> disallow +/*N*/ //! different error messages? +/*N*/ +/*N*/ nErrId = STR_PROTECTIONERR; +/*N*/ } +/*N*/ if ( pOldObj && !nErrId ) +/*N*/ { +/*N*/ ScRange aOldOut = pOldObj->GetOutRange(); +/*N*/ ScEditableTester aTester( pDoc, aOldOut ); +/*N*/ if ( !aTester.IsEditable() ) +/*N*/ nErrId = aTester.GetMessageId(); +/*N*/ } +/*N*/ if ( pNewObj && !nErrId ) +/*N*/ { +/*N*/ // at least one cell at the output position must be editable +/*N*/ // -> check in advance +/*N*/ // (start of output range in pNewObj is valid) +/*N*/ +/*N*/ ScRange aNewStart( pNewObj->GetOutRange().aStart ); +/*N*/ ScEditableTester aTester( pDoc, aNewStart ); +/*N*/ if ( !aTester.IsEditable() ) +/*N*/ nErrId = aTester.GetMessageId(); +/*N*/ } +/*N*/ +/*N*/ ScDPObject* pDestObj = NULL; +/*N*/ if ( !nErrId ) +/*N*/ { +/*N*/ if ( pOldObj && !pNewObj ) +/*N*/ { +/*N*/ // delete table +/*N*/ +/*N*/ ScRange aRange = pOldObj->GetOutRange(); +/*N*/ USHORT nTab = aRange.aStart.Tab(); +/*N*/ +/*N*/ if ( bRecord ) +/*N*/ { +/*N*/ pOldUndoDoc = new ScDocument( SCDOCMODE_UNDO ); +/*N*/ pOldUndoDoc->InitUndo( pDoc, nTab, nTab ); +/*N*/ pDoc->CopyToDocument( aRange, IDF_ALL, FALSE, pOldUndoDoc ); +/*N*/ } +/*N*/ +/*N*/ pDoc->DeleteAreaTab( aRange.aStart.Col(), aRange.aStart.Row(), +/*N*/ aRange.aEnd.Col(), aRange.aEnd.Row(), +/*N*/ nTab, IDF_ALL ); +/*N*/ +/*N*/ pDoc->GetDPCollection()->Free( pOldObj ); // object is deleted here +/*N*/ +/*N*/ rDocShell.PostPaintGridAll(); //! only necessary parts +/*N*/ rDocShell.PostPaint( aRange.aStart.Col(), aRange.aStart.Row(), nTab, +/*N*/ aRange.aEnd.Col(), aRange.aEnd.Row(), nTab, +/*N*/ PAINT_GRID ); +/*N*/ bDone = TRUE; +/*N*/ } +/*N*/ else if ( pNewObj ) +/*N*/ { +/*N*/ if ( pOldObj ) +/*N*/ { +/*N*/ if ( bRecord ) +/*N*/ { +/*N*/ ScRange aRange = pOldObj->GetOutRange(); +/*N*/ USHORT nTab = aRange.aStart.Tab(); +/*N*/ pOldUndoDoc = new ScDocument( SCDOCMODE_UNDO ); +/*N*/ pOldUndoDoc->InitUndo( pDoc, nTab, nTab ); +/*N*/ pDoc->CopyToDocument( aRange, IDF_ALL, FALSE, pOldUndoDoc ); +/*N*/ } +/*N*/ +/*N*/ if ( pNewObj == pOldObj ) +/*N*/ { +/*N*/ // refresh only - no settings modified +/*N*/ } +/*N*/ else +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 pNewObj->WriteSourceDataTo( *pOldObj ); // copy source data +/*N*/ } +/*N*/ +/*N*/ pDestObj = pOldObj; +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ // output range must be set at pNewObj +/*N*/ +/*N*/ pDestObj = new ScDPObject( *pNewObj ); +/*N*/ pDestObj->SetAlive(TRUE); +/*N*/ if ( !pDoc->GetDPCollection()->Insert(pDestObj) ) +/*N*/ { +/*N*/ DBG_ERROR("cannot insert DPObject"); +/*N*/ DELETEZ( pDestObj ); +/*N*/ } +/*N*/ } +/*N*/ if ( pDestObj ) +/*N*/ { +/*N*/ // #78541# create new database connection for "refresh" +/*N*/ // (and re-read column entry collections) +/*N*/ // so all changes take effect +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if ( pNewObj == pOldObj && pDestObj->IsImportData() ) +/*N*/ } +/*N*/ } +/*N*/ // else nothing (no old, no new) +/*N*/ } +/*N*/ +/*N*/ if ( bRecord && bDone ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 SfxUndoAction* pAction = new ScUndoDataPilot( &rDocShell, +/*N*/ } +/*N*/ +/*N*/ delete pOldUndoDoc; // if not used for undo +/*N*/ delete pNewUndoDoc; +/*N*/ delete pUndoDPObj; +/*N*/ +/*N*/ if (bDone) +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ if ( nErrId && !bApi ) +/*N*/ rDocShell.ErrorMessage( nErrId ); +/*N*/ +/*N*/ return bDone; +/*N*/ } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_dbdocimp.cxx b/binfilter/bf_sc/source/ui/docshell/sc_dbdocimp.cxx new file mode 100644 index 000000000000..254b2093618e --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_dbdocimp.cxx @@ -0,0 +1,569 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef PCH +#include "ui_pch.hxx" +#endif + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +// INCLUDE --------------------------------------------------------- + +#include <comphelper/processfactory.hxx> +#include <comphelper/types.hxx> +#include <vcl/msgbox.hxx> +#include <tools/debug.hxx> +#include <bf_svx/dataaccessdescriptor.hxx> + +#include <com/sun/star/sdb/CommandType.hpp> +#include <com/sun/star/sdb/XCompletedExecution.hpp> +#include <com/sun/star/sdbc/XRow.hpp> +#include <com/sun/star/sdbc/XRowSet.hpp> +#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/frame/XDispatchProvider.hpp> +#include <com/sun/star/frame/FrameSearchFlag.hpp> +#include <com/sun/star/view/XSelectionSupplier.hpp> + + +#include "dbdocfun.hxx" +#include "docsh.hxx" +#include "globstr.hrc" +#include "scerrors.hxx" +#include "dbcolect.hxx" +#include "markdata.hxx" +#include "undodat.hxx" +#include "progress.hxx" +#include "patattr.hxx" +#include "docpool.hxx" +#include "attrib.hxx" +#include "dbdocutl.hxx" +#include "editable.hxx" +#include <legacysmgr/legacy_binfilters_smgr.hxx> //STRIP002 +namespace binfilter { +using namespace ::com::sun::star; + +class SbaSelectionList: public List , public SvRefBase +{ +public: + SbaSelectionList(): + List(CONTAINER_MAXBLOCKSIZE,100,100){} +}; + +SV_DECL_IMPL_REF(SbaSelectionList) + +#define SC_SERVICE_ROWSET "com.sun.star.sdb.RowSet" +#define SC_SERVICE_INTHANDLER "com.sun.star.sdb.InteractionHandler" + +//! move to a header file? +#define SC_DBPROP_DATASOURCENAME "DataSourceName" +#define SC_DBPROP_COMMAND "Command" +#define SC_DBPROP_COMMANDTYPE "CommandType" +#define SC_DBPROP_SELECTION "Selection" +#define SC_DBPROP_CURSOR "Cursor" + +// ----------------------------------------------------------------- + +/*M*/ BOOL ScDBDocFunc::DoImport( USHORT nTab, const ScImportParam& rParam, +/*M*/ const uno::Reference< sdbc::XResultSet >& xResultSet, +/*M*/ const SbaSelectionList* pSelection, BOOL bRecord, BOOL bAddrInsert ) +/*M*/ { +/*M*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*M*/ +/*M*/ if (bRecord && !pDoc->IsUndoEnabled()) +/*M*/ bRecord = FALSE; +/*M*/ +/*M*/ ScDBData* pDBData = 0; +/*M*/ if ( !bAddrInsert ) +/*M*/ { +/*M*/ pDBData = pDoc->GetDBAtArea( nTab, rParam.nCol1, rParam.nRow1, +/*M*/ rParam.nCol2, rParam.nRow2 ); +/*M*/ if (!pDBData) +/*M*/ { +/*M*/ DBG_ERROR( "DoImport: no DBData" ); +/*M*/ return FALSE; +/*M*/ } +/*M*/ } +/*M*/ +/*M*/ Window* pWaitWin = rDocShell.GetDialogParent(); +/*M*/ if (pWaitWin) +/*M*/ pWaitWin->EnterWait(); +/*M*/ ScDocShellModificator aModificator( rDocShell ); +/*M*/ +/*M*/ BOOL bSuccess = FALSE; +/*M*/ BOOL bApi = FALSE; //! pass as argument +/*M*/ BOOL bTruncated = FALSE; // for warning +/*M*/ USHORT nErrStringId = 0; +/*M*/ String aErrorMessage; +/*M*/ +/*M*/ USHORT nCol = rParam.nCol1; +/*M*/ USHORT nRow = rParam.nRow1; +/*M*/ USHORT nEndCol = nCol; // end of resulting database area +/*M*/ USHORT nEndRow = nRow; +/*M*/ long i; +/*M*/ +/*M*/ BOOL bDoSelection = FALSE; +/*M*/ BOOL bRealSelection = FALSE; // TRUE if not everything is selected +/*M*/ ULONG nListPos = 0; +/*M*/ ULONG nRowsRead = 0; +/*M*/ ULONG nListCount = 0; +/*M*/ +/*M*/ // -1 is special +/*M*/ if ( pSelection && pSelection->Count() && (long)pSelection->GetObject(0) != -1L ) +/*M*/ { +/*M*/ bDoSelection = TRUE; +/*M*/ nListCount = pSelection->Count(); +/*M*/ } +/*M*/ +/*M*/ // ImportDoc - also used for Redo +/*M*/ ScDocument* pImportDoc = new ScDocument( SCDOCMODE_UNDO ); +/*M*/ pImportDoc->InitUndo( pDoc, nTab, nTab ); +/*M*/ ScColumn::bDoubleAlloc = TRUE; +/*M*/ +/*M*/ // +/*M*/ // get data from database into import document +/*M*/ // +/*M*/ +/*M*/ try +/*M*/ { +/*M*/ // progress bar +/*M*/ // only text (title is still needed, for the cancel button) +/*M*/ ScProgress aProgress( &rDocShell, ScGlobal::GetRscString(STR_UNDO_IMPORTDATA), 0 ); +/*M*/ USHORT nInserted = 0; +/*M*/ +/*M*/ uno::Reference<sdbc::XRowSet> xRowSet = uno::Reference<sdbc::XRowSet>( +/*M*/ xResultSet, uno::UNO_QUERY ); +/*M*/ sal_Bool bDispose = sal_False; +/*M*/ if ( !xRowSet.is() ) +/*M*/ { +/*M*/ bDispose = sal_True; +/*M*/ xRowSet = uno::Reference<sdbc::XRowSet>( +/*M*/ ::legacy_binfilters::getLegacyProcessServiceFactory()->createInstance( +/*M*/ ::rtl::OUString::createFromAscii( SC_SERVICE_ROWSET ) ), +/*M*/ uno::UNO_QUERY); +/*M*/ uno::Reference<beans::XPropertySet> xRowProp( xRowSet, uno::UNO_QUERY ); +/*M*/ DBG_ASSERT( xRowProp.is(), "can't get RowSet" ); +/*M*/ if ( xRowProp.is() ) +/*M*/ { +/*M*/ // +/*M*/ // set source parameters +/*M*/ // +/*M*/ +/*M*/ sal_Int32 nType = rParam.bSql ? sdb::CommandType::COMMAND : +/*M*/ ( (rParam.nType == ScDbQuery) ? sdb::CommandType::QUERY : +/*M*/ sdb::CommandType::TABLE ); +/*M*/ uno::Any aAny; +/*M*/ +/*M*/ aAny <<= ::rtl::OUString( rParam.aDBName ); +/*M*/ xRowProp->setPropertyValue( +/*M*/ ::rtl::OUString::createFromAscii(SC_DBPROP_DATASOURCENAME), aAny ); +/*M*/ +/*M*/ aAny <<= ::rtl::OUString( rParam.aStatement ); +/*M*/ xRowProp->setPropertyValue( +/*M*/ ::rtl::OUString::createFromAscii(SC_DBPROP_COMMAND), aAny ); +/*M*/ +/*M*/ aAny <<= nType; +/*M*/ xRowProp->setPropertyValue( +/*M*/ ::rtl::OUString::createFromAscii(SC_DBPROP_COMMANDTYPE), aAny ); +/*M*/ +/*M*/ uno::Reference<sdb::XCompletedExecution> xExecute( xRowSet, uno::UNO_QUERY ); +/*M*/ if ( xExecute.is() ) +/*M*/ { +/*M*/ uno::Reference<task::XInteractionHandler> xHandler( +/*M*/ ::legacy_binfilters::getLegacyProcessServiceFactory()->createInstance( +/*M*/ ::rtl::OUString::createFromAscii( SC_SERVICE_INTHANDLER ) ), +/*M*/ uno::UNO_QUERY); +/*M*/ xExecute->executeWithCompletion( xHandler ); +/*M*/ } +/*M*/ else +/*M*/ xRowSet->execute(); +/*M*/ } +/*M*/ } +/*M*/ if ( xRowSet.is() ) +/*M*/ { +/*M*/ // +/*M*/ // get column descriptions +/*M*/ // +/*M*/ +/*M*/ long nColCount = 0; +/*M*/ uno::Reference<sdbc::XResultSetMetaData> xMeta; +/*M*/ uno::Reference<sdbc::XResultSetMetaDataSupplier> xMetaSupp( xRowSet, uno::UNO_QUERY ); +/*M*/ if ( xMetaSupp.is() ) +/*M*/ xMeta = xMetaSupp->getMetaData(); +/*M*/ if ( xMeta.is() ) +/*M*/ nColCount = xMeta->getColumnCount(); // this is the number of real columns +/*M*/ +/*M*/ if ( rParam.nCol1 + nColCount - 1 > MAXCOL ) +/*M*/ { +/*M*/ nColCount = 0; +/*M*/ //! error message +/*M*/ } +/*M*/ +/*M*/ uno::Reference<sdbc::XRow> xRow( xRowSet, uno::UNO_QUERY ); +/*M*/ if ( nColCount > 0 && xRow.is() ) +/*M*/ { +/*M*/ nEndCol = (USHORT)( rParam.nCol1 + nColCount - 1 ); +/*M*/ +/*M*/ uno::Sequence<sal_Int32> aColTypes( nColCount ); // column types +/*M*/ uno::Sequence<sal_Bool> aColCurr( nColCount ); // currency flag is not in types +/*M*/ sal_Int32* pTypeArr = aColTypes.getArray(); +/*M*/ sal_Bool* pCurrArr = aColCurr.getArray(); +/*M*/ for (i=0; i<nColCount; i++) +/*M*/ { +/*M*/ pTypeArr[i] = xMeta->getColumnType( i+1 ); +/*M*/ pCurrArr[i] = xMeta->isCurrency( i+1 ); +/*M*/ } +/*M*/ +/*M*/ if ( !bAddrInsert ) // read column names +/*M*/ { +/*M*/ nCol = rParam.nCol1; +/*M*/ for (i=0; i<nColCount; i++) +/*M*/ { +/*M*/ pImportDoc->SetString( nCol, nRow, nTab, +/*M*/ xMeta->getColumnLabel( i+1 ) ); +/*M*/ ++nCol; +/*M*/ } +/*M*/ ++nRow; +/*M*/ } +/*M*/ +/*M*/ BOOL bEnd = FALSE; +/*M*/ xRowSet->beforeFirst(); +/*M*/ while ( !bEnd && xRowSet->next() ) +/*M*/ { +/*M*/ // skip rows that are not selected +/*M*/ +/*M*/ if (bDoSelection) +/*M*/ { +/*M*/ if (nListPos < nListCount) +/*M*/ { +/*M*/ ULONG nNextRow = (ULONG) pSelection->GetObject(nListPos); +/*M*/ while (nRowsRead+1 < nNextRow && !bEnd) +/*M*/ { +/*M*/ bRealSelection = TRUE; +/*M*/ if ( !xRowSet->next() ) +/*M*/ bEnd = TRUE; +/*M*/ ++nRowsRead; +/*M*/ } +/*M*/ ++nListPos; +/*M*/ } +/*M*/ else +/*M*/ { +/*M*/ bRealSelection = TRUE; // more data available but not used +/*M*/ bEnd = TRUE; +/*M*/ } +/*M*/ } +/*M*/ +/*M*/ if ( !bEnd ) +/*M*/ { +/*M*/ if ( nRow <= MAXROW ) +/*M*/ { +/*M*/ nCol = rParam.nCol1; +/*M*/ for (i=0; i<nColCount; i++) +/*M*/ { +/*M*/ ScDatabaseDocUtil::PutData( pImportDoc, nCol, nRow, nTab, +/*M*/ xRow, i+1, pTypeArr[i], pCurrArr[i] ); +/*M*/ ++nCol; +/*M*/ } +/*M*/ nEndRow = nRow; +/*M*/ ++nRow; +/*M*/ +/*M*/ // progress bar +/*M*/ +/*M*/ ++nInserted; +/*M*/ if (!(nInserted & 15)) +/*M*/ {DBG_BF_ASSERT(0, "STRIP"); //STRIP001 +/*M*/ } +/*M*/ } +/*M*/ else // past the end of the spreadsheet +/*M*/ { +/*M*/ bEnd = TRUE; // don't continue +/*M*/ bTruncated = TRUE; // warning flag +/*M*/ } +/*M*/ } +/*M*/ +/*M*/ ++nRowsRead; +/*M*/ } +/*M*/ +/*M*/ bSuccess = TRUE; +/*M*/ } +/*M*/ +/*M*/ if ( bDispose ) +/*M*/ ::comphelper::disposeComponent( xRowSet ); +/*M*/ } +/*M*/ } +/*M*/ catch ( sdbc::SQLException& rError ) +/*M*/ { +/*M*/ aErrorMessage = rError.Message; +/*M*/ } +/*M*/ catch ( uno::Exception& ) +/*M*/ { +/*M*/ DBG_ERROR("Unexpected exception in database"); +/*M*/ } +/*M*/ +/*M*/ ScColumn::bDoubleAlloc = FALSE; +/*M*/ pImportDoc->DoColResize( nTab, rParam.nCol1,nEndCol, 0 ); +/*M*/ +/*M*/ // +/*M*/ // test for cell protection +/*M*/ // +/*M*/ +/*M*/ BOOL bKeepFormat = !bAddrInsert && pDBData->IsKeepFmt(); +/*M*/ BOOL bMoveCells = !bAddrInsert && pDBData->IsDoSize(); +/*M*/ USHORT nFormulaCols = 0; // columns to be filled with formulas +/*M*/ if (bMoveCells && nEndCol == rParam.nCol2) +/*M*/ { +/*M*/ // if column count changes, formulas would become invalid anyway +/*M*/ // -> only set nFormulaCols for unchanged column count +/*M*/ +/*M*/ USHORT nTestCol = rParam.nCol2 + 1; // right of the data +/*M*/ USHORT nTestRow = rParam.nRow1 + 1; // below the title row +/*M*/ while ( nTestCol <= MAXCOL && +/*M*/ pDoc->GetCellType(ScAddress( nTestCol, nTestRow, nTab )) == CELLTYPE_FORMULA ) +/*M*/ ++nTestCol, ++nFormulaCols; +/*M*/ } +/*M*/ +/*M*/ if (bSuccess) +/*M*/ { +/*M*/ // old and new range editable? +/*N*/ ScEditableTester aTester; +/*N*/ aTester.TestBlock( pDoc, nTab, rParam.nCol1,rParam.nRow1,rParam.nCol2,rParam.nRow2 ); +/*N*/ aTester.TestBlock( pDoc, nTab, rParam.nCol1,rParam.nRow1,nEndCol,nEndRow ); +/*N*/ if ( !aTester.IsEditable() ) +/*N*/ { +/*N*/ nErrStringId = aTester.GetMessageId(); +/*N*/ bSuccess = FALSE; +/*N*/ } +/*N*/ else if ( pDoc->GetChangeTrack() != NULL ) +/*M*/ { +/*M*/ nErrStringId = STR_PROTECTIONERR; +/*M*/ bSuccess = FALSE; +/*M*/ } +/*M*/ } +/*M*/ +/*M*/ if ( bSuccess && bMoveCells ) +/*M*/ { +/*M*/ ScRange aOld( rParam.nCol1, rParam.nRow1, nTab, +/*M*/ rParam.nCol2+nFormulaCols, rParam.nRow2, nTab ); +/*M*/ ScRange aNew( rParam.nCol1, rParam.nRow1, nTab, +/*M*/ nEndCol+nFormulaCols, nEndRow, nTab ); +/*M*/ if (!pDoc->CanFitBlock( aOld, aNew )) +/*M*/ { +/*M*/ nErrStringId = STR_MSSG_DOSUBTOTALS_2; // can't insert cells +/*M*/ bSuccess = FALSE; +/*M*/ } +/*M*/ } +/*M*/ +/*M*/ // +/*M*/ // copy data from import doc into real document +/*M*/ // +/*M*/ +/*M*/ if ( bSuccess ) +/*M*/ { +/*M*/ if (bKeepFormat) +/*M*/ { +/*M*/ // keep formatting of title and first data row from the document +/*M*/ // CopyToDocument also copies styles, Apply... needs separate calls +/*M*/ +/*M*/ USHORT nMinEndCol = Min( rParam.nCol2, nEndCol ); // not too much +/*M*/ nMinEndCol += nFormulaCols; // only if column count unchanged +/*M*/ pImportDoc->DeleteAreaTab( 0,0, MAXCOL,MAXROW, nTab, IDF_ATTRIB ); +/*M*/ pDoc->CopyToDocument( rParam.nCol1, rParam.nRow1, nTab, +/*M*/ nMinEndCol, rParam.nRow1, nTab, +/*M*/ IDF_ATTRIB, FALSE, pImportDoc ); +/*M*/ +/*M*/ USHORT nDataStartRow = rParam.nRow1+1; +/*M*/ for (USHORT nCopyCol=rParam.nCol1; nCopyCol<=nMinEndCol; nCopyCol++) +/*M*/ { +/*M*/ const ScPatternAttr* pSrcPattern = pDoc->GetPattern( +/*M*/ nCopyCol, nDataStartRow, nTab ); +/*M*/ pImportDoc->ApplyPatternAreaTab( nCopyCol, nDataStartRow, nCopyCol, nEndRow, +/*M*/ nTab, *pSrcPattern ); +/*M*/ const ScStyleSheet* pStyle = pSrcPattern->GetStyleSheet(); +/*M*/ if (pStyle) +/*M*/ pImportDoc->ApplyStyleAreaTab( nCopyCol, nDataStartRow, nCopyCol, nEndRow, +/*M*/ nTab, *pStyle ); +/*M*/ } +/*M*/ } +/*M*/ +/*M*/ // don't set cell protection attribute if table is protected +/*M*/ if (pDoc->IsTabProtected(nTab)) +/*M*/ { +/*M*/ ScPatternAttr aPattern(pImportDoc->GetPool()); +/*M*/ aPattern.GetItemSet().Put( ScProtectionAttr( FALSE,FALSE,FALSE,FALSE ) ); +/*M*/ pImportDoc->ApplyPatternAreaTab( 0,0,MAXCOL,MAXROW, nTab, aPattern ); +/*M*/ } +/*M*/ +/*M*/ // +/*M*/ // copy old data for undo +/*M*/ // +/*M*/ +/*M*/ USHORT nUndoEndCol = Max( nEndCol, rParam.nCol2 ); // rParam = old end +/*M*/ USHORT nUndoEndRow = Max( nEndRow, rParam.nRow2 ); +/*M*/ +/*M*/ ScDocument* pUndoDoc = NULL; +/*M*/ ScDBData* pUndoDBData = NULL; +/*M*/ if ( bRecord ) +/*M*/ { +/*M*/ pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); +/*M*/ pUndoDoc->InitUndo( pDoc, nTab, nTab ); +/*M*/ +/*M*/ if ( !bAddrInsert ) +/*M*/ pUndoDBData = new ScDBData( *pDBData ); +/*M*/ } +/*M*/ +/*M*/ ScMarkData aNewMark; +/*M*/ aNewMark.SelectOneTable( nTab ); +/*M*/ +/*M*/ if (bRecord) +/*M*/ { +/*M*/ // nFormulaCols is set only if column count is unchanged +/*M*/ pDoc->CopyToDocument( rParam.nCol1, rParam.nRow1, nTab, +/*M*/ nEndCol+nFormulaCols, nEndRow, nTab, +/*M*/ IDF_ALL, FALSE, pUndoDoc ); +/*M*/ if ( rParam.nCol2 > nEndCol ) +/*M*/ pDoc->CopyToDocument( nEndCol+1, rParam.nRow1, nTab, +/*M*/ nUndoEndCol, nUndoEndRow, nTab, +/*M*/ IDF_ALL, FALSE, pUndoDoc ); +/*M*/ if ( rParam.nRow2 > nEndRow ) +/*M*/ pDoc->CopyToDocument( rParam.nCol1, nEndRow+1, nTab, +/*M*/ nUndoEndCol+nFormulaCols, nUndoEndRow, nTab, +/*M*/ IDF_ALL, FALSE, pUndoDoc ); +/*M*/ } +/*M*/ +/*M*/ // +/*M*/ // move new data +/*M*/ // +/*M*/ +/*M*/ if (bMoveCells) +/*M*/ { +/*M*/ // clear only the range without the formulas, +/*M*/ // so the formula title and first row are preserved +/*M*/ +/*M*/ ScRange aDelRange( rParam.nCol1, rParam.nRow1, nTab, +/*M*/ rParam.nCol2, rParam.nRow2, nTab ); +/*M*/ pDoc->DeleteAreaTab( aDelRange, IDF_ALL ); // ohne die Formeln +/*M*/ +/*M*/ ScRange aOld( rParam.nCol1, rParam.nRow1, nTab, +/*M*/ rParam.nCol2+nFormulaCols, rParam.nRow2, nTab ); +/*M*/ ScRange aNew( rParam.nCol1, rParam.nRow1, nTab, +/*M*/ nEndCol+nFormulaCols, nEndRow, nTab ); +/*M*/ pDoc->FitBlock( aOld, aNew, FALSE ); // Formeln nicht loeschen +/*M*/ } +/*M*/ else if ( nEndCol < rParam.nCol2 ) // DeleteArea calls PutInOrder +/*M*/ pDoc->DeleteArea( nEndCol+1, rParam.nRow1, rParam.nCol2, rParam.nRow2, +/*M*/ aNewMark, IDF_CONTENTS ); +/*M*/ +/*M*/ // CopyToDocument doesn't remove contents +/*M*/ pDoc->DeleteAreaTab( rParam.nCol1, rParam.nRow1, nEndCol, nEndRow, nTab, IDF_CONTENTS ); +/*M*/ +/*M*/ // #41216# remove each column from ImportDoc after copying to reduce memory usage +/*M*/ BOOL bOldAutoCalc = pDoc->GetAutoCalc(); +/*M*/ pDoc->SetAutoCalc( FALSE ); // outside of the loop +/*M*/ for (USHORT nCopyCol = rParam.nCol1; nCopyCol <= nEndCol; nCopyCol++) +/*M*/ { +/*M*/ pImportDoc->CopyToDocument( nCopyCol, rParam.nRow1, nTab, nCopyCol, nEndRow, nTab, +/*M*/ IDF_ALL, FALSE, pDoc ); +/*M*/ pImportDoc->DeleteAreaTab( nCopyCol, rParam.nRow1, nCopyCol, nEndRow, nTab, IDF_CONTENTS ); +/*M*/ pImportDoc->DoColResize( nTab, nCopyCol, nCopyCol, 0 ); +/*M*/ } +/*M*/ pDoc->SetAutoCalc( bOldAutoCalc ); +/*M*/ +/*M*/ if (nFormulaCols) // copy formulas +/*M*/ { +/*M*/ if (bKeepFormat) // formats for formulas +/*M*/ pImportDoc->CopyToDocument( nEndCol+1, rParam.nRow1, nTab, +/*M*/ nEndCol+nFormulaCols, nEndRow, nTab, +/*M*/ IDF_ATTRIB, FALSE, pDoc ); +/*M*/ // fill formulas +/*M*/ ScMarkData aMark; +/*M*/ aMark.SelectOneTable(nTab); +/*M*/ pDoc->Fill( nEndCol+1, rParam.nRow1+1, nEndCol+nFormulaCols, rParam.nRow1+1, +/*M*/ aMark, nEndRow-rParam.nRow1-1, FILL_TO_BOTTOM, FILL_SIMPLE ); +/*M*/ } +/*M*/ +/*M*/ // if new range is smaller, clear old contents +/*M*/ +/*M*/ if (!bMoveCells) // move has happened above +/*M*/ { +/*M*/ if ( rParam.nCol2 > nEndCol ) +/*M*/ pDoc->DeleteArea( nEndCol+1, rParam.nRow1, rParam.nCol2, rParam.nRow2, +/*M*/ aNewMark, IDF_CONTENTS ); +/*M*/ if ( rParam.nRow2 > nEndRow ) +/*M*/ pDoc->DeleteArea( rParam.nCol1, nEndRow+1, rParam.nCol2, rParam.nRow2, +/*M*/ aNewMark, IDF_CONTENTS ); +/*M*/ } +/*M*/ +/*M*/ if( !bAddrInsert ) // update database range +/*M*/ { +/*M*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 pDBData->SetImportParam( rParam ); +/*M*/ } +/*M*/ +/*M*/ if (bRecord) +/*M*/ { +/*M*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocument* pRedoDoc = pImportDoc; +/*M*/ } +/*M*/ +/*M*/ pDoc->SetDirty(); +/*M*/ rDocShell.PostPaint( 0,0,nTab, MAXCOL,MAXROW,nTab, PAINT_GRID ); +/*M*/ aModificator.SetDocumentModified(); +/*M*/ +/*M*/ if (pWaitWin) +/*M*/ pWaitWin->LeaveWait(); +/*M*/ +//*M*/ if ( bTruncated && !bApi ) // show warning +//*M*/ ErrorHandler::HandleError(SCWARN_IMPORT_RANGE_OVERFLOW); +/*M*/ } +//*M*/ else if ( !bApi ) +//*M*/ { +//*M*/ if (pWaitWin) +//*M*/ pWaitWin->LeaveWait(); +//*M*/ +//*M*/ if (!aErrorMessage.Len()) +//*M*/ { +//*M*/ if (!nErrStringId) +//*M*/ nErrStringId = STR_MSSG_IMPORTDATA_0; +//*M*/ aErrorMessage = ScGlobal::GetRscString( nErrStringId ); +//*M*/ } +//*M*/ InfoBox aInfoBox( rDocShell.GetDialogParent(), aErrorMessage ); +//*M*/ aInfoBox.Execute(); +//*M*/ } +/*M*/ +/*M*/ delete pImportDoc; +/*M*/ +/*M*/ return bSuccess; +/*M*/ } + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_docfunc.cxx b/binfilter/bf_sc/source/ui/docshell/sc_docfunc.cxx new file mode 100644 index 000000000000..9bb44869fd31 --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_docfunc.cxx @@ -0,0 +1,1853 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +// INCLUDE --------------------------------------------------------------- + +#define ITEMID_FIELD EE_FEATURE_FIELD + +#include <bf_sfx2/app.hxx> +#include <bf_svx/editobj.hxx> +#include <bf_svx/linkmgr.hxx> +#include <bf_svx/svdundo.hxx> +#include <vcl/msgbox.hxx> +#include <vcl/waitobj.hxx> +#include <bf_svtools/zforlist.hxx> +#include <bf_svtools/PasswordHelper.hxx> + +#include <list> + +#include "docfunc.hxx" + +#include "bf_sc.hrc" + +#include "arealink.hxx" +#include "autoform.hxx" +#include "cell.hxx" +#include "detdata.hxx" +#include "detfunc.hxx" +#include "docpool.hxx" +#include "docsh.hxx" +#include "drwlayer.hxx" +#include "editutil.hxx" +#include "globstr.hrc" +#include "namecrea.hxx" // NAME_TOP etc. +#include "olinetab.hxx" +#include "patattr.hxx" +#include "rangenam.hxx" +#include "scresid.hxx" +#include "stlpool.hxx" +#include "tablink.hxx" +#include "uiitems.hxx" +#include "undocell.hxx" +#include "undodraw.hxx" +#include "undotab.hxx" +#include "sizedev.hxx" +#include "scmod.hxx" +#include "editable.hxx" +namespace binfilter { + +#define TABLEID_DOC 0xFFFF + +using namespace ::com::sun::star; + +// STATIC DATA ----------------------------------------------------------- + +//======================================================================== + + +// Zeile ueber dem Range painten (fuer Linien nach AdjustRowHeight) + +/*N*/ void lcl_PaintAbove( ScDocShell& rDocShell, const ScRange& rRange ) +/*N*/ { +/*N*/ USHORT nRow = rRange.aStart.Row(); +/*N*/ if ( nRow > 0 ) +/*N*/ { +/*N*/ USHORT nTab = rRange.aStart.Tab(); //! alle? +/*N*/ --nRow; +/*N*/ rDocShell.PostPaint( ScRange(0,nRow,nTab, MAXCOL,nRow,nTab), PAINT_GRID ); +/*N*/ } +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::AdjustRowHeight( const ScRange& rRange, BOOL bPaint ) +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ if ( pDoc->IsImportingXML() ) +/*N*/ { +/*N*/ // for XML import, all row heights are updated together after importing +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ USHORT nTab = rRange.aStart.Tab(); +/*N*/ USHORT nStartRow = rRange.aStart.Row(); +/*N*/ USHORT nEndRow = rRange.aEnd.Row(); +/*N*/ +/*N*/ ScSizeDeviceProvider aProv( &rDocShell ); +/*N*/ Fraction aOne(1,1); +/*N*/ +/*N*/ BOOL bChanged = pDoc->SetOptimalHeight( nStartRow, nEndRow, nTab, 0, aProv.GetDevice(), +/*N*/ aProv.GetPPTX(), aProv.GetPPTY(), aOne, aOne, FALSE ); +/*N*/ +/*N*/ if ( bPaint && bChanged ) +/*N*/ rDocShell.PostPaint( 0, nStartRow, nTab, MAXCOL, MAXROW, nTab, +/*N*/ PAINT_GRID | PAINT_LEFT ); +/*N*/ +/*N*/ return bChanged; +/*N*/ } + + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::DetectiveAddPred(const ScAddress& rPos) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ rDocShell.MakeDrawLayer(); +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScDrawLayer* pModel = pDoc->GetDrawLayer(); +/*N*/ USHORT nCol = rPos.Col(); +/*N*/ USHORT nRow = rPos.Row(); +/*N*/ USHORT nTab = rPos.Tab(); +/*N*/ +/*N*/ BOOL bDone = ScDetectiveFunc( pDoc,nTab ).ShowPred( nCol, nRow ); +/*N*/ if (bDone) +/*N*/ { +/*N*/ ScDetOpData aOperation( ScAddress(nCol,nRow,nTab), SCDETOP_ADDPRED ); +/*N*/ pDoc->AddDetectiveOperation( aOperation ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ } +/*N*/ +/*N*/ return bDone; +/*N*/ } + +/*N*/ BOOL ScDocFunc::DetectiveDelPred(const ScAddress& rPos) +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ +/*N*/ ScDrawLayer* pModel = pDoc->GetDrawLayer(); +/*N*/ if (!pModel) +/*N*/ return FALSE; +/*N*/ +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ USHORT nCol = rPos.Col(); +/*N*/ USHORT nRow = rPos.Row(); +/*N*/ USHORT nTab = rPos.Tab(); +/*N*/ +/*N*/ BOOL bDone = ScDetectiveFunc( pDoc,nTab ).DeletePred( nCol, nRow ); +/*N*/ if (bDone) +/*N*/ { +/*N*/ ScDetOpData aOperation( ScAddress(nCol,nRow,nTab), SCDETOP_DELPRED ); +/*N*/ pDoc->AddDetectiveOperation( aOperation ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ } +/*N*/ +/*N*/ return bDone; +/*N*/ } + +/*N*/ BOOL ScDocFunc::DetectiveAddSucc(const ScAddress& rPos) +/*N*/ { + DBG_BF_ASSERT(0, "STRIP"); return 0; //STRIP001 ScDocShellModificator aModificator( rDocShell ); +/*N*/ } + +/*N*/ BOOL ScDocFunc::DetectiveDelSucc(const ScAddress& rPos) +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ +/*N*/ ScDrawLayer* pModel = pDoc->GetDrawLayer(); +/*N*/ if (!pModel) +/*N*/ return FALSE; +/*N*/ +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ USHORT nCol = rPos.Col(); +/*N*/ USHORT nRow = rPos.Row(); +/*N*/ USHORT nTab = rPos.Tab(); +/*N*/ +/*N*/ BOOL bDone = ScDetectiveFunc( pDoc,nTab ).DeleteSucc( nCol, nRow ); +/*N*/ if (bDone) +/*N*/ { +/*N*/ ScDetOpData aOperation( ScAddress(nCol,nRow,nTab), SCDETOP_DELSUCC ); +/*N*/ pDoc->AddDetectiveOperation( aOperation ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ } +/*N*/ +/*N*/ return bDone; +/*N*/ } + +/*N*/ BOOL ScDocFunc::DetectiveAddError(const ScAddress& rPos) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ rDocShell.MakeDrawLayer(); +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ +/*N*/ ScDrawLayer* pModel = pDoc->GetDrawLayer(); +/*N*/ USHORT nCol = rPos.Col(); +/*N*/ USHORT nRow = rPos.Row(); +/*N*/ USHORT nTab = rPos.Tab(); +/*N*/ +/*N*/ BOOL bDone = ScDetectiveFunc( pDoc,nTab ).ShowError( nCol, nRow ); +/*N*/ if (bDone) +/*N*/ { +/*N*/ ScDetOpData aOperation( ScAddress(nCol,nRow,nTab), SCDETOP_ADDERROR ); +/*N*/ pDoc->AddDetectiveOperation( aOperation ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ } +/*N*/ +/*N*/ return bDone; +/*N*/ } + +/*N*/ BOOL ScDocFunc::DetectiveMarkInvalid(USHORT nTab) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ rDocShell.MakeDrawLayer(); +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ +/*N*/ ScDrawLayer* pModel = pDoc->GetDrawLayer(); +/*N*/ +/*N*/ Window* pWaitWin = rDocShell.GetDialogParent(); +/*N*/ if (pWaitWin) +/*N*/ pWaitWin->EnterWait(); +/*N*/ BOOL bOverflow; +/*N*/ BOOL bDone = ScDetectiveFunc( pDoc,nTab ).MarkInvalid( bOverflow ); +/*N*/ if (pWaitWin) +/*N*/ pWaitWin->LeaveWait(); +/*N*/ if (bDone) +/*N*/ { +/*N*/ aModificator.SetDocumentModified(); +/*N*/ if ( bOverflow ) +/*N*/ { +/*N*/ InfoBox( NULL, +/*N*/ ScGlobal::GetRscString( STR_DETINVALID_OVERFLOW ) ).Execute(); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ return bDone; +/*N*/ } + +/*N*/ BOOL ScDocFunc::DetectiveDelAll(USHORT nTab) +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ +/*N*/ ScDrawLayer* pModel = pDoc->GetDrawLayer(); +/*N*/ if (!pModel) +/*N*/ return FALSE; +/*N*/ +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ BOOL bDone = ScDetectiveFunc( pDoc,nTab ).DeleteAll( SC_DET_DETECTIVE ); +/*N*/ if (bDone) +/*N*/ { +/*N*/ ScDetOpList* pOldList = pDoc->GetDetOpList(); +/*N*/ +/*N*/ pDoc->ClearDetectiveOperations(); +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ } +/*N*/ +/*N*/ return bDone; +/*N*/ } + +/*N*/ BOOL ScDocFunc::DetectiveRefresh( BOOL bAutomatic ) +/*N*/ { +/*N*/ BOOL bDone = FALSE; +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ +/*N*/ ScDetOpList* pList = pDoc->GetDetOpList(); +/*N*/ if ( pList && pList->Count() ) +/*N*/ { +/*N*/ rDocShell.MakeDrawLayer(); +/*N*/ ScDrawLayer* pModel = pDoc->GetDrawLayer(); +/*N*/ +/*N*/ // Loeschen auf allen Tabellen +/*N*/ +/*N*/ USHORT nTabCount = pDoc->GetTableCount(); +/*N*/ for (USHORT nTab=0; nTab<nTabCount; nTab++) +/*N*/ ScDetectiveFunc( pDoc,nTab ).DeleteAll( SC_DET_ARROWS ); // don't remove circles +/*N*/ +/*N*/ // Wiederholen +/*N*/ +/*N*/ USHORT nCount = pList->Count(); +/*N*/ for (USHORT i=0; i<nCount; i++) +/*N*/ { +/*N*/ ScDetOpData* pData = (*pList)[i]; +/*N*/ if (pData) +/*N*/ { +/*N*/ ScAddress aPos = pData->GetPos(); +/*N*/ ScDetectiveFunc aFunc( pDoc, aPos.Tab() ); +/*N*/ USHORT nCol = aPos.Col(); +/*N*/ USHORT nRow = aPos.Row(); +/*N*/ switch (pData->GetOperation()) +/*N*/ { +/*N*/ case SCDETOP_ADDSUCC: +/*N*/ aFunc.ShowSucc( nCol, nRow ); +/*N*/ break; +/*N*/ case SCDETOP_DELSUCC: +/*N*/ aFunc.DeleteSucc( nCol, nRow ); +/*N*/ break; +/*N*/ case SCDETOP_ADDPRED: +/*N*/ aFunc.ShowPred( nCol, nRow ); +/*N*/ break; +/*N*/ case SCDETOP_DELPRED: +/*N*/ aFunc.DeletePred( nCol, nRow ); +/*N*/ break; +/*N*/ case SCDETOP_ADDERROR: +/*N*/ aFunc.ShowError( nCol, nRow ); +/*N*/ break; +/*N*/ default: +/*N*/ DBG_ERROR("falsche Op bei DetectiveRefresh"); +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ rDocShell.SetDrawModified(); +/*N*/ bDone = TRUE; +/*N*/ } +/*N*/ return bDone; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::DeleteContents( const ScMarkData& rMark, USHORT nFlags, +/*N*/ BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ if ( !rMark.IsMarked() && !rMark.IsMultiMarked() ) +/*N*/ { +/*N*/ DBG_ERROR("ScDocFunc::DeleteContents ohne Markierung"); +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ +/*N*/ bRecord = FALSE; +/*N*/ +/*N*/ ScEditableTester aTester( pDoc, rMark ); +/*N*/ if (!aTester.IsEditable()) +/*N*/ { +/*N*/ if (!bApi) +/*N*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ ScRange aMarkRange; +/*N*/ BOOL bSimple = FALSE; +/*N*/ +/*N*/ ScMarkData aMultiMark = rMark; +/*N*/ aMultiMark.SetMarking(FALSE); // fuer MarkToMulti +/*N*/ +/*N*/ ScDocument* pUndoDoc = NULL; +/*N*/ BOOL bMulti = !bSimple && aMultiMark.IsMultiMarked(); +/*N*/ if (!bSimple) +/*N*/ { +/*N*/ aMultiMark.MarkToMulti(); +/*N*/ aMultiMark.GetMultiMarkArea( aMarkRange ); +/*N*/ } +/*N*/ ScRange aExtendedRange(aMarkRange); +/*N*/ if (!bSimple) +/*N*/ { +/*N*/ if ( pDoc->ExtendMerge( aExtendedRange, TRUE ) ) +/*N*/ bMulti = FALSE; +/*N*/ } +/*N*/ +/*N*/ // keine Objekte auf geschuetzten Tabellen +/*N*/ BOOL bObjects = FALSE; +/*N*/ if ( nFlags & IDF_OBJECTS ) +/*N*/ { +/*N*/ bObjects = TRUE; +/*N*/ USHORT nTabCount = pDoc->GetTableCount(); +/*N*/ for (USHORT nTab=0; nTab<nTabCount; nTab++) +/*N*/ if (aMultiMark.GetTableSelect(nTab) && pDoc->IsTabProtected(nTab)) +/*N*/ bObjects = FALSE; +/*N*/ } +/*N*/ +/*N*/ USHORT nExtFlags = 0; // Linien interessieren nur, wenn Attribute +/*N*/ if ( nFlags & IDF_ATTRIB ) // geloescht werden +/*N*/ if (pDoc->HasAttrib( aMarkRange, HASATTR_PAINTEXT )) +/*N*/ nExtFlags |= SC_PF_LINES; +/*N*/ +/*N*/ +/*N*/ if (bObjects) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if (bRecord) +/*N*/ } +/*N*/ +/*N*/ +/*N*/ //! HideAllCursors(); // falls Zusammenfassung aufgehoben wird +/*N*/ if (bSimple) +/*N*/ pDoc->DeleteArea( aMarkRange.aStart.Col(), aMarkRange.aStart.Row(), +/*N*/ aMarkRange.aEnd.Col(), aMarkRange.aEnd.Row(), +/*N*/ aMultiMark, nFlags ); +/*N*/ else +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 pDoc->DeleteSelection( nFlags, aMultiMark ); +/*N*/ } +/*N*/ +/*N*/ if (!AdjustRowHeight( aExtendedRange )) +/*N*/ rDocShell.PostPaint( aExtendedRange, PAINT_GRID, nExtFlags ); +/*N*/ else if (nExtFlags & SC_PF_LINES) +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 lcl_PaintAbove( rDocShell, aExtendedRange ); // fuer Linien ueber dem Bereich +/*N*/ +/*N*/ // rDocShell.UpdateOle(GetViewData()); //! an der View? +/*N*/ aModificator.SetDocumentModified(); +/*N*/ //! CellContentChanged(); +/*N*/ //! ShowAllCursors(); +/*N*/ +/*N*/ #if 0 +/*N*/ //! muss an der View bleiben !!!! +/*N*/ if ( nFlags & IDF_ATTRIB ) +/*N*/ { +/*N*/ if ( nFlags & IDF_CONTENTS ) +/*N*/ ForgetFormatArea(); +/*N*/ else +/*N*/ StartFormatArea(); // Attribute loeschen ist auch Attributierung +/*N*/ } +/*N*/ #endif +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::SetNormalString( const ScAddress& rPos, const String& rText, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ +/*N*/ ScEditableTester aTester( pDoc, rPos.Tab(), rPos.Col(),rPos.Row(), rPos.Col(),rPos.Row() ); +/*N*/ if (!aTester.IsEditable()) +/*N*/ { +/*N*/ if (!bApi) +/*N*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ ScBaseCell* pDocCell = pDoc->GetCell( rPos ); +/*N*/ BOOL bEditDeleted = (pDocCell && pDocCell->GetCellType() == CELLTYPE_EDIT); +/*N*/ +/*N*/ pDoc->SetString( rPos.Col(), rPos.Row(), rPos.Tab(), rText ); +/*N*/ +/*N*/ if ( bEditDeleted || pDoc->HasAttrib( ScRange(rPos), HASATTR_NEEDHEIGHT ) ) +/*N*/ AdjustRowHeight( ScRange(rPos) ); +/*N*/ +/*N*/ rDocShell.PostPaintCell( rPos.Col(), rPos.Row(), rPos.Tab() ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ // #107160# notify input handler here the same way as in PutCell +/*N*/ if (bApi) +/*?*/ NotifyInputHandler( rPos ); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +/*N*/ BOOL ScDocFunc::PutCell( const ScAddress& rPos, ScBaseCell* pNewCell, BOOL bApi ) +/*N*/ { +/*N*/ +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ BOOL bXMLLoading(pDoc->IsImportingXML()); +/*N*/ +/*N*/ // #i925#; it is not neccessary to test whether the cell is editable on loading a XML document +/*N*/ if (!bXMLLoading) +/*N*/ { +/*N*/ ScEditableTester aTester( pDoc, rPos.Tab(), rPos.Col(),rPos.Row(), rPos.Col(),rPos.Row() ); +/*N*/ if (!aTester.IsEditable()) +/*N*/ { +/*N*/ if (!bApi) +/*?*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*N*/ pNewCell->Delete(); +/*N*/ return FALSE; +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ BOOL bEditCell(FALSE); +/*N*/ BOOL bEditDeleted(FALSE); +/*N*/ BOOL bHeight = FALSE; +/*N*/ pDoc->PutCell( rPos, pNewCell ); +/*N*/ +/*N*/ // wegen ChangeTracking darf UndoAction erst nach PutCell angelegt werden +/*N*/ +/*N*/ if (bHeight) +/*N*/ AdjustRowHeight( ScRange(rPos) ); +/*N*/ +/*N*/ if (!bXMLLoading) +/*N*/ rDocShell.PostPaintCell( rPos.Col(), rPos.Row(), rPos.Tab() ); +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ // #i925#; it is not neccessary to notify on loading a XML document +/*N*/ // #103934#; notify editline and cell in edit mode +/*N*/ if (bApi && !bXMLLoading) +/*N*/ NotifyInputHandler( rPos ); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +/*N*/ void ScDocFunc::NotifyInputHandler( const ScAddress& rPos ) +/*N*/ { +/*N*/ } + +/*N*/ struct ScMyRememberItem +/*N*/ { +/*N*/ USHORT nIndex; +/*N*/ SfxItemSet aItemSet; +/*N*/ +/*N*/ ScMyRememberItem(const SfxItemSet& rItemSet, USHORT nTempIndex) : +/*N*/ aItemSet(rItemSet), nIndex(nTempIndex) {} +/*N*/ }; + +/*N*/ typedef ::std::list<ScMyRememberItem*> ScMyRememberItemList; + +/*N*/ BOOL ScDocFunc::PutData( const ScAddress& rPos, EditEngine& rEngine, BOOL bInterpret, BOOL bApi ) +/*N*/ { +/*N*/ // PutData ruft PutCell oder SetNormalString +/*N*/ +/*N*/ BOOL bRet = FALSE; +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScEditAttrTester aTester( &rEngine ); +/*N*/ BOOL bEditCell = aTester.NeedsObject(); +/*N*/ if ( bEditCell ) +/*N*/ { +/*N*/ sal_Bool bUpdateMode(rEngine.GetUpdateMode()); +/*N*/ if (bUpdateMode) +/*N*/ rEngine.SetUpdateMode(sal_False); +/*N*/ +/*N*/ ScMyRememberItemList aRememberItems; +/*N*/ ScMyRememberItem* pRememberItem = NULL; +/*N*/ +/*N*/ // All paragraph attributes must be removed before calling CreateTextObject, +/*N*/ // not only alignment, so the object doesn't contain the cell attributes as +/*N*/ // paragraph attributes. Before remove the attributes store they in a list to +/*N*/ // set they back to the EditEngine. +/*N*/ USHORT nCount = rEngine.GetParagraphCount(); +/*N*/ for (USHORT i=0; i<nCount; i++) +/*N*/ { +/*N*/ const SfxItemSet& rOld = rEngine.GetParaAttribs( i ); +/*N*/ if ( rOld.Count() ) +/*N*/ { +/*N*/ pRememberItem = new ScMyRememberItem(rEngine.GetParaAttribs(i), i); +/*N*/ aRememberItems.push_back(pRememberItem); +/*N*/ rEngine.SetParaAttribs( i, SfxItemSet( *rOld.GetPool(), rOld.GetRanges() ) ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ EditTextObject* pNewData = rEngine.CreateTextObject(); +/*N*/ bRet = PutCell( rPos, +/*N*/ new ScEditCell( pNewData, pDoc, rEngine.GetEditTextObjectPool() ), +/*N*/ bApi ); +/*N*/ delete pNewData; +/*N*/ +/*N*/ // Set the paragraph attributes back to the EditEngine. +/*N*/ if (!aRememberItems.empty()) +/*N*/ { +/*N*/ ScMyRememberItem* pRememberItem = NULL; +/*N*/ ScMyRememberItemList::iterator aItr = aRememberItems.begin(); +/*N*/ while (aItr != aRememberItems.end()) +/*N*/ { +/*N*/ pRememberItem = *aItr; +/*N*/ rEngine.SetParaAttribs(pRememberItem->nIndex, pRememberItem->aItemSet); +/*N*/ delete pRememberItem; +/*N*/ aItr = aRememberItems.erase(aItr); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ if (bUpdateMode) +/*N*/ rEngine.SetUpdateMode(sal_True); +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ String aText = rEngine.GetText(); +/*N*/ if ( bInterpret || !aText.Len() ) +/*N*/ bRet = SetNormalString( rPos, aText, bApi ); +/*N*/ else +/*N*/ bRet = PutCell( rPos, new ScStringCell( aText ), bApi ); +/*N*/ } +/*N*/ +/*N*/ if ( bRet && aTester.NeedsCellAttr() ) +/*N*/ { +/*N*/ const SfxItemSet& rEditAttr = aTester.GetAttribs(); +/*N*/ ScPatternAttr aPattern( pDoc->GetPool() ); +/*N*/ aPattern.GetFromEditItemSet( &rEditAttr ); +/*N*/ aPattern.DeleteUnchanged( pDoc->GetPattern( rPos.Col(), rPos.Row(), rPos.Tab() ) ); +/*N*/ aPattern.GetItemSet().ClearItem( ATTR_HOR_JUSTIFY ); // wasn't removed above if no edit object +/*N*/ if ( aPattern.GetItemSet().Count() > 0 ) +/*N*/ { +/*?*/ ScMarkData aMark; +/*?*/ aMark.SelectTable( rPos.Tab(), TRUE ); +/*?*/ aMark.SetMarkArea( ScRange( rPos ) ); +/*?*/ ApplyAttributes( aMark, aPattern, TRUE, bApi ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ return bRet; +/*N*/ } + + +/*N*/ ScTokenArray* lcl_ScDocFunc_CreateTokenArrayXML( const String& rText ) +/*N*/ { +/*N*/ ScTokenArray* pCode = new ScTokenArray; +/*N*/ pCode->AddString( rText ); +/*N*/ return pCode; +/*N*/ } + + +/*N*/ ScBaseCell* ScDocFunc::InterpretEnglishString( const ScAddress& rPos, const String& rText ) +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScBaseCell* pNewCell = NULL; +/*N*/ +/*N*/ if ( rText.Len() > 1 && rText.GetChar(0) == '=' ) +/*N*/ { +/*N*/ ScTokenArray* pCode; +/*N*/ if ( pDoc->IsImportingXML() ) +/*N*/ { // temporary formula string as string tokens +/*N*/ pCode = lcl_ScDocFunc_CreateTokenArrayXML( rText ); +/*N*/ pDoc->IncXMLImportedFormulaCount( rText.Len() ); +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ ScCompiler aComp( pDoc, rPos ); +/*N*/ aComp.SetCompileEnglish( TRUE ); +/*N*/ pCode = aComp.CompileString( rText ); +/*N*/ } +/*N*/ pNewCell = new ScFormulaCell( pDoc, rPos, pCode, 0 ); +/*N*/ delete pCode; // Zell-ctor hat das TokenArray kopiert +/*N*/ } +/*N*/ else if ( rText.Len() > 1 && rText.GetChar(0) == '\'' ) +/*N*/ { +/*N*/ // for bEnglish, "'" at the beginning is always interpreted as text +/*N*/ // marker and stripped +/*?*/ pNewCell = ScBaseCell::CreateTextCell( rText.Copy( 1 ), pDoc ); +/*N*/ } +/*N*/ else // (nur) auf englisches Zahlformat testen +/*N*/ { +/*?*/ SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); +/*?*/ sal_uInt32 nEnglish = pFormatter->GetStandardIndex(LANGUAGE_ENGLISH_US); +/*?*/ double fVal; +/*?*/ if ( pFormatter->IsNumberFormat( rText, nEnglish, fVal ) ) +/*?*/ pNewCell = new ScValueCell( fVal ); +/*?*/ else if ( rText.Len() ) +/*?*/ pNewCell = ScBaseCell::CreateTextCell( rText, pDoc ); +/*?*/ +/*?*/ // das (englische) Zahlformat wird nicht gesetzt +/*?*/ //! passendes lokales Format suchen und setzen??? +/*N*/ } +/*N*/ +/*N*/ return pNewCell; +/*N*/ } + + +/*N*/ BOOL ScDocFunc::SetCellText( const ScAddress& rPos, const String& rText, +/*N*/ BOOL bInterpret, BOOL bEnglish, BOOL bApi ) +/*N*/ { +/*N*/ // SetCellText ruft PutCell oder SetNormalString +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScBaseCell* pNewCell = NULL; +/*N*/ if ( bInterpret ) +/*N*/ { +/*N*/ if ( bEnglish ) +/*N*/ { +/*N*/ // code moved to own method InterpretEnglishString because it is also used in +/*N*/ // ScCellRangeObj::setFormulaArray +/*N*/ +/*N*/ pNewCell = InterpretEnglishString( rPos, rText ); +/*N*/ } +/*N*/ // sonst Null behalten -> SetString mit lokalen Formeln/Zahlformat +/*N*/ } +/*N*/ else if ( rText.Len() ) +/*N*/ pNewCell = ScBaseCell::CreateTextCell( rText, pDoc ); // immer Text +/*N*/ +/*N*/ if (pNewCell) +/*N*/ return PutCell( rPos, pNewCell, bApi ); +/*N*/ else +/*?*/ return SetNormalString( rPos, rText, bApi ); +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::SetNoteText( const ScAddress& rPos, const String& rText, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScEditableTester aTester( pDoc, rPos.Tab(), rPos.Col(),rPos.Row(), rPos.Col(),rPos.Row() ); +/*N*/ if (!aTester.IsEditable()) +/*N*/ { +/*?*/ if (!bApi) +/*?*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*?*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ String aNewText = rText; +/*N*/ aNewText.ConvertLineEnd(); //! ist das noetig ??? +/*N*/ +/*N*/ ScPostIt aNote; +/*N*/ pDoc->GetNote( rPos.Col(), rPos.Row(), rPos.Tab(), aNote ); +/*N*/ aNote.AutoSetText( aNewText ); // setzt auch Author und Date +/*N*/ pDoc->SetNote( rPos.Col(), rPos.Row(), rPos.Tab(), aNote ); +/*N*/ +/*N*/ if ( aNote.IsShown() ) +/*N*/ { +/*N*/ // Zeichenobjekt updaten +/*N*/ //! bei gelocktem Paint auch erst spaeter !!! +/*N*/ +/*N*/ ScDetectiveFunc aDetFunc( pDoc, rPos.Tab() ); +/*N*/ aDetFunc.HideComment( rPos.Col(), rPos.Row() ); +/*N*/ aDetFunc.ShowComment( rPos.Col(), rPos.Row(), FALSE ); // FALSE: nur wenn gefunden +/*N*/ } +/*N*/ +/*N*/ //! Undo !!! +/*N*/ +/*N*/ rDocShell.PostPaintCell( rPos.Col(), rPos.Row(), rPos.Tab() ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::ApplyAttributes( const ScMarkData& rMark, const ScPatternAttr& rPattern, +/*N*/ BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ bRecord = FALSE; +/*N*/ +/*N*/ // nur wegen Matrix nicht editierbar? Attribute trotzdem ok +/*N*/ BOOL bOnlyNotBecauseOfMatrix; +/*N*/ if ( !pDoc->IsSelectionEditable( rMark, &bOnlyNotBecauseOfMatrix ) +/*N*/ && !bOnlyNotBecauseOfMatrix ) +/*N*/ { +/*?*/ if (!bApi) +/*?*/ rDocShell.ErrorMessage(STR_PROTECTIONERR); +/*?*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ //! Umrandung +/*N*/ +/*N*/ ScRange aMultiRange; +/*N*/ BOOL bMulti = rMark.IsMultiMarked(); +/*N*/ if ( bMulti ) +/*N*/ rMark.GetMultiMarkArea( aMultiRange ); +/*N*/ else +/*N*/ rMark.GetMarkArea( aMultiRange ); +/*N*/ +/*N*/ +/*N*/ // While loading XML it is not neccessary to ask HasAttrib. It needs too much time. +/*N*/ BOOL bPaintExt = pDoc->IsImportingXML() || pDoc->HasAttrib( aMultiRange, HASATTR_PAINTEXT ); +/*N*/ pDoc->ApplySelectionPattern( rPattern, rMark ); +/*N*/ +/*N*/ if (!bPaintExt) +/*N*/ bPaintExt = pDoc->HasAttrib( aMultiRange, HASATTR_PAINTEXT ); +/*N*/ USHORT nExtFlags = bPaintExt ? SC_PF_LINES : 0; +/*N*/ if (!AdjustRowHeight( aMultiRange )) +/*N*/ rDocShell.PostPaint( aMultiRange, PAINT_GRID, nExtFlags ); +/*N*/ else if (nExtFlags & SC_PF_LINES) +/*N*/ lcl_PaintAbove( rDocShell, aMultiRange ); // fuer Linien ueber dem Bereich +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + + +/*N*/ BOOL ScDocFunc::ApplyStyle( const ScMarkData& rMark, const String& rStyleName, +/*N*/ BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ bRecord = FALSE; +/*N*/ +/*N*/ // nur wegen Matrix nicht editierbar? Attribute trotzdem ok +/*N*/ BOOL bOnlyNotBecauseOfMatrix; +/*N*/ if ( !pDoc->IsSelectionEditable( rMark, &bOnlyNotBecauseOfMatrix ) +/*N*/ && !bOnlyNotBecauseOfMatrix ) +/*N*/ { +/*?*/ if (!bApi) +/*?*/ rDocShell.ErrorMessage(STR_PROTECTIONERR); +/*?*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ ScStyleSheet* pStyleSheet = (ScStyleSheet*) pDoc->GetStyleSheetPool()->Find( +/*N*/ rStyleName, SFX_STYLE_FAMILY_PARA ); +/*N*/ if (!pStyleSheet) +/*N*/ return FALSE; +/*N*/ +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScRange aMultiRange; +/*N*/ BOOL bMulti = rMark.IsMultiMarked(); +/*N*/ if ( bMulti ) +/*N*/ rMark.GetMultiMarkArea( aMultiRange ); +/*N*/ else +/*N*/ rMark.GetMarkArea( aMultiRange ); +/*N*/ +/*N*/ +/*N*/ // BOOL bPaintExt = pDoc->HasAttrib( aMultiRange, HASATTR_PAINTEXT ); +/*N*/ // pDoc->ApplySelectionPattern( rPattern, rMark ); +/*N*/ +/*N*/ pDoc->ApplySelectionStyle( (ScStyleSheet&)*pStyleSheet, rMark ); +/*N*/ +/*N*/ // if (!bPaintExt) +/*N*/ // bPaintExt = pDoc->HasAttrib( aMultiRange, HASATTR_PAINTEXT ); +/*N*/ // USHORT nExtFlags = bPaintExt ? SC_PF_LINES : 0; +/*N*/ USHORT nExtFlags = 0; +/*N*/ if (!AdjustRowHeight( aMultiRange )) +/*N*/ rDocShell.PostPaint( aMultiRange, PAINT_GRID, nExtFlags ); +/*N*/ else if (nExtFlags & SC_PF_LINES) +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 lcl_PaintAbove( rDocShell, aMultiRange ); // fuer Linien ueber dem Bereich +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +//------------------------------------------------------------------------ + +/*M*/ BOOL ScDocFunc::InsertCells( const ScRange& rRange, InsCellCmd eCmd, +/*N*/ BOOL bRecord, BOOL bApi, BOOL bPartOfPaste ) +/*M*/ { +/*M*/ DBG_BF_ASSERT(0, "STRIP"); return FALSE;//STRIP001 ScDocShellModificator aModificator( rDocShell ); +/*M*/ } + +/*N*/ BOOL ScDocFunc::DeleteCells( const ScRange& rRange, DelCellCmd eCmd, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocShellModificator aModificator( rDocShell ); +/*N*/ return TRUE; +/*N*/ } + +/*N*/ BOOL ScDocFunc::MoveBlock( const ScRange& rSource, const ScAddress& rDestPos, +/*N*/ BOOL bCut, BOOL bRecord, BOOL bPaint, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocShellModificator aModificator( rDocShell ); +/*N*/ return TRUE; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::InsertTable( USHORT nTab, const String& rName, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ BOOL bSuccess = FALSE; +/*N*/ WaitObject aWait( rDocShell.GetDialogParent() ); +/*N*/ +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ bRecord = FALSE; +/*N*/ +/*N*/ USHORT nTabCount = pDoc->GetTableCount(); +/*N*/ BOOL bAppend = ( nTab >= nTabCount ); +/*N*/ if ( bAppend ) +/*N*/ nTab = nTabCount; // wichtig fuer Undo +/*N*/ +/*N*/ if (pDoc->InsertTab( nTab, rName )) +/*N*/ { +/*N*/ // Views updaten: +/*N*/ rDocShell.Broadcast( ScTablesHint( SC_TAB_INSERTED, nTab ) ); +/*N*/ +/*N*/ rDocShell.PostPaintExtras(); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) ); +/*N*/ bSuccess = TRUE; +/*N*/ } +/*N*/ else if (!bApi) +/*?*/ rDocShell.ErrorMessage(STR_TABINSERT_ERROR); +/*N*/ +/*N*/ return bSuccess; +/*N*/ } + +/*N*/ BOOL ScDocFunc::DeleteTable( USHORT nTab, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); return FALSE; //STRIP001 WaitObject aWait( rDocShell.GetDialogParent() ); +/*N*/ } + +/*N*/ BOOL ScDocFunc::SetTableVisible( USHORT nTab, BOOL bVisible, BOOL bApi ) +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ if ( pDoc->IsVisible( nTab ) == bVisible ) +/*N*/ return TRUE; // nichts zu tun - ok +/*N*/ +/*N*/ if ( !pDoc->IsDocEditable() ) +/*N*/ { +/*N*/ if (!bApi) +/*N*/ rDocShell.ErrorMessage(STR_PROTECTIONERR); +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ if ( !bVisible ) +/*N*/ { +/*N*/ // nicht alle Tabellen ausblenden +/*N*/ +/*N*/ USHORT nVisCount = 0; +/*N*/ USHORT nCount = pDoc->GetTableCount(); +/*N*/ for (USHORT i=0; i<nCount; i++) +/*N*/ if (pDoc->IsVisible(i)) +/*N*/ ++nVisCount; +/*N*/ +/*N*/ if (nVisCount <= 1) +/*N*/ { +/*N*/ if (!bApi) +/*N*/ rDocShell.ErrorMessage(STR_PROTECTIONERR); //! eigene Meldung? +/*N*/ return FALSE; +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ pDoc->SetVisible( nTab, bVisible ); +/*N*/ +/*N*/ // Views updaten: +/*N*/ if (!bVisible) +/*N*/ rDocShell.Broadcast( ScTablesHint( SC_TAB_HIDDEN, nTab ) ); +/*N*/ +/*N*/ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) ); +/*N*/ rDocShell.PostPaint(0,0,0,MAXCOL,MAXROW,MAXTAB, PAINT_EXTRAS); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +/*N*/ BOOL ScDocFunc::RenameTable( USHORT nTab, const String& rName, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ bRecord = FALSE; +/*N*/ if ( !pDoc->IsDocEditable() ) +/*N*/ { +/*?*/ if (!bApi) +/*?*/ rDocShell.ErrorMessage(STR_PROTECTIONERR); +/*?*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ BOOL bSuccess = FALSE; +/*N*/ String sOldName; +/*N*/ pDoc->GetName(nTab, sOldName); +/*N*/ if (pDoc->RenameTab( nTab, rName )) +/*N*/ { +/*N*/ rDocShell.PostPaintExtras(); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) ); +/*N*/ +/*N*/ bSuccess = TRUE; +/*N*/ } +/*N*/ return bSuccess; +/*N*/ } + +//------------------------------------------------------------------------ + +//! SetWidthOrHeight - noch doppelt zu ViewFunc !!!!!! +//! Probleme: +//! - Optimale Hoehe fuer Edit-Zellen ist unterschiedlich zwischen Drucker und Bildschirm +//! - Optimale Breite braucht Selektion, um evtl. nur selektierte Zellen zu beruecksichtigen + +/*N*/ USHORT lcl_GetOptimalColWidth( ScDocShell& rDocShell, USHORT nCol, USHORT nTab, BOOL bFormula ) +/*N*/ { +/*N*/ USHORT nTwips = 0; +/*N*/ +/*N*/ ScSizeDeviceProvider aProv(&rDocShell); +/*N*/ OutputDevice* pDev = aProv.GetDevice(); // has pixel MapMode +/*N*/ double nPPTX = aProv.GetPPTX(); +/*N*/ double nPPTY = aProv.GetPPTY(); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ Fraction aOne(1,1); +/*N*/ nTwips = pDoc->GetOptimalColWidth( nCol, nTab, pDev, nPPTX, nPPTY, aOne, aOne, +/*N*/ bFormula, NULL ); +/*N*/ +/*N*/ return nTwips; +/*N*/ } + +/*N*/ BOOL ScDocFunc::SetWidthOrHeight( BOOL bWidth, USHORT nRangeCnt, USHORT* pRanges, USHORT nTab, +/*N*/ ScSizeMode eMode, USHORT nSizeTwips, +/*N*/ BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ if (!nRangeCnt) +/*N*/ return TRUE; +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ bRecord = FALSE; +/*N*/ +/*N*/ if ( !rDocShell.IsEditable() ) +/*N*/ { +/*?*/ if (!bApi) +/*?*/ rDocShell.ErrorMessage(STR_PROTECTIONERR); //! eigene Meldung? +/*?*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ BOOL bSuccess = FALSE; +/*N*/ USHORT nStart = pRanges[0]; +/*N*/ USHORT nEnd = pRanges[2*nRangeCnt-1]; +/*N*/ +/*N*/ BOOL bFormula = FALSE; +/*N*/ if ( eMode == SC_SIZE_OPTIMAL ) +/*N*/ { +/*N*/ //! Option "Formeln anzeigen" - woher nehmen? +/*N*/ } +/*N*/ +/*N*/ ScDocument* pUndoDoc = NULL; +/*N*/ ScOutlineTable* pUndoTab = NULL; +/*N*/ USHORT* pUndoRanges = NULL; +/*N*/ +/*N*/ BOOL bShow = nSizeTwips > 0 || eMode != SC_SIZE_DIRECT; +/*N*/ BOOL bOutline = FALSE; +/*N*/ +/*N*/ pDoc->IncSizeRecalcLevel( nTab ); // nicht fuer jede Spalte einzeln +/*N*/ for (USHORT nRangeNo=0; nRangeNo<nRangeCnt; nRangeNo++) +/*N*/ { +/*N*/ USHORT nStartNo = *(pRanges++); +/*N*/ USHORT nEndNo = *(pRanges++); +/*N*/ +/*N*/ if ( !bWidth ) // Hoehen immer blockweise +/*N*/ { +/*N*/ if ( eMode==SC_SIZE_OPTIMAL || eMode==SC_SIZE_VISOPT ) +/*N*/ { +/*?*/ BOOL bAll = ( eMode==SC_SIZE_OPTIMAL ); +/*?*/ if (!bAll) +/*?*/ { +/*?*/ // fuer alle eingeblendeten CR_MANUALSIZE loeschen, +/*?*/ // dann SetOptimalHeight mit bShrink = FALSE +/*?*/ for (USHORT nRow=nStartNo; nRow<=nEndNo; nRow++) +/*?*/ { +/*?*/ BYTE nOld = pDoc->GetRowFlags(nRow,nTab); +/*?*/ if ( (nOld & CR_HIDDEN) == 0 && ( nOld & CR_MANUALSIZE ) ) +/*?*/ pDoc->SetRowFlags( nRow, nTab, nOld & ~CR_MANUALSIZE ); +/*?*/ } +/*?*/ } +/*?*/ +/*?*/ ScSizeDeviceProvider aProv( &rDocShell ); +/*?*/ Fraction aOne(1,1); +/*?*/ pDoc->SetOptimalHeight( nStartNo, nEndNo, nTab, 0, aProv.GetDevice(), +/*?*/ aProv.GetPPTX(), aProv.GetPPTY(), aOne, aOne, bAll ); +/*?*/ +/*?*/ if (bAll) +/*?*/ pDoc->ShowRows( nStartNo, nEndNo, nTab, TRUE ); +/*?*/ +/*?*/ // Manual-Flag wird bei bAll=TRUE schon in SetOptimalHeight gesetzt +/*?*/ // (an bei Extra-Height, sonst aus). +/*N*/ } +/*N*/ else if ( eMode==SC_SIZE_DIRECT || eMode==SC_SIZE_ORIGINAL ) +/*N*/ { +/*N*/ if (nSizeTwips) +/*N*/ { +/*N*/ pDoc->SetRowHeightRange( nStartNo, nEndNo, nTab, nSizeTwips ); +/*N*/ pDoc->SetManualHeight( nStartNo, nEndNo, nTab, TRUE ); // height was set manually +/*N*/ } +/*N*/ if ( eMode != SC_SIZE_ORIGINAL ) +/*N*/ pDoc->ShowRows( nStartNo, nEndNo, nTab, nSizeTwips != 0 ); +/*N*/ } +/*N*/ else if ( eMode==SC_SIZE_SHOW ) +/*N*/ { +/*?*/ pDoc->ShowRows( nStartNo, nEndNo, nTab, TRUE ); +/*N*/ } +/*N*/ } +/*N*/ else // Spaltenbreiten +/*N*/ { +/*N*/ for (USHORT nCol=nStartNo; nCol<=nEndNo; nCol++) +/*N*/ { +/*N*/ if ( eMode != SC_SIZE_VISOPT || +/*N*/ (pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN) == 0 ) +/*N*/ { +/*N*/ USHORT nThisSize = nSizeTwips; +/*N*/ +/*N*/ if ( eMode==SC_SIZE_OPTIMAL || eMode==SC_SIZE_VISOPT ) +/*N*/ nThisSize = nSizeTwips + +/*N*/ lcl_GetOptimalColWidth( rDocShell, nCol, nTab, bFormula ); +/*N*/ if ( nThisSize ) +/*N*/ pDoc->SetColWidth( nCol, nTab, nThisSize ); +/*N*/ +/*N*/ if ( eMode != SC_SIZE_ORIGINAL ) +/*N*/ pDoc->ShowCol( nCol, nTab, bShow ); +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ // adjust outlines +/*N*/ +/*N*/ if ( eMode != SC_SIZE_ORIGINAL ) +/*N*/ { +/*N*/ if (bWidth) +/*N*/ bOutline = bOutline || pDoc->UpdateOutlineCol( nStartNo, nEndNo, nTab, bShow ); +/*N*/ else +/*N*/ bOutline = bOutline || pDoc->UpdateOutlineRow( nStartNo, nEndNo, nTab, bShow ); +/*N*/ } +/*N*/ } +/*N*/ pDoc->DecSizeRecalcLevel( nTab ); // nicht fuer jede Spalte einzeln +/*N*/ +/*N*/ if (!bOutline) +/*N*/ DELETEZ(pUndoTab); +/*N*/ +/*N*/ pDoc->UpdatePageBreaks( nTab ); +/*N*/ +/*N*/ rDocShell.PostPaint(0,0,nTab,MAXCOL,MAXROW,nTab,PAINT_ALL); +/*N*/ +/*N*/ return bSuccess; +/*N*/ } + + +/*N*/ BOOL ScDocFunc::InsertPageBreak( BOOL bColumn, const ScAddress& rPos, +/*N*/ BOOL bRecord, BOOL bSetModified, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocShellModificator aModificator( rDocShell ); +/*N*/ return TRUE; +/*N*/ } + +/*N*/ BOOL ScDocFunc::RemovePageBreak( BOOL bColumn, const ScAddress& rPos, +/*N*/ BOOL bRecord, BOOL bSetModified, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ bRecord = FALSE; +/*N*/ USHORT nTab = rPos.Tab(); +/*N*/ +/*N*/ USHORT nPos = bColumn ? rPos.Col() : rPos.Row(); +/*N*/ BYTE nFlags = bColumn ? pDoc->GetColFlags( nPos, nTab ) : pDoc->GetRowFlags( nPos, nTab ); +/*N*/ if ((nFlags & CR_MANUALBREAK)==0) +/*N*/ return FALSE; // kein Umbruch gesetzt +/*N*/ +/*?*/ nFlags &= ~CR_MANUALBREAK; +/*?*/ if (bColumn) +/*?*/ {DBG_BF_ASSERT(0, "STRIP"); }//STRIP001 pDoc->SetColFlags( nPos, nTab, nFlags ); +/*?*/ else +/*?*/ pDoc->SetRowFlags( nPos, nTab, nFlags ); +/*?*/ pDoc->UpdatePageBreaks( nTab ); +/*?*/ +/*?*/ if (bColumn) +/*?*/ { +/*?*/ rDocShell.PostPaint( nPos-1, 0, nTab, MAXCOL, MAXROW, nTab, PAINT_GRID ); +/*?*/ } +/*?*/ else +/*?*/ { +/*?*/ rDocShell.PostPaint( 0, nPos-1, nTab, MAXCOL, MAXROW, nTab, PAINT_GRID ); +/*?*/ } +/*?*/ +/*?*/ if (bSetModified) +/*?*/ aModificator.SetDocumentModified(); +/*?*/ +/*?*/ return TRUE; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL lcl_ValidPassword( ScDocument* pDoc, USHORT nTab, +/*N*/ const String& rPassword, +/*N*/ uno::Sequence<sal_Int8>* pReturnOld = NULL ) +/*N*/ { +/*N*/ uno::Sequence<sal_Int8> aOldPassword; +/*N*/ if ( nTab == TABLEID_DOC ) +/*N*/ { +/*N*/ if (pDoc->IsDocProtected()) +/*N*/ aOldPassword = pDoc->GetDocPassword(); +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ if (pDoc->IsTabProtected(nTab)) +/*N*/ aOldPassword = pDoc->GetTabPassword(nTab); +/*N*/ } +/*N*/ +/*N*/ if (pReturnOld) +/*N*/ *pReturnOld = aOldPassword; +/*N*/ +/*N*/ return ((aOldPassword.getLength() == 0) || SvPasswordHelper::CompareHashPassword(aOldPassword, rPassword)); +/*N*/ } + +/*N*/ BOOL ScDocFunc::Protect( USHORT nTab, const String& rPassword, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ BOOL bOk = lcl_ValidPassword( pDoc, nTab, rPassword); +/*N*/ if ( bOk ) +/*N*/ { +/*N*/ uno::Sequence<sal_Int8> aPass; +/*N*/ if (rPassword.Len()) +/*N*/ SvPasswordHelper::GetHashPassword(aPass, rPassword); +/*N*/ +/*N*/ if ( nTab == TABLEID_DOC ) +/*N*/ pDoc->SetDocProtection( TRUE, aPass ); +/*N*/ else +/*N*/ pDoc->SetTabProtection( nTab, TRUE, aPass ); +/*N*/ +/*N*/ rDocShell.PostPaintGridAll(); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ } +/*N*/ else if (!bApi) +/*N*/ { +/*N*/ // different password was set before +/*N*/ +/*N*/ //! rDocShell.ErrorMessage(...); +/*N*/ +/*N*/ InfoBox aBox( rDocShell.GetDialogParent(), String( ScResId( SCSTR_WRONGPASSWORD ) ) ); +/*N*/ aBox.Execute(); +/*N*/ } +/*N*/ +/*N*/ return bOk; +/*N*/ } + +/*N*/ BOOL ScDocFunc::Unprotect( USHORT nTab, const String& rPassword, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ uno::Sequence<sal_Int8> aOldPassword; +/*N*/ uno::Sequence<sal_Int8> aPass; +/*N*/ BOOL bOk = lcl_ValidPassword( pDoc, nTab, rPassword, &aOldPassword ); +/*N*/ if ( bOk ) +/*N*/ { +/*N*/ uno::Sequence<sal_Int8> aEmptyPass; +/*N*/ if ( nTab == TABLEID_DOC ) +/*N*/ pDoc->SetDocProtection( FALSE, aEmptyPass ); +/*N*/ else +/*N*/ pDoc->SetTabProtection( nTab, FALSE, aEmptyPass ); +/*N*/ +/*N*/ rDocShell.PostPaintGridAll(); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ } +/*N*/ else if (!bApi) +/*N*/ { +/*N*/ //! rDocShell.ErrorMessage(...); +/*N*/ +/*N*/ InfoBox aBox( rDocShell.GetDialogParent(), String( ScResId( SCSTR_WRONGPASSWORD ) ) ); +/*N*/ aBox.Execute(); +/*N*/ } +/*N*/ +/*N*/ return bOk; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::ClearItems( const ScMarkData& rMark, const USHORT* pWhich, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScEditableTester aTester( pDoc, rMark ); +/*N*/ if (!aTester.IsEditable()) +/*N*/ { +/*?*/ if (!bApi) +/*?*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*?*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ // #i12940# ClearItems is called (from setPropertyToDefault) directly with uno object's cached +/*N*/ // MarkData (GetMarkData), so rMark must be changed to multi selection for ClearSelectionItems +/*N*/ // here. +/*N*/ +/*N*/ ScRange aMarkRange; +/*N*/ ScMarkData aMultiMark = rMark; +/*N*/ aMultiMark.SetMarking(FALSE); // for MarkToMulti +/*N*/ aMultiMark.MarkToMulti(); +/*N*/ aMultiMark.GetMultiMarkArea( aMarkRange ); +/*N*/ +/*N*/ pDoc->ClearSelectionItems( pWhich, aMultiMark ); +/*N*/ +/*N*/ rDocShell.PostPaint( aMarkRange, PAINT_GRID, SC_PF_LINES | SC_PF_TESTMERGE ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +/*N*/ BOOL ScDocFunc::ChangeIndent( const ScMarkData& rMark, BOOL bIncrement, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScEditableTester aTester( pDoc, rMark ); +/*N*/ if (!aTester.IsEditable()) +/*N*/ { +/*N*/ if (!bApi) +/*N*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*N*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ ScRange aMarkRange; +/*N*/ rMark.GetMultiMarkArea( aMarkRange ); +/*N*/ +/*N*/ pDoc->ChangeSelectionIndent( bIncrement, rMark ); +/*N*/ +/*N*/ rDocShell.PostPaint( aMarkRange, PAINT_GRID, SC_PF_LINES | SC_PF_TESTMERGE ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +/*N*/ BOOL ScDocFunc::AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark, +/*N*/ USHORT nFormatNo, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ BOOL bSuccess = FALSE; +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ USHORT nStartCol = rRange.aStart.Col(); +/*N*/ USHORT nStartRow = rRange.aStart.Row(); +/*N*/ USHORT nStartTab = rRange.aStart.Tab(); +/*N*/ USHORT nEndCol = rRange.aEnd.Col(); +/*N*/ USHORT nEndRow = rRange.aEnd.Row(); +/*N*/ USHORT nEndTab = rRange.aEnd.Tab(); +/*N*/ +/*N*/ bRecord = FALSE; +/*N*/ ScMarkData aMark; +/*N*/ if (pTabMark) +/*N*/ aMark = *pTabMark; +/*N*/ else +/*N*/ { +/*N*/ for (USHORT nTab=nStartTab; nTab<=nEndTab; nTab++) +/*N*/ aMark.SelectTable( nTab, TRUE ); +/*N*/ } +/*N*/ +/*N*/ ScAutoFormat* pAutoFormat = ScGlobal::GetAutoFormat(); +/*N*/ ScEditableTester aTester( pDoc, nStartCol,nStartRow, nEndCol,nEndRow, aMark ); +/*N*/ if ( pAutoFormat && nFormatNo < pAutoFormat->GetCount() && aTester.IsEditable() ) +/*N*/ { +/*N*/ WaitObject aWait( rDocShell.GetDialogParent() ); +/*N*/ +/*N*/ BOOL bSize = (*pAutoFormat)[nFormatNo]->GetIncludeWidthHeight(); +/*N*/ +/*N*/ USHORT nTabCount = pDoc->GetTableCount(); +/*N*/ ScDocument* pUndoDoc = NULL; +/*N*/ +/*N*/ pDoc->AutoFormat( nStartCol, nStartRow, nEndCol, nEndRow, nFormatNo, aMark ); +/*N*/ +/*N*/ if (bSize) +/*N*/ { +/* USHORT nCols[2]; + nCols[0] = nStartCol; + nCols[1] = nEndCol; + USHORT nRows[2]; + nRows[0] = nStartRow; + nRows[1] = nEndRow; +*/ +/*N*/ USHORT nCols[2] = { nStartCol, nEndCol }; +/*N*/ USHORT nRows[2] = { nStartRow, nEndRow }; +/*N*/ +/*N*/ for (USHORT nTab=0; nTab<nTabCount; nTab++) +/*N*/ if (aMark.GetTableSelect(nTab)) +/*N*/ { +/*N*/ SetWidthOrHeight( TRUE, 1,nCols, nTab, SC_SIZE_VISOPT, STD_EXTRA_WIDTH, FALSE, TRUE ); +/*N*/ SetWidthOrHeight( FALSE,1,nRows, nTab, SC_SIZE_VISOPT, 0, FALSE, FALSE ); +/*N*/ rDocShell.PostPaint( 0,0,nTab, MAXCOL,MAXROW,nTab, +/*N*/ PAINT_GRID | PAINT_LEFT | PAINT_TOP ); +/*N*/ } +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ for (USHORT nTab=0; nTab<nTabCount; nTab++) +/*N*/ if (aMark.GetTableSelect(nTab)) +/*N*/ { +/*N*/ BOOL bAdj = AdjustRowHeight( ScRange(nStartCol, nStartRow, nTab, +/*N*/ nEndCol, nEndRow, nTab), FALSE ); +/*N*/ if (bAdj) +/*N*/ rDocShell.PostPaint( 0,nStartRow,nTab, MAXCOL,MAXROW,nTab, +/*N*/ PAINT_GRID | PAINT_LEFT ); +/*N*/ else +/*N*/ rDocShell.PostPaint( nStartCol, nStartRow, nTab, +/*N*/ nEndCol, nEndRow, nTab, PAINT_GRID ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ } +/*N*/ else if (!bApi) +/*N*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*N*/ +/*N*/ return bSuccess; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::EnterMatrix( const ScRange& rRange, const ScMarkData* pTabMark, +/*N*/ const String& rString, BOOL bApi, BOOL bEnglish ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ BOOL bSuccess = FALSE; +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ USHORT nStartCol = rRange.aStart.Col(); +/*N*/ USHORT nStartRow = rRange.aStart.Row(); +/*N*/ USHORT nStartTab = rRange.aStart.Tab(); +/*N*/ USHORT nEndCol = rRange.aEnd.Col(); +/*N*/ USHORT nEndRow = rRange.aEnd.Row(); +/*N*/ USHORT nEndTab = rRange.aEnd.Tab(); +/*N*/ +/*N*/ ScMarkData aMark; +/*N*/ if (pTabMark) +/*N*/ aMark = *pTabMark; +/*N*/ else +/*N*/ { +/*N*/ for (USHORT nTab=nStartTab; nTab<=nEndTab; nTab++) +/*N*/ aMark.SelectTable( nTab, TRUE ); +/*N*/ } +/*N*/ +/*N*/ ScEditableTester aTester( pDoc, nStartCol,nStartRow, nEndCol,nEndRow, aMark ); +/*N*/ if ( aTester.IsEditable() ) +/*N*/ { +/*N*/ WaitObject aWait( rDocShell.GetDialogParent() ); +/*N*/ +/*N*/ if ( pDoc->IsImportingXML() ) +/*N*/ { +/*N*/ ScTokenArray* pCode = lcl_ScDocFunc_CreateTokenArrayXML( rString ); +/*N*/ pDoc->InsertMatrixFormula(nStartCol,nStartRow,nEndCol,nEndRow,aMark,EMPTY_STRING,pCode); +/*N*/ delete pCode; +/*N*/ pDoc->IncXMLImportedFormulaCount( rString.Len() ); +/*N*/ } +/*N*/ else if (bEnglish) +/*N*/ { +/*N*/ ScCompiler aComp( pDoc, rRange.aStart ); +/*N*/ aComp.SetCompileEnglish( TRUE ); +/*N*/ ScTokenArray* pCode = aComp.CompileString( rString ); +/*N*/ pDoc->InsertMatrixFormula(nStartCol,nStartRow,nEndCol,nEndRow,aMark,EMPTY_STRING,pCode); +/*N*/ delete pCode; +/*N*/ } +/*N*/ else +/*N*/ pDoc->InsertMatrixFormula(nStartCol,nStartRow,nEndCol,nEndRow,aMark,rString); +/*N*/ +/*N*/ // Err522 beim Paint von DDE-Formeln werden jetzt beim Interpretieren abgefangen +/*N*/ rDocShell.PostPaint( nStartCol,nStartRow,nStartTab,nEndCol,nEndRow,nEndTab, PAINT_GRID ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ bSuccess = TRUE; +/*N*/ } +/*N*/ else if (!bApi) +/*N*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*N*/ +/*N*/ return bSuccess; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::TabOp( const ScRange& rRange, const ScMarkData* pTabMark, +/*N*/ const ScTabOpParam& rParam, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); return FALSE; //STRIP001 ScDocShellModificator aModificator( rDocShell ); +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ inline ScDirection DirFromFillDir( FillDir eDir ) +/*N*/ { +/*N*/ if (eDir==FILL_TO_BOTTOM) +/*N*/ return DIR_BOTTOM; +/*N*/ else if (eDir==FILL_TO_RIGHT) +/*N*/ return DIR_RIGHT; +/*N*/ else if (eDir==FILL_TO_TOP) +/*N*/ return DIR_TOP; +/*N*/ else // if (eDir==FILL_TO_LEFT) +/*N*/ return DIR_LEFT; +/*N*/ } + + +/*N*/ BOOL ScDocFunc::FillSeries( const ScRange& rRange, const ScMarkData* pTabMark, +/*N*/ FillDir eDir, FillCmd eCmd, FillDateCmd eDateCmd, +/*N*/ double fStart, double fStep, double fMax, +/*N*/ BOOL bRecord, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); return FALSE;//STRIP001 ScDocShellModificator aModificator( rDocShell ); +/*N*/ } + +/*N*/ BOOL ScDocFunc::FillAuto( ScRange& rRange, const ScMarkData* pTabMark, +/*N*/ FillDir eDir, USHORT nCount, BOOL bRecord, BOOL bApi ) +/*N*/ { + DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocShellModificator aModificator( rDocShell ); +/*N*/ return TRUE; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::MergeCells( const ScRange& rRange, BOOL bContents, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ USHORT nStartCol = rRange.aStart.Col(); +/*N*/ USHORT nStartRow = rRange.aStart.Row(); +/*N*/ USHORT nEndCol = rRange.aEnd.Col(); +/*N*/ USHORT nEndRow = rRange.aEnd.Row(); +/*N*/ USHORT nTab = rRange.aStart.Tab(); +/*N*/ +/*N*/ bRecord = FALSE; +/*N*/ +/*N*/ ScEditableTester aTester( pDoc, nTab, nStartCol, nStartRow, nEndCol, nEndRow ); +/*N*/ if (!aTester.IsEditable()) +/*N*/ { +/*?*/ if (!bApi) +/*?*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*?*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ if ( nStartCol == nEndCol && nStartRow == nEndRow ) +/*N*/ { +/*N*/ // nichts zu tun +/*N*/ return TRUE; +/*N*/ } +/*N*/ +/*N*/ if ( pDoc->HasAttrib( nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab, +/*N*/ HASATTR_MERGED | HASATTR_OVERLAPPED ) ) +/*N*/ { +/*?*/ // "Zusammenfassen nicht verschachteln !" +/*?*/ if (!bApi) +/*?*/ rDocShell.ErrorMessage(STR_MSSG_MERGECELLS_0); +/*?*/ return FALSE; +/*N*/ } +/*N*/ +/*N*/ BOOL bNeedContents = bContents && +/*N*/ ( !pDoc->IsBlockEmpty( nTab, nStartCol,nStartRow+1, nStartCol,nEndRow ) || +/*N*/ !pDoc->IsBlockEmpty( nTab, nStartCol+1,nStartRow, nEndCol,nEndRow ) ); +/*N*/ +/*N*/ if (bNeedContents && bContents) +/*?*/ { DBG_BF_ASSERT(0, "STRIP");} //STRIP001 pDoc->DoMergeContents( nTab, nStartCol,nStartRow, nEndCol,nEndRow ); +/*N*/ pDoc->DoMerge( nTab, nStartCol,nStartRow, nEndCol,nEndRow ); +/*N*/ +/*N*/ if ( !AdjustRowHeight( ScRange( 0,nStartRow,nTab, MAXCOL,nEndRow,nTab ) ) ) +/*N*/ rDocShell.PostPaint( nStartCol, nStartRow, nTab, +/*N*/ nEndCol, nEndRow, nTab, PAINT_GRID ); +/*N*/ if (bNeedContents && bContents) +/*?*/ pDoc->SetDirty( rRange ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +/*N*/ BOOL ScDocFunc::UnmergeCells( const ScRange& rRange, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocShellModificator aModificator( rDocShell ); +/*N*/ return TRUE; +/*N*/ } + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::ModifyRangeNames( const ScRangeName& rNewRanges, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ +/*N*/ pDoc->CompileNameFormula( TRUE ); // CreateFormulaString +/*N*/ pDoc->SetRangeName( new ScRangeName( rNewRanges ) ); +/*N*/ pDoc->CompileNameFormula( FALSE ); // CompileFormulaString +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREAS_CHANGED ) ); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ void ScDocFunc::CreateOneName( ScRangeName& rList, +/*N*/ USHORT nPosX, USHORT nPosY, USHORT nTab, +/*N*/ USHORT nX1, USHORT nY1, USHORT nX2, USHORT nY2, +/*N*/ BOOL& rCancel, BOOL bApi ) +/*N*/ { +/*N*/ if (rCancel) +/*N*/ return; +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ if (!pDoc->HasValueData( nPosX, nPosY, nTab )) +/*N*/ { +/*N*/ String aName; +/*N*/ pDoc->GetString( nPosX, nPosY, nTab, aName ); +/*N*/ ScRangeData::MakeValidName(aName); +/*N*/ if (aName.Len()) +/*N*/ { +/*N*/ String aContent; +/*N*/ ScRange( nX1, nY1, nTab, nX2, nY2, nTab ).Format( aContent, SCR_ABS_3D, pDoc ); +/*N*/ +/*N*/ ScRangeName* pList = pDoc->GetRangeName(); +/*N*/ +/*N*/ BOOL bInsert = FALSE; +/*N*/ USHORT nOldPos; +/*N*/ if (rList.SearchName( aName, nOldPos )) // vorhanden ? +/*N*/ { +/*N*/ ScRangeData* pOld = rList[nOldPos]; +/*N*/ String aOldStr; +/*N*/ pOld->GetSymbol( aOldStr ); +/*N*/ if (aOldStr != aContent) +/*N*/ { +/*N*/ if (bApi) +/*N*/ bInsert = TRUE; // per API nicht nachfragen +/*N*/ else +/*N*/ { +/*N*/ String aTemplate = ScGlobal::GetRscString( STR_CREATENAME_REPLACE ); +/*N*/ +/*N*/ String aMessage = aTemplate.GetToken( 0, '#' ); +/*N*/ aMessage += aName; +/*N*/ aMessage += aTemplate.GetToken( 1, '#' ); +/*N*/ +/*N*/ short nResult = QueryBox( rDocShell.GetDialogParent(), +/*N*/ WinBits(WB_YES_NO_CANCEL | WB_DEF_YES), +/*N*/ aMessage ).Execute(); +/*N*/ if ( nResult == RET_YES ) +/*N*/ { +/*N*/ rList.AtFree(nOldPos); +/*N*/ bInsert = TRUE; +/*N*/ } +/*N*/ else if ( nResult == RET_CANCEL ) +/*N*/ rCancel = TRUE; +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ else +/*N*/ bInsert = TRUE; +/*N*/ +/*N*/ if (bInsert) +/*N*/ { +/*N*/ ScRangeData* pData = new ScRangeData( pDoc, aName, aContent, nPosX, nPosY, nTab ); +/*N*/ if (!rList.Insert(pData)) +/*N*/ { +/*N*/ DBG_ERROR("nanu?"); +/*N*/ delete pData; +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ } + +/*N*/ BOOL ScDocFunc::CreateNames( const ScRange& rRange, USHORT nFlags, BOOL bApi ) +/*N*/ { +/*N*/ if (!nFlags) +/*N*/ return FALSE; // war nix +/*N*/ +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ BOOL bDone = FALSE; +/*N*/ USHORT nStartCol = rRange.aStart.Col(); +/*N*/ USHORT nStartRow = rRange.aStart.Row(); +/*N*/ USHORT nEndCol = rRange.aEnd.Col(); +/*N*/ USHORT nEndRow = rRange.aEnd.Row(); +/*N*/ USHORT nTab = rRange.aStart.Tab(); +/*N*/ DBG_ASSERT(rRange.aEnd.Tab() == nTab, "CreateNames: mehrere Tabellen geht nicht"); +/*N*/ +/*N*/ BOOL bValid = TRUE; +/*N*/ if ( nFlags & ( NAME_TOP | NAME_BOTTOM ) ) +/*N*/ if ( nStartRow == nEndRow ) +/*N*/ bValid = FALSE; +/*N*/ if ( nFlags & ( NAME_LEFT | NAME_RIGHT ) ) +/*N*/ if ( nStartCol == nEndCol ) +/*N*/ bValid = FALSE; +/*N*/ +/*N*/ if (bValid) +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ ScRangeName* pNames = pDoc->GetRangeName(); +/*N*/ if (!pNames) +/*N*/ return FALSE; // soll nicht sein +/*N*/ ScRangeName aNewRanges( *pNames ); +/*N*/ +/*N*/ BOOL bTop = ( ( nFlags & NAME_TOP ) != 0 ); +/*N*/ BOOL bLeft = ( ( nFlags & NAME_LEFT ) != 0 ); +/*N*/ BOOL bBottom = ( ( nFlags & NAME_BOTTOM ) != 0 ); +/*N*/ BOOL bRight = ( ( nFlags & NAME_RIGHT ) != 0 ); +/*N*/ +/*N*/ USHORT nContX1 = nStartCol; +/*N*/ USHORT nContY1 = nStartRow; +/*N*/ USHORT nContX2 = nEndCol; +/*N*/ USHORT nContY2 = nEndRow; +/*N*/ +/*N*/ if ( bTop ) +/*N*/ ++nContY1; +/*N*/ if ( bLeft ) +/*N*/ ++nContX1; +/*N*/ if ( bBottom ) +/*N*/ --nContY2; +/*N*/ if ( bRight ) +/*N*/ --nContX2; +/*N*/ +/*N*/ BOOL bCancel = FALSE; +/*N*/ USHORT i; +/*N*/ +/*N*/ if ( bTop ) +/*N*/ for (i=nContX1; i<=nContX2; i++) +/*N*/ CreateOneName( aNewRanges, i,nStartRow,nTab, i,nContY1,i,nContY2, bCancel, bApi ); +/*N*/ if ( bLeft ) +/*N*/ for (i=nContY1; i<=nContY2; i++) +/*N*/ CreateOneName( aNewRanges, nStartCol,i,nTab, nContX1,i,nContX2,i, bCancel, bApi ); +/*N*/ if ( bBottom ) +/*N*/ for (i=nContX1; i<=nContX2; i++) +/*N*/ CreateOneName( aNewRanges, i,nEndRow,nTab, i,nContY1,i,nContY2, bCancel, bApi ); +/*N*/ if ( bRight ) +/*N*/ for (i=nContY1; i<=nContY2; i++) +/*N*/ CreateOneName( aNewRanges, nEndCol,i,nTab, nContX1,i,nContX2,i, bCancel, bApi ); +/*N*/ +/*N*/ if ( bTop && bLeft ) +/*N*/ CreateOneName( aNewRanges, nStartCol,nStartRow,nTab, nContX1,nContY1,nContX2,nContY2, bCancel, bApi ); +/*N*/ if ( bTop && bRight ) +/*N*/ CreateOneName( aNewRanges, nEndCol,nStartRow,nTab, nContX1,nContY1,nContX2,nContY2, bCancel, bApi ); +/*N*/ if ( bBottom && bLeft ) +/*N*/ CreateOneName( aNewRanges, nStartCol,nEndRow,nTab, nContX1,nContY1,nContX2,nContY2, bCancel, bApi ); +/*N*/ if ( bBottom && bRight ) +/*N*/ CreateOneName( aNewRanges, nEndCol,nEndRow,nTab, nContX1,nContY1,nContX2,nContY2, bCancel, bApi ); +/*N*/ +/*N*/ bDone = ModifyRangeNames( aNewRanges, bApi ); +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREAS_CHANGED ) ); +/*N*/ } +/*N*/ +/*N*/ return bDone; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::InsertNameList( const ScAddress& rStartPos, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( rDocShell ); +/*N*/ +/*N*/ +/*N*/ BOOL bDone = FALSE; +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ USHORT nTab = rStartPos.Tab(); +/*N*/ ScDocument* pUndoDoc = NULL; +/*N*/ +/*N*/ ScRangeName* pList = pDoc->GetRangeName(); +/*N*/ USHORT nCount = pList->GetCount(); +/*N*/ USHORT nValidCount = 0; +/*N*/ USHORT i; +/*N*/ for (i=0; i<nCount; i++) +/*N*/ { +/*N*/ ScRangeData* pData = (*pList)[i]; +/*N*/ if ( !pData->HasType( RT_DATABASE ) && !pData->HasType( RT_SHARED ) ) +/*N*/ ++nValidCount; +/*N*/ } +/*N*/ +/*N*/ if (nValidCount) +/*N*/ { +/*N*/ USHORT nStartCol = rStartPos.Col(); +/*N*/ USHORT nStartRow = rStartPos.Row(); +/*N*/ USHORT nEndCol = nStartCol + 1; +/*N*/ USHORT nEndRow = nStartRow + nValidCount - 1; +/*N*/ +/*N*/ ScEditableTester aTester( pDoc, nTab, nStartCol,nStartRow, nEndCol,nEndRow ); +/*N*/ if (aTester.IsEditable()) +/*N*/ { +/*N*/ ScRangeData** ppSortArray = new ScRangeData* [ nValidCount ]; +/*N*/ USHORT j = 0; +/*N*/ for (i=0; i<nCount; i++) +/*N*/ { +/*N*/ ScRangeData* pData = (*pList)[i]; +/*N*/ if ( !pData->HasType( RT_DATABASE ) && !pData->HasType( RT_SHARED ) ) +/*N*/ ppSortArray[j++] = pData; +/*N*/ } +/*N*/ #ifndef ICC +/*N*/ qsort( (void*)ppSortArray, nValidCount, sizeof(ScRangeData*), +/*N*/ &ScRangeData::QsortNameCompare ); +/*N*/ #else +/*N*/ qsort( (void*)ppSortArray, nValidCount, sizeof(ScRangeData*), +/*N*/ ICCQsortNameCompare ); +/*N*/ #endif +/*N*/ String aName; +/*N*/ String aContent; +/*N*/ String aFormula; +/*N*/ USHORT nOutRow = nStartRow; +/*N*/ for (j=0; j<nValidCount; j++) +/*N*/ { +/*N*/ ScRangeData* pData = ppSortArray[j]; +/*N*/ pData->GetName(aName); +/*N*/ // relative Referenzen Excel-konform auf die linke Spalte anpassen: +/*N*/ pData->UpdateSymbol(aContent, ScAddress( nStartCol, nOutRow, nTab )); +/*N*/ aFormula = '='; +/*N*/ aFormula += aContent; +/*N*/ pDoc->PutCell( nStartCol,nOutRow,nTab, new ScStringCell( aName ) ); +/*N*/ pDoc->PutCell( nEndCol ,nOutRow,nTab, new ScStringCell( aFormula ) ); +/*N*/ ++nOutRow; +/*N*/ } +/*N*/ +/*N*/ delete [] ppSortArray; +/*N*/ +/*N*/ if (!AdjustRowHeight(ScRange(0,nStartRow,nTab,MAXCOL,nEndRow,nTab))) +/*N*/ rDocShell.PostPaint( nStartCol,nStartRow,nTab, nEndCol,nEndRow,nTab, PAINT_GRID ); +/*N*/ //! rDocShell.UpdateOle(GetViewData()); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ bDone = TRUE; +/*N*/ } +/*N*/ else if (!bApi) +/*?*/ rDocShell.ErrorMessage(aTester.GetMessageId()); +/*N*/ } +/*N*/ return bDone; +/*N*/ } + +//------------------------------------------------------------------------ + + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScDocFunc::InsertAreaLink( const String& rFile, const String& rFilter, +/*N*/ const String& rOptions, const String& rSource, +/*N*/ const ScRange& rDestRange, ULONG nRefresh, +/*N*/ BOOL bFitBlock, BOOL bApi ) +/*N*/ { +/*N*/ //! auch fuer ScViewFunc::InsertAreaLink benutzen! +/*N*/ +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ +/*N*/ String aFilterName = rFilter; +/*N*/ String aNewOptions = rOptions; +/*N*/ if (!aFilterName.Len()) +/*N*/ ScDocumentLoader::GetFilterName( rFile, aFilterName, aNewOptions ); +/*N*/ +/*N*/ // remove application prefix from filter name here, so the filter options +/*N*/ // aren't reset when the filter name is changed in ScAreaLink::DataChanged +/*N*/ ScDocumentLoader::RemoveAppPrefix( aFilterName ); +/*N*/ +/*N*/ SvxLinkManager* pLinkManager = pDoc->GetLinkManager(); +/*N*/ +/*N*/ ScAreaLink* pLink = new ScAreaLink( &rDocShell, rFile, aFilterName, +/*N*/ aNewOptions, rSource, rDestRange, nRefresh ); +/*N*/ pLinkManager->InsertFileLink( *pLink, OBJECT_CLIENT_FILE, rFile, &aFilterName, &rSource ); +/*N*/ +/*N*/ pLink->SetDoInsert(bFitBlock); // beim ersten Update ggf. nichts einfuegen +/*N*/ pLink->Update(); // kein SetInCreate -> Update ausfuehren +/*N*/ pLink->SetDoInsert(TRUE); // Default = TRUE +/*N*/ +/*N*/ +/*N*/ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREALINKS_CHANGED ) ); // Navigator +/*N*/ +/*N*/ return TRUE; +/*N*/ } + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_docsh.cxx b/binfilter/bf_sc/source/ui/docshell/sc_docsh.cxx new file mode 100644 index 000000000000..a3090d535b01 --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_docsh.cxx @@ -0,0 +1,1313 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "scitems.hxx" + +#define ITEMID_FIELD EE_FEATURE_FIELD + +#include <bf_svtools/ctrltool.hxx> +#include <bf_svtools/sfxecode.hxx> +#include <bf_sfx2/docinf.hxx> +#include <bf_sfx2/docfile.hxx> +#include <bf_sfx2/docfilt.hxx> +#include <bf_sfx2/sfx.hrc> +#include <bf_offmgr/app.hxx> +#include <comphelper/classids.hxx> +#include <bf_sfx2/request.hxx> + +#include <com/sun/star/document/UpdateDocMode.hpp> + +#include <sot/formats.hxx> +#define SOT_FORMATSTR_ID_STARCALC_30 SOT_FORMATSTR_ID_STARCALC + +// INCLUDE --------------------------------------------------------------- + +#include "viewdata.hxx" +#include "filter.hxx" +#include "scmod.hxx" +#include "docfunc.hxx" +#include "impex.hxx" +#include "scresid.hxx" +#include "bf_sc.hrc" +#include "globstr.hrc" +#include "scerrors.hxx" +#include "stlpool.hxx" +#include "autostyl.hxx" +#include "asciiopt.hxx" +#include "docpool.hxx" // LoadCompleted +#include "progress.hxx" +#include "pntlock.hxx" +#include "docuno.hxx" +#include "appoptio.hxx" +#include "detdata.hxx" +#include "printfun.hxx" +#include "chartlis.hxx" +#include "hints.hxx" +#include "xmlwrap.hxx" +#include "drwlayer.hxx" +#include "dbcolect.hxx" + +#include "docsh.hxx" +#include "ViewSettingsSequenceDefines.hxx" + +#include <rtl/logfile.hxx> +namespace binfilter { +using namespace ::com::sun::star; + +#ifndef SO2_DECL_SVSTORAGESTREAM_DEFINED +#define SO2_DECL_SVSTORAGESTREAM_DEFINED +SO2_DECL_REF(SvStorageStream) +#endif + +// STATIC DATA ----------------------------------------------------------- + +// Stream-Namen im Storage + +const sal_Char __FAR_DATA ScDocShell::pStarCalcDoc[] = STRING_SCSTREAM; // "StarCalcDocument" +const sal_Char __FAR_DATA ScDocShell::pStyleName[] = "SfxStyleSheets"; + +// Filter-Namen (wie in sclib.cxx) + +static const sal_Char __FAR_DATA pFilterSc50[] = "StarCalc 5.0"; +//static const sal_Char __FAR_DATA pFilterSc50Temp[] = "StarCalc 5.0 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterSc40[] = "StarCalc 4.0"; +//static const sal_Char __FAR_DATA pFilterSc40Temp[] = "StarCalc 4.0 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterSc30[] = "StarCalc 3.0"; +//static const sal_Char __FAR_DATA pFilterSc30Temp[] = "StarCalc 3.0 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterSc10[] = "StarCalc 1.0"; +static const sal_Char __FAR_DATA pFilterXML[] = "StarOffice XML (Calc)"; +static const sal_Char __FAR_DATA pFilterAscii[] = "Text - txt - csv (StarCalc)"; +static const sal_Char __FAR_DATA pFilterLotus[] = "Lotus"; +static const sal_Char __FAR_DATA pFilterExcel4[] = "MS Excel 4.0"; +static const sal_Char __FAR_DATA pFilterEx4Temp[] = "MS Excel 4.0 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterExcel5[] = "MS Excel 5.0/95"; +static const sal_Char __FAR_DATA pFilterEx5Temp[] = "MS Excel 5.0/95 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterExcel95[] = "MS Excel 95"; +static const sal_Char __FAR_DATA pFilterEx95Temp[] = "MS Excel 95 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterExcel97[] = "MS Excel 97"; +static const sal_Char __FAR_DATA pFilterEx97Temp[] = "MS Excel 97 Vorlage/Template"; +static const sal_Char __FAR_DATA pFilterDBase[] = "dBase"; +static const sal_Char __FAR_DATA pFilterDif[] = "DIF"; +static const sal_Char __FAR_DATA pFilterSylk[] = "SYLK"; +static const sal_Char __FAR_DATA pFilterHtml[] = "HTML (StarCalc)"; +static const sal_Char __FAR_DATA pFilterHtmlWebQ[] = "calc_HTML_WebQuery"; +static const sal_Char __FAR_DATA pFilterRtf[] = "Rich Text Format (StarCalc)"; + +//---------------------------------------------------------------------- + +// GlobalName der aktuellen Version: +/*N*/ SFX_IMPL_OBJECTFACTORY_DLL(ScDocShell, SFXOBJECTSHELL_STD_NORMAL, +/*N*/ SvGlobalName(BF_SO3_SC_CLASSID), Sc) + +/*N*/ TYPEINIT1( ScDocShell, SfxObjectShell ); // SfxInPlaceObject: kein Type-Info ? + +//------------------------------------------------------------------ + +/*N*/ void __EXPORT ScDocShell::FillClass( SvGlobalName* pClassName, +/*N*/ ULONG* pFormat, +/*N*/ String* pAppName, +/*N*/ String* pFullTypeName, +/*N*/ String* pShortTypeName, +/*N*/ long nFileFormat ) const +/*N*/ { +/*N*/ SfxInPlaceObject::FillClass( pClassName, pFormat, pAppName, +/*N*/ pFullTypeName, pShortTypeName, nFileFormat ); +/*N*/ +/*N*/ if ( nFileFormat == SOFFICE_FILEFORMAT_31 ) +/*N*/ { +/*N*/ *pClassName = SvGlobalName( BF_SO3_SC_CLASSID_30 ); +/*N*/ *pFormat = SOT_FORMATSTR_ID_STARCALC_30; +/*N*/ *pAppName = String( ScResId( SCSTR_30_APPLICATION ) ); +/*N*/ *pFullTypeName = String( ScResId( SCSTR_30_LONG_DOCNAME ) ); +/*N*/ *pShortTypeName = String( ScResId( SCSTR_SHORT_SCDOC_NAME ) ); +/*N*/ } +/*N*/ else if ( nFileFormat == SOFFICE_FILEFORMAT_40 ) +/*N*/ { +/*N*/ *pClassName = SvGlobalName( BF_SO3_SC_CLASSID_40 ); +/*N*/ *pFormat = SOT_FORMATSTR_ID_STARCALC_40; +/*N*/ *pAppName = String( ScResId( SCSTR_40_APPLICATION ) ); +/*N*/ *pFullTypeName = String( ScResId( SCSTR_40_LONG_DOCNAME ) ); +/*N*/ *pShortTypeName = String( ScResId( SCSTR_SHORT_SCDOC_NAME ) ); +/*N*/ } +/*N*/ else if ( nFileFormat == SOFFICE_FILEFORMAT_50 ) +/*N*/ { +/*N*/ *pClassName = SvGlobalName( BF_SO3_SC_CLASSID_50 ); +/*N*/ *pFormat = SOT_FORMATSTR_ID_STARCALC_50; +/*N*/ *pAppName = String( ScResId( SCSTR_50_APPLICATION ) ); +/*N*/ *pFullTypeName = String( ScResId( SCSTR_50_LONG_DOCNAME ) ); +/*N*/ *pShortTypeName = String( ScResId( SCSTR_SHORT_SCDOC_NAME ) ); +/*N*/ } +/*N*/ else if ( nFileFormat == SOFFICE_FILEFORMAT_60 || + nFileFormat == SOFFICE_FILEFORMAT_CURRENT ) // #i41083# also allow CURRENT +/*N*/ { +/*N*/ // for binfilter, we need the FormatIDs to be set. Not setting them + // has always been an error (!) +/*N*/ *pClassName = SvGlobalName( BF_SO3_SC_CLASSID_60 ); +/*N*/ *pFormat = SOT_FORMATSTR_ID_STARCALC_60; +/*N*/ *pAppName = String( ScResId( SCSTR_APPLICATION ) ); +/*N*/ +/*N*/ *pFullTypeName = String( ScResId( SCSTR_LONG_SCDOC_NAME ) ); +/*N*/ *pShortTypeName = String( ScResId( SCSTR_SHORT_SCDOC_NAME ) ); + +/*N*/ } +/*N*/ else +/*N*/ DBG_ERROR("wat fuer ne Version?"); +/*N*/ } + +//------------------------------------------------------------------ + + +//------------------------------------------------------------------ + + +//------------------------------------------------------------------ + +/*N*/ BOOL ScDocShell::LoadCalc( SvStorage* pStor ) // StarCalc 3, 4 or 5 file +/*N*/ { +/*N*/ // MacroCallMode is no longer needed, state is kept in SfxObjectShell now +/*N*/ +/*N*/ BOOL bRet = TRUE; +/*N*/ +/*N*/ SvStorageStreamRef aPoolStm = pStor->OpenStream( String::CreateFromAscii(pStyleName), STREAM_STD_READ ); +/*N*/ SvStorageStreamRef aDocStm = pStor->OpenStream( String::CreateFromAscii(pStarCalcDoc), STREAM_STD_READ ); +/*N*/ ULONG nPoolErr = aPoolStm->GetError(); +/*N*/ ULONG nDocErr = aDocStm->GetError(); +/*N*/ +/*N*/ ScProgress* pProgress = NULL; +/*N*/ SfxObjectCreateMode eShellMode = GetCreateMode(); +/*N*/ if ( eShellMode == SFX_CREATE_MODE_STANDARD && !nDocErr ) +/*N*/ { +/*N*/ ULONG nCurPos = aDocStm->Tell(); +/*N*/ ULONG nEndPos = aDocStm->Seek( STREAM_SEEK_TO_END ); +/*N*/ aDocStm->Seek( nCurPos ); +/*N*/ ULONG nRange = nEndPos - nCurPos; +/*N*/ pProgress = new ScProgress( this, ScGlobal::GetRscString(STR_LOAD_DOC), nRange ); +/*N*/ } +/*N*/ +/*N*/ if ( nPoolErr == ERRCODE_IO_NOTEXISTS && nDocErr == ERRCODE_IO_NOTEXISTS ) +/*N*/ { +/*?*/ // leerer Storage = leeres Dokument -> wie InitNew +/*?*/ +/*?*/ aDocument.MakeTable(0); +/*?*/ Size aSize( (long) ( STD_COL_WIDTH * HMM_PER_TWIPS * OLE_STD_CELLS_X ), +/*?*/ (long) ( ScGlobal::nStdRowHeight * HMM_PER_TWIPS * OLE_STD_CELLS_Y ) ); +/*?*/ // hier muss auch der Start angepasst werden +/*?*/ SetVisAreaOrSize( Rectangle( Point(), aSize ), TRUE ); +/*?*/ aDocument.GetStyleSheetPool()->CreateStandardStyles(); +/*?*/ aDocument.UpdStlShtPtrsFrmNms(); +/*N*/ } +/*N*/ else if ( !nPoolErr && !nDocErr ) +/*N*/ { +/*N*/ aPoolStm->SetVersion(pStor->GetVersion()); +/*N*/ aDocStm->SetVersion(pStor->GetVersion()); +/*N*/ +/*N*/ aDocument.Clear(); // keine Referenzen auf Pool behalten! +/*N*/ +/*N*/ RemoveItem( SID_ATTR_CHAR_FONTLIST ); +/*N*/ RemoveItem( ITEMID_COLOR_TABLE ); +/*N*/ RemoveItem( ITEMID_GRADIENT_LIST ); +/*N*/ RemoveItem( ITEMID_HATCH_LIST ); +/*N*/ RemoveItem( ITEMID_BITMAP_LIST ); +/*N*/ RemoveItem( ITEMID_DASH_LIST ); +/*N*/ RemoveItem( ITEMID_LINEEND_LIST ); +/*N*/ +/*N*/ aDocument.LoadPool( *aPoolStm, FALSE ); // FALSE: RefCounts nicht laden +/*N*/ bRet = (aPoolStm->GetError() == 0); +/*N*/ +/*N*/ if ( !bRet ) +/*N*/ { +/*N*/ pStor->SetError( aPoolStm->GetError() ); +/*N*/ DBG_ERROR( "Fehler im Pool-Stream" ); +/*N*/ } +/*N*/ else if (eShellMode != SFX_CREATE_MODE_ORGANIZER) +/*N*/ { +/*N*/ // ViewOptions are not completely stored (to avoid warnings), +/*N*/ // so must be initialized from global settings. +/*N*/ //! This can be removed if a new file format loads all ViewOptions !!! +/*N*/ +/*N*/ aDocument.SetViewOptions( SC_MOD()->GetViewOptions() ); +/*N*/ +/*N*/ ULONG nErrCode = aPoolStm->GetErrorCode(); +/*N*/ const ByteString aStrKey = pStor->GetKey(); +/*N*/ const BOOL bKeySet = (aStrKey.Len() > 0); +/*N*/ +/*N*/ if ( bKeySet ) +/*?*/ aDocStm->SetKey( aStrKey ); // Passwort setzen +/*N*/ +/*N*/ bRet = aDocument.Load( *aDocStm, pProgress ); +/*N*/ +/*N*/ if ( !bRet && bKeySet ) // Passwort falsch +/*N*/ { +/*?*/ SetError( ERRCODE_SFX_WRONGPASSWORD ); +/*?*/ pStor->SetError( ERRCODE_SFX_WRONGPASSWORD ); +/*N*/ } +/*N*/ +/*N*/ if ( aDocStm->GetError() ) +/*N*/ { +/*?*/ // Zeile-8192-Meldung braucht nur zu kommen, wenn die Zeilen +/*?*/ // beschraenkt sind, sonst ist "falsches Format" besser +/*?*/ #ifdef SC_LIMIT_ROWS +/*?*/ if ( aDocument.HasLostData() ) // zuviele Zeilen? +/*?*/ pStor->SetError( SCERR_IMPORT_8K_LIMIT ); +/*?*/ else +/*?*/ #endif +/*?*/ pStor->SetError( aDocStm->GetError() ); +/*?*/ bRet = FALSE; +/*?*/ DBG_ERROR( "Fehler im Document-Stream" ); +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ if ( !(nErrCode & ERRCODE_WARNING_MASK) ) +/*N*/ nErrCode = aDocStm->GetErrorCode(); +/*N*/ if ( nErrCode & ERRCODE_WARNING_MASK ) +/*?*/ SetError( nErrCode ); +/*N*/ } +/*N*/ +/*N*/ if (bRet) +/*N*/ { +/*N*/ aDocument.UpdateFontCharSet(); +/*N*/ +/*N*/ UpdateLinks(); // verknuepfte Tabellen in Link-Manager +/*N*/ RemoveUnknownObjects(); // unbekannte Ole-Objekte loeschen + + // #116578# Manually load view state from sfx window data (no view is created). + // See SfxObjectShell::LoadWindows_Impl. + // Only the user data string is used, only from the first view. + + SvStorageStreamRef aWinStm = pStor->OpenStream( + String::CreateFromAscii("SfxWindows"), STREAM_STD_READ ); + if ( aWinStm.Is() && aWinStm->GetError() == ERRCODE_NONE ) + { + aWinStm->SetBufferSize(1024); + String aWinData; + aWinStm->ReadByteString( aWinData ); + if ( aWinData.Len() ) + { + char cToken =','; + BOOL bOldFormat = TRUE; + if ( aWinData.GetToken( 0, cToken ).EqualsAscii( "TASK" ) ) + { + bOldFormat = FALSE; + aWinStm->ReadByteString( aWinData ); // read next string + } + USHORT nViewId = (USHORT) aWinData.GetToken( 0, cToken ).ToInt32(); + + // only ScTabViewShell is handled (ID as in ScDLL::Init) + if ( nViewId == 1 ) + { + if ( bOldFormat ) + { + aUserData = aWinData.GetToken( 2, cToken ); + } + else + { + USHORT nPos=0; + FASTBOOL bActive = aWinData.GetToken( 3, cToken, nPos ).ToInt32(); + aUserData = aWinData.Copy( nPos ); + } + // aUserData is used in ScModelObj::getViewData + } + } + } +/*N*/ } +/*N*/ } +/*N*/ else // SFX_CREATE_MODE_ORGANIZER +/*N*/ { +/*?*/ // UpdateStdNames is called from ScDocument::Load, but is also needed +/*?*/ // if only the styles are loaded! +/*?*/ ScStyleSheetPool* pStylePool = aDocument.GetStyleSheetPool(); +/*?*/ if (pStylePool) +/*?*/ pStylePool->UpdateStdNames(); // correct style names for different languages +/*N*/ } +/*N*/ +/*N*/ if (bRet) +/*N*/ aDocument.GetPool()->MyLoadCompleted(); +/*N*/ } +/*N*/ else +/*N*/ { +/*?*/ DBG_ERROR( "Stream-Fehler"); +/*?*/ bRet = FALSE; +/*N*/ } +/*N*/ +/*N*/ if (!aDocument.HasTable(0)) +/*?*/ aDocument.MakeTable(0); +/*N*/ +/*N*/ if (eShellMode == SFX_CREATE_MODE_EMBEDDED) +/*N*/ { +/*N*/ USHORT nVisTab = aDocument.GetVisibleTab(); +/*N*/ BOOL bHasVis = aDocument.HasTable(nVisTab); +/*N*/ if ( SfxInPlaceObject::GetVisArea().IsEmpty() || !bHasVis ) +/*N*/ { +/*?*/ if (!bHasVis) +/*?*/ { +/*?*/ nVisTab = 0; +/*?*/ aDocument.SetVisibleTab(nVisTab); +/*?*/ } +/*?*/ USHORT nStartCol,nStartRow; +/*?*/ aDocument.GetDataStart( nVisTab, nStartCol, nStartRow ); +/*?*/ USHORT nEndCol,nEndRow; +/*?*/ aDocument.GetPrintArea( nVisTab, nEndCol, nEndRow ); +/*?*/ if (nStartCol>nEndCol) +/*?*/ nStartCol = nEndCol; +/*?*/ if (nStartRow>nEndRow) +/*?*/ nStartRow = nEndRow; +/*?*/ // hier muss auch der Start angepasst werden +/*?*/ SetVisAreaOrSize( aDocument.GetMMRect( nStartCol,nStartRow, nEndCol,nEndRow, nVisTab ), +/*?*/ TRUE ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ delete pProgress; +/*N*/ +/*N*/ return bRet; +/*N*/ } + + +/*N*/ BOOL ScDocShell::SaveCalc( SvStorage* pStor ) // Calc 3, 4 or 5 file +/*N*/ { +/*N*/ BOOL bRet = TRUE; +/*N*/ +/*N*/ ScProgress* pProgress = NULL; +/*N*/ SfxObjectCreateMode eShellMode = GetCreateMode(); +/*N*/ if ( eShellMode == SFX_CREATE_MODE_STANDARD ) +/*N*/ { +/*N*/ ULONG nRange = aDocument.GetWeightedCount() + 1; +/*N*/ pProgress = new ScProgress( this, ScGlobal::GetRscString(STR_SAVE_DOC), nRange ); +/*N*/ } +/*N*/ +/*N*/ SvStorageStreamRef aPoolStm = pStor->OpenStream( String::CreateFromAscii(pStyleName) ); +/*N*/ if( !aPoolStm->GetError() ) +/*N*/ { +/*N*/ aPoolStm->SetVersion(pStor->GetVersion()); +/*N*/ aPoolStm->SetSize(0); +/*N*/ bRet = aDocument.SavePool( *aPoolStm ); +/*N*/ if ( aPoolStm->GetErrorCode() && !pStor->GetErrorCode() ) +/*?*/ pStor->SetError(aPoolStm->GetErrorCode()); +/*N*/ } +/*N*/ else +/*N*/ { +/*?*/ DBG_ERROR( "Stream Error" ); +/*?*/ bRet = FALSE; +/*N*/ } +/*N*/ +/*N*/ if ( bRet && eShellMode != SFX_CREATE_MODE_ORGANIZER ) +/*N*/ { +/*N*/ SvStorageStreamRef aDocStm = pStor->OpenStream( String::CreateFromAscii(pStarCalcDoc) ); +/*N*/ if( !aDocStm->GetError() ) +/*N*/ { +/*N*/ aDocStm->SetVersion(pStor->GetVersion()); +/*N*/ aDocStm->SetKey(pStor->GetKey()); // Passwort setzen +/*N*/ aDocStm->SetSize(0); +/*N*/ bRet = aDocument.Save( *aDocStm, pProgress ); +/*N*/ DBG_ASSERT( bRet, "Error while saving" ); +/*N*/ +/*N*/ if ( aDocument.HasLostData() ) +/*N*/ { +/*?*/ // Warnung, dass nicht alles gespeichert wurde +/*?*/ +/*?*/ if (!pStor->GetError()) +/*?*/ pStor->SetError(SCWARN_EXPORT_MAXROW); +/*?*/ } +/*N*/ else if ( aDocStm->GetErrorCode() && !pStor->GetErrorCode() ) +/*?*/ pStor->SetError(aDocStm->GetErrorCode()); +/*N*/ } +/*N*/ else +/*N*/ { +/*?*/ DBG_ERROR( "Stream Error" ); +/*?*/ bRet = FALSE; +/*N*/ } + + // #116578# Manually create sfx window data from uno view data (no view is created). + // See SfxObjectShell::SaveWindows_Impl. + // Only data from the first view is used. + + uno::Reference<document::XViewDataSupplier> xSupplier( GetModel(), uno::UNO_QUERY ); + if ( xSupplier.is() && eShellMode == SFX_CREATE_MODE_STANDARD ) + { + uno::Reference<container::XIndexAccess> xData = xSupplier->getViewData(); + if ( xData.is() && xData->getCount() >= 1 ) + { + uno::Sequence<beans::PropertyValue> aSeq; + uno::Any aAny = xData->getByIndex( 0 ); + if ( aAny >>= aSeq ) + { + sal_Int32 nViewId = 0; + + sal_Int32 nCount = aSeq.getLength(); + for (sal_Int32 i = 0; i < nCount; i++) + if ( aSeq[i].Name.compareToAscii(SC_VIEWID) == 0 ) + { + ::rtl::OUString aId; + aSeq[i].Value >>= aId; + String aTmp( aId ); + aTmp.Erase( 0, 4 ); // format is like in "view3" + nViewId = aTmp.ToInt32(); + } + + if ( nViewId == 1 ) // ScTabViewShell, ID from ScDLL::Init + { + String aUserStr; + ScViewData aLocalViewData( this ); + aLocalViewData.ReadUserDataSequence( aSeq ); + aLocalViewData.WriteUserData( aUserStr ); + + if ( aUserStr.Len() ) + { + SvStorageStreamRef aWinStm = pStor->OpenStream( + String::CreateFromAscii("SfxWindows"), STREAM_TRUNC | STREAM_STD_READWRITE ); + if ( aWinStm.Is() && aWinStm->GetError() == ERRCODE_NONE ) + { + aWinStm->SetBufferSize(1024); + + char cToken = ','; + String aWinData = String::CreateFromInt32( nViewId ); + aWinData += cToken; + aWinData += cToken; + aWinData += aUserStr; + aWinData += cToken; + aWinData += '1'; // active + + aWinStm->WriteByteString( aWinData ); + } + } + } + } + } + } +/*N*/ } +/*N*/ +/*N*/ delete pProgress; +/*N*/ +/*N*/ return bRet; +/*N*/ } + +/*N*/ void ScDocShell::BeforeXMLLoading() +/*N*/ { +/*N*/ // prevent unnecessary broadcasts and updates +/*N*/ DBG_ASSERT(pModificator == NULL, "The Modificator should not exist"); +/*N*/ pModificator = new ScDocShellModificator( *this ); +/*N*/ +/*N*/ aDocument.SetImportingXML( TRUE ); +/*N*/ // prevent unnecessary broadcasts and "half way listeners" +/*N*/ aDocument.SetInsertingFromOtherDoc( TRUE ); +/*N*/ +/*N*/ if (GetCreateMode() != SFX_CREATE_MODE_ORGANIZER) +/*N*/ ScColumn::bDoubleAlloc = sal_True; +/*N*/ } + +/*N*/ void ScDocShell::AfterXMLLoading(sal_Bool bRet) +/*N*/ {DBG_BF_ASSERT(0, "STRIP"); //STRIP001 + aDocument.SetInsertingFromOtherDoc( FALSE ); + aDocument.SetImportingXML( FALSE ); + + if (pModificator) + { + delete pModificator; + pModificator = NULL; + } + else + DBG_ERROR("The Modificator should exist"); +/*N*/ } + +/*N*/ BOOL ScDocShell::LoadXML( SfxMedium* pMedium, SvStorage* pStor ) +/*N*/ { +/*N*/ RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "sb99857", "ScDocShell::LoadXML" ); +/*N*/ +/*N*/ // MacroCallMode is no longer needed, state is kept in SfxObjectShell now +/*N*/ +/*N*/ // no Seek(0) here - always loading from storage, GetInStream must not be called +/*N*/ +/*N*/ BeforeXMLLoading(); +/*N*/ +/*N*/ ScXMLImportWrapper aImport( aDocument, pMedium, pStor ); +/*N*/ +/*N*/ sal_Bool bRet(sal_False); +/*N*/ if (GetCreateMode() != SFX_CREATE_MODE_ORGANIZER) +/*N*/ bRet = aImport.Import(sal_False); +/*N*/ else +/*N*/ bRet = aImport.Import(sal_True); +/*N*/ +/*N*/ AfterXMLLoading(bRet); +/*N*/ +/*N*/ //! row heights... +/*N*/ +/*N*/ return bRet; +/*N*/ } + +/*N*/ BOOL ScDocShell::SaveXML( SfxMedium* pMedium, SvStorage* pStor ) +/*N*/ { +/*N*/ RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "sb99857", "ScDocShell::SaveXML" ); +/*N*/ +/*N*/ ScXMLImportWrapper aImport( aDocument, pMedium, pStor ); +/*N*/ sal_Bool bRet(sal_False); +/*N*/ if (GetCreateMode() != SFX_CREATE_MODE_ORGANIZER) +/*N*/ bRet = aImport.Export(sal_False); +/*N*/ else +/*N*/ bRet = aImport.Export(sal_True); +/*N*/ return bRet; +/*N*/ } + +/*N*/ BOOL __EXPORT ScDocShell::Load( SvStorage* pStor ) +/*N*/ { +/*N*/ RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::Load" ); +/*N*/ +/*N*/ ScRefreshTimerProtector( aDocument.GetRefreshTimerControlAddress() ); +/*N*/ +/*N*/ DBG_ASSERT( pStor, "Load without storage?" ); +/*N*/ BOOL bXML = ( pStor->GetVersion() >= SOFFICE_FILEFORMAT_60 ); +/*N*/ +/*N*/ // only the latin script language is loaded +/*N*/ // -> initialize the others from options (before loading) +/*N*/ InitOptions(); +/*N*/ +/*N*/ BOOL bRet = SfxInPlaceObject::Load( pStor ); +/*N*/ if( bRet ) +/*N*/ { +/*N*/ if (GetMedium()) +/*N*/ { +/*N*/ SFX_ITEMSET_ARG( GetMedium()->GetItemSet(), pUpdateDocItem, SfxUInt16Item, SID_UPDATEDOCMODE, sal_False); +/*N*/ nCanUpdate = pUpdateDocItem ? pUpdateDocItem->GetValue() : ::com::sun::star::document::UpdateDocMode::NO_UPDATE; +/*N*/ } +/*N*/ +/*N*/ if (bXML) +/*N*/ { +/*N*/ // prepare a valid document for XML filter +/*N*/ // (for ConvertFrom, InitNew is called before) +/*N*/ aDocument.MakeTable(0); +/*N*/ aDocument.GetStyleSheetPool()->CreateStandardStyles(); +/*N*/ aDocument.UpdStlShtPtrsFrmNms(); +/*N*/ +/*N*/ bRet = LoadXML( GetMedium(), pStor ); +/*N*/ } +/*N*/ else +/*N*/ bRet = LoadCalc( pStor ); +/*N*/ } +/*N*/ +/*N*/ if (!bRet && !pStor->GetError()) +/*?*/ pStor->SetError( SVSTREAM_FILEFORMAT_ERROR ); +/*N*/ +/*N*/ if (pStor->GetError()) +/*?*/ SetError( pStor->GetError() ); +/*N*/ +/*N*/ InitItems(); +/*N*/ CalcOutputFactor(); +/*N*/ +/*N*/ // #73762# invalidate eventually temporary table areas +/*N*/ if ( bRet ) +/*N*/ aDocument.InvalidateTableArea(); +/*N*/ +/*N*/ bIsEmpty = FALSE; +/*N*/ FinishedLoading( SFX_LOADED_MAINDOCUMENT | SFX_LOADED_IMAGES ); +/*N*/ return bRet; +/*N*/ } + + +/*N*/ void __EXPORT ScDocShell::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType, +/*N*/ const SfxHint& rHint, const TypeId& rHintType ) +/*N*/ { +/*N*/ if (rHint.ISA(SfxSimpleHint)) // ohne Parameter +/*N*/ { +/*N*/ ULONG nSlot = ((const SfxSimpleHint&)rHint).GetId(); +/*N*/ switch ( nSlot ) +/*N*/ { +/*N*/ case SFX_HINT_TITLECHANGED: +/*N*/ aDocument.SetName( SfxShell::GetName() ); +/*N*/ // RegisterNewTargetNames gibts nicht mehr +/*N*/ SFX_APP()->Broadcast(SfxSimpleHint( SC_HINT_DOCNAME_CHANGED )); // Navigator +/*N*/ break; +/*N*/ } +/*N*/ } +/*N*/ else if (rHint.ISA(SfxStyleSheetHint)) // Vorlagen geaendert +/*N*/ NotifyStyle((const SfxStyleSheetHint&) rHint); +/*N*/ else if (rHint.ISA(ScAutoStyleHint)) +/*N*/ { +/*?*/ //! direct call for AutoStyles +/*?*/ +/*?*/ // this is called synchronously from ScInterpreter::ScStyle, +/*?*/ // modifying the document must be asynchronous +/*?*/ // (handled by AddInitial) +/*?*/ +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScAutoStyleHint& rStlHint = (ScAutoStyleHint&)rHint; +/*N*/ } +/*N*/ } + + // Inhalte fuer Organizer laden + + + + +/*N*/ BOOL __EXPORT ScDocShell::ConvertFrom( SfxMedium& rMedium ) +/*N*/ { +/*N*/ RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::ConvertFrom" ); +/*N*/ +/*N*/ BOOL bRet = FALSE; // FALSE heisst Benutzerabbruch !! +/*N*/ // bei Fehler: Fehler am Stream setzen!! +/*N*/ +/*N*/ ScRefreshTimerProtector( aDocument.GetRefreshTimerControlAddress() ); +/*N*/ +/*N*/ // ob nach dem Import optimale Spaltenbreiten gesetzt werden sollen +/*N*/ BOOL bSetColWidths = FALSE; +/*N*/ BOOL bSetSimpleTextColWidths = FALSE; +/*N*/ BOOL bSimpleColWidth[MAXCOL+1]; +/*N*/ memset( bSimpleColWidth, 1, (MAXCOL+1) * sizeof(BOOL) ); +/*N*/ ScRange aColWidthRange; +/*N*/ // ob nach dem Import optimale Zeilenhoehen gesetzt werden sollen +/*N*/ BOOL bSetRowHeights = FALSE; +/*N*/ +/*N*/ aConvFilterName.Erase(); //@ #BugId 54198 +/*N*/ +/*N*/ // Alle Filter brauchen die komplette Datei am Stueck (nicht asynchron), +/*N*/ // darum vorher per CreateFileStream dafuer sorgen, dass die komplette +/*N*/ // Datei uebertragen wird. +/*N*/ rMedium.GetPhysicalName(); //! CreateFileStream direkt rufen, wenn verfuegbar +/*N*/ +/*N*/ SFX_ITEMSET_ARG( rMedium.GetItemSet(), pUpdateDocItem, SfxUInt16Item, SID_UPDATEDOCMODE, sal_False); +/*N*/ nCanUpdate = pUpdateDocItem ? pUpdateDocItem->GetValue() : ::com::sun::star::document::UpdateDocMode::NO_UPDATE; +/*N*/ +/*N*/ const SfxFilter* pFilter = rMedium.GetFilter(); +/*N*/ if (pFilter) +/*N*/ { +/*N*/ String aFltName = pFilter->GetFilterName(); +/*N*/ +/*N*/ aConvFilterName=aFltName; //@ #BugId 54198 +/*N*/ +/*N*/ BOOL bCalc3 = ( aFltName.EqualsAscii(pFilterSc30) ); +/*N*/ BOOL bCalc4 = ( aFltName.EqualsAscii(pFilterSc40) ); +/*N*/ if (!bCalc3 && !bCalc4) +/*N*/ aDocument.SetInsertingFromOtherDoc( TRUE ); +/*N*/ +/*N*/ if (bCalc3 || bCalc4) // Calc3/4 - "Import" +/*N*/ { +/*?*/ // wait cursor is handled with progress bar +/*?*/ SvStorage* pStor = rMedium.GetStorage(); +/*?*/ if ( pStor ) +/*?*/ { +/*?*/ bRet = SfxInPlaceObject::Load( pStor ); +/*?*/ if( bRet ) +/*?*/ bRet = LoadCalc( pStor ); +/*?*/ if (!bRet && !pStor->GetError()) +/*?*/ pStor->SetError( SVSTREAM_FILEFORMAT_ERROR ); +/*?*/ } +/*?*/ else +/*?*/ DBG_ERROR("Calc3/4: kein Storage"); +/*N*/ } +/*N*/ else if (aFltName.EqualsAscii(pFilterXML)) +/*?*/ { DBG_BF_ASSERT(0, "STRIP"); }//STRIP001 bRet = LoadXML( &rMedium, NULL ); +/*N*/ else if (aFltName.EqualsAscii(pFilterSc10)) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 SvStream* pStream = rMedium.GetInStream(); +/*N*/ } +/*N*/ else if (aFltName.EqualsAscii(pFilterLotus)) +/*N*/ { +DBG_BF_ASSERT(0, "STRIP"); //STRIP001 //STRIP001 /*N*/ // SvStream* pStream = rMedium.GetInStream(); +/*N*/ } +/*N*/ else if ( aFltName.EqualsAscii(pFilterExcel4) || aFltName.EqualsAscii(pFilterExcel5) || +/*N*/ aFltName.EqualsAscii(pFilterExcel95) || aFltName.EqualsAscii(pFilterExcel97) || +/*N*/ aFltName.EqualsAscii(pFilterEx4Temp) || aFltName.EqualsAscii(pFilterEx5Temp) || +/*N*/ aFltName.EqualsAscii(pFilterEx95Temp) || aFltName.EqualsAscii(pFilterEx97Temp) ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 EXCIMPFORMAT eFormat = EIF_AUTO; +/*N*/ } +/*N*/ else if (aFltName.EqualsAscii(pFilterAscii)) +/*N*/ { +/*N*/ SfxItemSet* pSet = rMedium.GetItemSet(); +/*N*/ const SfxPoolItem* pItem; +/*N*/ ScAsciiOptions aOptions; +/*N*/ BOOL bOptInit = FALSE; +/*N*/ +/*N*/ if ( pSet && SFX_ITEM_SET == +/*N*/ pSet->GetItemState( SID_FILE_FILTEROPTIONS, TRUE, &pItem ) ) +/*N*/ { +/*N*/ aOptions.ReadFromString( ((const SfxStringItem*)pItem)->GetValue() ); +/*N*/ bOptInit = TRUE; +/*N*/ } +/*N*/ +/*N*/ if ( !bOptInit ) +/*N*/ { +/*?*/ // default for ascii import (from API without options): +/*?*/ // ISO8859-1/MS_1252 encoding, comma, double quotes +/*?*/ +/*?*/ aOptions.SetCharSet( RTL_TEXTENCODING_MS_1252 ); +/*?*/ aOptions.SetFieldSeps( (sal_Unicode) ',' ); +/*?*/ aOptions.SetTextSep( (sal_Unicode) '"' ); +/*N*/ } +/*N*/ +/*N*/ FltError eError = eERR_OK; +/*N*/ BOOL bOverflow = FALSE; +/*N*/ +/*N*/ if( ! rMedium.IsStorage() ) +/*N*/ { +/*N*/ ScImportExport aImpEx( &aDocument ); +/*N*/ aImpEx.SetExtOptions( aOptions ); +/*N*/ +/*N*/ SvStream* pInStream = rMedium.GetInStream(); +/*N*/ if (pInStream) +/*N*/ { +/*N*/ pInStream->SetStreamCharSet( aOptions.GetCharSet() ); +/*N*/ pInStream->Seek( 0 ); +/*N*/ bRet = aImpEx.ImportStream( *pInStream ); +/*N*/ eError = bRet ? eERR_OK : SCERR_IMPORT_CONNECT; +/*N*/ aDocument.StartAllListeners(); +/*N*/ aDocument.SetDirty(); +/*N*/ bOverflow = aImpEx.IsOverflow(); +/*N*/ } +/*N*/ else +/*N*/ DBG_ERROR( "No Stream" ); +/*N*/ } +/*N*/ +/*N*/ if (eError != eERR_OK) +/*N*/ { +/*N*/ if (!GetError()) +/*N*/ SetError(eError); +/*N*/ } +/*N*/ else if ( bOverflow ) +/*N*/ { +/*N*/ if (!GetError()) +/*N*/ SetError(SCWARN_IMPORT_RANGE_OVERFLOW); +/*N*/ } +/*N*/ bSetColWidths = TRUE; +/*N*/ bSetSimpleTextColWidths = TRUE; +/*N*/ } +/*N*/ else if (aFltName.EqualsAscii(pFilterDBase)) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 String sItStr; +/*N*/ } +/*N*/ else if (aFltName.EqualsAscii(pFilterDif)) +/*N*/ { +/*?*/ SvStream* pStream = rMedium.GetInStream(); +/*?*/ if (pStream) +/*?*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 FltError eError; +/*?*/ } +/*?*/ bSetColWidths = TRUE; +/*?*/ bSetSimpleTextColWidths = TRUE; +/*N*/ } +/*N*/ else if (aFltName.EqualsAscii(pFilterSylk)) +/*N*/ { +/*?*/ FltError eError = SCERR_IMPORT_UNKNOWN; +/*?*/ if( !rMedium.IsStorage() ) +/*?*/ { +/*?*/ ScImportExport aImpEx( &aDocument ); +/*?*/ +/*?*/ SvStream* pInStream = rMedium.GetInStream(); +/*?*/ if (pInStream) +/*?*/ { +/*?*/ pInStream->Seek( 0 ); +/*?*/ bRet = aImpEx.ImportStream( *pInStream, SOT_FORMATSTR_ID_SYLK ); +/*?*/ eError = bRet ? eERR_OK : SCERR_IMPORT_UNKNOWN; +/*?*/ aDocument.StartAllListeners(); +/*?*/ aDocument.SetDirty(); +/*?*/ } +/*?*/ else +/*?*/ DBG_ERROR( "No Stream" ); +/*?*/ } +/*?*/ +/*?*/ if ( eError != eERR_OK && !GetError() ) +/*?*/ SetError(eError); +/*?*/ bSetColWidths = TRUE; +/*?*/ bSetSimpleTextColWidths = TRUE; +/*N*/ } +/*N*/ else if (aFltName.EqualsAscii(pFilterRtf)) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 FltError eError = SCERR_IMPORT_UNKNOWN; +/*N*/ } +/*N*/ else if (aFltName.EqualsAscii(pFilterHtml) || aFltName.EqualsAscii(pFilterHtmlWebQ)) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 FltError eError = SCERR_IMPORT_UNKNOWN; +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ if (!GetError()) +/*N*/ SetError(SCERR_IMPORT_NI); +/*N*/ } +/*N*/ +/*N*/ if (!bCalc3) +/*N*/ aDocument.SetInsertingFromOtherDoc( FALSE ); +/*N*/ } +/*N*/ else +/*N*/ DBG_ERROR("Kein Filter bei ConvertFrom"); +/*N*/ +/*N*/ InitItems(); +/*N*/ CalcOutputFactor(); +/*N*/ if ( bRet && (bSetColWidths || bSetRowHeights) ) +/*N*/ { // Spaltenbreiten/Zeilenhoehen anpassen, Basis 100% Zoom +/*N*/ Fraction aZoom( 1, 1 ); +/*N*/ double nPPTX = ScGlobal::nScreenPPTX * (double) aZoom +/*N*/ / GetOutputFactor(); // Faktor ist Drucker zu Bildschirm +/*N*/ double nPPTY = ScGlobal::nScreenPPTY * (double) aZoom; +/*N*/ VirtualDevice aVirtDev; +/*N*/ // all sheets (for Excel import) +/*N*/ USHORT nTabCount = aDocument.GetTableCount(); +/*N*/ for (USHORT nTab=0; nTab<nTabCount; nTab++) +/*N*/ { +/*N*/ USHORT nEndCol, nEndRow; +/*N*/ aDocument.GetCellArea( nTab, nEndCol, nEndRow ); +/*N*/ aColWidthRange.aEnd.SetCol( nEndCol ); +/*N*/ aColWidthRange.aEnd.SetRow( nEndRow ); +/*N*/ ScMarkData aMark; +/*N*/ aMark.SetMarkArea( aColWidthRange ); +/*N*/ aMark.MarkToMulti(); +/*N*/ // Reihenfolge erst Breite dann Hoehe ist wichtig (vergl. hund.rtf) +/*N*/ if ( bSetColWidths ) +/*N*/ { +/*N*/ for ( USHORT nCol=0; nCol <= nEndCol; nCol++ ) +/*N*/ { +/*N*/ USHORT nWidth = aDocument.GetOptimalColWidth( +/*N*/ nCol, nTab, &aVirtDev, nPPTX, nPPTY, aZoom, aZoom, FALSE, &aMark, +/*N*/ (bSetSimpleTextColWidths && bSimpleColWidth[nCol]) ); +/*N*/ aDocument.SetColWidth( nCol, nTab, +/*N*/ nWidth + (USHORT)ScGlobal::nLastColWidthExtra ); +/*N*/ } +/*N*/ } +/*N*/ // if ( bSetRowHeights ) +/*N*/ // { +/*N*/ // // nExtra must be 0 +/*N*/ // aDocument.SetOptimalHeight( 0, nEndRow, nTab, 0, &aVirtDev, +/*N*/ // nPPTX, nPPTY, aZoom, aZoom, FALSE ); +/*N*/ // } +/*N*/ } +/*N*/ if ( bSetRowHeights ) +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 UpdateAllRowHeights(); // with vdev or printer, depending on configuration +/*N*/ } +/*N*/ FinishedLoading( SFX_LOADED_MAINDOCUMENT | SFX_LOADED_IMAGES ); +/*N*/ +/*N*/ // #73762# invalidate eventually temporary table areas +/*N*/ if ( bRet ) +/*N*/ aDocument.InvalidateTableArea(); +/*N*/ +/*N*/ bIsEmpty = FALSE; +/*N*/ +/*N*/ return bRet; +/*N*/ } + + +/*N*/ void __EXPORT ScDocShell::HandsOff() +/*N*/ { +/*N*/ ScDrawLayer* pDrawLayer = aDocument.GetDrawLayer(); +/*N*/ +/*N*/ SfxInPlaceObject::HandsOff(); +/*N*/ +/*N*/ if( pDrawLayer ) +/*N*/ pDrawLayer->ReleasePictureStorage(); +/*N*/ } + + +/*N*/ BOOL __EXPORT ScDocShell::Save() +/*N*/ { +/*N*/ RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::Save" ); +/*N*/ +/*N*/ ScRefreshTimerProtector( aDocument.GetRefreshTimerControlAddress() ); +/*N*/ +/*N*/ SvStorage* pStor = GetStorage(); +/*N*/ DBG_ASSERT( pStor, "Save: no storage" ); +/*N*/ BOOL bXML = ( pStor->GetVersion() >= SOFFICE_FILEFORMAT_60 ); +/*N*/ +/*N*/ // DoEnterHandler hier nicht (wegen AutoSave), ist im ExecuteSave +/*N*/ +/*N*/ ScChartListenerCollection* pCharts = aDocument.GetChartListenerCollection(); +/*N*/ if (pCharts) +/*N*/ pCharts->UpdateDirtyCharts(); // Charts, die noch upgedated werden muessen +/*N*/ if (pAutoStyleList) +/*?*/ {DBG_BF_ASSERT(0, "STRIP");} //STRIP001 pAutoStyleList->ExecuteAllNow(); // Vorlagen-Timeouts jetzt ausfuehren +/*N*/ if (GetCreateMode()== SFX_CREATE_MODE_STANDARD) +/*N*/ SvInPlaceObject::SetVisArea( Rectangle() ); // normal bearbeitet -> keine VisArea +/*N*/ +/*N*/ // #77577# save additionally XML in storage +/*N*/ if ( GetCreateMode() != SFX_CREATE_MODE_EMBEDDED && !bXML ) +/*N*/ AddXMLAsZipToTheStorage( *pStor ); +/*N*/ +/*N*/ // wait cursor is handled with progress bar +/*N*/ BOOL bRet = SfxInPlaceObject::Save(); +/*N*/ if( bRet ) +/*N*/ { +/*N*/ if (bXML) +/*N*/ bRet = SaveXML( NULL, pStor ); +/*N*/ else +/*N*/ bRet = SaveCalc( pStor ); +/*N*/ } +/*N*/ return bRet; +/*N*/ } + + +/*N*/ BOOL __EXPORT ScDocShell::SaveAs( SvStorage* pStor ) +/*N*/ { +/*N*/ RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::SaveAs" ); +/*N*/ +/*N*/ ScRefreshTimerProtector( aDocument.GetRefreshTimerControlAddress() ); +/*N*/ +/*N*/ DBG_ASSERT( pStor, "SaveAs without storage?" ); +/*N*/ BOOL bXML = ( pStor->GetVersion() >= SOFFICE_FILEFORMAT_60 ); +/*N*/ +/*N*/ // DoEnterHandler hier nicht (wegen AutoSave), ist im ExecuteSave +/*N*/ +/*N*/ ScChartListenerCollection* pCharts = aDocument.GetChartListenerCollection(); +/*N*/ if (pCharts) +/*N*/ pCharts->UpdateDirtyCharts(); // Charts, die noch upgedated werden muessen +/*N*/ if (pAutoStyleList) +/*?*/ {DBG_BF_ASSERT(0, "STRIP");} //STRIP001 pAutoStyleList->ExecuteAllNow(); // Vorlagen-Timeouts jetzt ausfuehren +/*N*/ if (GetCreateMode()== SFX_CREATE_MODE_STANDARD) +/*N*/ SvInPlaceObject::SetVisArea( Rectangle() ); // normal bearbeitet -> keine VisArea +/*N*/ +/*N*/ // #77577# save additionally XML in storage +/*N*/ if ( GetCreateMode() != SFX_CREATE_MODE_EMBEDDED && !bXML ) +/*N*/ AddXMLAsZipToTheStorage( *pStor ); +/*N*/ +/*N*/ // wait cursor is handled with progress bar +/*N*/ BOOL bRet = SfxInPlaceObject::SaveAs( pStor ); +/*N*/ if( bRet ) +/*N*/ { +/*N*/ if (bXML) +/*N*/ bRet = SaveXML( NULL, pStor ); +/*N*/ else +/*N*/ bRet = SaveCalc( pStor ); +/*N*/ } +/*N*/ +/*N*/ return bRet; +/*N*/ } + + + + +// Xcl-like column width measured in characters of standard font. + + + + + + + + + + +/*N*/ BOOL __EXPORT ScDocShell::SaveCompleted( SvStorage * pStor ) +/*N*/ { +/*N*/ return SfxInPlaceObject::SaveCompleted( pStor ); +/*N*/ } + + +/*N*/ BOOL __EXPORT ScDocShell::DoSaveCompleted( SfxMedium * pNewStor ) +/*N*/ { +/*N*/ BOOL bRet = SfxObjectShell::DoSaveCompleted( pNewStor ); +/*N*/ +/*N*/ // SC_HINT_DOC_SAVED fuer Wechsel ReadOnly -> Read/Write +/*N*/ Broadcast( SfxSimpleHint( SC_HINT_DOC_SAVED ) ); +/*N*/ return bRet; +/*N*/ } + + + + + +/*N*/ String ScDocShell::GetOwnFilterName() // static +/*N*/ { +/*N*/ return String::CreateFromAscii(pFilterSc50); +/*N*/ } + +/*N*/ String ScDocShell::GetWebQueryFilterName() // static +/*N*/ { +/*N*/ return String::CreateFromAscii(pFilterHtmlWebQ); +/*N*/ } + +/*N*/ String ScDocShell::GetAsciiFilterName() // static +/*N*/ { +/*N*/ return String::CreateFromAscii(pFilterAscii); +/*N*/ } + +/*N*/ String ScDocShell::GetLotusFilterName() // static +/*N*/ { +/*N*/ return String::CreateFromAscii(pFilterLotus); +/*N*/ } + +/*N*/ String ScDocShell::GetDBaseFilterName() // static +/*N*/ { +/*N*/ return String::CreateFromAscii(pFilterDBase); +/*N*/ } + +/*N*/ String ScDocShell::GetDifFilterName() // static +/*N*/ { +/*N*/ return String::CreateFromAscii(pFilterDif); +/*N*/ } + +/*N*/ BOOL ScDocShell::HasAutomaticTableName( const String& rFilter ) // static +/*N*/ { +/*N*/ // TRUE for those filters that keep the default table name +/*N*/ // (which is language specific) +/*N*/ +/*N*/ return rFilter.EqualsAscii( pFilterAscii ) +/*N*/ || rFilter.EqualsAscii( pFilterLotus ) +/*N*/ || rFilter.EqualsAscii( pFilterExcel4 ) +/*N*/ || rFilter.EqualsAscii( pFilterEx4Temp ) +/*N*/ || rFilter.EqualsAscii( pFilterDBase ) +/*N*/ || rFilter.EqualsAscii( pFilterDif ) +/*N*/ || rFilter.EqualsAscii( pFilterSylk ) +/*N*/ || rFilter.EqualsAscii( pFilterHtml ) +/*N*/ || rFilter.EqualsAscii( pFilterRtf ); +/*N*/ } + +//================================================================== + +#define __SCDOCSHELL_INIT \ + aDocument ( SCDOCMODE_DOCUMENT, this ), \ + pFontList ( NULL ), \ + bHeaderOn ( TRUE ), \ + bFooterOn ( TRUE ), \ + pDocHelper ( NULL ), \ + pAutoStyleList ( NULL ), \ + pOldJobSetup ( NULL ), \ + pPaintLockData ( NULL ), \ + nPrtToScreenFactor( 1.0 ), \ + bIsEmpty ( TRUE ), \ + bIsInUndo ( FALSE ), \ + bDocumentModifiedPending( FALSE ), \ + nDocumentLock ( 0 ), \ + nCanUpdate (::com::sun::star::document::UpdateDocMode::ACCORDING_TO_CONFIG), \ + bUpdateEnabled ( TRUE ), \ + pVirtualDevice_100th_mm ( NULL ), \ + pModificator ( NULL ) + +//------------------------------------------------------------------ + +/*N*/ ScDocShell::ScDocShell( const ScDocShell& rShell ) +/*N*/ : SfxObjectShell( rShell.GetCreateMode() ), +/*N*/ aDdeTextFmt(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("TEXT"))), +/*N*/ bNoInformLost( TRUE ), +/*N*/ __SCDOCSHELL_INIT +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::ScDocShell" ); +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ ScDocShell::ScDocShell( SfxObjectCreateMode eMode ) +/*N*/ : SfxObjectShell( eMode ), +/*N*/ aDdeTextFmt(String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("TEXT"))), +/*N*/ bNoInformLost( TRUE ), +/*N*/ __SCDOCSHELL_INIT +/*N*/ { +/*N*/ RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::ScDocShell" ); +/*N*/ +/*N*/ SetPool( &SC_MOD()->GetPool() ); +/*N*/ +/*N*/ SetShell(this); +/*N*/ bIsInplace = (eMode == SFX_CREATE_MODE_EMBEDDED); +/*N*/ // wird zurueckgesetzt, wenn nicht inplace +/*N*/ +/*N*/ pDocFunc = new ScDocFunc(*this); +/*N*/ +/*N*/ // SetBaseModel needs exception handling +/*N*/ ScModelObj::CreateAndSet( this ); +/*N*/ +/*N*/ StartListening(*this); +/*N*/ SfxStyleSheetPool* pStlPool = aDocument.GetStyleSheetPool(); +/*N*/ if (pStlPool) +/*N*/ StartListening(*pStlPool); + +/*N*/ aDocument.GetDBCollection()->SetRefreshHandler( +/*N*/ LINK( this, ScDocShell, RefreshDBDataHdl ) ); +/*N*/ +/*N*/ // InitItems und CalcOutputFactor werden jetzt nach bei Load/ConvertFrom/InitNew gerufen +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ __EXPORT ScDocShell::~ScDocShell() +/*N*/ { +/*N*/ ResetDrawObjectShell(); // #55570# falls der Drawing-Layer noch versucht, darauf zuzugreifen +/*N*/ +/*N*/ SfxStyleSheetPool* pStlPool = aDocument.GetStyleSheetPool(); +/*N*/ if (pStlPool) +/*N*/ EndListening(*pStlPool); +/*N*/ EndListening(*this); +/*N*/ +/*N*/ delete pAutoStyleList; +/*N*/ +/*N*/ delete pDocFunc; +/*N*/ delete pFontList; +/*N*/ +/*N*/ delete pPaintLockData; +/*N*/ +/*N*/ delete pOldJobSetup; // gesetzt nur bei Fehler in StartJob() +/*N*/ +/*N*/ delete pVirtualDevice_100th_mm; +/*N*/ +/*N*/ if (pModificator) +/*N*/ { +/*N*/ DBG_ERROR("The Modificator should not exist"); +/*N*/ delete pModificator; +/*N*/ } +/*N*/ } + +//------------------------------------------------------------------ + + +/*N*/ void ScDocShell::SetModified( BOOL bModified ) +/*N*/ { +/*N*/ SfxInPlaceObject::SetModified( bModified ); +/*N*/ Broadcast( SfxSimpleHint( SFX_HINT_DOCCHANGED ) ); +/*N*/ } + + +/*N*/ void ScDocShell::SetDocumentModified( BOOL bIsModified /* = TRUE */ ) +/*N*/ { +/*N*/ // BroadcastUno muss auch mit pPaintLockData sofort passieren +/*N*/ //! auch bei SetDrawModified, wenn Drawing angebunden ist +/*N*/ //! dann eigener Hint??? +/*N*/ +/*N*/ if (bIsModified) +/*N*/ aDocument.BroadcastUno( SfxSimpleHint( SFX_HINT_DATACHANGED ) ); +/*N*/ +/*N*/ if ( pPaintLockData && bIsModified ) +/*N*/ { +/*N*/ pPaintLockData->SetModified(); // spaeter... +/*N*/ return; +/*N*/ } +/*N*/ +/*N*/ SetDrawModified( bIsModified ); +/*N*/ +/*N*/ if ( bIsModified ) +/*N*/ { +/*N*/ if ( aDocument.IsAutoCalcShellDisabled() ) +/*?*/ SetDocumentModifiedPending( TRUE ); +/*N*/ else +/*N*/ { +/*N*/ SetDocumentModifiedPending( FALSE ); +/*N*/ aDocument.InvalidateStyleSheetUsage(); +/*N*/ aDocument.InvalidateTableArea(); +/*N*/ aDocument.InvalidateLastTableOpParams(); +/*N*/ aDocument.Broadcast( SC_HINT_DATACHANGED, BCA_BRDCST_ALWAYS, NULL ); +/*N*/ if ( aDocument.IsForcedFormulaPending() && aDocument.GetAutoCalc() ) +/*?*/ { DBG_BF_ASSERT(0, "STRIP");} //STRIP001 aDocument.CalcFormulaTree( TRUE ); +/*N*/ PostDataChanged(); +/*N*/ +/*N*/ // Detective AutoUpdate: +/*N*/ // Update if formulas were modified (DetectiveDirty) or the list contains +/*N*/ // "Trace Error" entries (#75362# - Trace Error can look completely different +/*N*/ // after changes to non-formula cells). +/*N*/ +/*N*/ ScDetOpList* pList = aDocument.GetDetOpList(); +/*N*/ if ( pList && ( aDocument.IsDetectiveDirty() || pList->HasAddError() ) && +/*N*/ pList->Count() && !IsInUndo() && SC_MOD()->GetAppOptions().GetDetectiveAuto() ) +/*N*/ { +/*N*/ GetDocFunc().DetectiveRefresh(TRUE); // TRUE = caused by automatic update +/*N*/ } +/*N*/ aDocument.SetDetectiveDirty(FALSE); // always reset, also if not refreshed +/*N*/ } +/*N*/ } +/*N*/ } + +// SetDrawModified - ohne Formel-Update +// (Drawing muss auch beim normalen SetDocumentModified upgedated werden, +// z.B. bei Tabelle loeschen etc.) + +/*N*/ void ScDocShell::SetDrawModified( BOOL bIsModified /* = TRUE */ ) +/*N*/ { +/*N*/ BOOL bUpdate = ( bIsModified != IsModified() ); +/*N*/ +/*N*/ SetModified( bIsModified ); +/*N*/ +/*N*/ if (bIsModified) +/*N*/ { +/*N*/ if ( aDocument.IsChartListenerCollectionNeedsUpdate() ) +/*N*/ { +/*N*/ aDocument.UpdateChartListenerCollection(); +/*N*/ SFX_APP()->Broadcast(SfxSimpleHint( SC_HINT_DRAW_CHANGED )); // Navigator +/*N*/ } +/*N*/ SC_MOD()->AnythingChanged(); +/*N*/ } +/*N*/ } + + + + + + +/*N*/ Window* ScDocShell::GetDialogParent() +/*N*/ { +/*N*/ return Application::GetDefDialogParent(); +/*N*/ } + +/*N*/ VirtualDevice* ScDocShell::GetVirtualDevice_100th_mm() +/*N*/ { +/*N*/ if (!pVirtualDevice_100th_mm) +/*N*/ { +/*N*/ pVirtualDevice_100th_mm = new VirtualDevice; +/*N*/ pVirtualDevice_100th_mm->SetMapMode( MAP_100TH_MM ); +/*N*/ } +/*N*/ return pVirtualDevice_100th_mm; +/*N*/ } + +// --- ScDocShellModificator ------------------------------------------ + +/*N*/ ScDocShellModificator::ScDocShellModificator( ScDocShell& rDS ) +/*N*/ : +/*N*/ rDocShell( rDS ), +/*N*/ aProtector( rDS.GetDocument()->GetRefreshTimerControlAddress() ) +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ bAutoCalcShellDisabled = pDoc->IsAutoCalcShellDisabled(); +/*N*/ bIdleDisabled = pDoc->IsIdleDisabled(); +/*N*/ pDoc->SetAutoCalcShellDisabled( TRUE ); +/*N*/ pDoc->DisableIdle( TRUE ); +/*N*/ } + + +/*N*/ ScDocShellModificator::~ScDocShellModificator() +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ pDoc->SetAutoCalcShellDisabled( bAutoCalcShellDisabled ); +/*N*/ if ( !bAutoCalcShellDisabled && rDocShell.IsDocumentModifiedPending() ) +/*?*/ rDocShell.SetDocumentModified(); // last one shuts off the lights +/*N*/ pDoc->DisableIdle( bIdleDisabled ); +/*N*/ } + + +/*N*/ void ScDocShellModificator::SetDocumentModified() +/*N*/ { +/*N*/ ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ if ( !pDoc->IsImportingXML() ) +/*N*/ { +/*N*/ // AutoCalcShellDisabled temporaer restaurieren +/*N*/ BOOL bDisabled = pDoc->IsAutoCalcShellDisabled(); +/*N*/ pDoc->SetAutoCalcShellDisabled( bAutoCalcShellDisabled ); +/*N*/ rDocShell.SetDocumentModified(); +/*N*/ pDoc->SetAutoCalcShellDisabled( bDisabled ); +/*N*/ } +/*N*/ else +/*N*/ { +/*?*/ // uno broadcast is necessary for api to work +/*?*/ // -> must also be done during xml import +/*?*/ pDoc->BroadcastUno( SfxSimpleHint( SFX_HINT_DATACHANGED ) ); +/*N*/ } +/*N*/ } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_docsh2.cxx b/binfilter/bf_sc/source/ui/docshell/sc_docsh2.cxx new file mode 100644 index 000000000000..6df6d9aba97e --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_docsh2.cxx @@ -0,0 +1,262 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include <bf_svx/svdpage.hxx> + +#ifdef _MSC_VER +#pragma hdrstop +#endif + + +#include "scitems.hxx" +#include <bf_svtools/ctrltool.hxx> +#include <bf_svx/flstitem.hxx> +#include <bf_svx/drawitem.hxx> +#include <bf_sfx2/printer.hxx> +#include <bf_svx/svditer.hxx> +#include <bf_svx/svdoole2.hxx> +#include <bf_offmgr/app.hxx> +#include <bf_svx/asiancfg.hxx> +#include <bf_svx/forbiddencharacterstable.hxx> +#include <rtl/logfile.hxx> + + + +// INCLUDE --------------------------------------------------------------- +/* +*/ +#include "drwlayer.hxx" +#include "stlpool.hxx" +#include "docsh.hxx" +#include "docfunc.hxx" +#include "bf_sc.hrc" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------ + +/*N*/ BOOL __EXPORT ScDocShell::InitNew( SvStorage * pStor ) +/*N*/ { +/*N*/ RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::InitNew" ); +/*N*/ +/*N*/ BOOL bRet = SfxInPlaceObject::InitNew( pStor ); +/*N*/ +/*N*/ aDocument.MakeTable(0); +/*N*/ // zusaetzliche Tabellen werden von der ersten View angelegt, +/*N*/ // wenn bIsEmpty dann noch TRUE ist +/*N*/ +/*N*/ if( bRet ) +/*N*/ { +/*N*/ Size aSize( (long) ( STD_COL_WIDTH * HMM_PER_TWIPS * OLE_STD_CELLS_X ), +/*N*/ (long) ( ScGlobal::nStdRowHeight * HMM_PER_TWIPS * OLE_STD_CELLS_Y ) ); +/*N*/ // hier muss auch der Start angepasst werden +/*N*/ SetVisAreaOrSize( Rectangle( Point(), aSize ), TRUE ); +/*N*/ } +/*N*/ +/*N*/ // InitOptions sets the document languages, must be called before CreateStandardStyles +/*N*/ InitOptions(); +/*N*/ +/*N*/ aDocument.GetStyleSheetPool()->CreateStandardStyles(); +/*N*/ aDocument.UpdStlShtPtrsFrmNms(); +/*N*/ +/*N*/ // SetDocumentModified ist in Load/InitNew nicht mehr erlaubt! +/*N*/ +/*N*/ InitItems(); +/*N*/ CalcOutputFactor(); +/*N*/ +/*N*/ return bRet; +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ void ScDocShell::InitItems() +/*N*/ { +/*N*/ // AllItemSet fuer Controller mit benoetigten Items fuellen: +/*N*/ +/*N*/ if ( pFontList ) +/*N*/ delete pFontList; +/*N*/ +/*N*/ // Druck-Optionen werden beim Drucken und evtl. in GetPrinter gesetzt +/*N*/ +/*N*/ pFontList = new FontList( GetPrinter(), Application::GetDefaultDevice() ); +/*N*/ PutItem( SvxFontListItem( pFontList, SID_ATTR_CHAR_FONTLIST ) ); +/*N*/ +/*N*/ ScDrawLayer* pDrawLayer = aDocument.GetDrawLayer(); +/*N*/ if (pDrawLayer) +/*N*/ { +/*N*/ PutItem( SvxColorTableItem ( pDrawLayer->GetColorTable() ) ); +/*N*/ PutItem( SvxGradientListItem( pDrawLayer->GetGradientList() ) ); +/*N*/ PutItem( SvxHatchListItem ( pDrawLayer->GetHatchList() ) ); +/*N*/ PutItem( SvxBitmapListItem ( pDrawLayer->GetBitmapList() ) ); +/*N*/ PutItem( SvxDashListItem ( pDrawLayer->GetDashList() ) ); +/*N*/ PutItem( SvxLineEndListItem ( pDrawLayer->GetLineEndList() ) ); +/*N*/ +/*N*/ // andere Anpassungen nach dem Anlegen des DrawLayers +/*N*/ +/*N*/ //if (SfxObjectShell::HasSbxObject()) +/*N*/ pDrawLayer->UpdateBasic(); // DocShell-Basic in DrawPages setzen +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ // always use global color table instead of local copy +/*N*/ +/*N*/ PutItem( SvxColorTableItem( OFF_APP()->GetStdColorTable() ) ); +/*N*/ } +/*N*/ +/*N*/ if ( !aDocument.GetForbiddenCharacters().is() || +/*N*/ !aDocument.IsValidAsianCompression() || !aDocument.IsValidAsianKerning() ) +/*N*/ { +/*N*/ // get settings from SvxAsianConfig +/*N*/ SvxAsianConfig aAsian( sal_False ); +/*N*/ +/*N*/ if ( !aDocument.GetForbiddenCharacters().is() ) +/*N*/ { +/*N*/ // set forbidden characters if necessary +/*N*/ uno::Sequence<lang::Locale> aLocales = aAsian.GetStartEndCharLocales(); +/*N*/ if (aLocales.getLength()) +/*N*/ { +/*?*/ rtl::Reference<SvxForbiddenCharactersTable> xForbiddenTable = +/*?*/ new SvxForbiddenCharactersTable( aDocument.GetServiceManager() ); +/*?*/ +/*?*/ const lang::Locale* pLocales = aLocales.getConstArray(); +/*?*/ for (sal_Int32 i = 0; i < aLocales.getLength(); i++) +/*?*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 i18n::ForbiddenCharacters aForbidden; +/*?*/ } +/*?*/ +/*?*/ aDocument.SetForbiddenCharacters( xForbiddenTable ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ if ( !aDocument.IsValidAsianCompression() ) +/*N*/ { +/*N*/ // set compression mode from configuration if not already set (e.g. XML import) +/*N*/ aDocument.SetAsianCompression( aAsian.GetCharDistanceCompression() ); +/*N*/ } +/*N*/ +/*N*/ if ( !aDocument.IsValidAsianKerning() ) +/*N*/ { +/*N*/ // set asian punctuation kerning from configuration if not already set (e.g. XML import) +/*N*/ aDocument.SetAsianKerning( !aAsian.IsKerningWesternTextOnly() ); // reversed +/*N*/ } +/*N*/ } +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ void ScDocShell::ResetDrawObjectShell() +/*N*/ { +/*N*/ ScDrawLayer* pDrawLayer = aDocument.GetDrawLayer(); +/*N*/ if (pDrawLayer) +/*N*/ pDrawLayer->SetObjectShell( NULL ); +/*N*/ } + +//------------------------------------------------------------------ + + + + +//------------------------------------------------------------------ + + +/*N*/ ScDrawLayer* ScDocShell::MakeDrawLayer() +/*N*/ { +/*N*/ ScDrawLayer* pDrawLayer = aDocument.GetDrawLayer(); +/*N*/ if (!pDrawLayer) +/*N*/ { +/*N*/ RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::MakeDrawLayer" ); +/*N*/ +/*N*/ aDocument.InitDrawLayer(this); +/*N*/ pDrawLayer = aDocument.GetDrawLayer(); +/*N*/ InitItems(); // incl. Undo und Basic +/*N*/ Broadcast( SfxSimpleHint( SC_HINT_DRWLAYER_NEW ) ); +/*N*/ if (nDocumentLock) +/*N*/ pDrawLayer->setLock(TRUE); +/*N*/ } +/*N*/ return pDrawLayer; +/*N*/ } + +//------------------------------------------------------------------ + + +/*N*/ void ScDocShell::RemoveUnknownObjects() +/*N*/ { +/*N*/ // OLE-Objekte loeschen, wenn kein Drawing-Objekt dazu existiert +/*N*/ // Loeschen wie in SvPersist::CleanUp +/*N*/ +/*N*/ ScDrawLayer* pDrawLayer = aDocument.GetDrawLayer(); +/*N*/ const SvInfoObjectMemberList* pChildList = GetObjectList(); +/*N*/ +/*N*/ if( pChildList && pChildList->Count() ) +/*N*/ { +/*N*/ for( ULONG i=0; i<pChildList->Count(); ) +/*N*/ { +/*N*/ SvInfoObjectRef pEle = pChildList->GetObject(i); +/*N*/ String aObjName = pEle->GetObjName(); +/*N*/ BOOL bFound = FALSE; +/*N*/ if ( pDrawLayer ) +/*N*/ { +/*N*/ USHORT nTabCount = pDrawLayer->GetPageCount(); +/*N*/ for (USHORT nTab=0; nTab<nTabCount && !bFound; nTab++) +/*N*/ { +/*N*/ SdrPage* pPage = pDrawLayer->GetPage(nTab); +/*N*/ DBG_ASSERT(pPage,"Page ?"); +/*N*/ if (pPage) +/*N*/ { +/*N*/ SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS ); +/*N*/ SdrObject* pObject = aIter.Next(); +/*N*/ while (pObject && !bFound) +/*N*/ { +/*N*/ // name from InfoObject is PersistName +/*N*/ if ( pObject->ISA(SdrOle2Obj) && +/*N*/ static_cast<SdrOle2Obj*>(pObject)->GetPersistName() == aObjName ) +/*N*/ bFound = TRUE; +/*N*/ pObject = aIter.Next(); +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ if (!bFound) +/*N*/ { +/*?*/ DBG_ASSERT(pEle->GetRefCount()==2, "Loeschen von referenziertem Storage"); +/*?*/ String aStorName(pEle->GetStorageName()); +/*?*/ SvPersist::Remove(pEle); +/*?*/ GetStorage()->Remove(aStorName); +/*N*/ } +/*N*/ else +/*N*/ i++; +/*N*/ } +/*N*/ } +/*N*/ } + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_docsh3.cxx b/binfilter/bf_sc/source/ui/docshell/sc_docsh3.cxx new file mode 100644 index 000000000000..9924b46e6ffb --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_docsh3.cxx @@ -0,0 +1,474 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "scitems.hxx" +#include <bf_svx/flstitem.hxx> +#include <bf_svx/paperinf.hxx> + +#include <bf_svtools/stritem.hxx> + +#include <bf_svx/sizeitem.hxx> +#include <bf_offmgr/app.hxx> + +#include <bf_sfx2/misccfg.hxx> +#include <bf_sfx2/printer.hxx> +#include <bf_svtools/ctrltool.hxx> +#include <vcl/virdev.hxx> + +#include "viewopti.hxx" +#include "docsh.hxx" +#include "scmod.hxx" +#include "docpool.hxx" +#include "stlpool.hxx" +#include "patattr.hxx" +#include "hints.hxx" +#include "docoptio.hxx" +#include "pntlock.hxx" +#include "bf_sc.hrc" +#include "inputopt.hxx" +#include "drwlayer.hxx" + +namespace binfilter { + +//------------------------------------------------------------------ + +// +// Redraw - Benachrichtigungen +// + + + +/*N*/ void ScDocShell::PostDataChanged() +/*N*/ { +/*N*/ Broadcast( SfxSimpleHint( FID_DATACHANGED ) ); +/*N*/ aDocument.ResetChanged( ScRange(0,0,0,MAXCOL,MAXROW,MAXTAB) ); +/*N*/ +/*N*/ SFX_APP()->Broadcast(SfxSimpleHint( FID_ANYDATACHANGED )); // Navigator +/*N*/ //! Navigator direkt benachrichtigen! +/*N*/ } + +/*N*/ void ScDocShell::PostPaint( USHORT nStartCol, USHORT nStartRow, USHORT nStartTab, +/*N*/ USHORT nEndCol, USHORT nEndRow, USHORT nEndTab, USHORT nPart, +/*N*/ USHORT nExtFlags ) +/*N*/ { +/*N*/ if (nStartCol > MAXCOL) nStartCol = MAXCOL; +/*N*/ if (nStartRow > MAXROW) nStartRow = MAXROW; +/*N*/ if (nEndCol > MAXCOL) nEndCol = MAXCOL; +/*N*/ if (nEndRow > MAXROW) nEndRow = MAXROW; +/*N*/ +/*N*/ if ( pPaintLockData ) +/*N*/ { +/*N*/ //! nExtFlags ??? +/*N*/ pPaintLockData->AddRange( ScRange( nStartCol, nStartRow, nStartTab, +/*N*/ nEndCol, nEndRow, nEndTab ), nPart ); +/*N*/ return; +/*N*/ } +/*N*/ +/*N*/ +/*N*/ if (nExtFlags & SC_PF_LINES) // Platz fuer Linien berücksichtigen +/*N*/ { +/*N*/ //! Abfrage auf versteckte Spalten/Zeilen! +/*N*/ if (nStartCol>0) --nStartCol; +/*N*/ if (nEndCol<MAXCOL) ++nEndCol; +/*N*/ if (nStartRow>0) --nStartRow; +/*N*/ if (nEndRow<MAXROW) ++nEndRow; +/*N*/ } +/*N*/ +/*N*/ // um zusammengefasste erweitern +/*N*/ if (nExtFlags & SC_PF_TESTMERGE) +/*?*/ aDocument.ExtendMerge( nStartCol, nStartRow, nEndCol, nEndRow, nStartTab ); +/*N*/ +/*N*/ if ( nStartCol != 0 || nEndCol != MAXCOL ) +/*N*/ { +/*?*/ // If rotated text is involved, repaint the entire rows. +/*?*/ // #i9731# If there's right-to-left text to the left of the area, +/*?*/ // the displacement for clipping of that text may change. +/*?*/ if ( aDocument.HasAttrib( 0,nStartRow,nStartTab, +/*?*/ MAXCOL,nEndRow,nEndTab, HASATTR_ROTATE | HASATTR_RTL ) ) +/*?*/ { +/*?*/ nStartCol = 0; +/*?*/ nEndCol = MAXCOL; +/*?*/ } +/*N*/ } +/*N*/ +/*N*/ Broadcast( ScPaintHint( ScRange( nStartCol, nStartRow, nStartTab, +/*N*/ nEndCol, nEndRow, nEndTab ), nPart ) ); +/*N*/ +/*N*/ if ( nPart & PAINT_GRID ) +/*N*/ aDocument.ResetChanged( ScRange(nStartCol,nStartRow,nStartTab,nEndCol,nEndRow,nEndTab) ); +/*N*/ } + +/*N*/ void ScDocShell::PostPaint( const ScRange& rRange, USHORT nPart, USHORT nExtFlags ) +/*N*/ { +/*N*/ PostPaint( rRange.aStart.Col(), rRange.aStart.Row(), rRange.aStart.Tab(), +/*N*/ rRange.aEnd.Col(), rRange.aEnd.Row(), rRange.aEnd.Tab(), +/*N*/ nPart, nExtFlags ); +/*N*/ } + +/*N*/ void ScDocShell::PostPaintGridAll() +/*N*/ { +/*N*/ PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID ); +/*N*/ } + +/*N*/ void ScDocShell::PostPaintCell( USHORT nCol, USHORT nRow, USHORT nTab ) +/*N*/ { +/*N*/ PostPaint( nCol,nRow,nTab, nCol,nRow,nTab, PAINT_GRID, SC_PF_TESTMERGE ); +/*N*/ } + +/*N*/ void ScDocShell::PostPaintExtras() +/*N*/ { +/*N*/ PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_EXTRAS ); +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ void ScDocShell::LockPaint_Impl(BOOL bDoc) +/*N*/ { +/*N*/ if ( pPaintLockData ) +/*N*/ pPaintLockData->IncLevel(bDoc); +/*N*/ else +/*N*/ pPaintLockData = new ScPaintLockData(0); //! Modus... +/*N*/ } + +/*N*/ void ScDocShell::UnlockPaint_Impl(BOOL bDoc) +/*N*/ { +/*N*/ if ( pPaintLockData ) +/*N*/ { +/*N*/ if ( pPaintLockData->GetLevel(bDoc) ) +/*N*/ pPaintLockData->DecLevel(bDoc); +/*N*/ else if (!pPaintLockData->GetLevel(!bDoc)) +/*N*/ { +/*N*/ // Paint jetzt ausfuehren +/*N*/ +/*N*/ ScPaintLockData* pPaint = pPaintLockData; +/*N*/ pPaintLockData = NULL; // nicht weitersammeln +/*N*/ +/*N*/ ScRangeListRef xRangeList = pPaint->GetRangeList(); +/*N*/ if (xRangeList) +/*N*/ { +/*N*/ USHORT nParts = pPaint->GetParts(); +/*N*/ ULONG nCount = xRangeList->Count(); +/*N*/ for ( ULONG i=0; i<nCount; i++ ) +/*N*/ { +/*N*/ //! nExtFlags ??? +/*N*/ ScRange aRange = *xRangeList->GetObject(i); +/*N*/ PostPaint( aRange.aStart.Col(), aRange.aStart.Row(), aRange.aStart.Tab(), +/*N*/ aRange.aEnd.Col(), aRange.aEnd.Row(), aRange.aEnd.Tab(), +/*N*/ nParts ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ if ( pPaint->GetModified() ) +/*N*/ SetDocumentModified(); +/*N*/ +/*N*/ delete pPaint; +/*N*/ } +/*N*/ } +/*N*/ else +/*N*/ DBG_ERROR("UnlockPaint ohne LockPaint"); +/*N*/ } + +/*N*/ void ScDocShell::LockDocument_Impl(USHORT nNew) +/*N*/ { +/*N*/ if (!nDocumentLock) +/*N*/ { +/*N*/ ScDrawLayer* pDrawLayer = aDocument.GetDrawLayer(); +/*N*/ if (pDrawLayer) +/*N*/ pDrawLayer->setLock(TRUE); +/*N*/ } +/*N*/ nDocumentLock = nNew; +/*N*/ } + +/*N*/ void ScDocShell::UnlockDocument_Impl(USHORT nNew) +/*N*/ { +/*N*/ nDocumentLock = nNew; +/*N*/ if (!nDocumentLock) +/*N*/ { +/*N*/ ScDrawLayer* pDrawLayer = aDocument.GetDrawLayer(); +/*N*/ if (pDrawLayer) +/*N*/ pDrawLayer->setLock(FALSE); +/*N*/ } +/*N*/ } + +/*N*/ USHORT ScDocShell::GetLockCount() const +/*N*/ { +/*N*/ return nDocumentLock; +/*N*/ } + +/*N*/ void ScDocShell::SetLockCount(USHORT nNew) +/*N*/ { +/*N*/ if (nNew) // setzen +/*N*/ { +/*N*/ if ( !pPaintLockData ) +/*N*/ pPaintLockData = new ScPaintLockData(0); //! Modus... +/*N*/ pPaintLockData->SetLevel(nNew-1, TRUE); +/*N*/ LockDocument_Impl(nNew); +/*N*/ } +/*N*/ else if (pPaintLockData) // loeschen +/*N*/ { +/*N*/ pPaintLockData->SetLevel(0, TRUE); // bei Unlock sofort ausfuehren +/*N*/ UnlockPaint_Impl(TRUE); // jetzt +/*N*/ UnlockDocument_Impl(0); +/*N*/ } +/*N*/ } + +/*N*/ void ScDocShell::LockPaint() +/*N*/ { +/*N*/ LockPaint_Impl(FALSE); +/*N*/ } + +/*N*/ void ScDocShell::UnlockPaint() +/*N*/ { +/*N*/ UnlockPaint_Impl(FALSE); +/*N*/ } + +/*N*/ void ScDocShell::LockDocument() +/*N*/ { +/*N*/ LockPaint_Impl(TRUE); +/*N*/ LockDocument_Impl(nDocumentLock + 1); +/*N*/ } + +/*N*/ void ScDocShell::UnlockDocument() +/*N*/ { +/*N*/ if (nDocumentLock) +/*N*/ { +/*N*/ UnlockPaint_Impl(TRUE); +/*N*/ UnlockDocument_Impl(nDocumentLock - 1); +/*N*/ } +/*N*/ else +/*N*/ DBG_ERROR("UnlockDocument without LockDocument"); +/*N*/ } + +//------------------------------------------------------------------ + + +/*N*/ void ScDocShell::CalcOutputFactor() +/*N*/ { +/*N*/ if (bIsInplace) +/*N*/ { +/*N*/ nPrtToScreenFactor = 1.0; // passt sonst nicht zur inaktiven Darstellung +/*N*/ return; +/*N*/ } +/*N*/ +/*N*/ BOOL bTextWysiwyg = SC_MOD()->GetInputOptions().GetTextWysiwyg(); +/*N*/ if (bTextWysiwyg) +/*N*/ { +/*N*/ nPrtToScreenFactor = 1.0; +/*N*/ return; +/*N*/ } +/*N*/ +/*N*/ String aTestString = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM( +/*N*/ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890123456789" )); +/*N*/ long nPrinterWidth = 0; +/*N*/ long nWindowWidth = 0; +/*N*/ const ScPatternAttr* pPattern = (const ScPatternAttr*)&aDocument.GetPool()-> +/*N*/ GetDefaultItem(ATTR_PATTERN); +/*N*/ +/*N*/ Font aDefFont; +/*N*/ Printer* pPrinter = GetPrinter(); +/*N*/ if (pPrinter) +/*N*/ { +/*N*/ MapMode aOldMode = pPrinter->GetMapMode(); +/*N*/ Font aOldFont = pPrinter->GetFont(); +/*N*/ +/*N*/ pPrinter->SetMapMode(MAP_PIXEL); +/*N*/ pPattern->GetFont(aDefFont, SC_AUTOCOL_BLACK, pPrinter); // font color doesn't matter here +/*N*/ pPrinter->SetFont(aDefFont); +/*N*/ nPrinterWidth = pPrinter->PixelToLogic( Size( pPrinter->GetTextWidth(aTestString), 0 ), +/*N*/ MAP_100TH_MM ).Width(); +/*N*/ pPrinter->SetFont(aOldFont); +/*N*/ pPrinter->SetMapMode(aOldMode); +/*N*/ } +/*N*/ else +/*N*/ DBG_ERROR("kein Drucker ?!?!?"); +/*N*/ +/*N*/ VirtualDevice aVirtWindow( *Application::GetDefaultDevice() ); +/*N*/ aVirtWindow.SetMapMode(MAP_PIXEL); +/*N*/ pPattern->GetFont(aDefFont, SC_AUTOCOL_BLACK, &aVirtWindow); // font color doesn't matter here +/*N*/ aVirtWindow.SetFont(aDefFont); +/*N*/ nWindowWidth = aVirtWindow.GetTextWidth(aTestString); +/*N*/ nWindowWidth = (long) ( nWindowWidth / ScGlobal::nScreenPPTX * HMM_PER_TWIPS ); +/*N*/ +/*N*/ if (nPrinterWidth && nWindowWidth) +/*N*/ nPrtToScreenFactor = nPrinterWidth / (double) nWindowWidth; +/*N*/ else +/*N*/ { +/*N*/ DBG_ERROR("GetTextSize gibt 0 ??"); +/*N*/ nPrtToScreenFactor = 1.0; +/*N*/ } +/*N*/ } + +/*N*/ double ScDocShell::GetOutputFactor() const +/*N*/ { +/*N*/ return nPrtToScreenFactor; +/*N*/ } + +//--------------------------------------------------------------------- + +/*N*/ void ScDocShell::InitOptions() // Fortsetzung von InitNew (CLOOKs) +/*N*/ { +/*N*/ // Einstellungen aus dem SpellCheckCfg kommen in Doc- und ViewOptions +/*N*/ +/*N*/ USHORT nDefLang, nCjkLang, nCtlLang; +/*N*/ BOOL bAutoSpell, bHideAuto; +/*N*/ ScModule::GetSpellSettings( nDefLang, nCjkLang, nCtlLang, bAutoSpell, bHideAuto ); +/*N*/ ScModule* pScMod = SC_MOD(); +/*N*/ +/*N*/ ScDocOptions aDocOpt = pScMod->GetDocOptions(); +/*N*/ ScViewOptions aViewOpt = pScMod->GetViewOptions(); +/*N*/ aDocOpt.SetAutoSpell( bAutoSpell ); +/*N*/ aViewOpt.SetHideAutoSpell( bHideAuto ); +/*N*/ +/*N*/ // zweistellige Jahreszahleneingabe aus Extras->Optionen->Allgemein->Sonstiges +/*N*/ aDocOpt.SetYear2000( SFX_APP()->GetMiscConfig()->GetYear2000() ); +/*N*/ +/*N*/ aDocument.SetDocOptions( aDocOpt ); +/*N*/ aDocument.SetViewOptions( aViewOpt ); +/*N*/ +/*N*/ // Druck-Optionen werden jetzt direkt vor dem Drucken gesetzt +/*N*/ +/*N*/ aDocument.SetLanguage( (LanguageType) nDefLang, (LanguageType) nCjkLang, (LanguageType) nCtlLang ); +/*N*/ } + +//--------------------------------------------------------------------- + +/*N*/ Printer* ScDocShell::GetDocumentPrinter() // fuer OLE +/*N*/ { +/*N*/ return aDocument.GetPrinter(); +/*N*/ } + +/*N*/ SfxPrinter* ScDocShell::GetPrinter() +/*N*/ { +/*N*/ return aDocument.GetPrinter(); +/*N*/ } + + +/*N*/ USHORT ScDocShell::SetPrinter( SfxPrinter* pNewPrinter, USHORT nDiffFlags ) +/*N*/ { +/*N*/ if (nDiffFlags & SFX_PRINTER_PRINTER) +/*N*/ { +/*N*/ if ( aDocument.GetPrinter() != pNewPrinter ) +/*N*/ { +/*N*/ aDocument.SetPrinter( pNewPrinter ); +/*N*/ aDocument.SetPrintOptions(); +/*N*/ +/*N*/ delete pFontList; +/*N*/ pFontList = new FontList( pNewPrinter, Application::GetDefaultDevice() ); +/*N*/ SvxFontListItem aFontListItem( pFontList, SID_ATTR_CHAR_FONTLIST ); +/*N*/ PutItem( aFontListItem ); +/*N*/ +/*N*/ CalcOutputFactor(); +/*N*/ } +/*N*/ } +/*N*/ else if (nDiffFlags & SFX_PRINTER_JOBSETUP) +/*N*/ { +/*?*/ SfxPrinter* pOldPrinter = aDocument.GetPrinter(); +/*?*/ if (pOldPrinter) +/*?*/ { +/*?*/ pOldPrinter->SetJobSetup( pNewPrinter->GetJobSetup() ); +/*?*/ +/*?*/ // #i6706# Call SetPrinter with the old printer again, so the drawing layer +/*?*/ // RefDevice is set (calling ReformatAllTextObjects and rebuilding charts), +/*?*/ // because the JobSetup (printer device settings) may affect text layout. +/*?*/ aDocument.SetPrinter( pOldPrinter ); +/*?*/ CalcOutputFactor(); // also with the new settings +/*?*/ } +/*N*/ } +/*N*/ +/*N*/ if (nDiffFlags & SFX_PRINTER_OPTIONS) +/*N*/ { +/*N*/ aDocument.SetPrintOptions(); //! aus neuem Printer ??? +/*N*/ } +/*N*/ +/*N*/ if (nDiffFlags & (SFX_PRINTER_CHG_ORIENTATION | SFX_PRINTER_CHG_SIZE)) +/*N*/ { +/*N*/ String aStyle = aDocument.GetPageStyle( GetCurTab() ); +/*N*/ ScStyleSheetPool* pStPl = aDocument.GetStyleSheetPool(); +/*N*/ SfxStyleSheet* pStyleSheet = (SfxStyleSheet*)pStPl->Find(aStyle, SFX_STYLE_FAMILY_PAGE); +/*N*/ if (pStyleSheet) +/*N*/ { +/*N*/ SfxItemSet& rSet = pStyleSheet->GetItemSet(); +/*N*/ +/*N*/ if (nDiffFlags & SFX_PRINTER_CHG_ORIENTATION) +/*N*/ { +/*N*/ const SvxPageItem& rOldItem = (const SvxPageItem&)rSet.Get(ATTR_PAGE); +/*N*/ BOOL bWasLand = rOldItem.IsLandscape(); +/*N*/ BOOL bNewLand = ( pNewPrinter->GetOrientation() == ORIENTATION_LANDSCAPE ); +/*N*/ if (bNewLand != bWasLand) +/*N*/ { +/*?*/ SvxPageItem aNewItem( rOldItem ); +/*?*/ aNewItem.SetLandscape( bNewLand ); +/*?*/ rSet.Put( aNewItem ); +/*?*/ +/*?*/ // Groesse umdrehen +/*?*/ Size aOldSize = ((const SvxSizeItem&)rSet.Get(ATTR_PAGE_SIZE)).GetSize(); +/*?*/ Size aNewSize(aOldSize.Height(),aOldSize.Width()); +/*?*/ SvxSizeItem aNewSItem(ATTR_PAGE_SIZE,aNewSize); +/*?*/ rSet.Put( aNewSItem ); +/*N*/ } +/*N*/ } +/*N*/ if (nDiffFlags & SFX_PRINTER_CHG_SIZE) +/*N*/ { +/*N*/ SvxSizeItem aPaperSizeItem( ATTR_PAGE_SIZE, SvxPaperInfo::GetPaperSize(pNewPrinter) ); +/*N*/ rSet.Put( aPaperSizeItem ); +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ PostPaint(0,0,0,MAXCOL,MAXROW,MAXTAB,PAINT_ALL); +/*N*/ +/*N*/ return 0; +/*N*/ } + +//--------------------------------------------------------------------- + + + + +//--------------------------------------------------------------------- + + +//--------------------------------------------------------------------- +// +// Merge (Aenderungen zusammenfuehren) +// +//--------------------------------------------------------------------- + + + + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_docsh4.cxx b/binfilter/bf_sc/source/ui/docshell/sc_docsh4.cxx new file mode 100644 index 000000000000..9a2fcea23328 --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_docsh4.cxx @@ -0,0 +1,229 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#define ITEMID_FIELD EE_FEATURE_FIELD + +#include <bf_sfx2/app.hxx> +#include <bf_sfx2/docfile.hxx> +#include <bf_svtools/ehdl.hxx> +#include "bf_basic/sbxcore.hxx" +#include <bf_sfx2/request.hxx> +#include <bf_svtools/sfxecode.hxx> +#include <bf_svtools/whiter.hxx> +#include <vcl/msgbox.hxx> +#include <vcl/waitobj.hxx> + +#include "docsh.hxx" +#include "docfunc.hxx" +#include "bf_sc.hrc" +#include "stlpool.hxx" +#include "appoptio.hxx" +#include "globstr.hrc" +#include "dbdocfun.hxx" +#include "printfun.hxx" // DrawToDev +#include "viewdata.hxx" +#include "dbcolect.hxx" +#include "scmod.hxx" +#include "tablink.hxx" // ScDocumentLoader statics +#include "docoptio.hxx" + +#include <com/sun/star/document/UpdateDocMode.hpp> +namespace binfilter { + +//------------------------------------------------------------------ + +#define IS_SHARE_HEADER(set) \ + ((SfxBoolItem&) \ + ((SvxSetItem&)(set).Get(ATTR_PAGE_HEADERSET)).GetItemSet(). \ + Get(ATTR_PAGE_SHARED)).GetValue() + +#define IS_SHARE_FOOTER(set) \ + ((SfxBoolItem&) \ + ((SvxSetItem&)(set).Get(ATTR_PAGE_FOOTERSET)).GetItemSet(). \ + Get(ATTR_PAGE_SHARED)).GetValue() + +#define IS_AVAILABLE(WhichId,ppItem) \ + (pReqArgs->GetItemState((WhichId), TRUE, ppItem ) == SFX_ITEM_SET) + +#define SC_PREVIEW_SIZE_X 10000 +#define SC_PREVIEW_SIZE_Y 12400 + + +//------------------------------------------------------------------ + + +//------------------------------------------------------------------ + + +//------------------------------------------------------------------ + +/*N*/ void ScDocShell::DoRecalc( BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScInputHandler* pHdl = SC_MOD()->GetInputHdl(pSh); +/*N*/ } + +/*N*/ void ScDocShell::DoHardRecalc( BOOL bApi ) +/*N*/ { +/*N*/ aDocument.CalcAll(); +/*N*/ GetDocFunc().DetectiveRefresh(); // erzeugt eigenes Undo +/*N*/ PostPaintGridAll(); +/*N*/ } + +//------------------------------------------------------------------ + + +//------------------------------------------------------------------ + +/*N*/ void ScDocShell::NotifyStyle( const SfxStyleSheetHint& rHint ) +/*N*/ { +/*N*/ USHORT nId = rHint.GetHint(); +/*N*/ const SfxStyleSheetBase* pStyle = rHint.GetStyleSheet(); +/*N*/ if (!pStyle) +/*N*/ return; +/*N*/ +/*N*/ if ( pStyle->GetFamily() == SFX_STYLE_FAMILY_PAGE ) +/*N*/ { +/*N*/ if ( nId == SFX_STYLESHEET_MODIFIED ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocShellModificator aModificator( *this ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ // alles andere geht ueber Slots... +/*N*/ } + +// wie in printfun.cxx +#define ZOOM_MIN 10 + + + +/*N*/ void ScDocShell::PageStyleModified( const String& rStyleName, BOOL bApi ) +/*N*/ { +/*N*/ ScDocShellModificator aModificator( *this ); +/*N*/ +/*N*/ BOOL bWarn = FALSE; +/*N*/ +/*N*/ USHORT nTabCount = aDocument.GetTableCount(); +/*N*/ USHORT nUseTab = MAXTAB+1; +/*N*/ for (USHORT nTab=0; nTab<nTabCount && nUseTab>MAXTAB; nTab++) +/*N*/ if ( aDocument.GetPageStyle(nTab) == rStyleName && +/*N*/ ( !bApi || aDocument.GetPageSize(nTab).Width() ) ) +/*N*/ nUseTab = nTab; +/*N*/ // bei bApi nur, wenn Umbrueche schon angezeigt +/*N*/ +/*N*/ if (nUseTab<=MAXTAB) // nicht verwendet -> nichts zu tun +/*N*/ { +/*?*/ ScPrintFunc aPrintFunc( this, GetPrinter(), nUseTab ); //! ohne CountPages auskommen +/*?*/ if (!aPrintFunc.UpdatePages()) // setzt Umbrueche auf allen Tabs +/*?*/ bWarn = TRUE; +/*?*/ +/*?*/ if (bWarn && !bApi) +/*?*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScWaitCursorOff aWaitOff( GetDialogParent() ); +/*?*/ } +/*N*/ } +/*N*/ +/*N*/ aModificator.SetDocumentModified(); +/*N*/ } + + + +/*N*/ Rectangle __EXPORT ScDocShell::GetVisArea( USHORT nAspect ) const +/*N*/ { +/*N*/ SfxObjectCreateMode eShellMode = GetCreateMode(); +/*N*/ if ( eShellMode == SFX_CREATE_MODE_ORGANIZER ) +/*N*/ { +/*?*/ // ohne Inhalte wissen wir auch nicht, wie gross die Inhalte sind +/*?*/ // leeres Rechteck zurueckgeben, das wird dann nach dem Laden berechnet +/*?*/ return Rectangle(); +/*N*/ } +/*N*/ +/*N*/ if( nAspect == ASPECT_THUMBNAIL ) +/*N*/ { +/*?*/ // Rectangle aArea( 0,0, 3175,3175 ); // 120x120 Pixel in 1:1 +/*?*/ Rectangle aArea( 0,0, SC_PREVIEW_SIZE_X,SC_PREVIEW_SIZE_Y ); +/*?*/ aDocument.SnapVisArea( aArea ); +/*?*/ return aArea; +/*N*/ } +/*N*/ else if( nAspect == ASPECT_CONTENT && eShellMode != SFX_CREATE_MODE_EMBEDDED ) +/*N*/ { +/*N*/ // Visarea holen wie nach Load +/*N*/ +/*N*/ USHORT nVisTab = aDocument.GetVisibleTab(); +/*N*/ if (!aDocument.HasTable(nVisTab)) +/*N*/ { +/*?*/ nVisTab = 0; +/*?*/ ((ScDocShell*)this)->aDocument.SetVisibleTab(nVisTab); +/*N*/ } +/*N*/ USHORT nStartCol,nStartRow; +/*N*/ aDocument.GetDataStart( nVisTab, nStartCol, nStartRow ); +/*N*/ USHORT nEndCol,nEndRow; +/*N*/ aDocument.GetPrintArea( nVisTab, nEndCol, nEndRow ); +/*N*/ if (nStartCol>nEndCol) +/*?*/ nStartCol = nEndCol; +/*N*/ if (nStartRow>nEndRow) +/*?*/ nStartRow = nEndRow; +/*N*/ Rectangle aNewArea = ((ScDocument&)aDocument) +/*N*/ .GetMMRect( nStartCol,nStartRow, nEndCol,nEndRow, nVisTab ); +/*N*/ ((ScDocShell*)this)->SvEmbeddedObject::SetVisArea( aNewArea ); +/*N*/ return aNewArea; +/*N*/ } +/*N*/ else +/*N*/ return SfxInPlaceObject::GetVisArea( nAspect ); +/*N*/ } + + + + + +//------------------------------------------------------------------ + +/*N*/ ScViewData* ScDocShell::GetViewData() +/*N*/ { +/*N*/ return NULL; +/*N*/ } + +//------------------------------------------------------------------ + +/*N*/ USHORT ScDocShell::GetCurTab() +/*N*/ { +/*N*/ //! this must be made non-static and use a ViewShell from this document! +/*N*/ +/*N*/ ScViewData* pViewData = GetViewData(); +/*N*/ +/*N*/ return pViewData ? pViewData->GetTabNo() : 0; +/*N*/ } + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_docsh5.cxx b/binfilter/bf_sc/source/ui/docshell/sc_docsh5.cxx new file mode 100644 index 000000000000..a6b818cf9196 --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_docsh5.cxx @@ -0,0 +1,588 @@ +/* -*- 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. + * + ************************************************************************/ + +// System - Includes ----------------------------------------------------- + +#define _BASEDLGS_HXX +#define _BIGINT_HXX +#define _CACHESTR_HXX +//#define _CLIP_HXX +#define _CONFIG_HXX +#define _CURSOR_HXX +//#define _COLOR_HXX +//#define _CTRLBOX_HXX +//#define _CTRLTOOL_HXX +#define _DIALOGS_HXX +#define _DLGCFG_HXX +#define _DYNARR_HXX +#define _EXTATTR_HXX +//#define _FIELD_HXX +#define _FILDLG_HXX +//#define _FILTER_HXX +#define _FONTDLG_HXX +#define _FRM3D_HXX +//#define _GRAPH_HXX +//#define _GDIMTF_HXX +#define _INTRO_HXX +#define _ISETBWR_HXX +#define _NO_SVRTF_PARSER_HXX +//#define _MDIFRM_HXX +#define _MACRODLG_HXX +#define _MODALDLG_HXX +#define _MOREBUTTON_HXX +//#define _MAPMOD_HXX +#define _OUTLINER_HXX +//#define _PAL_HXX +#define _PASSWD_HXX +//#define _PRNDLG_HXX // +#define _POLY_HXX +#define _PVRWIN_HXX +#define _QUEUE_HXX +#define _RULER_HXX +#define _SCRWIN_HXX +//#define _SELENG_HXX +#define _SETBRW_HXX +//#define _SOUND_HXX +#define _STACK_HXX +//#define _STATUS_HXX *** +#define _STDMENU_HXX +//#define _STDCTRL_HXX +//#define _SYSDLG_HXX +//#define _TAB_HXX +#define _TABBAR_HXX +//#define _TREELIST_HXX +//#define _VALUESET_HXX +#define _VCBRW_HXX +#define _VCTRLS_HXX +//#define _VCATTR_HXX +#define _VCSBX_HXX +#define _VCONT_HXX +#define _VDRWOBJ_HXX +//#define _VIEWFAC_HXX + + +#define _SFX_PRNMON_HXX +#define _SFX_RESMGR_HXX +//#define _SFX_SAVEOPT_HXX +#define _SFX_TEMPLDLG_HXX +//#define _SFXAPP_HXX +#define _SFXBASIC_HXX +//#define _SFXCTRLITEM_HXX +//#define _SFXDISPATCH_HXX +#define _SFXFILEDLG_HXX +#define _SFXIMGMGR_HXX +#define _SFXMNUMGR_HXX +//#define _SFXMSG_HXX +#define _SFXMSGDESCR_HXX +#define _SFXMSGPOOL_HXX +//#define _SFXOBJFACE_HXX +//#define _SFXREQUEST_HXX +#define _SFXSTBITEM_HXX +#define _SFXSTBMGR_HXX +#define _SFXTBXCTRL_HXX +#define _SFXTBXMGR_HXX +#define _SFX_TEMPLDLG_HXX + +#define _SI_DLL_HXX +#define _SIDLL_HXX +#define _SI_NOITEMS +#define _SI_NOOTHERFORMS +#define _SI_NOSBXCONTROLS +#define _SINOSBXCONTROLS +#define _SI_NODRW +#define _SI_NOCONTROL + +#define _SV_NOXSOUND +#define _SVDATTR_HXX +#define _SVDETC_HXX +#define _SVDIO_HXX +#define _SVDRAG_HXX +#define _SVDLAYER_HXX +#define _SVDXOUT_HXX + +#define _SVX_DAILDLL_HXX +#define _SVX_HYPHEN_HXX +#define _SVX_IMPGRF_HXX +#define _SVX_OPTITEMS_HXX +#define _SVX_OPTGERL_HXX +#define _SVX_OPTSAVE_HXX +#define _SVX_OPTSPELL_HXX +#define _SVX_OPTPATH_HXX +#define _SVX_OPTLINGU_HXX +#define _SVX_RULER_HXX +#define _SVX_RULRITEM_HXX +#define _SVX_SPLWRAP_HXX +#define _SVX_SPLDLG_HXX +#define _SVX_THESDLG_HXX + + +#ifdef _MSC_VER +#pragma hdrstop +#endif + + +#include <vcl/msgbox.hxx> +#include <vcl/waitobj.hxx> +#include <bf_sfx2/app.hxx> + + +#include "docsh.hxx" +#include "globstr.hrc" +#include "undodat.hxx" +#include "consoli.hxx" +#include "dbcolect.hxx" +#include "bf_sc.hrc" +#include "sizedev.hxx" +namespace binfilter { + +// --------------------------------------------------------------------------- + +// +// ehemalige viewfunc/dbfunc Methoden +// + +/*N*/ void ScDocShell::ErrorMessage( USHORT nGlobStrId ) +/*N*/ { +/*N*/ //! StopMarking an der (aktiven) View? +/*N*/ +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 Window* pParent = GetDialogParent(); +/*N*/ } + +/*N*/ BOOL ScDocShell::IsEditable() const +/*N*/ { +/*N*/ // import into read-only document is possible - must be extended if other filters use api +/*N*/ +/*N*/ return !IsReadOnly() || aDocument.IsImportingXML(); +/*N*/ } + +/*N*/ void ScDocShell::DBAreaDeleted( USHORT nTab, USHORT nX1, USHORT nY1, USHORT nX2, USHORT nY2 ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocShellModificator aModificator( *this ); +/*N*/ } + + +/*N*/ ScDBData* ScDocShell::GetDBData( const ScRange& rMarked, ScGetDBMode eMode, BOOL bForceMark ) +/*N*/ { +/*N*/ USHORT nCol = rMarked.aStart.Col(); +/*N*/ USHORT nRow = rMarked.aStart.Row(); +/*N*/ USHORT nTab = rMarked.aStart.Tab(); +/*N*/ +/*N*/ USHORT nStartCol = nCol; +/*N*/ USHORT nStartRow = nRow; +/*N*/ USHORT nStartTab = nTab; +/*N*/ USHORT nEndCol = rMarked.aEnd.Col(); +/*N*/ USHORT nEndRow = rMarked.aEnd.Row(); +/*N*/ USHORT nEndTab = rMarked.aEnd.Tab(); +/*N*/ +/*N*/ // Wegen #49655# nicht einfach GetDBAtCursor: Der zusammenhaengende Datenbereich +/*N*/ // fuer "unbenannt" (GetDataArea) kann neben dem Cursor legen, also muss auch ein +/*N*/ // benannter DB-Bereich dort gesucht werden. +/*N*/ +/*N*/ ScDBData* pData = aDocument.GetDBAtArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow ); +/*N*/ if (!pData) +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 pData = lcl_GetDBNearCursor( aDocument.GetDBCollection(), nCol, nRow, nTab ); +/*N*/ +/*N*/ BOOL bSelected = ( bForceMark || rMarked.aStart != rMarked.aEnd ); +/*N*/ +/*N*/ BOOL bUseThis = FALSE; +/*N*/ if (pData) +/*N*/ { +/*N*/ // Bereich nehmen, wenn nichts anderes markiert +/*N*/ +/*N*/ USHORT nDummy; +/*N*/ USHORT nOldCol1; +/*N*/ USHORT nOldRow1; +/*N*/ USHORT nOldCol2; +/*N*/ USHORT nOldRow2; +/*N*/ pData->GetArea( nDummy, nOldCol1,nOldRow1, nOldCol2,nOldRow2 ); +/*N*/ BOOL bIsNoName = ( pData->GetName() == ScGlobal::GetRscString( STR_DB_NONAME ) ); +/*N*/ +/*N*/ if (!bSelected) +/*N*/ { +/*N*/ bUseThis = TRUE; +/*N*/ if ( bIsNoName && eMode == SC_DB_MAKE ) +/*N*/ { +/*N*/ // wenn nichts markiert, "unbenannt" auf zusammenhaengenden Bereich anpassen +/*N*/ nStartCol = nCol; +/*N*/ nStartRow = nRow; +/*N*/ nEndCol = nStartCol; +/*N*/ nEndRow = nStartRow; +/*N*/ aDocument.GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow, FALSE ); +/*N*/ if ( nOldCol1 != nStartCol || nOldCol2 != nEndCol || nOldRow1 != nStartRow ) +/*N*/ bUseThis = FALSE; // passt gar nicht +/*N*/ else if ( nOldRow2 != nEndRow ) +/*N*/ { +/*N*/ // Bereich auf neue End-Zeile erweitern +/*N*/ pData->SetArea( nTab, nOldCol1,nOldRow1, nOldCol2,nEndRow ); +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ if ( nOldCol1 == nStartCol && nOldRow1 == nStartRow && +/*N*/ nOldCol2 == nEndCol && nOldRow2 == nEndRow ) // genau markiert? +/*N*/ bUseThis = TRUE; +/*N*/ else +/*N*/ bUseThis = FALSE; // immer Markierung nehmen (Bug 11964) +/*N*/ } +/*N*/ +/*N*/ // fuer Import nie "unbenannt" nehmen +/*N*/ +/*N*/ if ( bUseThis && eMode == SC_DB_IMPORT && bIsNoName ) +/*N*/ bUseThis = FALSE; +/*N*/ } +/*N*/ +/*N*/ if ( bUseThis ) +/*N*/ { +/*N*/ pData->GetArea( nStartTab, nStartCol,nStartRow, nEndCol,nEndRow ); +/*N*/ nEndTab = nStartTab; +/*N*/ } +/*N*/ else if ( eMode == SC_DB_OLD ) +/*N*/ { +/*N*/ pData = NULL; // nichts gefunden +/*N*/ nStartCol = nEndCol = nCol; +/*N*/ nStartRow = nEndRow = nRow; +/*N*/ nStartTab = nEndTab = nTab; +/*N*/ // bMark = FALSE; // nichts zu markieren +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ if ( bSelected ) +/*N*/ { +/*N*/ // bMark = FALSE; +/*N*/ } +/*N*/ else +/*N*/ { // zusammenhaengender Bereich +/*N*/ nStartCol = nCol; +/*N*/ nStartRow = nRow; +/*N*/ nEndCol = nStartCol; +/*N*/ nEndRow = nStartRow; +/*N*/ aDocument.GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow, FALSE ); +/*N*/ } +/*N*/ +/*N*/ BOOL bHasHeader = aDocument.HasColHeader( nStartCol,nStartRow, nEndCol,nEndRow, nTab ); +/*N*/ +/*N*/ ScDBData* pNoNameData; +/*N*/ USHORT nNoNameIndex; +/*N*/ ScDBCollection* pColl = aDocument.GetDBCollection(); +/*N*/ if ( eMode != SC_DB_IMPORT && +/*N*/ pColl->SearchName( ScGlobal::GetRscString( STR_DB_NONAME ), nNoNameIndex ) ) +/*N*/ { +/*N*/ pNoNameData = (*pColl)[nNoNameIndex]; +/*N*/ +/*N*/ USHORT nOldX1; // alten Bereich sauber wegnehmen +/*N*/ USHORT nOldY1; //! (UNDO ???) +/*N*/ USHORT nOldX2; +/*N*/ USHORT nOldY2; +/*N*/ USHORT nOldTab; +/*N*/ pNoNameData->GetArea( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 ); +/*N*/ DBAreaDeleted( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 ); +/*N*/ +/*N*/ pNoNameData->SetSortParam( ScSortParam() ); // Parameter zuruecksetzen +/*N*/ pNoNameData->SetQueryParam( ScQueryParam() ); +/*N*/ pNoNameData->SetSubTotalParam( ScSubTotalParam() ); +/*N*/ +/*N*/ pNoNameData->SetArea( nTab, nStartCol,nStartRow, nEndCol,nEndRow ); // neu setzen +/*N*/ pNoNameData->SetByRow( TRUE ); +/*N*/ pNoNameData->SetHeader( bHasHeader ); +/*N*/ pNoNameData->SetAutoFilter( FALSE ); +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ ScDBCollection* pUndoColl = NULL; +/*N*/ +/*N*/ String aNewName; +/*N*/ if (eMode==SC_DB_IMPORT) +/*N*/ { +/*N*/ aDocument.CompileDBFormula( TRUE ); // CreateFormulaString +/*N*/ pUndoColl = new ScDBCollection( *pColl ); // Undo fuer Import1-Bereich +/*N*/ +/*N*/ String aImport = ScGlobal::GetRscString( STR_DBNAME_IMPORT ); +/*N*/ long nCount = 0; +/*N*/ USHORT nDummy; +/*N*/ do +/*N*/ { +/*N*/ ++nCount; +/*N*/ aNewName = aImport; +/*N*/ aNewName += String::CreateFromInt32( nCount ); +/*N*/ } +/*N*/ while (pColl->SearchName( aNewName, nDummy )); +/*N*/ } +/*N*/ else +/*N*/ aNewName = ScGlobal::GetRscString( STR_DB_NONAME ); +/*N*/ pNoNameData = new ScDBData( aNewName, nTab, +/*N*/ nStartCol,nStartRow, nEndCol,nEndRow, +/*N*/ TRUE, bHasHeader ); +/*N*/ pColl->Insert( pNoNameData ); +/*N*/ +/*N*/ if ( pUndoColl ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 aDocument.CompileDBFormula( FALSE ); // CompileFormulaString +/*N*/ } +/*N*/ +/*N*/ // neuen Bereich am Sba anmelden nicht mehr noetig +/*N*/ +/*N*/ // "Import1" etc am Navigator bekanntmachen +/*N*/ if (eMode==SC_DB_IMPORT) +/*N*/ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_DBAREAS_CHANGED ) ); +/*N*/ } +/*N*/ pData = pNoNameData; +/*N*/ } +/*N*/ +/*N*/ // if (bMark) +/*N*/ // MarkRange( ScRange( nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab ), FALSE ); +/*N*/ +/*N*/ return pData; +/*N*/ } + + + // Hoehen anpassen + //! mit docfunc zusammenfassen + +/*N*/ BOOL ScDocShell::AdjustRowHeight( USHORT nStartRow, USHORT nEndRow, USHORT nTab ) +/*N*/ { +/*N*/ ScSizeDeviceProvider aProv(this); +/*N*/ Fraction aZoom(1,1); +/*N*/ BOOL bChange = aDocument.SetOptimalHeight( nStartRow,nEndRow, nTab, 0, aProv.GetDevice(), +/*N*/ aProv.GetPPTX(),aProv.GetPPTY(), aZoom,aZoom, FALSE ); +/*N*/ if (bChange) +/*?*/ PostPaint( 0,nStartRow,nTab, MAXCOL,MAXROW,nTab, PAINT_GRID|PAINT_LEFT ); +/*N*/ +/*N*/ return bChange; +/*N*/ } + +/*N*/ void ScDocShell::UpdateAllRowHeights() +/*N*/ { +/*N*/ // update automatic row heights +/*N*/ +/*N*/ ScSizeDeviceProvider aProv(this); +/*N*/ Fraction aZoom(1,1); +/*N*/ USHORT nTabCnt = aDocument.GetTableCount(); +/*N*/ for (USHORT nTab=0; nTab<nTabCnt; nTab++) +/*N*/ aDocument.SetOptimalHeight( 0,MAXROW, nTab,0, aProv.GetDevice(), +/*N*/ aProv.GetPPTX(),aProv.GetPPTY(), aZoom,aZoom, FALSE ); +/*N*/ } + + + +/*N*/ String lcl_GetAreaName( ScDocument* pDoc, ScArea* pArea ) +/*N*/ { +/*N*/ String aName; +/*N*/ BOOL bOk = FALSE; +/*N*/ ScDBData* pData = pDoc->GetDBAtArea( pArea->nTab, pArea->nColStart, pArea->nRowStart, +/*N*/ pArea->nColEnd, pArea->nRowEnd ); +/*N*/ if (pData) +/*N*/ { +/*N*/ pData->GetName( aName ); +/*N*/ if ( aName != ScGlobal::GetRscString( STR_DB_NONAME ) ) +/*N*/ bOk = TRUE; +/*N*/ } +/*N*/ +/*N*/ if (!bOk) +/*N*/ pDoc->GetName( pArea->nTab, aName ); +/*N*/ +/*N*/ return aName; +/*N*/ } + +/*N*/ void ScDocShell::DoConsolidate( const ScConsolidateParam& rParam, BOOL bRecord ) +/*N*/ { +/*N*/ ScConsData aData; +/*N*/ +/*N*/ USHORT nPos; +/*N*/ USHORT nColSize = 0; +/*N*/ USHORT nRowSize = 0; +/*N*/ BOOL bErr = FALSE; +/*N*/ for (nPos=0; nPos<rParam.nDataAreaCount; nPos++) +/*N*/ { +/*N*/ ScArea* pArea = rParam.ppDataAreas[nPos]; +/*N*/ nColSize = Max( nColSize, USHORT( pArea->nColEnd - pArea->nColStart + 1 ) ); +/*N*/ nRowSize = Max( nRowSize, USHORT( pArea->nRowEnd - pArea->nRowStart + 1 ) ); +/*N*/ +/*N*/ // Test, ob Quelldaten verschoben wuerden +/*N*/ if (rParam.bReferenceData) +/*N*/ if (pArea->nTab == rParam.nTab && pArea->nRowEnd >= rParam.nRow) +/*N*/ bErr = TRUE; +/*N*/ } +/*N*/ +/*N*/ if (bErr) +/*N*/ { +/*N*/ InfoBox aBox( GetDialogParent(), +/*N*/ ScGlobal::GetRscString( STR_CONSOLIDATE_ERR1 ) ); +/*N*/ aBox.Execute(); +/*N*/ return; +/*N*/ } +/*N*/ +/*N*/ // ausfuehren +/*N*/ +/*N*/ WaitObject aWait( GetDialogParent() ); +/*N*/ ScDocShellModificator aModificator( *this ); +/*N*/ +/*N*/ ScRange aOldDest; +/*N*/ ScDBData* pDestData = aDocument.GetDBAtCursor( rParam.nCol, rParam.nRow, rParam.nTab, TRUE ); +/*N*/ if (pDestData) +/*N*/ pDestData->GetArea(aOldDest); +/*N*/ +/*N*/ aData.SetSize( nColSize, nRowSize ); +/*N*/ aData.SetFlags( rParam.eFunction, rParam.bByCol, rParam.bByRow, rParam.bReferenceData ); +/*N*/ if ( rParam.bByCol || rParam.bByRow ) +/*N*/ for (nPos=0; nPos<rParam.nDataAreaCount; nPos++) +/*N*/ { +/*N*/ ScArea* pArea = rParam.ppDataAreas[nPos]; +/*N*/ aData.AddFields( &aDocument, pArea->nTab, pArea->nColStart, pArea->nRowStart, +/*N*/ pArea->nColEnd, pArea->nRowEnd ); +/*N*/ } +/*N*/ aData.DoneFields(); +/*N*/ for (nPos=0; nPos<rParam.nDataAreaCount; nPos++) +/*N*/ { +/*N*/ ScArea* pArea = rParam.ppDataAreas[nPos]; +/*N*/ aData.AddData( &aDocument, pArea->nTab, pArea->nColStart, pArea->nRowStart, +/*N*/ pArea->nColEnd, pArea->nRowEnd ); +/*N*/ aData.AddName( lcl_GetAreaName(&aDocument,pArea) ); +/*N*/ } +/*N*/ +/*N*/ aData.GetSize( nColSize, nRowSize ); +/*N*/ if (bRecord && nColSize && nRowSize) +/*N*/ { +/*N*/ ScDBData* pUndoData = pDestData ? new ScDBData(*pDestData) : NULL; +/*N*/ +/*N*/ USHORT nDestTab = rParam.nTab; +/*N*/ ScArea aDestArea( rParam.nTab, rParam.nCol, rParam.nRow, +/*N*/ rParam.nCol+nColSize-1, rParam.nRow+nRowSize-1 ); +/*N*/ if (rParam.bByCol) ++aDestArea.nColEnd; +/*N*/ if (rParam.bByRow) ++aDestArea.nRowEnd; +/*N*/ +/*N*/ if (rParam.bReferenceData) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 USHORT nTabCount = aDocument.GetTableCount(); +/*N*/ } +/*N*/ else +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocument* pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ if (pDestData) // Zielbereich loeschen / anpassen +/*N*/ { +/*N*/ aDocument.DeleteAreaTab(aOldDest, IDF_CONTENTS); +/*N*/ pDestData->SetArea( rParam.nTab, rParam.nCol, rParam.nRow, +/*N*/ rParam.nCol + nColSize - 1, rParam.nRow + nRowSize - 1 ); +/*N*/ pDestData->SetHeader( rParam.bByRow ); +/*N*/ } +/*N*/ +/*N*/ aData.OutputToDocument( &aDocument, rParam.nCol, rParam.nRow, rParam.nTab ); +/*N*/ +/*N*/ USHORT nPaintStartCol = rParam.nCol; +/*N*/ USHORT nPaintStartRow = rParam.nRow; +/*N*/ USHORT nPaintEndCol = nPaintStartCol + nColSize - 1; +/*N*/ USHORT nPaintEndRow = nPaintStartRow + nRowSize - 1; +/*N*/ USHORT nPaintFlags = PAINT_GRID; +/*N*/ if (rParam.bByCol) +/*N*/ ++nPaintEndRow; +/*N*/ if (rParam.bByRow) +/*N*/ ++nPaintEndCol; +/*N*/ if (rParam.bReferenceData) +/*N*/ { +/*N*/ nPaintStartCol = 0; +/*N*/ nPaintEndCol = MAXCOL; +/*N*/ nPaintEndRow = MAXROW; +/*N*/ nPaintFlags |= PAINT_LEFT | PAINT_SIZE; +/*N*/ } +/*N*/ if (pDestData) +/*N*/ { +/*N*/ if ( aOldDest.aEnd.Col() > nPaintEndCol ) +/*N*/ nPaintEndCol = aOldDest.aEnd.Col(); +/*N*/ if ( aOldDest.aEnd.Row() > nPaintEndRow ) +/*N*/ nPaintEndRow = aOldDest.aEnd.Row(); +/*N*/ } +/*N*/ PostPaint( nPaintStartCol, nPaintStartRow, rParam.nTab, +/*N*/ nPaintEndCol, nPaintEndRow, rParam.nTab, nPaintFlags ); +/*N*/ aModificator.SetDocumentModified(); +/*N*/ } + +/*N*/ void ScDocShell::UseScenario( USHORT nTab, const String& rName, BOOL bRecord ) +/*N*/ { +/*N*/ if (!aDocument.IsScenario(nTab)) +/*N*/ { +/*N*/ USHORT nTabCount = aDocument.GetTableCount(); +/*N*/ USHORT nSrcTab = USHRT_MAX; +/*N*/ USHORT nEndTab = nTab; +/*N*/ String aCompare; +/*N*/ while ( nEndTab+1 < nTabCount && aDocument.IsScenario(nEndTab+1) ) +/*N*/ { +/*N*/ ++nEndTab; +/*N*/ if (nSrcTab > MAXTAB) // noch auf der Suche nach dem Szenario? +/*N*/ { +/*N*/ aDocument.GetName( nEndTab, aCompare ); +/*N*/ if (aCompare == rName) +/*N*/ nSrcTab = nEndTab; // gefunden +/*N*/ } +/*N*/ } +/*N*/ if (nSrcTab <= MAXTAB) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if ( aDocument.TestCopyScenario( nSrcTab, nTab ) ) // Zellschutz testen +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ InfoBox aBox(GetDialogParent(), +/*N*/ ScGlobal::GetRscString( STR_SCENARIO_NOTFOUND ) ); +/*N*/ aBox.Execute(); +/*N*/ } +/*N*/ } +/*N*/ else +/*N*/ DBG_ERROR( "UseScenario auf Szenario-Blatt" ); +/*N*/ } + +/*N*/ void ScDocShell::ModifyScenario( USHORT nTab, const String& rName, const String& rComment, +/*N*/ const Color& rColor, USHORT nFlags ) +/*N*/ { +/*?*/ // Undo +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 String aOldName; +/*N*/ } + +/*N*/ USHORT ScDocShell::MakeScenario( USHORT nTab, const String& rName, const String& rComment, +/*N*/ const Color& rColor, USHORT nFlags, +/*N*/ ScMarkData& rMark, BOOL bRecord ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); return 0; //STRIP001 rMark.MarkToMulti(); +/*N*/ } + +/*N*/ BOOL ScDocShell::MoveTable( USHORT nSrcTab, USHORT nDestTab, BOOL bCopy, BOOL bRecord ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocShellModificator aModificator( *this ); +/*?*/ return TRUE; +/*N*/ } + + +/*N*/ IMPL_LINK( ScDocShell, RefreshDBDataHdl, ScDBData*, pDBData ) +/*N*/ { + DBG_BF_ASSERT(0, "STRIP"); return 0; //STRIP001 ScDBDocFunc aFunc(*this); +/*N*/ } + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_docsh6.cxx b/binfilter/bf_sc/source/ui/docshell/sc_docsh6.cxx new file mode 100644 index 000000000000..32ba61daeb19 --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_docsh6.cxx @@ -0,0 +1,371 @@ +/* -*- 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. + * + ************************************************************************/ + +// System - Includes ----------------------------------------------------- + +//#define _BASEDLGS_HXX *** +#define _BIGINT_HXX +#define _CACHESTR_HXX +//#define _CLIP_HXX +#define _CONFIG_HXX +#define _CURSOR_HXX +//#define _COLOR_HXX +//#define _CTRLBOX_HXX +//#define _CTRLTOOL_HXX +#define _DIALOGS_HXX +#define _DLGCFG_HXX +#define _DYNARR_HXX +#define _EXTATTR_HXX +//#define _FIELD_HXX +#define _FILDLG_HXX +//#define _FILTER_HXX +#define _FONTDLG_HXX +#define _FRM3D_HXX +//#define _GRAPH_HXX +//#define _GDIMTF_HXX +#define _INTRO_HXX +#define _ISETBWR_HXX +#define _NO_SVRTF_PARSER_HXX +//#define _MDIFRM_HXX +#define _MACRODLG_HXX +#define _MODALDLG_HXX +#define _MOREBUTTON_HXX +//#define _MAPMOD_HXX +#define _OUTLINER_HXX +//#define _PAL_HXX +#define _PASSWD_HXX +//#define _PRNDLG_HXX // +#define _POLY_HXX +#define _PVRWIN_HXX +#define _QUEUE_HXX +#define _RULER_HXX +#define _SCRWIN_HXX +//#define _SELENG_HXX +#define _SETBRW_HXX +//#define _SOUND_HXX +#define _STACK_HXX +//#define _STATUS_HXX *** +#define _STDMENU_HXX +//#define _STDCTRL_HXX +//#define _SYSDLG_HXX +//#define _TAB_HXX +#define _TABBAR_HXX +//#define _TREELIST_HXX +//#define _VALUESET_HXX +#define _VCBRW_HXX +#define _VCTRLS_HXX +//#define _VCATTR_HXX +#define _VCSBX_HXX +#define _VCONT_HXX +#define _VDRWOBJ_HXX +//#define _VIEWFAC_HXX + + +#define _SFX_PRNMON_HXX +#define _SFX_RESMGR_HXX +//#define _SFX_SAVEOPT_HXX +#define _SFX_TEMPLDLG_HXX +//#define _SFXAPP_HXX +#define _SFXBASIC_HXX +//#define _SFXCTRLITEM_HXX +#define _SFXDISPATCH_HXX +#define _SFXFILEDLG_HXX +#define _SFXIMGMGR_HXX +#define _SFXMNUMGR_HXX +//#define _SFXMSG_HXX +#define _SFXMSGDESCR_HXX +#define _SFXMSGPOOL_HXX +//#define _SFXOBJFACE_HXX +//#define _SFXREQUEST_HXX +#define _SFXSTBITEM_HXX +#define _SFXSTBMGR_HXX +#define _SFXTBXCTRL_HXX +#define _SFXTBXMGR_HXX +#define _SFX_TEMPLDLG_HXX + +#define _SI_DLL_HXX +#define _SIDLL_HXX +#define _SI_NOITEMS +#define _SI_NOOTHERFORMS +#define _SI_NOSBXCONTROLS +#define _SINOSBXCONTROLS +#define _SI_NODRW +#define _SI_NOCONTROL + +#define _SV_NOXSOUND +#define _SVDATTR_HXX +#define _SVDETC_HXX +#define _SVDIO_HXX +#define _SVDRAG_HXX +#define _SVDLAYER_HXX +#define _SVDXOUT_HXX + +#define _SVX_DAILDLL_HXX +#define _SVX_HYPHEN_HXX +#define _SVX_IMPGRF_HXX +#define _SVX_OPTITEMS_HXX +#define _SVX_OPTGERL_HXX +#define _SVX_OPTSAVE_HXX +#define _SVX_OPTSPELL_HXX +#define _SVX_OPTPATH_HXX +#define _SVX_OPTLINGU_HXX +#define _SVX_RULER_HXX +#define _SVX_RULRITEM_HXX +#define _SVX_SPLWRAP_HXX +#define _SVX_SPLDLG_HXX +#define _SVX_THESDLG_HXX + + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#ifndef PCH +#include <bf_so3/ipenv.hxx> +#include <bf_svx/linkmgr.hxx> +#endif + +#include "docsh.hxx" + +#include "stlpool.hxx" +#include "tablink.hxx" +#include "collect.hxx" + +#include <bf_svtools/itemset.hxx> + +namespace binfilter { + +/*N*/ struct ScStylePair +/*N*/ { +/*N*/ SfxStyleSheetBase *pSource; +/*N*/ SfxStyleSheetBase *pDest; +/*N*/ }; + + +// STATIC DATA ----------------------------------------------------------- + +//---------------------------------------------------------------------- + +// +// Ole +// + + +/*N*/ void __EXPORT ScDocShell::SetVisArea( const Rectangle & rVisArea ) +/*N*/ { +/*N*/ // with the SnapVisArea call in SetVisAreaOrSize, it's safe to always +/*N*/ // use both the size and position of the VisArea +/*N*/ SetVisAreaOrSize( rVisArea, TRUE ); +/*N*/ } + +/*N*/ void ScDocShell::SetVisAreaOrSize( const Rectangle& rVisArea, BOOL bModifyStart ) +/*N*/ { +/*N*/ Rectangle aArea = rVisArea; +/*N*/ if (bModifyStart) +/*N*/ { +/*N*/ if ( aArea.Left() < 0 || aArea.Top() < 0 ) +/*N*/ { +/*?*/ // VisArea start position can't be negative. +/*?*/ // Move the VisArea, otherwise only the upper left position would +/*?*/ // be changed in SnapVisArea, and the size would be wrong. +/*?*/ +/*?*/ Point aNewPos( Max( aArea.Left(), (long) 0 ), +/*?*/ Max( aArea.Top(), (long) 0 ) ); +/*?*/ aArea.SetPos( aNewPos ); +/*N*/ } +/*N*/ } +/*N*/ else +/*?*/ aArea.SetPos( SfxInPlaceObject::GetVisArea().TopLeft() ); +/*N*/ +/*N*/ // hier Position anpassen! +/*N*/ +/*N*/ // #92248# when loading an ole object, the VisArea is set from the document's +/*N*/ // view settings and must be used as-is (document content may not be complete yet). +/*N*/ if ( !aDocument.IsImportingXML() ) +/*N*/ aDocument.SnapVisArea( aArea ); +/*N*/ +/*N*/ SvInPlaceObject::SetVisArea( aArea ); +/*N*/ +/*N*/ if (aDocument.IsEmbedded()) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScTripel aOldStart,aOldEnd; +/*N*/ } +/*N*/ } + +// +// Style-Krempel fuer Organizer etc. +// + +/*N*/ SfxStyleSheetBasePool* __EXPORT ScDocShell::GetStyleSheetPool() +/*N*/ { +/*N*/ return (SfxStyleSheetBasePool*)aDocument.GetStyleSheetPool(); +/*N*/ } + + +// nach dem Laden von Vorlagen aus einem anderen Dokment (LoadStyles, Insert) +// muessen die SetItems (ATTR_PAGE_HEADERSET, ATTR_PAGE_FOOTERSET) auf den richtigen +// Pool umgesetzt werden, bevor der Quell-Pool geloescht wird. + +/*N*/ void lcl_AdjustPool( SfxStyleSheetBasePool* pStylePool ) +/*N*/ { +/*N*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 pStylePool->SetSearchMask(SFX_STYLE_FAMILY_PAGE, 0xffff); +/*N*/ } + + +/*N*/ void ScDocShell::LoadStylesArgs( ScDocShell& rSource, BOOL bReplace, BOOL bCellStyles, BOOL bPageStyles ) +/*N*/ { +/*N*/ // similar to LoadStyles, but with selectable behavior for XStyleLoader::loadStylesFromURL call +/*N*/ +/*N*/ if ( !bCellStyles && !bPageStyles ) // nothing to do +/*N*/ return; +/*N*/ +/*N*/ ScStyleSheetPool* pSourcePool = rSource.GetDocument()->GetStyleSheetPool(); +/*N*/ ScStyleSheetPool* pDestPool = aDocument.GetStyleSheetPool(); +/*N*/ +/*N*/ SfxStyleFamily eFamily = bCellStyles ? +/*N*/ ( bPageStyles ? SFX_STYLE_FAMILY_ALL : SFX_STYLE_FAMILY_PARA ) : +/*N*/ SFX_STYLE_FAMILY_PAGE; +/*N*/ SfxStyleSheetIterator aIter( pSourcePool, eFamily ); +/*N*/ USHORT nSourceCount = aIter.Count(); +/*N*/ if ( nSourceCount == 0 ) +/*N*/ return; // no source styles +/*N*/ +/*N*/ ScStylePair* pStyles = new ScStylePair[ nSourceCount ]; +/*N*/ USHORT nFound = 0; +/*N*/ +/*N*/ // first create all new styles +/*N*/ +/*N*/ SfxStyleSheetBase* pSourceStyle = aIter.First(); +/*N*/ while (pSourceStyle) +/*N*/ { +/*N*/ String aName = pSourceStyle->GetName(); +/*N*/ SfxStyleSheetBase* pDestStyle = pDestPool->Find( pSourceStyle->GetName(), pSourceStyle->GetFamily() ); +/*N*/ if ( pDestStyle ) +/*N*/ { +/*N*/ // touch existing styles only if replace flag is set +/*N*/ if ( bReplace ) +/*N*/ { +/*N*/ pStyles[nFound].pSource = pSourceStyle; +/*N*/ pStyles[nFound].pDest = pDestStyle; +/*N*/ ++nFound; +/*N*/ } +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ pStyles[nFound].pSource = pSourceStyle; +/*N*/ pStyles[nFound].pDest = &pDestPool->Make( aName, pSourceStyle->GetFamily(), pSourceStyle->GetMask() ); +/*N*/ ++nFound; +/*N*/ } +/*N*/ +/*N*/ pSourceStyle = aIter.Next(); +/*N*/ } +/*N*/ +/*N*/ // then copy contents (after inserting all styles, for parent etc.) +/*N*/ +/*N*/ for ( USHORT i = 0; i < nFound; ++i ) +/*N*/ { +/*N*/ pStyles[i].pDest->GetItemSet().PutExtended( +/*N*/ pStyles[i].pSource->GetItemSet(), SFX_ITEM_DONTCARE, SFX_ITEM_DEFAULT); +/*N*/ if(pStyles[i].pSource->HasParentSupport()) +/*N*/ pStyles[i].pDest->SetParent(pStyles[i].pSource->GetParent()); +/*N*/ // follow is never used +/*N*/ } +/*N*/ +/*N*/ lcl_AdjustPool( GetStyleSheetPool() ); // adjust SetItems +/*N*/ UpdateAllRowHeights(); +/*N*/ PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID | PAINT_LEFT ); // Paint +/*N*/ +/*N*/ delete[] pStyles; +/*N*/ } + + + +/*N*/ void ScDocShell::UpdateLinks() +/*N*/ { +/*N*/ SvxLinkManager* pLinkManager = aDocument.GetLinkManager(); +/*N*/ USHORT nCount; +/*N*/ USHORT i; +/*N*/ StrCollection aNames; +/*N*/ +/*N*/ // nicht mehr benutzte Links raus +/*N*/ +/*N*/ nCount = pLinkManager->GetLinks().Count(); +/*N*/ for (i=nCount; i>0; ) +/*N*/ { +/*?*/ --i; +/*?*/ ::binfilter::SvBaseLink* pBase = *pLinkManager->GetLinks()[i]; +/*?*/ if (pBase->ISA(ScTableLink)) +/*?*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScTableLink* pTabLink = (ScTableLink*)pBase; +/*?*/ } +/*N*/ } +/*N*/ +/*N*/ +/*N*/ // neue Links eintragen +/*N*/ +/*N*/ nCount = aDocument.GetTableCount(); +/*N*/ for (i=0; i<nCount; i++) +/*N*/ if (aDocument.IsLinked(i)) +/*N*/ { +/*N*/ String aDocName = aDocument.GetLinkDoc(i); +/*N*/ String aFltName = aDocument.GetLinkFlt(i); +/*N*/ String aOptions = aDocument.GetLinkOpt(i); +/*N*/ ULONG nRefresh = aDocument.GetLinkRefreshDelay(i); +/*N*/ BOOL bThere = FALSE; +/*N*/ for (USHORT j=0; j<i && !bThere; j++) // im Dokument mehrfach? +/*N*/ if (aDocument.IsLinked(j) +/*N*/ && aDocument.GetLinkDoc(j) == aDocName +/*N*/ && aDocument.GetLinkFlt(j) == aFltName +/*N*/ && aDocument.GetLinkOpt(j) == aOptions) +/*N*/ // Ignore refresh delay in compare, it should be the +/*N*/ // same for identical links and we don't want dupes +/*N*/ // if it ain't. +/*N*/ bThere = TRUE; +/*N*/ +/*N*/ if (!bThere) // schon als Filter eingetragen? +/*N*/ { +/*N*/ StrData* pData = new StrData(aDocName); +/*N*/ if (!aNames.Insert(pData)) +/*N*/ { +/*?*/ delete pData; +/*?*/ bThere = TRUE; +/*N*/ } +/*N*/ } +/*N*/ if (!bThere) +/*N*/ { +/*N*/ ScTableLink* pLink = new ScTableLink( this, aDocName, aFltName, aOptions, nRefresh ); +/*N*/ pLink->SetInCreate( TRUE ); +/*N*/ pLinkManager->InsertFileLink( *pLink, OBJECT_CLIENT_FILE, aDocName, &aFltName ); +/*N*/ pLink->Update(); +/*N*/ pLink->SetInCreate( FALSE ); +/*N*/ } +/*N*/ } +/*N*/ } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_editable.cxx b/binfilter/bf_sc/source/ui/docshell/sc_editable.cxx new file mode 100644 index 000000000000..f729f1a3695a --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_editable.cxx @@ -0,0 +1,123 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "editable.hxx" +#include "document.hxx" +#include "globstr.hrc" +#include "markdata.hxx" + +namespace binfilter { + +//------------------------------------------------------------------ + +/*N*/ ScEditableTester::ScEditableTester() : +/*N*/ bIsEditable( TRUE ), +/*N*/ bOnlyMatrix( TRUE ) +/*N*/ { +/*N*/ } + + +/*N*/ ScEditableTester::ScEditableTester( ScDocument* pDoc, USHORT nTab, +/*N*/ USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow ) : +/*N*/ bIsEditable( TRUE ), +/*N*/ bOnlyMatrix( TRUE ) +/*N*/ { +/*N*/ TestBlock( pDoc, nTab, nStartCol, nStartRow, nEndCol, nEndRow ); +/*N*/ } + +/*N*/ ScEditableTester::ScEditableTester( ScDocument* pDoc, +/*N*/ USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, +/*N*/ const ScMarkData& rMark ) : +/*N*/ bIsEditable( TRUE ), +/*N*/ bOnlyMatrix( TRUE ) +/*N*/ { +/*N*/ TestSelectedBlock( pDoc, nStartCol, nStartRow, nEndCol, nEndRow, rMark ); +/*N*/ } + +/*N*/ ScEditableTester::ScEditableTester( ScDocument* pDoc, const ScRange& rRange ) : +/*N*/ bIsEditable( TRUE ), +/*N*/ bOnlyMatrix( TRUE ) +/*N*/ { +/*N*/ } + +/*N*/ ScEditableTester::ScEditableTester( ScDocument* pDoc, const ScMarkData& rMark ) : +/*N*/ bIsEditable( TRUE ), +/*N*/ bOnlyMatrix( TRUE ) +/*N*/ { +/*N*/ } + + +//------------------------------------------------------------------ + +/*N*/ void ScEditableTester::TestBlock( ScDocument* pDoc, USHORT nTab, +/*N*/ USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow ) +/*N*/ { +/*N*/ if ( bIsEditable || bOnlyMatrix ) +/*N*/ { +/*N*/ BOOL bThisMatrix; +/*N*/ if ( !pDoc->IsBlockEditable( nTab, nStartCol, nStartRow, nEndCol, nEndRow, &bThisMatrix ) ) +/*N*/ { +/*N*/ bIsEditable = FALSE; +/*N*/ if ( !bThisMatrix ) +/*N*/ bOnlyMatrix = FALSE; +/*N*/ } +/*N*/ } +/*N*/ } + +/*N*/ void ScEditableTester::TestSelectedBlock( ScDocument* pDoc, +/*N*/ USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, +/*N*/ const ScMarkData& rMark ) +/*N*/ { +/*N*/ USHORT nTabCount = pDoc->GetTableCount(); +/*N*/ for (USHORT nTab=0; nTab<nTabCount; nTab++) +/*N*/ if (rMark.GetTableSelect(nTab)) +/*N*/ TestBlock( pDoc, nTab, nStartCol, nStartRow, nEndCol, nEndRow ); +/*N*/ } + + + + +//------------------------------------------------------------------ + +/*N*/ USHORT ScEditableTester::GetMessageId() const +/*N*/ { +/*N*/ if (bIsEditable) +/*N*/ return 0; +/*N*/ else if (bOnlyMatrix) +/*N*/ return STR_MATRIXFRAGMENTERR; +/*N*/ else +/*N*/ return STR_PROTECTIONERR; +/*N*/ } + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_impex.cxx b/binfilter/bf_sc/source/ui/docshell/sc_impex.cxx new file mode 100644 index 000000000000..56f967e1cb61 --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_impex.cxx @@ -0,0 +1,642 @@ +/* -*- 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. + * + ************************************************************************/ + +// System - Includes ----------------------------------------------------- + +class StarBASIC; + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#ifndef PCH +#include "bf_sc.hrc" +#define GLOBALOVERFLOW +#endif + +// INCLUDE --------------------------------------------------------------- + +#include <stdio.h> +#include <ctype.h> +#include <stdlib.h> + +#include <i18npool/mslangid.hxx> +#include <bf_svtools/zforlist.hxx> +#define _SVSTDARR_ULONGS +#include <sot/formats.hxx> +#include <com/sun/star/i18n/CalendarFieldIndex.hpp> + +#include "docsh.hxx" +#include "asciiopt.hxx" +#include "cell.hxx" +#include "progress.hxx" + +#include "impex.hxx" + +#include "globstr.hrc" + + +#include <osl/endian.h> +namespace binfilter { + +//======================================================================== + + +// Gesamtdokument ohne Undo + + +/*N*/ ScImportExport::ScImportExport( ScDocument* p ) +/*N*/ : pDoc( p ), pDocSh( PTR_CAST(ScDocShell,p->GetDocumentShell()) ), +/*N*/ nSizeLimit( 0 ), bSingle( TRUE ), bAll( TRUE ), bUndo( FALSE ), +/*N*/ cSep( '\t' ), cStr( '"' ), bFormulas( FALSE ), bIncludeFiltered( TRUE ), +/*N*/ bOverflow( FALSE ) +/*N*/ { +/*N*/ pUndoDoc = NULL; +/*N*/ pExtOptions = NULL; +/*N*/ } + +// Insert am Punkt ohne Bereichschecks + + + + +// ctor with a range is only used for export +//! ctor with a string (and bSingle=TRUE) is also used for DdeSetData + + +// String auswerten: Entweder Bereich, Punkt oder Gesamtdoc (bei Fehler) +// Falls eine View existiert, wird die TabNo der View entnommen! + + + + +/*N*/ ScImportExport::~ScImportExport() +/*N*/ { +/*N*/ delete pUndoDoc; +/*N*/ delete pExtOptions; +/*N*/ } + + +/*N*/ void ScImportExport::SetExtOptions( const ScAsciiOptions& rOpt ) +/*N*/ { +/*N*/ if ( pExtOptions ) +/*N*/ *pExtOptions = rOpt; +/*N*/ else +/*N*/ pExtOptions = new ScAsciiOptions( rOpt ); +/*N*/ +/*N*/ // "normale" Optionen uebernehmen +/*N*/ +/*N*/ cSep = rOpt.GetFieldSeps().GetChar(0); +/*N*/ cStr = rOpt.GetTextSep(); +/*N*/ } + + + + +////////////////////////////////////////////////////////////////////////////// + +// Vorbereitung fuer Undo: Undo-Dokument erzeugen + + + +// Nachbereitung Insert: Undo/Redo-Aktionen erzeugen, Invalidate/Repaint + + + +///////////////////////////////////////////////////////////////////////////// + + + + + + +// static + + + + + + + + +/*N*/ BOOL ScImportExport::ImportStream( SvStream& rStrm, ULONG nFmt ) +/*N*/ { +/*N*/ if( nFmt == FORMAT_STRING ) +/*N*/ { +/*N*/ if( ExtText2Doc( rStrm ) ) // pExtOptions auswerten +/*N*/ return TRUE; +/*N*/ } +/*N*/ if( nFmt == SOT_FORMATSTR_ID_SYLK ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if( Sylk2Doc( rStrm ) ) +/*?*/ return TRUE; +/*N*/ } +/*N*/ if( nFmt == SOT_FORMATSTR_ID_DIF ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if( Dif2Doc( rStrm ) ) +/*?*/ return TRUE; +/*N*/ } +/*N*/ if( nFmt == FORMAT_RTF ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if( RTF2Doc( rStrm ) ) +/*?*/ return TRUE; +/*N*/ } +/*N*/ if( nFmt == SOT_FORMATSTR_ID_LINK ) +/*N*/ return TRUE; // Link-Import? +/*N*/ if ( nFmt == SOT_FORMATSTR_ID_HTML ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 if( HTML2Doc( rStrm ) ) +/*?*/ return TRUE; +/*N*/ } +/*N*/ if ( nFmt == SOT_FORMATSTR_ID_HTML_SIMPLE ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 MSE40HTMLClipFormatObj aMSE40ClpObj; // needed to skip the header data +/*?*/ return TRUE; +/*N*/ } +/*N*/ +/*N*/ return FALSE; +/*N*/ } + + + + +//static + + +// static + + +enum DoubledQuoteMode +{ + DQM_KEEP, // both are taken + DQM_ESCAPE, // escaped quote, one is taken, one ignored + DQM_CONCAT, // first is end, next is start, both ignored => strings combined + DQM_SEPARATE // end one string and begin next +}; + +/*N*/ const sal_Unicode* lcl_ScanString( const sal_Unicode* p, String& rString, +/*N*/ sal_Unicode cStr, DoubledQuoteMode eMode ) +/*N*/ { +/*N*/ p++; //! jump over opening quote +/*N*/ BOOL bCont; +/*N*/ do +/*N*/ { +/*N*/ bCont = FALSE; +/*N*/ const sal_Unicode* p0 = p; +/*N*/ for( ;; ) +/*N*/ { +/*N*/ if( !*p ) +/*N*/ break; +/*N*/ if( *p == cStr ) +/*N*/ { +/*N*/ if ( *++p != cStr ) +/*N*/ break; +/*N*/ // doubled quote char +/*N*/ switch ( eMode ) +/*N*/ { +/*N*/ case DQM_KEEP : +/*N*/ p++; // both for us (not breaking for-loop) +/*N*/ break; +/*N*/ case DQM_ESCAPE : +/*N*/ p++; // one for us (breaking for-loop) +/*N*/ bCont = TRUE; // and more +/*N*/ break; +/*N*/ case DQM_CONCAT : +/*N*/ if ( p0+1 < p ) +/*N*/ rString.Append( p0, (p-1) - p0 ); // first part +/*N*/ p0 = ++p; // text of next part starts here +/*N*/ break; +/*N*/ case DQM_SEPARATE : +/*N*/ // positioned on next opening quote +/*N*/ break; +/*N*/ } +/*N*/ if ( eMode == DQM_ESCAPE || eMode == DQM_SEPARATE ) +/*N*/ break; +/*N*/ } +/*N*/ else +/*N*/ p++; +/*N*/ } +/*N*/ if ( p0 < p ) +/*N*/ rString.Append( p0, ((*p || *(p-1) == cStr) ? p-1 : p) - p0 ); +/*N*/ } while ( bCont ); +/*N*/ return p; +/*N*/ } + + + + +////////////////////////////////////////////////////////////////////////////// + + + + // + // erweiterter Ascii-Import + // + + +/*M*/ void lcl_PutString( ScDocument* pDoc, USHORT nCol, USHORT nRow, USHORT nTab, +/*M*/ const String& rStr, BYTE nColFormat, +/*M*/ ::utl::TransliterationWrapper& rTransliteration, +/*M*/ CalendarWrapper& rCalendar, +/*M*/ ::utl::TransliterationWrapper* pSecondTransliteration, +/*M*/ CalendarWrapper* pSecondCalendar ) +/*M*/ { +/*M*/ if ( nColFormat == SC_COL_SKIP || !rStr.Len() || nCol > MAXCOL || nRow > MAXROW ) +/*M*/ return; +/*M*/ +/*M*/ if ( nColFormat == SC_COL_TEXT ) +/*M*/ { +/*M*/ pDoc->PutCell( nCol, nRow, nTab, new ScStringCell( rStr ) ); +/*M*/ return; +/*M*/ } +/*M*/ +/*M*/ if ( nColFormat == SC_COL_ENGLISH ) +/*M*/ { +/*M*/ //! SetString mit Extra-Flag ??? +/*M*/ +/*M*/ SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); +/*M*/ sal_uInt32 nEnglish = pFormatter->GetStandardIndex(LANGUAGE_ENGLISH_US); +/*M*/ double fVal; +/*M*/ if ( pFormatter->IsNumberFormat( rStr, nEnglish, fVal ) ) +/*M*/ { +/*M*/ // Zahlformat wird nicht auf englisch gesetzt +/*M*/ pDoc->SetValue( nCol, nRow, nTab, fVal ); +/*M*/ return; +/*M*/ } +/*M*/ // sonst weiter mit SetString +/*M*/ } +/*M*/ else if ( nColFormat != SC_COL_STANDARD ) // Datumsformate +/*M*/ { +/*M*/ // nach genau drei Teilen suchen +/*M*/ +/*M*/ xub_StrLen nLen = rStr.Len(); +/*M*/ xub_StrLen nStart[3]; +/*M*/ xub_StrLen nEnd[3]; +/*M*/ USHORT nFound = 0; +/*M*/ BOOL bInNum = FALSE; +/*M*/ for ( xub_StrLen nPos=0; nPos<nLen; nPos++ ) +/*M*/ { +/*M*/ if ( ScGlobal::pCharClass->isLetterNumeric( rStr, nPos ) ) +/*M*/ { +/*M*/ if (!bInNum) +/*M*/ { +/*M*/ if ( nFound >= 3 ) +/*M*/ break; // zuviele Teile +/*M*/ bInNum = TRUE; +/*M*/ nStart[nFound] = nPos; +/*M*/ ++nFound; +/*M*/ } +/*M*/ nEnd[nFound-1] = nPos; +/*M*/ } +/*M*/ else +/*M*/ bInNum = FALSE; +/*M*/ } +/*M*/ +/*M*/ USHORT nDP, nMP, nYP; +/*M*/ switch ( nColFormat ) +/*M*/ { +/*M*/ case SC_COL_YMD: nDP = 2; nMP = 1; nYP = 0; break; +/*M*/ case SC_COL_MDY: nDP = 1; nMP = 0; nYP = 2; break; +/*M*/ case SC_COL_DMY: +/*M*/ default: nDP = 0; nMP = 1; nYP = 2; break; +/*M*/ } +/*M*/ +/*M*/ if ( nFound == 1 ) +/*M*/ { +/*M*/ // try to break one number (without separators) into date fields +/*M*/ +/*M*/ xub_StrLen nDateStart = nStart[0]; +/*M*/ xub_StrLen nDateLen = nEnd[0] + 1 - nDateStart; +/*M*/ +/*M*/ if ( nDateLen >= 5 && nDateLen <= 8 && +/*M*/ ScGlobal::pCharClass->isNumeric( rStr.Copy( nDateStart, nDateLen ) ) ) +/*M*/ { +/*M*/ // 6 digits: 2 each for day, month, year +/*M*/ // 8 digits: 4 for year, 2 each for day and month +/*M*/ // 5 or 7 digits: first field is shortened by 1 +/*M*/ +/*M*/ BOOL bLongYear = ( nDateLen >= 7 ); +/*M*/ BOOL bShortFirst = ( nDateLen == 5 || nDateLen == 7 ); +/*M*/ +/*M*/ USHORT nFieldStart = nDateStart; +/*M*/ for (USHORT nPos=0; nPos<3; nPos++) +/*M*/ { +/*M*/ USHORT nFieldEnd = nFieldStart + 1; // default: 2 digits +/*M*/ if ( bLongYear && nPos == nYP ) +/*M*/ nFieldEnd += 2; // 2 extra digits for long year +/*M*/ if ( bShortFirst && nPos == 0 ) +/*M*/ --nFieldEnd; // first field shortened? +/*M*/ +/*M*/ nStart[nPos] = nFieldStart; +/*M*/ nEnd[nPos] = nFieldEnd; +/*M*/ nFieldStart = nFieldEnd + 1; +/*M*/ } +/*M*/ nFound = 3; +/*M*/ } +/*M*/ } +/*M*/ +/*M*/ if ( nFound == 3 ) // exactly 3 parts found? +/*M*/ { +/*M*/ using namespace ::com::sun::star; +/*M*/ BOOL bSecondCal = FALSE; +/*M*/ USHORT nDay = (USHORT) rStr.Copy( nStart[nDP], nEnd[nDP]+1-nStart[nDP] ).ToInt32(); +/*M*/ USHORT nYear = (USHORT) rStr.Copy( nStart[nYP], nEnd[nYP]+1-nStart[nYP] ).ToInt32(); +/*M*/ String aMStr = rStr.Copy( nStart[nMP], nEnd[nMP]+1-nStart[nMP] ); +/*M*/ sal_Int16 nMonth = (sal_Int16) aMStr.ToInt32(); +/*M*/ if (!nMonth) +/*M*/ { +/*M*/ static const String aSeptCorrect( RTL_CONSTASCII_USTRINGPARAM( "SEPT" ) ); +/*M*/ static const String aSepShortened( RTL_CONSTASCII_USTRINGPARAM( "SEP" ) ); +/*M*/ uno::Sequence< i18n::CalendarItem > xMonths; +/*M*/ sal_Int32 i, nLen; +/*M*/ // first test all month names from local international +/*M*/ xMonths = rCalendar.getMonths(); +/*M*/ nLen = xMonths.getLength(); +/*M*/ for (i=0; i<nLen && !nMonth; i++) +/*M*/ { +/*M*/ if ( rTransliteration.isEqual( aMStr, xMonths[i].FullName ) || +/*M*/ rTransliteration.isEqual( aMStr, xMonths[i].AbbrevName ) ) +/*M*/ nMonth = i+1; +/*M*/ else if ( i == 8 && rTransliteration.isEqual( aSeptCorrect, +/*M*/ xMonths[i].AbbrevName ) && +/*M*/ rTransliteration.isEqual( aMStr, aSepShortened ) ) +/*M*/ { // #102136# correct English abbreviation is SEPT, +/*M*/ // but data mostly contains SEP only +/*M*/ nMonth = i+1; +/*M*/ } +/*M*/ } +/*M*/ // if none found, then test english month names +/*M*/ if ( !nMonth && pSecondCalendar && pSecondTransliteration ) +/*M*/ { +/*M*/ xMonths = pSecondCalendar->getMonths(); +/*M*/ nLen = xMonths.getLength(); +/*M*/ for (i=0; i<nLen && !nMonth; i++) +/*M*/ { +/*M*/ if ( pSecondTransliteration->isEqual( aMStr, xMonths[i].FullName ) || +/*M*/ pSecondTransliteration->isEqual( aMStr, xMonths[i].AbbrevName ) ) +/*M*/ { +/*M*/ nMonth = i+1; +/*M*/ bSecondCal = TRUE; +/*M*/ } +/*M*/ else if ( i == 8 && pSecondTransliteration->isEqual( +/*M*/ aMStr, aSepShortened ) ) +/*M*/ { // #102136# correct English abbreviation is SEPT, +/*M*/ // but data mostly contains SEP only +/*M*/ nMonth = i+1; +/*M*/ bSecondCal = TRUE; +/*M*/ } +/*M*/ } +/*M*/ } +/*M*/ } +/*M*/ +/*M*/ SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); +/*M*/ if ( nYear < 100 ) +/*M*/ nYear = pFormatter->ExpandTwoDigitYear( nYear ); +/*M*/ +/*M*/ CalendarWrapper* pCalendar = (bSecondCal ? pSecondCalendar : &rCalendar); +/*M*/ sal_Int16 nNumMonths = pCalendar->getNumberOfMonthsInYear(); +/*M*/ if ( nDay && nMonth && nDay<=31 && nMonth<=nNumMonths ) +/*M*/ { +/*M*/ --nMonth; +/*M*/ pCalendar->setValue( i18n::CalendarFieldIndex::DAY_OF_MONTH, nDay ); +/*M*/ pCalendar->setValue( i18n::CalendarFieldIndex::MONTH, nMonth ); +/*M*/ pCalendar->setValue( i18n::CalendarFieldIndex::YEAR, nYear ); +/*N*/ // #i14974# The imported value should have no fractional value, so set the +/*N*/ // time fields to zero (ICU calendar instance defaults to current date/time) +/*N*/ pCalendar->setValue( i18n::CalendarFieldIndex::HOUR, 0 ); +/*N*/ pCalendar->setValue( i18n::CalendarFieldIndex::MINUTE, 0 ); +/*N*/ pCalendar->setValue( i18n::CalendarFieldIndex::SECOND, 0 ); +/*N*/ pCalendar->setValue( i18n::CalendarFieldIndex::MILLISECOND, 0 ); +/*M*/ if ( pCalendar->isValid() ) +/*M*/ { +/*M*/ double fDiff = DateTime(*pFormatter->GetNullDate()) - +/*M*/ pCalendar->getEpochStart(); +/*N*/ // #i14974# must use getLocalDateTime to get the same +/*N*/ // date values as set above +/*N*/ double fDays = pCalendar->getLocalDateTime(); +/*M*/ fDays -= fDiff; +/*M*/ +/*M*/ LanguageType eLatin, eCjk, eCtl; +/*M*/ pDoc->GetLanguage( eLatin, eCjk, eCtl ); +/*M*/ LanguageType eDocLang = eLatin; //! which language for date formats? +/*M*/ +/*M*/ long nFormat = pFormatter->GetStandardFormat( NUMBERFORMAT_DATE, eDocLang ); +/*M*/ +/*M*/ pDoc->PutCell( nCol, nRow, nTab, new ScValueCell(fDays), nFormat, FALSE ); +/*M*/ +/*M*/ return; // success +/*M*/ } +/*M*/ } +/*M*/ } +/*M*/ } +/*M*/ +/*M*/ // Standard oder Datum nicht erkannt -> SetString +/*M*/ +/*M*/ pDoc->SetString( nCol, nRow, nTab, rStr ); +/*M*/ } + + + + +/*N*/ BOOL ScImportExport::ExtText2Doc( SvStream& rStrm ) +/*N*/ { +/*N*/ if (!pExtOptions) +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 return Text2Doc( rStrm ); +/*N*/ +/*N*/ ULONG nOldPos = rStrm.Tell(); +/*N*/ rStrm.Seek( STREAM_SEEK_TO_END ); +/*N*/ ScProgress aProgress( pDocSh, ScGlobal::GetRscString( STR_LOAD_DOC ), rStrm.Tell() - nOldPos ); +/*N*/ rStrm.Seek( nOldPos ); +/*N*/ if ( rStrm.GetStreamCharSet() == RTL_TEXTENCODING_UNICODE ) +/*?*/ rStrm.StartReadingUnicodeText(); +/*N*/ +/*N*/ BOOL bOld = ScColumn::bDoubleAlloc; +/*N*/ ScColumn::bDoubleAlloc = TRUE; +/*N*/ +/*N*/ DBG_ASSERT( !bUndo, "ExtText2Doc mit Undo noch nicht implementiert!" ); +/*N*/ USHORT nStartCol = aRange.aStart.Col(); +/*N*/ USHORT nStartRow = aRange.aStart.Row(); +/*N*/ USHORT nTab = aRange.aStart.Tab(); +/*N*/ +/*N*/ BOOL bFixed = pExtOptions->IsFixedLen(); +/*N*/ const sal_Unicode* pSeps = pExtOptions->GetFieldSeps().GetBuffer(); +/*N*/ BOOL bMerge = pExtOptions->IsMergeSeps(); +/*N*/ USHORT nInfoCount = pExtOptions->GetInfoCount(); +/*N*/ const xub_StrLen* pColStart = pExtOptions->GetColStart(); +/*N*/ const BYTE* pColFormat = pExtOptions->GetColFormat(); +/*N*/ long nSkipLines = pExtOptions->GetStartRow(); +/*N*/ +/*N*/ LanguageType eLatin, eCjk, eCtl; +/*N*/ pDoc->GetLanguage( eLatin, eCjk, eCtl ); +/*N*/ LanguageType eDocLang = eLatin; //! which language for date formats? +/*N*/ +/*N*/ // For date recognition +/*N*/ ::utl::TransliterationWrapper aTransliteration( +/*N*/ pDoc->GetServiceManager(), SC_TRANSLITERATION_IGNORECASE ); +/*N*/ aTransliteration.loadModuleIfNeeded( eDocLang ); +/*N*/ CalendarWrapper aCalendar( pDoc->GetServiceManager() ); +/*N*/ aCalendar.loadDefaultCalendar( +/*N*/ MsLangId::convertLanguageToLocale( eDocLang ) ); +/*N*/ ::utl::TransliterationWrapper* pEnglishTransliteration = NULL; +/*N*/ CalendarWrapper* pEnglishCalendar = NULL; +/*N*/ if ( eDocLang != LANGUAGE_ENGLISH_US ) +/*N*/ { +/*?*/ pEnglishTransliteration = new ::utl::TransliterationWrapper ( +/*?*/ pDoc->GetServiceManager(), SC_TRANSLITERATION_IGNORECASE ); +/*?*/ aTransliteration.loadModuleIfNeeded( LANGUAGE_ENGLISH_US ); +/*?*/ pEnglishCalendar = new CalendarWrapper ( pDoc->GetServiceManager() ); +/*?*/ pEnglishCalendar->loadDefaultCalendar( +/*?*/ MsLangId::convertLanguageToLocale( LANGUAGE_ENGLISH_US ) ); +/*N*/ } +/*N*/ +/*N*/ String aLine, aCell; +/*N*/ USHORT i; +/*N*/ USHORT nRow = nStartRow; +/*N*/ +/*N*/ while(--nSkipLines>0) +/*N*/ { +/*?*/ rStrm.ReadUniOrByteStringLine( aLine ); // content is ignored +/*?*/ if ( rStrm.IsEof() ) +/*?*/ break; +/*N*/ } +/*N*/ for( ;; ) +/*N*/ { +/*N*/ rStrm.ReadUniOrByteStringLine( aLine ); +/*N*/ if ( rStrm.IsEof() ) +/*N*/ break; +/*N*/ +/*N*/ xub_StrLen nLineLen = aLine.Len(); +/*N*/ USHORT nCol = nStartCol; +/*N*/ if ( bFixed ) // Feste Satzlaenge +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 for ( i=0; i<nInfoCount; i++ ) +/*N*/ } +/*N*/ else // Nach Trennzeichen suchen +/*N*/ { +/*N*/ USHORT nSourceCol = 0; +/*N*/ USHORT nInfoStart = 0; +/*N*/ const sal_Unicode* p = aLine.GetBuffer(); +/*N*/ while (*p) +/*N*/ { +/*N*/ p = ScImportExport::ScanNextFieldFromString( p, aCell, cStr, pSeps, bMerge ); +/*N*/ +/*N*/ BYTE nFmt = SC_COL_STANDARD; +/*N*/ for ( i=nInfoStart; i<nInfoCount; i++ ) +/*N*/ { +/*N*/ if ( pColStart[i] == nSourceCol + 1 ) // pColStart ist 1-basiert +/*N*/ { +/*N*/ nFmt = pColFormat[i]; +/*N*/ nInfoStart = i + 1; // ColInfos sind in Reihenfolge +/*N*/ break; // for +/*N*/ } +/*N*/ } +/*N*/ if ( nFmt != SC_COL_SKIP ) +/*N*/ { +/*N*/ lcl_PutString( pDoc, nCol, nRow, nTab, aCell, nFmt, +/*N*/ aTransliteration, aCalendar, pEnglishTransliteration, pEnglishCalendar ); +/*N*/ ++nCol; +/*N*/ } +/*N*/ +/*N*/ ++nSourceCol; +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ aProgress.SetStateOnPercent( rStrm.Tell() - nOldPos ); +/*N*/ ++nRow; +/*N*/ if ( nRow > MAXROW ) +/*N*/ { +/*N*/ bOverflow = TRUE; // beim Import Warnung ausgeben +/*N*/ break; +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ ScColumn::bDoubleAlloc = bOld; +/*N*/ pDoc->DoColResize( nTab, 0, MAXCOL, 0 ); +/*N*/ +/*N*/ delete pEnglishTransliteration; +/*N*/ delete pEnglishCalendar; +/*N*/ +/*N*/ return TRUE; +/*N*/ } + + +// static +/*N*/ const sal_Unicode* ScImportExport::ScanNextFieldFromString( const sal_Unicode* p, +/*N*/ String& rField, sal_Unicode cStr, const sal_Unicode* pSeps, BOOL bMergeSeps ) +/*N*/ { +/*N*/ rField.Erase(); +/*N*/ if ( *p == cStr ) // String in Anfuehrungszeichen +/*N*/ { +/*N*/ p = lcl_ScanString( p, rField, cStr, DQM_ESCAPE ); +/*N*/ while ( *p && !ScGlobal::UnicodeStrChr( pSeps, *p ) ) +/*N*/ p++; +/*N*/ if( *p ) +/*N*/ p++; +/*N*/ } +/*N*/ else // bis zum Trennzeichen +/*N*/ { +/*N*/ const sal_Unicode* p0 = p; +/*N*/ while ( *p && !ScGlobal::UnicodeStrChr( pSeps, *p ) ) +/*N*/ p++; +/*N*/ rField.Append( p0, p - p0 ); +/*N*/ if( *p ) +/*N*/ p++; +/*N*/ } +/*N*/ if ( bMergeSeps ) // folgende Trennzeichen ueberspringen +/*N*/ { +/*?*/ while ( *p && ScGlobal::UnicodeStrChr( pSeps, *p ) ) +/*?*/ p++; +/*N*/ } +/*N*/ return p; +/*N*/ } + + // + // + // + + + + + + + + + + + + + + + + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_olinefun.cxx b/binfilter/bf_sc/source/ui/docshell/sc_olinefun.cxx new file mode 100644 index 000000000000..e3ef4632a623 --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_olinefun.cxx @@ -0,0 +1,91 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +// INCLUDE --------------------------------------------------------------- + + +#include "olinefun.hxx" + +#include "docsh.hxx" +#include "globstr.hrc" +#include "bf_sc.hrc" +namespace binfilter { + + +//======================================================================== + +/*N*/ BOOL ScOutlineDocFunc::MakeOutline( const ScRange& rRange, BOOL bColumns, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); return FALSE; //STRIP001 BOOL bSuccess = FALSE; +/*N*/ } + +/*N*/ BOOL ScOutlineDocFunc::RemoveOutline( const ScRange& rRange, BOOL bColumns, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); return FALSE; //STRIP001 BOOL bDone = FALSE; +/*N*/ } + +/*N*/ BOOL ScOutlineDocFunc::RemoveAllOutlines( USHORT nTab, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); return FALSE; //STRIP001 BOOL bSuccess = FALSE; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScOutlineDocFunc::AutoOutline( const ScRange& rRange, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 USHORT nStartCol = rRange.aStart.Col(); +/*N*/ return TRUE; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScOutlineDocFunc::SelectLevel( USHORT nTab, BOOL bColumns, USHORT nLevel, +/*N*/ BOOL bRecord, BOOL bPaint, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScDocument* pDoc = rDocShell.GetDocument(); +/*N*/ return TRUE; +/*N*/ } + +//------------------------------------------------------------------------ + +/*N*/ BOOL ScOutlineDocFunc::ShowMarkedOutlines( const ScRange& rRange, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); return FALSE;//STRIP001 BOOL bDone = FALSE; +/*N*/ } + +/*N*/ BOOL ScOutlineDocFunc::HideMarkedOutlines( const ScRange& rRange, BOOL bRecord, BOOL bApi ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); return FALSE; //STRIP001 BOOL bDone = FALSE; +/*N*/ } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_pntlock.cxx b/binfilter/bf_sc/source/ui/docshell/sc_pntlock.cxx new file mode 100644 index 000000000000..a0badf73ed77 --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_pntlock.cxx @@ -0,0 +1,65 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "pntlock.hxx" +namespace binfilter { + +//------------------------------------------------------------------------ + +/*N*/ ScPaintLockData::ScPaintLockData(USHORT nNewMode) : +/*N*/ nMode( nNewMode ), +/*N*/ nParts( 0 ), +/*N*/ nLevel( 0 ), +/*N*/ nDocLevel( 0 ), +/*N*/ bModified( FALSE ) +/*N*/ { +/*N*/ } + +/*N*/ ScPaintLockData::~ScPaintLockData() +/*N*/ { +/*N*/ } + +/*N*/ void ScPaintLockData::AddRange( const ScRange& rRange, USHORT nP ) +/*N*/ { +/*N*/ if (!xRangeList.Is()) +/*N*/ xRangeList = new ScRangeList; +/*N*/ +/*N*/ xRangeList->Join( rRange ); +/*N*/ nParts |= nP; +/*N*/ } + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_sizedev.cxx b/binfilter/bf_sc/source/ui/docshell/sc_sizedev.cxx new file mode 100644 index 000000000000..956918592f2c --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_sizedev.cxx @@ -0,0 +1,81 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <bf_sfx2/printer.hxx> +#include <vcl/virdev.hxx> + +#include "sizedev.hxx" +#include "docsh.hxx" +#include "scmod.hxx" +#include "inputopt.hxx" +namespace binfilter { + +//------------------------------------------------------------------ + +/*N*/ ScSizeDeviceProvider::ScSizeDeviceProvider( ScDocShell* pDocSh ) +/*N*/ { +/*N*/ BOOL bTextWysiwyg = SC_MOD()->GetInputOptions().GetTextWysiwyg(); +/*N*/ if ( bTextWysiwyg ) +/*N*/ { +/*?*/ pDevice = pDocSh->GetPrinter(); +/*?*/ bOwner = FALSE; +/*?*/ +/*?*/ aOldMapMode = pDevice->GetMapMode(); +/*?*/ pDevice->SetMapMode( MAP_PIXEL ); // GetNeededSize needs pixel MapMode +/*?*/ // printer has right DigitLanguage already +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ pDevice = new VirtualDevice; +/*N*/ pDevice->SetDigitLanguage( SC_MOD()->GetOptDigitLanguage() ); +/*N*/ bOwner = TRUE; +/*N*/ } +/*N*/ +/*N*/ Point aLogic = pDevice->LogicToPixel( Point(1000,1000), MAP_TWIP ); +/*N*/ nPPTX = aLogic.X() / 1000.0; +/*N*/ nPPTY = aLogic.Y() / 1000.0; +/*N*/ +/*N*/ if ( !bTextWysiwyg ) +/*N*/ nPPTX /= pDocSh->GetOutputFactor(); +/*N*/ } + +/*N*/ ScSizeDeviceProvider::~ScSizeDeviceProvider() +/*N*/ { +/*N*/ if (bOwner) +/*N*/ delete pDevice; +/*N*/ else +/*?*/ pDevice->SetMapMode( aOldMapMode ); +/*N*/ } + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/docshell/sc_tablink.cxx b/binfilter/bf_sc/source/ui/docshell/sc_tablink.cxx new file mode 100644 index 000000000000..a979415a502c --- /dev/null +++ b/binfilter/bf_sc/source/ui/docshell/sc_tablink.cxx @@ -0,0 +1,418 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma optimize("",off) +#endif + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +// INCLUDE --------------------------------------------------------- + +#include <bf_sfx2/app.hxx> +#include <bf_svtools/itemset.hxx> +#include <bf_svtools/stritem.hxx> +#include <bf_sfx2/docfile.hxx> +#include <bf_sfx2/fcontnr.hxx> +#include <bf_svx/linkmgr.hxx> +#include <unotools/transliterationwrapper.hxx> + +#include "tablink.hxx" + +#include "docsh.hxx" +#include "globstr.hrc" +#include "hints.hxx" +namespace binfilter { + +/*N*/ TYPEINIT1(ScTableLink, ::binfilter::SvBaseLink); + +//------------------------------------------------------------------------ + +/*N*/ ScTableLink::ScTableLink(ScDocShell* pDocSh, const String& rFile, +/*N*/ const String& rFilter, const String& rOpt, +/*N*/ ULONG nRefresh ): +/*N*/ ::binfilter::SvBaseLink(::binfilter::LINKUPDATE_ONCALL,FORMAT_FILE), +/*N*/ ScRefreshTimer( nRefresh ), +/*N*/ pDocShell(pDocSh), +/*N*/ aFileName(rFile), +/*N*/ aFilterName(rFilter), +/*N*/ aOptions(rOpt), +/*N*/ bInCreate( FALSE ), +/*M*/ bInEdit( FALSE ), +/*N*/ bAddUndo( TRUE ), +/*N*/ bDoPaint( TRUE ) +/*N*/ { +/*N*/ } + +/*N*/ ScTableLink::ScTableLink(SfxObjectShell* pShell, const String& rFile, +/*N*/ const String& rFilter, const String& rOpt, +/*N*/ ULONG nRefresh ): +/*N*/ ::binfilter::SvBaseLink(::binfilter::LINKUPDATE_ONCALL,FORMAT_FILE), +/*N*/ ScRefreshTimer( nRefresh ), +/*N*/ pDocShell((ScDocShell*)pShell), +/*N*/ aFileName(rFile), +/*N*/ aFilterName(rFilter), +/*N*/ aOptions(rOpt), +/*N*/ bInCreate( FALSE ), +/*M*/ bInEdit( FALSE ), +/*N*/ bAddUndo( TRUE ), +/*N*/ bDoPaint( TRUE ) +/*N*/ { +/*N*/ SetRefreshHandler( LINK( this, ScTableLink, RefreshHdl ) ); +/*N*/ SetRefreshControl( pDocShell->GetDocument()->GetRefreshTimerControlAddress() ); +/*N*/ } + +/*N*/ __EXPORT ScTableLink::~ScTableLink() +/*N*/ { +/*N*/ // Verbindung aufheben +/*N*/ +/*N*/ StopRefreshTimer(); +/*N*/ String aEmpty; +/*N*/ ScDocument* pDoc = pDocShell->GetDocument(); +/*N*/ USHORT nCount = pDoc->GetTableCount(); +/*N*/ for (USHORT nTab=0; nTab<nCount; nTab++) +/*N*/ if (pDoc->IsLinked(nTab) && pDoc->GetLinkDoc(nTab)==aFileName) +/*N*/ pDoc->SetLink( nTab, SC_LINK_NONE, aEmpty, aEmpty, aEmpty, aEmpty, 0 ); +/*N*/ } + + +/*N*/ void __EXPORT ScTableLink::DataChanged( const String&, +/*N*/ const ::com::sun::star::uno::Any& ) +/*N*/ { +/*N*/ SvxLinkManager* pLinkManager=pDocShell->GetDocument()->GetLinkManager(); +/*N*/ if (pLinkManager!=NULL) +/*N*/ { +/*N*/ String aFile; +/*N*/ String aFilter; +/*N*/ pLinkManager->GetDisplayNames( this,0,&aFile,NULL,&aFilter); +/*N*/ +/*N*/ // the file dialog returns the filter name with the application prefix +/*N*/ // -> remove prefix +/*N*/ ScDocumentLoader::RemoveAppPrefix( aFilter ); +/*N*/ +/*N*/ if (!bInCreate) +/*N*/ Refresh( aFile, aFilter, NULL, GetRefreshDelay() ); // don't load twice +/*N*/ } +/*N*/ } + + + +/*N*/ BOOL ScTableLink::Refresh(const String& rNewFile, const String& rNewFilter, +/*N*/ const String* pNewOptions, ULONG nNewRefresh ) +/*N*/ { +/*N*/ // Dokument laden +/*N*/ +/*N*/ if (!rNewFile.Len() || !rNewFilter.Len()) +/*N*/ return FALSE; +/*N*/ +/*N*/ String aNewUrl( ScGlobal::GetAbsDocName( rNewFile, pDocShell ) ); +/*N*/ BOOL bNewUrlName = (aNewUrl != aFileName); +/*N*/ +/*N*/ const SfxFilter* pFilter = SFX_APP()->GetFilter( pDocShell->GetFactory(), rNewFilter ); +/*N*/ if (!pFilter) +/*N*/ return FALSE; +/*N*/ +/*N*/ ScDocument* pDoc = pDocShell->GetDocument(); +/*N*/ pDoc->SetInLinkUpdate( TRUE ); +/*N*/ +/*N*/ // wenn neuer Filter ausgewaehlt wurde, Optionen vergessen +/*N*/ if ( rNewFilter != aFilterName ) +/*?*/ aOptions.Erase(); +/*N*/ if ( pNewOptions ) // Optionen hart angegeben? +/*N*/ aOptions = *pNewOptions; +/*N*/ +/*N*/ // ItemSet immer anlegen, damit die DocShell die Optionen setzen kann +/*N*/ SfxItemSet* pSet = new SfxAllItemSet( SFX_APP()->GetPool() ); +/*N*/ if ( aOptions.Len() ) +/*N*/ pSet->Put( SfxStringItem( SID_FILE_FILTEROPTIONS, aOptions ) ); +/*N*/ +/*N*/ SfxMedium* pMed = new SfxMedium(aNewUrl, STREAM_STD_READ, FALSE, pFilter, pSet); +/*N*/ +/*M*/ if ( bInEdit ) // only if using the edit dialog, +/*M*/ pMed->UseInteractionHandler( TRUE ); // enable the filter options dialog +/*M*/ +/*N*/ ScDocShell* pSrcShell = new ScDocShell(SFX_CREATE_MODE_INTERNAL); +/*N*/ SvEmbeddedObjectRef aRef = pSrcShell; +/*N*/ pSrcShell->DoLoad(pMed); +/*N*/ +/*N*/ // Optionen koennten gesetzt worden sein +/*N*/ String aNewOpt = ScDocumentLoader::GetOptions(*pMed); +/*N*/ if (!aNewOpt.Len()) +/*N*/ aNewOpt = aOptions; +/*N*/ +/*N*/ BOOL bFirst = TRUE; +/*N*/ +/*N*/ // Tabellen kopieren +/*N*/ +/*N*/ ScDocShellModificator aModificator( *pDocShell ); +/*N*/ +/*N*/ BOOL bNotFound = FALSE; +/*N*/ ScDocument* pSrcDoc = pSrcShell->GetDocument(); +/*N*/ +/*N*/ // #74835# from text filters that don't set the table name, +/*N*/ // use the one table regardless of link table name +/*N*/ BOOL bAutoTab = (pSrcDoc->GetTableCount() == 1) && +/*N*/ ScDocShell::HasAutomaticTableName( rNewFilter ); +/*N*/ +/*N*/ USHORT nCount = pDoc->GetTableCount(); +/*N*/ for (USHORT nTab=0; nTab<nCount; nTab++) +/*N*/ { +/*N*/ BYTE nMode = pDoc->GetLinkMode(nTab); +/*N*/ if (nMode && pDoc->GetLinkDoc(nTab)==aFileName) +/*N*/ { +/*N*/ String aTabName = pDoc->GetLinkTab(nTab); +/*N*/ +/*N*/ // Tabellenname einer ExtDocRef anpassen +/*N*/ +/*N*/ if ( bNewUrlName && nMode == SC_LINK_VALUE ) +/*N*/ { +/*N*/ String aName; +/*N*/ pDoc->GetName( nTab, aName ); +/*N*/ if ( ScGlobal::pTransliteration->isEqual( +/*N*/ ScGlobal::GetDocTabName( aFileName, aTabName ), aName ) ) +/*N*/ { +/*N*/ pDoc->RenameTab( nTab, +/*N*/ ScGlobal::GetDocTabName( aNewUrl, aTabName ), +/*N*/ FALSE, TRUE ); // kein RefUpdate, kein ValidTabName +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ // kopieren +/*N*/ +/*N*/ USHORT nSrcTab = 0; +/*N*/ BOOL bFound = TRUE; // kein Tab-Name angegeben: immer die erste +/*N*/ if ( aTabName.Len() && !bAutoTab ) +/*N*/ bFound = pSrcDoc->GetTable( aTabName, nSrcTab ); +/*N*/ if (bFound) +/*N*/ pDoc->TransferTab( pSrcDoc, nSrcTab, nTab, FALSE, // nicht neu einfuegen +/*N*/ (nMode == SC_LINK_VALUE) ); // nur Werte? +/*N*/ else +/*N*/ { +/*N*/ pDoc->DeleteAreaTab( 0,0,MAXCOL,MAXROW, nTab, IDF_ALL ); +/*N*/ // pDoc->ClearDrawPage(nTab); +/*N*/ // Fehler eintragen +/*N*/ pDoc->SetString( 0,0,nTab, ScGlobal::GetRscString(STR_LINKERROR) ); +/*N*/ pDoc->SetString( 0,1,nTab, ScGlobal::GetRscString(STR_LINKERRORFILE) ); +/*N*/ pDoc->SetString( 1,1,nTab, aNewUrl ); +/*N*/ pDoc->SetString( 0,2,nTab, ScGlobal::GetRscString(STR_LINKERRORTAB) ); +/*N*/ pDoc->SetString( 1,2,nTab, aTabName ); +/*N*/ +/*N*/ bNotFound = TRUE; +/*N*/ } +/*N*/ +/*N*/ if ( bNewUrlName || rNewFilter != aFilterName || +/*N*/ aNewOpt != aOptions || pNewOptions || +/*N*/ nNewRefresh != GetRefreshDelay() ) +/*?*/ pDoc->SetLink( nTab, nMode, aNewUrl, rNewFilter, aNewOpt, +/*?*/ aTabName, nNewRefresh ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ // neue Einstellungen merken +/*N*/ +/*N*/ if ( bNewUrlName ) +/*N*/ aFileName = aNewUrl; +/*N*/ if ( rNewFilter != aFilterName ) +/*N*/ aFilterName = rNewFilter; +/*N*/ if ( aNewOpt != aOptions ) +/*N*/ aOptions = aNewOpt; +/*N*/ +/*N*/ // aufraeumen +/*N*/ +/*N*/ // pSrcShell->DoClose(); +/*N*/ aRef->DoClose(); +/*N*/ +/*N*/ // Paint (koennen mehrere Tabellen sein) +/*N*/ +/*N*/ if (bDoPaint) +/*N*/ { +/*?*/ pDocShell->PostPaint( ScRange(0,0,0,MAXCOL,MAXROW,MAXTAB), +/*?*/ PAINT_GRID | PAINT_TOP | PAINT_LEFT ); +/*?*/ aModificator.SetDocumentModified(); +/*N*/ } +/*N*/ +/*N*/ if (bNotFound) +/*N*/ { +/*N*/ //! Fehler ausgeben ? +/*N*/ } +/*N*/ +/*N*/ pDoc->SetInLinkUpdate( FALSE ); +/*N*/ +/*N*/ // notify Uno objects (for XRefreshListener) +/*N*/ //! also notify Uno objects if file name was changed! +/*N*/ ScLinkRefreshedHint aHint; +/*N*/ aHint.SetSheetLink( aFileName ); +/*N*/ pDoc->BroadcastUno( aHint ); +/*N*/ +/*N*/ return TRUE; +/*N*/ } + + +/*N*/ IMPL_LINK( ScTableLink, RefreshHdl, ScTableLink*, pCaller ) +/*N*/ { +/*N*/ long nRes = Refresh( aFileName, aFilterName, NULL, GetRefreshDelay() ) != 0; +/*N*/ return nRes; +/*N*/ } + + +// === ScDocumentLoader ================================================== + +/*N*/ String ScDocumentLoader::GetOptions( SfxMedium& rMedium ) // static +/*N*/ { +/*N*/ SfxItemSet* pSet = rMedium.GetItemSet(); +/*N*/ const SfxPoolItem* pItem; +/*N*/ if ( pSet && SFX_ITEM_SET == pSet->GetItemState( SID_FILE_FILTEROPTIONS, TRUE, &pItem ) ) +/*N*/ return ((const SfxStringItem*)pItem)->GetValue(); +/*N*/ +/*N*/ return EMPTY_STRING; +/*N*/ } + +/*N*/ void ScDocumentLoader::GetFilterName( const String& rFileName, +/*N*/ String& rFilter, String& rOptions, BOOL bWithContent ) // static +/*N*/ { +/*N*/ TypeId aScType = TYPE(ScDocShell); +/*N*/ SfxObjectShell* pDocSh = SfxObjectShell::GetFirst( &aScType ); +/*N*/ while ( pDocSh ) +/*N*/ { +/*N*/ if ( pDocSh->HasName() ) +/*N*/ { +/*?*/ SfxMedium* pMed = pDocSh->GetMedium(); +/*?*/ if ( rFileName == pMed->GetName() ) +/*?*/ { +/*?*/ rFilter = pMed->GetFilter()->GetFilterName(); +/*?*/ rOptions = GetOptions(*pMed); +/*?*/ return; +/*?*/ } +/*N*/ } +/*N*/ pDocSh = SfxObjectShell::GetNext( *pDocSh, &aScType ); +/*N*/ } +/*N*/ +/*N*/ // Filter-Detection +/*N*/ +/*N*/ const SfxFilter* pSfxFilter = NULL; +/*N*/ SfxMedium* pMedium = new SfxMedium( rFileName, STREAM_STD_READ, FALSE ); +/*N*/ if ( pMedium->GetError() == ERRCODE_NONE ) +/*N*/ { +/*N*/ SfxFilterContainer* pContainer = ScDocShell::Factory().GetFilterContainer(); +/*N*/ if ( bWithContent && pContainer ) +/*N*/ { +/*?*/ // look at file content (call DetectFilter) +/*?*/ pContainer->GetFilter4Content( *pMedium, &pSfxFilter ); +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ SfxFilterMatcher aMatcher( pContainer ); +/*N*/ aMatcher.GuessFilter( *pMedium, &pSfxFilter ); +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ if ( pSfxFilter ) +/*N*/ rFilter = pSfxFilter->GetFilterName(); +/*N*/ else +/*?*/ rFilter = ScDocShell::GetOwnFilterName(); // sonst Calc-Datei +/*N*/ +/*N*/ delete pMedium; +/*N*/ } + +/*N*/ void ScDocumentLoader::RemoveAppPrefix( String& rFilterName ) // static +/*N*/ { +/*N*/ String aAppPrefix = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM( STRING_SCAPP )); +/*N*/ aAppPrefix.AppendAscii(RTL_CONSTASCII_STRINGPARAM( ": " )); +/*N*/ xub_StrLen nPreLen = aAppPrefix.Len(); +/*N*/ if ( rFilterName.Copy(0,nPreLen) == aAppPrefix ) +/*?*/ rFilterName.Erase(0,nPreLen); +/*N*/ } + +/*M*/ ScDocumentLoader::ScDocumentLoader( const String& rFileName, +/*M*/ String& rFilterName, String& rOptions, +/*M*/ UINT32 nRekCnt, BOOL bWithInteraction ) : +/*M*/ pDocShell(0), +/*M*/ pMedium(0) +/*M*/ { +/*M*/ if ( !rFilterName.Len() ) +/*M*/ GetFilterName( rFileName, rFilterName, rOptions ); +/*M*/ +/*M*/ const SfxFilter* pFilter = SFX_APP()->GetFilter( +/*M*/ ScDocShell::Factory(), rFilterName ); +/*M*/ +/*M*/ // ItemSet immer anlegen, damit die DocShell die Optionen setzen kann +/*M*/ SfxItemSet* pSet = new SfxAllItemSet( SFX_APP()->GetPool() ); +/*M*/ if ( rOptions.Len() ) +/*M*/ pSet->Put( SfxStringItem( SID_FILE_FILTEROPTIONS, rOptions ) ); +/*M*/ +/*M*/ pMedium = new SfxMedium( rFileName, STREAM_STD_READ, FALSE, pFilter, pSet ); +/*M*/ if ( pMedium->GetError() != ERRCODE_NONE ) +/*M*/ return ; +/*M*/ +/*M*/ if ( bWithInteraction ) +/*M*/ pMedium->UseInteractionHandler( TRUE ); // to enable the filter options dialog +/*M*/ +/*M*/ pDocShell = new ScDocShell( SFX_CREATE_MODE_INTERNAL ); +/*M*/ aRef = pDocShell; +/*M*/ +/*M*/ ScDocument* pDoc = pDocShell->GetDocument(); +/*M*/ if( pDoc ) +/*M*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScExtDocOptions* pExtDocOpt = pDoc->GetExtDocOptions(); +/*M*/ } +/*M*/ +/*M*/ pDocShell->DoLoad( pMedium ); +/*M*/ +/*M*/ String aNew = GetOptions(*pMedium); // Optionen werden beim Laden per Dialog gesetzt +/*M*/ if (aNew.Len() && aNew != rOptions) +/*M*/ rOptions = aNew; +/*M*/ } +/*N*/ +/*N*/ ScDocumentLoader::~ScDocumentLoader() +/*N*/ { +/* if ( pDocShell ) + pDocShell->DoClose(); +*/ +/*N*/ if ( aRef.Is() ) +/*N*/ aRef->DoClose(); +/*N*/ else if ( pMedium ) +/*N*/ delete pMedium; +/*N*/ } + +/*N*/ ScDocument* ScDocumentLoader::GetDocument() +/*N*/ { +/*N*/ return pDocShell ? pDocShell->GetDocument() : 0; +/*N*/ } + +/*N*/ BOOL ScDocumentLoader::IsError() const +/*N*/ { +/*N*/ if ( pDocShell && pMedium ) +/*N*/ return pMedium->GetError() != ERRCODE_NONE; +/*N*/ else +/*N*/ return TRUE; +/*N*/ } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/AccessibleContextBase.hxx b/binfilter/bf_sc/source/ui/inc/AccessibleContextBase.hxx new file mode 100644 index 000000000000..881f8c2cf11a --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/AccessibleContextBase.hxx @@ -0,0 +1,338 @@ +/* -*- 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. + * + ************************************************************************/ + + +#ifndef _SC_ACCESSIBLECONTEXTBASE_HXX +#define _SC_ACCESSIBLECONTEXTBASE_HXX + +#include <com/sun/star/accessibility/XAccessibleComponent.hpp> +#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp> +#include <com/sun/star/lang/DisposedException.hpp> + +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <cppuhelper/interfacecontainer.h> + + +#include <bf_svtools/lstner.hxx> +#include <cppuhelper/compbase5.hxx> +#include <cppuhelper/implbase1.hxx> +#include <comphelper/broadcasthelper.hxx> +class Rectangle; +namespace binfilter { + + +/** @descr + This base class provides an implementation of the + <code>AccessibleContext</code> service. +*/ + +typedef cppu::WeakAggComponentImplHelper5< + ::com::sun::star::accessibility::XAccessible, + ::com::sun::star::accessibility::XAccessibleComponent, + ::com::sun::star::accessibility::XAccessibleContext, + ::com::sun::star::accessibility::XAccessibleEventBroadcaster, + ::com::sun::star::lang::XServiceInfo + > ScAccessibleContextBaseWeakImpl; + +typedef cppu::ImplHelper1< + ::com::sun::star::accessibility::XAccessibleEventListener + > ScAccessibleContextBaseImplEvent; + +class ScAccessibleContextBase + : public comphelper::OBaseMutex, + public ScAccessibleContextBaseWeakImpl, + public ScAccessibleContextBaseImplEvent, + public SfxListener +{ +public: + //===== internal ======================================================== + ScAccessibleContextBase( + const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible>& rxParent, + const sal_Int16 aRole); + + virtual void Init(); + virtual void SAL_CALL disposing(); +protected: + virtual ~ScAccessibleContextBase(void); +public: + ///===== SfxListener ===================================================== + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + ///===== XInterface ===================================================== + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( + ::com::sun::star::uno::Type const & rType ) + throw (::com::sun::star::uno::RuntimeException); + + virtual void SAL_CALL acquire() throw (); + + virtual void SAL_CALL release() throw (); + + ///===== XAccessible ===================================================== + + /// Return the XAccessibleContext. + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext> SAL_CALL + getAccessibleContext(void) throw (::com::sun::star::uno::RuntimeException); + + ///===== XAccessibleComponent ============================================ + + virtual sal_Bool SAL_CALL containsPoint( + const ::com::sun::star::awt::Point& rPoint ) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > + SAL_CALL getAccessibleAtPoint( + const ::com::sun::star::awt::Point& rPoint ) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::awt::Rectangle SAL_CALL getBounds( ) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::awt::Point SAL_CALL getLocation( ) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::awt::Point SAL_CALL getLocationOnScreen( ) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::awt::Size SAL_CALL getSize( ) + throw (::com::sun::star::uno::RuntimeException); + + virtual sal_Bool SAL_CALL isShowing( ) + throw (::com::sun::star::uno::RuntimeException); + + virtual sal_Bool SAL_CALL isVisible( ) + throw (::com::sun::star::uno::RuntimeException); + + virtual void SAL_CALL grabFocus( ) + throw (::com::sun::star::uno::RuntimeException); + + virtual sal_Int32 SAL_CALL getForeground( ) + throw (::com::sun::star::uno::RuntimeException); + + virtual sal_Int32 SAL_CALL getBackground( ) + throw (::com::sun::star::uno::RuntimeException); + + ///===== XAccessibleContext ============================================== + + /// Return the number of currently visible children. + virtual sal_Int32 SAL_CALL + getAccessibleChildCount(void) throw (::com::sun::star::uno::RuntimeException); + + /// Return the specified child or NULL if index is invalid. + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL + getAccessibleChild(sal_Int32 nIndex) + throw (::com::sun::star::uno::RuntimeException, + ::com::sun::star::lang::IndexOutOfBoundsException); + + /// Return a reference to the parent. + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL + getAccessibleParent(void) + throw (::com::sun::star::uno::RuntimeException); + + /// Return this objects index among the parents children. + virtual sal_Int32 SAL_CALL + getAccessibleIndexInParent(void) + throw (::com::sun::star::uno::RuntimeException); + + /// Return this object's role. + virtual sal_Int16 SAL_CALL + getAccessibleRole(void) + throw (::com::sun::star::uno::RuntimeException); + + /// Return this object's description. + virtual ::rtl::OUString SAL_CALL + getAccessibleDescription(void) + throw (::com::sun::star::uno::RuntimeException); + + /// Return the object's current name. + virtual ::rtl::OUString SAL_CALL + getAccessibleName(void) + throw (::com::sun::star::uno::RuntimeException); + + /// Return NULL to indicate that an empty relation set. + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleRelationSet> SAL_CALL + getAccessibleRelationSet(void) + throw (::com::sun::star::uno::RuntimeException); + + /// Return the set of current states. + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleStateSet> SAL_CALL + getAccessibleStateSet(void) + throw (::com::sun::star::uno::RuntimeException); + + /** Return the parents locale or throw exception if this object has no + parent yet/anymore. + */ + virtual ::com::sun::star::lang::Locale SAL_CALL + getLocale(void) + throw (::com::sun::star::uno::RuntimeException, + ::com::sun::star::accessibility::IllegalAccessibleComponentStateException); + + ///===== XAccessibleEventBroadcaster ===================================== + + /** Add listener that is informed of future changes of name, + description and so on events. + */ + virtual void SAL_CALL + addEventListener( + const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleEventListener>& xListener) + throw (::com::sun::star::uno::RuntimeException); + + // Remove an existing event listener. + virtual void SAL_CALL + removeEventListener( + const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleEventListener>& xListener) + throw (::com::sun::star::uno::RuntimeException); + + ///===== XAccessibleEventListener ======================================== + + virtual void SAL_CALL + disposing( const ::com::sun::star::lang::EventObject& Source ) + throw (::com::sun::star::uno::RuntimeException); + + virtual void SAL_CALL + notifyEvent( + const ::com::sun::star::accessibility::AccessibleEventObject& aEvent ) + throw (::com::sun::star::uno::RuntimeException); + + ///===== XServiceInfo ==================================================== + + /** Returns an identifier for the implementation of this object. + */ + virtual ::rtl::OUString SAL_CALL + getImplementationName(void) + throw (::com::sun::star::uno::RuntimeException); + + /** Return whether the specified service is supported by this class. + */ + virtual sal_Bool SAL_CALL + supportsService(const ::rtl::OUString& sServiceName) + throw (::com::sun::star::uno::RuntimeException); + + /** Returns a list of all supported services. In this case that is just + the AccessibleContext and Accessible service. + */ + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL + getSupportedServiceNames(void) + throw (::com::sun::star::uno::RuntimeException); + + ///===== XTypeProvider =================================================== + + /// returns the possible types + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL + getTypes() + throw (::com::sun::star::uno::RuntimeException); + + /** Returns a implementation id. + */ + virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL + getImplementationId(void) + throw (::com::sun::star::uno::RuntimeException); + +protected: + /// Return this object's description. + virtual ::rtl::OUString SAL_CALL + createAccessibleDescription(void) + throw (::com::sun::star::uno::RuntimeException); + + /// Return the object's current name. + virtual ::rtl::OUString SAL_CALL + createAccessibleName(void) + throw (::com::sun::star::uno::RuntimeException); + + /// Return the object's current bounding box relative to the desktop. + virtual Rectangle GetBoundingBoxOnScreen(void) const + throw (::com::sun::star::uno::RuntimeException); + + /// Return the object's current bounding box relative to the parent object. + virtual Rectangle GetBoundingBox(void) const + throw (::com::sun::star::uno::RuntimeException); + +public: + /// Calls all Listener to tell they the change. + void + CommitChange(const ::com::sun::star::accessibility::AccessibleEventObject& rEvent) const; + + /// change the name and call the listener to tell they the change + void + ChangeName(); + +protected: + /// Calls all Listener to tell they that the object is now DEFUNC + void CommitDefunc() const; + + /// Calls all FocusListener to tell they that the focus is gained. + void CommitFocusGained() const; + + /// Calls all FocusListener to tell they that the focus is lost. + void CommitFocusLost() const; + + sal_Bool IsDefunc() const { return rBHelper.bDisposed; } + + virtual void IsObjectValid() const + throw (::com::sun::star::lang::DisposedException); + + /// Use this method to set initial Name without notification + void SetName(const ::rtl::OUString& rName) { msName = rName; } + /// Use this method to set initial Description without notification + void SetDescription(const ::rtl::OUString& rDesc) { msDescription = rDesc; } + + /// Reference to the parent object. + ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible> mxParent; + +private: + /** Description of this object. This is not a constant because it can + be set from the outside. Furthermore, it changes according the the + draw page's display mode. + */ + ::rtl::OUString msDescription; + + /** Name of this object. It changes according the the draw page's + display mode. + */ + ::rtl::OUString msName; + + /// client id in the AccessibleEventNotifier queue + sal_uInt32 mnClientId; + + /** This is the role of this object. + */ + sal_Int16 maRole; +}; + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/AccessibleCsvControl.hxx b/binfilter/bf_sc/source/ui/inc/AccessibleCsvControl.hxx new file mode 100644 index 000000000000..74880bcefebb --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/AccessibleCsvControl.hxx @@ -0,0 +1,683 @@ +/* -*- 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. + * + ************************************************************************/ + +// ============================================================================ + +#ifndef _SC_ACCESSIBLECSVCONTROL_HXX +#define _SC_ACCESSIBLECSVCONTROL_HXX + +#include <com/sun/star/accessibility/XAccessibleText.hpp> +#include <com/sun/star/accessibility/XAccessibleTable.hpp> +#include <com/sun/star/accessibility/XAccessibleSelection.hpp> + +#include <tools/gen.hxx> +#include <tools/string.hxx> +#include <rtl/ustrbuf.hxx> +#include <cppuhelper/implbase1.hxx> +#include <cppuhelper/implbase2.hxx> +#include <bf_svx/AccessibleStaticTextBase.hxx> + +#include "AccessibleContextBase.hxx" +namespace utl { class AccessibleStateSetHelper; } +namespace binfilter { + + +// ============================================================================ + +class ScCsvControl; +//STRIP008 namespace utl { class AccessibleStateSetHelper; } + +/** Accessible base class used for CSV controls. */ +class ScAccessibleCsvControl : public ScAccessibleContextBase +{ +protected: + typedef ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible > XAccessibleRef; + typedef ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleRelationSet > XAccessibleRelationSetRef; + typedef ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleStateSet > XAccessibleStateSetRef; + + typedef ::com::sun::star::awt::Point AwtPoint; + typedef ::com::sun::star::awt::Size AwtSize; + typedef ::com::sun::star::awt::Rectangle AwtRectangle; + +private: + ScCsvControl* mpControl; /// Pointer to the VCL control. + +public: + explicit ScAccessibleCsvControl( + const XAccessibleRef& rxParent, + ScCsvControl& rControl, + sal_uInt16 nRole ); + virtual ~ScAccessibleCsvControl(); + virtual void SAL_CALL disposing(); + + // XAccessibleComponent --------------------------------------------------- + + /** Returns the child at the specified point (cell returns NULL). */ + virtual XAccessibleRef SAL_CALL getAccessibleAtPoint( const AwtPoint& rPoint ) + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns true, if the control is visible. */ + virtual sal_Bool SAL_CALL isVisible() throw( ::com::sun::star::uno::RuntimeException ); + + /** Sets the focus to this control. */ + virtual void SAL_CALL grabFocus() throw( ::com::sun::star::uno::RuntimeException ); + + // events ----------------------------------------------------------------- +public: + /** Sends a GetFocus or LoseFocus event to all listeners. */ + virtual void SendFocusEvent( bool bFocused ); + /** Sends a caret changed event to all listeners. */ + virtual void SendCaretEvent(); + /** Sends a visible area changed event to all listeners. */ + virtual void SendVisibleEvent(); + /** Sends a selection changed event to all listeners. */ + virtual void SendSelectionEvent(); + /** Sends a table model changed event for changed cell contents to all listeners. */ + virtual void SendTableUpdateEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn, bool bAllRows ); + /** Sends a table model changed event for an inserted column to all listeners. */ + virtual void SendInsertColumnEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn ); + /** Sends a table model changed event for a removed column to all listeners. */ + virtual void SendRemoveColumnEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn ); + + // helpers ---------------------------------------------------------------- +protected: + /** Returns this object's current bounding box relative to the desktop. */ + virtual Rectangle GetBoundingBoxOnScreen() const throw( ::com::sun::star::uno::RuntimeException ); + /** Returns this object's current bounding box relative to the parent object. */ + virtual Rectangle GetBoundingBox() const throw( ::com::sun::star::uno::RuntimeException ); + + /** Creates a new UUID in rSeq, if it is empty. Locks mutex internally. */ + void getUuid( ::com::sun::star::uno::Sequence< sal_Int8 >& rSeq ); + + /** Returns whether the object is alive. Must be called with locked mutex. */ + inline bool implIsAlive() const { return !rBHelper.bDisposed && !rBHelper.bInDispose && mpControl; } + /** Throws an exception, if the object is disposed/disposing or any pointer + is missing. Should be used with locked mutex! */ + void ensureAlive() const throw( ::com::sun::star::lang::DisposedException ); + + /** Returns the VCL control. Assumes a living object. */ + ScCsvControl& implGetControl() const; + + /** Returns the first child of rxParentObj, which has the role nRole. */ + XAccessibleRef implGetChildByRole( const XAccessibleRef& rxParentObj, sal_uInt16 nRole ) + throw( ::com::sun::star::uno::RuntimeException ); + /** Creates a StateSetHelper and fills it with DEFUNC, OPAQUE, ENABLED, SHOWING and VISIBLE. */ + ::utl::AccessibleStateSetHelper* implCreateStateSet(); + + /** Disposes the object. This is a helper called from destructors only. */ + void implDispose(); + + /** Converts the screen position rPos to a position relative to this control. */ + Point implGetRelPos( const Point& rPos ) const; + /** Converts the control-relative position to an absolute screen position. */ + Point implGetAbsPos( const Point& rPos ) const; +}; + + +// ============================================================================ + +class ScCsvRuler; + +typedef ::cppu::ImplHelper1< + ::com::sun::star::accessibility::XAccessibleText > + ScAccessibleCsvRulerImpl; + +/** Accessible class representing the CSV ruler control. */ +class ScAccessibleCsvRuler : public ScAccessibleCsvControl, public ScAccessibleCsvRulerImpl +{ +protected: + typedef ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::PropertyValue > PropertyValueSeq; + +private: + ::rtl::OUStringBuffer maBuffer; /// Contains the text representation of the ruler. + +public: + explicit ScAccessibleCsvRuler( ScCsvRuler& rRuler ); + virtual ~ScAccessibleCsvRuler(); + + // XAccessibleComponent ----------------------------------------------------- + + virtual sal_Int32 SAL_CALL getForeground( ) + throw (::com::sun::star::uno::RuntimeException); + + virtual sal_Int32 SAL_CALL getBackground( ) + throw (::com::sun::star::uno::RuntimeException); + + // XAccessibleContext ----------------------------------------------------- + + /** Returns the child count (the ruler does not have children). */ + virtual sal_Int32 SAL_CALL getAccessibleChildCount() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Throws an exception (the ruler does not have childern). */ + virtual XAccessibleRef SAL_CALL getAccessibleChild( sal_Int32 nIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Returns the relation to the grid control. */ + virtual XAccessibleRelationSetRef SAL_CALL getAccessibleRelationSet() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the current set of states. */ + virtual XAccessibleStateSetRef SAL_CALL getAccessibleStateSet() + throw( ::com::sun::star::uno::RuntimeException ); + + // XAccessibleText -------------------------------------------------------- + + /** Return the position of the caret. */ + virtual sal_Int32 SAL_CALL getCaretPosition() throw( ::com::sun::star::uno::RuntimeException ); + + /** Sets the position of the caret. */ + virtual sal_Bool SAL_CALL setCaretPosition( sal_Int32 nIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Returns the specified character. */ + virtual sal_Unicode SAL_CALL getCharacter( sal_Int32 nIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Returns the attributes of the specified character. */ + virtual PropertyValueSeq SAL_CALL getCharacterAttributes( sal_Int32 nIndex, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aRequestedAttributes ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Returns the screen coordinates of the specified character. */ + virtual AwtRectangle SAL_CALL getCharacterBounds( sal_Int32 nIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Returns the count of characters. */ + virtual sal_Int32 SAL_CALL getCharacterCount() throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the character index at the specified coordinate (object's coordinate system). */ + virtual sal_Int32 SAL_CALL getIndexAtPoint( const AwtPoint& rPoint ) + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the selected text (ruler returns empty string). */ + virtual ::rtl::OUString SAL_CALL getSelectedText() throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the start index of the selection (ruler returns -1). */ + virtual sal_Int32 SAL_CALL getSelectionStart() throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the end index of the selection (ruler returns -1). */ + virtual sal_Int32 SAL_CALL getSelectionEnd() throw( ::com::sun::star::uno::RuntimeException ); + + /** Selects a part of the text (ruler does nothing). */ + virtual sal_Bool SAL_CALL setSelection( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Returns the entire text. */ + virtual ::rtl::OUString SAL_CALL getText() throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the specified range [Start,End) of the text. */ + virtual ::rtl::OUString SAL_CALL getTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Returns the specified text portion. */ + virtual ::com::sun::star::accessibility::TextSegment SAL_CALL getTextAtIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::accessibility::TextSegment SAL_CALL getTextBeforeIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::accessibility::TextSegment SAL_CALL getTextBehindIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); + + /** Copies the specified text range into the clipboard (ruler does nothing). */ + virtual sal_Bool SAL_CALL copyText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + // XInterface ------------------------------------------------------------- + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& rType ) + throw( ::com::sun::star::uno::RuntimeException ); + + virtual void SAL_CALL acquire() throw(); + + virtual void SAL_CALL release() throw(); + + // XServiceInfo ----------------------------------------------------------- + + /** Returns an identifier for the implementation of this object. */ + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw( ::com::sun::star::uno::RuntimeException ); + + // XTypeProvider ---------------------------------------------------------- + + /** Returns a sequence with all supported interface types. */ + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns an implementation ID. */ + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() + throw( ::com::sun::star::uno::RuntimeException ); + + // events ----------------------------------------------------------------- +public: + /** Sends a caret changed event to all listeners. */ + virtual void SendCaretEvent(); + + // helpers ---------------------------------------------------------------- +private: + /** Returns this object's name. */ + virtual ::rtl::OUString SAL_CALL createAccessibleName() + throw( ::com::sun::star::uno::RuntimeException ); + /** Returns this object's description. */ + virtual ::rtl::OUString SAL_CALL createAccessibleDescription() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Throws an exception, if the specified character position is invalid (outside 0..len-1). */ + void ensureValidIndex( sal_Int32 nIndex ) const + throw( ::com::sun::star::lang::IndexOutOfBoundsException ); + /** Throws an exception, if the specified character position is invalid (outside 0..len). */ + void ensureValidIndexWithEnd( sal_Int32 nIndex ) const + throw( ::com::sun::star::lang::IndexOutOfBoundsException ); + /** Throws an exception, if the specified character range [Start,End) is invalid. + @descr If Start>End, swaps Start and End before checking. */ + void ensureValidRange( sal_Int32& rnStartIndex, sal_Int32& rnEndIndex ) const + throw( ::com::sun::star::lang::IndexOutOfBoundsException ); + + /** Returns the VCL ruler control. Assumes a living object. */ + ScCsvRuler& implGetRuler() const; + + /** Builds the entire string buffer. */ + void constructStringBuffer() throw( ::com::sun::star::uno::RuntimeException ); + /** Returns the character count of the text. */ + sal_Int32 implGetTextLength() const; + + /** Returns true, if the character at the specified index has a split. */ + bool implHasSplit( sal_Int32 nApiPos ); + + /** Returns the first character index with equal formatting as at nApiPos. */ + sal_Int32 implGetFirstEqualFormatted( sal_Int32 nApiPos ); + /** Returns the last character index with equal formatting as at nApiPos. */ + sal_Int32 implGetLastEqualFormatted( sal_Int32 nApiPos ); +}; + + +// ============================================================================ + +class ScCsvGrid; + +typedef ::cppu::ImplHelper2< + ::com::sun::star::accessibility::XAccessibleTable, + ::com::sun::star::accessibility::XAccessibleSelection > + ScAccessibleCsvGridImpl; + +/** Accessible class representing the CSV grid control. */ +class ScAccessibleCsvGrid : public ScAccessibleCsvControl, public ScAccessibleCsvGridImpl +{ +protected: + typedef ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleTable > XAccessibleTableRef; + +public: + explicit ScAccessibleCsvGrid( ScCsvGrid& rGrid ); + virtual ~ScAccessibleCsvGrid(); + + // XAccessibleComponent --------------------------------------------------- + + /** Returns the cell at the specified point. */ + virtual XAccessibleRef SAL_CALL getAccessibleAtPoint( const AwtPoint& rPoint ) + throw( ::com::sun::star::uno::RuntimeException ); + + virtual sal_Int32 SAL_CALL getForeground( ) + throw (::com::sun::star::uno::RuntimeException); + + virtual sal_Int32 SAL_CALL getBackground( ) + throw (::com::sun::star::uno::RuntimeException); + + // XAccessibleContext ----------------------------------------------------- + + /** Returns the child count (count of cells in the table). */ + virtual sal_Int32 SAL_CALL getAccessibleChildCount() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the specified child cell. */ + virtual XAccessibleRef SAL_CALL getAccessibleChild( sal_Int32 nIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Returns the relation to the ruler control. */ + virtual XAccessibleRelationSetRef SAL_CALL getAccessibleRelationSet() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the current set of states. */ + virtual XAccessibleStateSetRef SAL_CALL getAccessibleStateSet() + throw( ::com::sun::star::uno::RuntimeException ); + + // XAccessibleTable ------------------------------------------------------- + + /** Returns the number of rows in the table. */ + virtual sal_Int32 SAL_CALL getAccessibleRowCount() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the number of columns in the table. */ + virtual sal_Int32 SAL_CALL getAccessibleColumnCount() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the description of the specified row in the table. */ + virtual ::rtl::OUString SAL_CALL getAccessibleRowDescription( sal_Int32 nRow ) + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the description text of the specified column in the table. */ + virtual ::rtl::OUString SAL_CALL getAccessibleColumnDescription( sal_Int32 nColumn ) + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the number of rows occupied at a specified row and column. + @descr Returns always 1 (Merged cells not supported). */ + virtual sal_Int32 SAL_CALL getAccessibleRowExtentAt( sal_Int32 nRow, sal_Int32 nColumn ) + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the number of rows occupied at a specified row and column. + @descr Returns always 1 (Merged cells not supported). */ + virtual sal_Int32 SAL_CALL getAccessibleColumnExtentAt( sal_Int32 nRow, sal_Int32 nColumn ) + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the row headers as an AccessibleTable. */ + virtual XAccessibleTableRef SAL_CALL getAccessibleRowHeaders() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the column headers as an AccessibleTable. */ + virtual XAccessibleTableRef SAL_CALL getAccessibleColumnHeaders() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the selected rows as a sequence. */ + virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleRows() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the selected columns as a sequence. */ + virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleColumns() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns true, if the specified row is selected. */ + virtual sal_Bool SAL_CALL isAccessibleRowSelected( sal_Int32 nRow ) + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns true, if the specified column is selected. */ + virtual sal_Bool SAL_CALL isAccessibleColumnSelected( sal_Int32 nColumn ) + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the accessible cell object at the specified position. */ + virtual XAccessibleRef SAL_CALL getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Returns the caption object of the table. */ + virtual XAccessibleRef SAL_CALL getAccessibleCaption() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the summary description object of the table. */ + virtual XAccessibleRef SAL_CALL getAccessibleSummary() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns true, if the cell at a specified position is selected. */ + virtual sal_Bool SAL_CALL isAccessibleSelected( sal_Int32 nRow, sal_Int32 nColumn ) + throw( ::com::sun::star::uno::RuntimeException ); + + // XAccessibleExtendedTable ----------------------------------------------- + + /** Returns the child index of the cell at the specified position. */ + virtual sal_Int32 SAL_CALL getAccessibleIndex( sal_Int32 nRow, sal_Int32 nColumn ) + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the row index of the specified child. */ + virtual sal_Int32 SAL_CALL getAccessibleRow( sal_Int32 nChildIndex ) + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the column index of the specified child. */ + virtual sal_Int32 SAL_CALL getAccessibleColumn( sal_Int32 nChildIndex ) + throw( ::com::sun::star::uno::RuntimeException ); + + // XAccessibleSelection --------------------------------------------------- + + /** Selects the specified child (selects the entire column or the entire table). */ + virtual void SAL_CALL selectAccessibleChild( sal_Int32 nChildIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Returns true, if the specified child is selected. */ + virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int32 nChildIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Deselects all cells. */ + virtual void SAL_CALL clearAccessibleSelection() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Selects all cells. */ + virtual void SAL_CALL selectAllAccessibleChildren() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the count of selected children. */ + virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the child with the specified index in all selected children. */ + virtual XAccessibleRef SAL_CALL getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Deselects the child with the specified index in all selected children. */ + virtual void SAL_CALL deselectAccessibleChild( sal_Int32 nSelectedChildIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + // XInterface ------------------------------------------------------------- + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& rType ) + throw( ::com::sun::star::uno::RuntimeException ); + + virtual void SAL_CALL acquire() throw(); + + virtual void SAL_CALL release() throw(); + + // XServiceInfo ----------------------------------------------------------- + + /** Returns an identifier for the implementation of this object. */ + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw( ::com::sun::star::uno::RuntimeException ); + + // XTypeProvider ---------------------------------------------------------- + + /** Returns a sequence with all supported interface types. */ + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns an implementation ID. */ + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() + throw( ::com::sun::star::uno::RuntimeException ); + + // events ----------------------------------------------------------------- +public: + /** Sends a GetFocus or LoseFocus event to all listeners. */ + virtual void SendFocusEvent( bool bFocused ); + /** Sends a table model changed event for changed cell contents to all listeners. */ + virtual void SendTableUpdateEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn, bool bAllRows ); + /** Sends a table model changed event for an inserted column to all listeners. */ + virtual void SendInsertColumnEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn ); + /** Sends a table model changed event for a removed column to all listeners. */ + virtual void SendRemoveColumnEvent( sal_uInt32 nFirstColumn, sal_uInt32 nLastColumn ); + + // helpers ---------------------------------------------------------------- +private: + /** Returns this object's name. */ + virtual ::rtl::OUString SAL_CALL createAccessibleName() + throw( ::com::sun::star::uno::RuntimeException ); + /** Returns this object's description. */ + virtual ::rtl::OUString SAL_CALL createAccessibleDescription() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Throws an exception, if nIndex is not a valid child index. */ + void ensureValidIndex( sal_Int32 nIndex ) const + throw( ::com::sun::star::lang::IndexOutOfBoundsException ); + /** Throws an exception, if the specified position is invalid. */ + void ensureValidPosition( sal_Int32 nRow, sal_Int32 nColumn ) const + throw( ::com::sun::star::lang::IndexOutOfBoundsException ); + + /** Returns the VCL grid control. Assumes a living object. */ + ScCsvGrid& implGetGrid() const; + + /** Returns true, if the specified column (including header) is selected. */ + bool implIsColumnSelected( sal_Int32 nColumn ) const; + /** Selects the specified column (including header). */ + void implSelectColumn( sal_Int32 nColumn, bool bSelect ); + + /** Returns the count of visible rows in the table (including header). */ + sal_Int32 implGetRowCount() const; + /** Returns the total column count in the table (including header). */ + sal_Int32 implGetColumnCount() const; + /** Returns the count of selected columns in the table. */ + sal_Int32 implGetSelColumnCount() const; + /** Returns the total cell count in the table (including header). */ + inline sal_Int32 implGetCellCount() const { return implGetRowCount() * implGetColumnCount(); } + + /** Returns the row index from cell index (including header). */ + inline sal_Int32 implGetRow( sal_Int32 nIndex ) const { return nIndex / implGetColumnCount(); } + /** Returns the column index from cell index (including header). */ + inline sal_Int32 implGetColumn( sal_Int32 nIndex ) const { return nIndex % implGetColumnCount(); } + /** Returns the absolute column index of the nSelColumn-th selected column. */ + sal_Int32 implGetSelColumn( sal_Int32 nSelColumn ) const; + /** Returns the child index from cell position (including header). */ + inline sal_Int32 implGetIndex( sal_Int32 nRow, sal_Int32 nColumn ) const { return nRow * implGetColumnCount() + nColumn; } + + /** Returns the contents of the specified cell (including header). Indexes must be valid. */ + String implGetCellText( sal_Int32 nRow, sal_Int32 nColumn ) const; + /** Creates a new accessible object of the specified cell. Indexes must be valid. */ + ScAccessibleCsvControl* implCreateCellObj( sal_Int32 nRow, sal_Int32 nColumn ) const; +}; + + +// ============================================================================ + +/** Accessible class representing a cell of the CSV grid control. */ +class ScAccessibleCsvCell : public ScAccessibleCsvControl, public accessibility::AccessibleStaticTextBase +{ +protected: + typedef ::com::sun::star::uno::Sequence< + ::com::sun::star::beans::PropertyValue > PropertyValueSeq; + typedef ::std::auto_ptr< SvxEditSource > SvxEditSourcePtr; + +private: + String maCellText; /// The text contents of this cell. + sal_Int32 mnLine; /// The grid line index (core index). + sal_uInt32 mnColumn; /// The grid column index (core index). + sal_Int32 mnIndex; /// The index of the cell in the table. + +public: + explicit ScAccessibleCsvCell( + ScCsvGrid& rGrid, + const String& rCellText, + sal_Int32 nRow, sal_Int32 nColumn ); + virtual ~ScAccessibleCsvCell(); + virtual void SAL_CALL disposing(); + + // XAccessibleComponent --------------------------------------------------- + + /** Sets the focus to the column of this cell. */ + virtual void SAL_CALL grabFocus() throw( ::com::sun::star::uno::RuntimeException ); + + virtual sal_Int32 SAL_CALL getForeground( ) + throw (::com::sun::star::uno::RuntimeException); + + virtual sal_Int32 SAL_CALL getBackground( ) + throw (::com::sun::star::uno::RuntimeException); + + // XAccessibleContext ----------------------------------------------------- + + /** Returns the child count. */ + virtual sal_Int32 SAL_CALL getAccessibleChildCount() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the specified child. */ + virtual XAccessibleRef SAL_CALL getAccessibleChild( sal_Int32 nIndex ) + throw( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + /** Returns the index of this cell in the table. */ + virtual sal_Int32 SAL_CALL getAccessibleIndexInParent() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the relation to the ruler control. */ + virtual XAccessibleRelationSetRef SAL_CALL getAccessibleRelationSet() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the current set of states. */ + virtual XAccessibleStateSetRef SAL_CALL getAccessibleStateSet() + throw( ::com::sun::star::uno::RuntimeException ); + + // XInterface ------------------------------------------------------------- + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& rType ) + throw( ::com::sun::star::uno::RuntimeException ); + + virtual void SAL_CALL acquire() throw(); + + virtual void SAL_CALL release() throw(); + + // XServiceInfo ----------------------------------------------------------- + + /** Returns an identifier for the implementation of this object. */ + virtual ::rtl::OUString SAL_CALL getImplementationName() + throw( ::com::sun::star::uno::RuntimeException ); + + // XTypeProvider ---------------------------------------------------------- + + /** Returns a sequence with all supported interface types. */ + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns an implementation ID. */ + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() + throw( ::com::sun::star::uno::RuntimeException ); + + // helpers ---------------------------------------------------------------- +protected: + /** Returns this object's current bounding box relative to the desktop. */ + virtual Rectangle GetBoundingBoxOnScreen() const throw( ::com::sun::star::uno::RuntimeException ); + /** Returns this object's current bounding box relative to the parent object. */ + virtual Rectangle GetBoundingBox() const throw( ::com::sun::star::uno::RuntimeException ); + +private: + /** Returns this object's name. */ + virtual ::rtl::OUString SAL_CALL createAccessibleName() + throw( ::com::sun::star::uno::RuntimeException ); + /** Returns this object's description. */ + virtual ::rtl::OUString SAL_CALL createAccessibleDescription() + throw( ::com::sun::star::uno::RuntimeException ); + + /** Returns the VCL grid control. Assumes a living object. */ + ScCsvGrid& implGetGrid() const; + /** Returns the pixel position of the cell (rel. to parent), regardless of visibility. */ + Point implGetRealPos() const; + /** Returns the width of the character count */ + sal_uInt32 implCalcPixelWidth(sal_uInt32 nChars) const; + /** Returns the pixel size of the cell, regardless of visibility. */ + Size implGetRealSize() const; + /** Returns the bounding box of the cell relative in the table. */ + Rectangle implGetBoundingBox() const; + + /** Creates the edit source the text helper needs. */ + ::std::auto_ptr< SvxEditSource > implCreateEditSource(); +}; + + +// ============================================================================ + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/AccessibleText.hxx b/binfilter/bf_sc/source/ui/inc/AccessibleText.hxx new file mode 100644 index 000000000000..679f0370bf69 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/AccessibleText.hxx @@ -0,0 +1,362 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef _SC_ACCESSIBLETEXT_HXX +#define _SC_ACCESSIBLETEXT_HXX + +#include "textuno.hxx" +#include "global.hxx" +#include "viewdata.hxx" + +#include <bf_svx/svxenum.hxx> + +#include <memory> +namespace binfilter { + +class ScCellTextData; +class ScDocShell; +class ScViewForwarder; +class ScEditObjectViewForwarder; +class ScPreviewViewForwarder; +class ScEditViewForwarder; +class ScPreviewShell; +class EditTextObject; +class ScCsvViewForwarder; + + +// ============================================================================ + +class ScAccessibleTextData : public SfxListener +{ +public: + ScAccessibleTextData() {} + virtual ~ScAccessibleTextData() {} + + virtual ScAccessibleTextData* Clone() const = 0; + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) {} + + virtual SvxTextForwarder* GetTextForwarder() = 0; + virtual SvxViewForwarder* GetViewForwarder() = 0; + virtual SvxEditViewForwarder* GetEditViewForwarder( sal_Bool bCreate ) = 0; + virtual SfxBroadcaster& GetBroadcaster() const { return maBroadcaster; } + + virtual void UpdateData() = 0; + virtual void SetDoUpdate(sal_Bool bValue) = 0; + virtual sal_Bool IsDirty() const = 0; + +private: + mutable SfxBroadcaster maBroadcaster; + + // prevent the using of this method of the base class + ScSharedCellEditSource* GetOriginalSource() { return NULL; } +}; + + +// ============================================================================ + +class ScAccessibleCellBaseTextData : public ScAccessibleTextData, + public ScCellTextData +{ +public: + ScAccessibleCellBaseTextData(ScDocShell* pDocShell, + const ScAddress& rP) + : ScCellTextData(pDocShell, rP) {} + virtual ~ScAccessibleCellBaseTextData() {} + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) { ScCellTextData::Notify(rBC, rHint); } + + virtual void UpdateData() { ScCellTextData::UpdateData(); } + virtual void SetDoUpdate(sal_Bool bValue) { ScCellTextData::SetDoUpdate(bValue); } + virtual sal_Bool IsDirty() const { return ScCellTextData::IsDirty(); } +}; + + +// ============================================================================ + +// ScAccessibleCellTextData: shared data between sub objects of a accessible cell text object + +class ScAccessibleCellTextData : public ScAccessibleCellBaseTextData +{ +public: + ScAccessibleCellTextData(); +// ScTabViewShell* pViewShell, +// const ScAddress& rP, ScSplitPos eSplitPos); + virtual ~ScAccessibleCellTextData(); + + virtual ScAccessibleTextData* Clone() const; + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + virtual SvxTextForwarder* GetTextForwarder(); + virtual SvxViewForwarder* GetViewForwarder(); + virtual SvxEditViewForwarder* GetEditViewForwarder( sal_Bool bCreate ); + + DECL_LINK( NotifyHdl, EENotify* ); +protected: + virtual void GetCellText(const ScAddress& rCellPos, String& rText); +private: + ScViewForwarder* mpViewForwarder; + ScEditViewForwarder* mpEditViewForwarder; +// ScTabViewShell* mpViewShell; + ScSplitPos meSplitPos; + sal_Bool mbViewEditEngine; + + // prevent the using of this method of the base class + ScSharedCellEditSource* GetOriginalSource() { return NULL; } + +// ScDocShell* GetDocShell(ScTabViewShell* pViewShell); +}; + + +// ============================================================================ + +class ScAccessibleEditObjectTextData : public ScAccessibleTextData +{ +public: + ScAccessibleEditObjectTextData(EditView* pEditView, Window* pWin); + virtual ~ScAccessibleEditObjectTextData(); + + virtual ScAccessibleTextData* Clone() const; + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + virtual SvxTextForwarder* GetTextForwarder(); + virtual SvxViewForwarder* GetViewForwarder(); + virtual SvxEditViewForwarder* GetEditViewForwarder( sal_Bool bCreate ); + + virtual void UpdateData() { } + virtual void SetDoUpdate(sal_Bool bValue) { } + virtual sal_Bool IsDirty() const { return sal_False; } + + DECL_LINK( NotifyHdl, EENotify* ); +protected: + ScEditObjectViewForwarder* mpViewForwarder; + ScEditViewForwarder* mpEditViewForwarder; + EditView* mpEditView; + EditEngine* mpEditEngine; + SvxEditEngineForwarder* mpForwarder; + Window* mpWindow; +}; + + +// ============================================================================ + +class ScAccessibleEditLineTextData : public ScAccessibleEditObjectTextData +{ +public: + ScAccessibleEditLineTextData(EditView* pEditView, Window* pWin); + virtual ~ScAccessibleEditLineTextData(); + + virtual ScAccessibleTextData* Clone() const; + + virtual SvxTextForwarder* GetTextForwarder(); + virtual SvxEditViewForwarder* GetEditViewForwarder( sal_Bool bCreate ); + + void Dispose(); + void TextChanged(); + void StartEdit(); + void EndEdit(); +private: + void ResetEditMode(); + + sal_Bool mbEditEngineCreated; +}; + + +// ============================================================================ + +class ScAccessiblePreviewCellTextData : public ScAccessibleCellBaseTextData +{ +public: + ScAccessiblePreviewCellTextData(ScPreviewShell* pViewShell, + const ScAddress& rP); + virtual ~ScAccessiblePreviewCellTextData(); + + virtual ScAccessibleTextData* Clone() const; + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + virtual SvxTextForwarder* GetTextForwarder(); + virtual SvxViewForwarder* GetViewForwarder(); + virtual SvxEditViewForwarder* GetEditViewForwarder( sal_Bool bCreate ) { return NULL; } + + DECL_LINK( NotifyHdl, EENotify* ); +private: + ScPreviewViewForwarder* mpViewForwarder; + ScPreviewShell* mpViewShell; + + // prevent the using of this method of the base class + ScSharedCellEditSource* GetOriginalSource() { return NULL; } + + ScDocShell* GetDocShell(ScPreviewShell* pViewShell); +}; + + +// ============================================================================ + +class ScAccessiblePreviewHeaderCellTextData : public ScAccessibleCellBaseTextData +{ +public: + ScAccessiblePreviewHeaderCellTextData(ScPreviewShell* pViewShell, + const String& rText, const ScAddress& rP, sal_Bool bColHeader, sal_Bool bRowHeader); + virtual ~ScAccessiblePreviewHeaderCellTextData(); + + virtual ScAccessibleTextData* Clone() const; + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + virtual SvxTextForwarder* GetTextForwarder(); + virtual SvxViewForwarder* GetViewForwarder(); + virtual SvxEditViewForwarder* GetEditViewForwarder( sal_Bool bCreate ) { return NULL; } + + DECL_LINK( NotifyHdl, EENotify* ); +private: + ScPreviewViewForwarder* mpViewForwarder; + ScPreviewShell* mpViewShell; + String maText; + sal_Bool mbColHeader; + sal_Bool mbRowHeader; + + // prevent the using of this method of the base class + ScSharedCellEditSource* GetOriginalSource() { return NULL; } + + ScDocShell* GetDocShell(ScPreviewShell* pViewShell); +}; + + +// ============================================================================ + +class ScAccessibleHeaderTextData : public ScAccessibleTextData +{ +public: + ScAccessibleHeaderTextData(ScPreviewShell* pViewShell, + const EditTextObject* pEditObj, sal_Bool bHeader, SvxAdjust eAdjust); + virtual ~ScAccessibleHeaderTextData(); + + virtual ScAccessibleTextData* Clone() const; + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + virtual SvxTextForwarder* GetTextForwarder(); + virtual SvxViewForwarder* GetViewForwarder(); + virtual SvxEditViewForwarder* GetEditViewForwarder( sal_Bool bCreate ) { return NULL; } + + virtual void UpdateData() { } + virtual void SetDoUpdate(sal_Bool bValue) { } + virtual sal_Bool IsDirty() const { return sal_False; } +private: + ScPreviewViewForwarder* mpViewForwarder; + ScPreviewShell* mpViewShell; + ScEditEngineDefaulter* mpEditEngine; + SvxEditEngineForwarder* mpForwarder; + ScDocShell* mpDocSh; + const EditTextObject* mpEditObj; + sal_Bool mbHeader; + sal_Bool mbDataValid; + SvxAdjust meAdjust; +}; + + +// ============================================================================ + +class ScAccessibleNoteTextData : public ScAccessibleTextData +{ +public: + ScAccessibleNoteTextData(ScPreviewShell* pViewShell, + const String& sText, const ScAddress& aCellPos, sal_Bool bMarkNote); + virtual ~ScAccessibleNoteTextData(); + + virtual ScAccessibleTextData* Clone() const; + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + virtual SvxTextForwarder* GetTextForwarder(); + virtual SvxViewForwarder* GetViewForwarder(); + virtual SvxEditViewForwarder* GetEditViewForwarder( sal_Bool bCreate ) { return NULL; } + + virtual void UpdateData() { } + virtual void SetDoUpdate(sal_Bool bValue) { } + virtual sal_Bool IsDirty() const { return sal_False; } +private: + ScPreviewViewForwarder* mpViewForwarder; + ScPreviewShell* mpViewShell; + ScEditEngineDefaulter* mpEditEngine; + SvxEditEngineForwarder* mpForwarder; + ScDocShell* mpDocSh; + String msText; + ScAddress maCellPos; + sal_Bool mbMarkNote; + sal_Bool mbDataValid; +}; + + +// ============================================================================ + +class ScAccessibleCsvTextData : public ScAccessibleTextData +{ +private: + typedef ::std::auto_ptr< SvxTextForwarder > TextForwarderPtr; + typedef ::std::auto_ptr< ScCsvViewForwarder > ViewForwarderPtr; + + Window* mpWindow; + EditEngine* mpEditEngine; + TextForwarderPtr mpTextForwarder; + ViewForwarderPtr mpViewForwarder; + String maCellText; + Rectangle maBoundBox; + Size maCellSize; + +public: + explicit ScAccessibleCsvTextData( + Window* pWindow, + EditEngine* pEditEngine, + const String& rCellText, + const Rectangle& rBoundBox, + const Size& rCellSize ); + virtual ~ScAccessibleCsvTextData(); + + virtual ScAccessibleTextData* Clone() const; + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + virtual SvxTextForwarder* GetTextForwarder(); + virtual SvxViewForwarder* GetViewForwarder(); + virtual SvxEditViewForwarder* GetEditViewForwarder( sal_Bool bCreate ); + + virtual void UpdateData() {} + virtual void SetDoUpdate( sal_Bool bValue ) {} + virtual sal_Bool IsDirty() const { return sal_False; } +}; + + +// ============================================================================ + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/DrawModelBroadcaster.hxx b/binfilter/bf_sc/source/ui/inc/DrawModelBroadcaster.hxx new file mode 100644 index 000000000000..14c1980c079e --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/DrawModelBroadcaster.hxx @@ -0,0 +1,65 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef _SC_DRAWMODELBROADCASTER_HXX +#define _SC_DRAWMODELBROADCASTER_HXX + + +#include <bf_svtools/lstner.hxx> +#include <cppuhelper/interfacecontainer.h> +#include <cppuhelper/implbase1.hxx> + +#include <com/sun/star/document/XEventBroadcaster.hpp> +namespace binfilter { + +class SdrModel; + +class ScDrawModelBroadcaster : public SfxListener, + public ::cppu::WeakImplHelper1< ::com::sun::star::document::XEventBroadcaster > +{ + mutable ::osl::Mutex maListenerMutex; + ::cppu::OInterfaceContainerHelper maEventListeners; + SdrModel *mpDrawModel; + +public: + + ScDrawModelBroadcaster( SdrModel *pDrawModel ); + virtual ~ScDrawModelBroadcaster(); + + virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XEventListener >& xListener ) + throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XEventListener >& xListener ) + throw (::com::sun::star::uno::RuntimeException); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); +}; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/areasdlg.hxx b/binfilter/bf_sc/source/ui/inc/areasdlg.hxx new file mode 100644 index 000000000000..994b5d15296e --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/areasdlg.hxx @@ -0,0 +1,107 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_AREASDLG_HXX +#define SC_AREASDLG_HXX + +#include <vcl/lstbox.hxx> +#include <vcl/fixed.hxx> + +#include <anyrefdg.hxx> +namespace binfilter { + +class ScDocument; +class ScViewData; +class ScRangeUtil; +class ScRangeItem; + + +//============================================================================ + +class ScPrintAreasDlg : public ScAnyRefDlg +{ +public: + ScPrintAreasDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent ); + ~ScPrintAreasDlg(); + + virtual void SetReference( const ScRange& rRef, ScDocument* pDoc ); + virtual void AddRefEntry(); + + virtual BOOL IsTableLocked() const; + + virtual void SetActive(); + virtual void Deactivate(); + virtual BOOL Close(); + +private: + ListBox aLbPrintArea; + FixedLine aFlPrintArea; + ScRefEdit aEdPrintArea; + ScRefButton aRbPrintArea; + + ListBox aLbRepeatRow; + FixedLine aFlRepeatRow; + ScRefEdit aEdRepeatRow; + ScRefButton aRbRepeatRow; + + ListBox aLbRepeatCol; + FixedLine aFlRepeatCol; + ScRefEdit aEdRepeatCol; + ScRefButton aRbRepeatCol; + + OKButton aBtnOk; + CancelButton aBtnCancel; + HelpButton aBtnHelp; + + BOOL bDlgLostFocus; + ScRefEdit* pRefInputEdit; + ScDocument* pDoc; + ScViewData* pViewData; + USHORT nCurTab; + +#ifdef _AREASDLG_CXX +private: + void Impl_Reset(); + BOOL Impl_CheckRefStrings(); + void Impl_FillLists(); + BOOL Impl_GetItem( Edit* pEd, SfxStringItem& rItem ); + + // Handler: + DECL_LINK( Impl_SelectHdl, ListBox* ); + DECL_LINK( Impl_ModifyHdl, ScRefEdit* ); + DECL_LINK( Impl_BtnHdl, PushButton* ); + DECL_LINK( Impl_GetFocusHdl, Control* ); +#endif +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/asciiopt.hxx b/binfilter/bf_sc/source/ui/inc/asciiopt.hxx new file mode 100644 index 000000000000..9badb6bc4769 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/asciiopt.hxx @@ -0,0 +1,105 @@ +/* -*- 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. + * + ************************************************************************/ + +// ============================================================================ + +#ifndef SC_ASCIIOPT_HXX +#define SC_ASCIIOPT_HXX + +#include <tools/string.hxx> +#include <vcl/dialog.hxx> +#include <vcl/button.hxx> +#include <vcl/fixed.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/combobox.hxx> +#include <vcl/field.hxx> +#include <tools/stream.hxx> +#include <bf_svx/txencbox.hxx> + +#include "csvtablebox.hxx" +namespace binfilter { + + +// ============================================================================ + +class ScAsciiOptions +{ +private: + BOOL bFixedLen; + String aFieldSeps; + BOOL bMergeFieldSeps; + sal_Unicode cTextSep; + CharSet eCharSet; + BOOL bCharSetSystem; + long nStartRow; + USHORT nInfoCount; + xub_StrLen* pColStart; //! TODO replace with vector + BYTE* pColFormat; //! TODO replace with vector + +public: + ScAsciiOptions(); + ScAsciiOptions(const ScAsciiOptions& rOpt); + ~ScAsciiOptions(); + + + + void ReadFromString( const String& rString ); + + + CharSet GetCharSet() const { return eCharSet; } + BOOL GetCharSetSystem() const { return bCharSetSystem; } + const String& GetFieldSeps() const { return aFieldSeps; } + BOOL IsMergeSeps() const { return bMergeFieldSeps; } + sal_Unicode GetTextSep() const { return cTextSep; } + BOOL IsFixedLen() const { return bFixedLen; } + USHORT GetInfoCount() const { return nInfoCount; } + const xub_StrLen* GetColStart() const { return pColStart; } + const BYTE* GetColFormat() const { return pColFormat; } + long GetStartRow() const { return nStartRow; } + + void SetCharSet( CharSet eNew ) { eCharSet = eNew; } + void SetCharSetSystem( BOOL bSet ) { bCharSetSystem = bSet; } + void SetFixedLen( BOOL bSet ) { bFixedLen = bSet; } + void SetFieldSeps( const String& rStr ) { aFieldSeps = rStr; } + void SetMergeSeps( BOOL bSet ) { bMergeFieldSeps = bSet; } + void SetTextSep( sal_Unicode c ) { cTextSep = c; } + void SetStartRow( long nRow) { nStartRow= nRow; } + +}; + + +// ============================================================================ + + + +// ============================================================================ + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/auditsh.hxx b/binfilter/bf_sc/source/ui/inc/auditsh.hxx new file mode 100644 index 000000000000..f14ee127757d --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/auditsh.hxx @@ -0,0 +1,58 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_AUDITSH_HXX +#define SC_AUDITSH_HXX + +#include <bf_sfx2/shell.hxx> +#include <bf_sfx2/module.hxx> + +#include "shellids.hxx" +namespace binfilter { + +class ScViewData; + +class ScAuditingShell : public SfxShell +{ + +public: + SFX_DECL_INTERFACE(SCID_AUDITING_SHELL); + + ScAuditingShell(ScViewData* pData); + + void Execute(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void Execute(SfxRequest& rReq); + void GetState(SfxItemSet& rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void GetState(SfxItemSet& rSet); +}; + + + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/autostyl.hxx b/binfilter/bf_sc/source/ui/inc/autostyl.hxx new file mode 100644 index 000000000000..a42c2fba3aad --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/autostyl.hxx @@ -0,0 +1,49 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_AUTOSTYL_HXX +#define SC_AUTOSTYL_HXX + +#include <tools/debug.hxx> //STRIP001 +namespace binfilter { +class ScDocShell; +class ScRange; + +class ScAutoStyleList +{ + +public: + ScAutoStyleList(ScDocShell* pShell){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ScAutoStyleList(ScDocShell* pShell); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/cbutton.hxx b/binfilter/bf_sc/source/ui/inc/cbutton.hxx new file mode 100644 index 000000000000..5ceab1b3293a --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/cbutton.hxx @@ -0,0 +1,73 @@ +/* -*- 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. + * + ************************************************************************/ + +//------------------------------------------------------------------ + +#ifndef SC_CBUTTON_HXX +#define SC_CBUTTON_HXX + +#include <tools/gen.hxx> + + +class Window; +namespace binfilter { + + +//================================================================== + +class ScDDComboBoxButton +{ +public: + ScDDComboBoxButton( Window* pOutputDevice ); + ~ScDDComboBoxButton(); + + + + + void SetOptSizePixel(); + + void SetPosPixel( const Point& rNewPos ) { aBtnPos = rNewPos; } + Point GetPosPixel() const { return aBtnPos; } + + void SetSizePixel( const Size& rNewSize ) { aBtnSize = rNewSize; } + Size GetSizePixel() const { return aBtnSize; } + +private: + +protected: + Window* pOut; + Point aBtnPos; + Size aBtnSize; +}; + + +} //namespace binfilter +#endif // SC_CBUTTON_HXX + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/cellsh.hxx b/binfilter/bf_sc/source/ui/inc/cellsh.hxx new file mode 100644 index 000000000000..394282353c49 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/cellsh.hxx @@ -0,0 +1,96 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_CELLSH_HXX +#define SC_CELLSH_HXX + +#include <bf_sfx2/shell.hxx> +#include "shellids.hxx" +#include <bf_sfx2/module.hxx> + +#include <bf_svx/svdmark.hxx> + +#include <tools/link.hxx> + +#include "formatsh.hxx" +class TransferableDataHelper; +class TransferableClipboardListener; +namespace binfilter { + +class SvxClipboardFmtItem; + + +class ScCellShell: public ScFormatShell +{ +private: + TransferableClipboardListener* pClipEvtLstnr; + BOOL bPastePossible; + + void GetPossibleClipboardFormats( SvxClipboardFmtItem& rFormats ); + + DECL_LINK( ClipboardChanged, TransferableDataHelper* ); + +public: + + TYPEINFO(); + SFX_DECL_INTERFACE(SCID_CELL_SHELL); + + ScCellShell(ScViewData* pData); + virtual ~ScCellShell(); + + void Execute(SfxRequest &){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void Execute(SfxRequest &); + void GetState(SfxItemSet &); + + void ExecuteEdit( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void ExecuteEdit( SfxRequest& rReq ); + void ExecuteTrans( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void ExecuteTrans( SfxRequest& rReq ); + + void GetBlockState( SfxItemSet& rSet ); + void GetCellState( SfxItemSet& rSet ); + + void ExecuteDB( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void ExecuteDB( SfxRequest& rReq ); + void GetDBState( SfxItemSet& rSet ); + + void ExecImageMap(SfxRequest& rReq); // ImageMap + void GetImageMapState(SfxItemSet& rSet); + + void GetClipState( SfxItemSet& rSet ); + void GetHLinkState( SfxItemSet& rSet ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void GetHLinkState( SfxItemSet& rSet ); + + void ExecuteCursor( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void ExecuteCursor( SfxRequest& rReq ); + void ExecuteCursorSel( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void ExecuteCursorSel( SfxRequest& rReq ); + void ExecutePage( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void ExecutePage( SfxRequest& rReq ); + void ExecutePageSel( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void ExecutePageSel( SfxRequest& rReq ); + void ExecuteMove( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void ExecuteMove( SfxRequest& rReq ); + void GetStateCursor( SfxItemSet& rSet ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void GetStateCursor( SfxItemSet& rSet ); + +}; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/chartsh.hxx b/binfilter/bf_sc/source/ui/inc/chartsh.hxx new file mode 100644 index 000000000000..618ca9d079e6 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/chartsh.hxx @@ -0,0 +1,56 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef CHARTSH_HXX +#define CHARTSH_HXX + +#include <bf_sfx2/shell.hxx> +#include "shellids.hxx" +#include <bf_sfx2/module.hxx> + +#include <bf_svx/svdmark.hxx> + +class ScViewData; + +#include "drawsh.hxx" +namespace binfilter { + +class ScChartShell: public ScDrawShell +{ +public: + + SFX_DECL_INTERFACE(SCID_CHART_SHELL); + + ScChartShell(ScViewData* pData):ScDrawShell(pData){DBG_BF_ASSERT(0, "STRIP");}//STRIP001 ScChartShell(ScViewData* pData); + +}; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/colrowba.hxx b/binfilter/bf_sc/source/ui/inc/colrowba.hxx new file mode 100644 index 000000000000..d58d83e5cbcd --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/colrowba.hxx @@ -0,0 +1,110 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_COLROWBAR_HXX +#define SC_COLROWBAR_HXX + +#include "hdrcont.hxx" + +#include "viewdata.hxx" +namespace binfilter { + +class ScHeaderFunctionSet; +class ScHeaderSelectionEngine; + +// --------------------------------------------------------------------------- + + +class ScColBar : public ScHeaderControl +{ + ScViewData* pViewData; + ScHSplitPos eWhich; + ScHeaderFunctionSet* pFuncSet; + ScHeaderSelectionEngine* pSelEngine; + +public: + ScColBar( Window* pParent, ScViewData* pData, ScHSplitPos eWhichPos, + ScHeaderFunctionSet* pFunc, ScHeaderSelectionEngine* pEng ); + ~ScColBar(); + + virtual USHORT GetPos(); + virtual USHORT GetEntrySize( USHORT nEntryNo ); + virtual String GetEntryText( USHORT nEntryNo ){DBG_BF_ASSERT(0, "STRIP");String aStr; return aStr;} //STRIP001 virtual String GetEntryText( USHORT nEntryNo ); + + virtual void SetEntrySize( USHORT nPos, USHORT nNewSize ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void SetEntrySize( USHORT nPos, USHORT nNewSize ); + virtual void HideEntries( USHORT nStart, USHORT nEnd ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void HideEntries( USHORT nStart, USHORT nEnd ); + + virtual void SetMarking( BOOL bSet ); + virtual void SelectWindow(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void SelectWindow(); + virtual BOOL IsDisabled(){DBG_BF_ASSERT(0, "STRIP");return FALSE;} //STRIP001 virtual BOOL IsDisabled(); + virtual BOOL ResizeAllowed(){DBG_BF_ASSERT(0, "STRIP");return FALSE;} //STRIP001 virtual BOOL ResizeAllowed(); + + virtual void DrawInvert( long nDragPos ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void DrawInvert( long nDragPos ); + + virtual String GetDragHelp( long nVal ){DBG_BF_ASSERT(0, "STRIP"); String aStr; return aStr;}//STRIP001 virtual String GetDragHelp( long nVal ); +}; + + +class ScRowBar : public ScHeaderControl +{ + ScViewData* pViewData; + ScVSplitPos eWhich; + ScHeaderFunctionSet* pFuncSet; + ScHeaderSelectionEngine* pSelEngine; + +public: + ScRowBar( Window* pParent, ScViewData* pData, ScVSplitPos eWhichPos, + ScHeaderFunctionSet* pFunc, ScHeaderSelectionEngine* pEng ); + ~ScRowBar(); + + virtual USHORT GetPos(); + virtual USHORT GetEntrySize( USHORT nEntryNo ); + virtual String GetEntryText( USHORT nEntryNo ){DBG_BF_ASSERT(0, "STRIP"); String s; return s;}//STRIP001 virtual String GetEntryText( USHORT nEntryNo ); + + virtual USHORT GetHiddenCount( USHORT nEntryNo ){DBG_BF_ASSERT(0, "STRIP"); return 0;}//STRIP001 virtual USHORT GetHiddenCount( USHORT nEntryNo ); // nur fuer Zeilen + + virtual void SetEntrySize( USHORT nPos, USHORT nNewSize ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void SetEntrySize( USHORT nPos, USHORT nNewSize ); + virtual void HideEntries( USHORT nStart, USHORT nEnd ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void HideEntries( USHORT nStart, USHORT nEnd ); + + virtual void SetMarking( BOOL bSet ); + virtual void SelectWindow(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void SelectWindow(); + virtual BOOL IsDisabled(){DBG_BF_ASSERT(0, "STRIP"); return FALSE;}//STRIP001 virtual BOOL IsDisabled(); + virtual BOOL ResizeAllowed(){DBG_BF_ASSERT(0, "STRIP"); return FALSE;}//STRIP001 virtual BOOL ResizeAllowed(); + + virtual void DrawInvert( long nDragPos ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void DrawInvert( long nDragPos ); + + virtual String GetDragHelp( long nVal ){DBG_BF_ASSERT(0, "STRIP"); String s; return s;}//STRIP001 virtual String GetDragHelp( long nVal ); +}; + + + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/content.hxx b/binfilter/bf_sc/source/ui/inc/content.hxx new file mode 100644 index 000000000000..6cfe1b6b17e4 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/content.hxx @@ -0,0 +1,30 @@ +/* -*- 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. + * + ************************************************************************/ + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/csvcontrol.hxx b/binfilter/bf_sc/source/ui/inc/csvcontrol.hxx new file mode 100644 index 000000000000..321b38653610 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/csvcontrol.hxx @@ -0,0 +1,315 @@ +/* -*- 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. + * + ************************************************************************/ + +// ============================================================================ + +#ifndef _SC_CSVCONTROL_HXX +#define _SC_CSVCONTROL_HXX + +#include <vcl/ctrl.hxx> + +#include "global.hxx" +#include "csvsplits.hxx" + +#include <com/sun/star/uno/Reference.hxx> +namespace binfilter { + + +class ScAccessibleCsvControl; +} //namespace binfilter +namespace com { namespace sun { namespace star { namespace accessibility { + class XAccessible; +} } } } +namespace binfilter {//STRIP009 + +// ============================================================================ + +/** Minimum character count for a column in separators mode. */ +const sal_Int32 CSV_MINCOLWIDTH = 8; +/** Maximum length of a cell string. */ +const xub_StrLen CSV_MAXSTRLEN = 0x7FFF; +/** Transparency for header color of selected columns. */ +const sal_uInt16 CSV_HDR_TRANSPARENCY = 85; +/** Minimum distance to border for auto scroll. */ +const sal_Int32 CSV_SCROLL_DIST = 3; + +//! TODO make string array dynamic +const sal_Int32 CSV_PREVIEW_LINES = 32; // maximum count of preview lines +/** Maximum count of columns. */ +const sal_Int32 CSV_MAXCOLCOUNT = MAXCOL + 1; + +/** Default column data type. */ +const sal_Int32 CSV_TYPE_DEFAULT = 0; +/** Multi selection with different types. */ +const sal_Int32 CSV_TYPE_MULTI = -1; +/** No column selected. */ +const sal_Int32 CSV_TYPE_NOSELECTION = -2; + +// External used column types. +const sal_uInt8 SC_COL_STANDARD = 1; +const sal_uInt8 SC_COL_TEXT = 2; +const sal_uInt8 SC_COL_MDY = 3; +const sal_uInt8 SC_COL_DMY = 4; +const sal_uInt8 SC_COL_YMD = 5; +const sal_uInt8 SC_COL_SKIP = 9; +const sal_uInt8 SC_COL_ENGLISH = 10; + + +// ============================================================================ + +/** Exported data of a column (data used in the dialog). */ +struct ScCsvExpData +{ + xub_StrLen mnIndex; /// Index of a column. + sal_uInt8 mnType; /// External type of the column. + + inline ScCsvExpData() : mnIndex( 0 ), mnType( SC_COL_STANDARD ) {} + inline ScCsvExpData( xub_StrLen nIndex, sal_uInt8 nType ) : + mnIndex( nIndex ), mnType( nType ) {} +}; + +typedef ::std::vector< ScCsvExpData > ScCsvExpDataVec; + + +// ============================================================================ + +/** Specifies which element should be used to perform an action. */ +enum ScMoveMode +{ + MOVE_NONE, /// No action. + MOVE_FIRST, /// First element in current context. + MOVE_LAST, /// Last element in current context. + MOVE_PREV, /// Predecessor of current element in current context. + MOVE_NEXT, /// Successor of current element in current context. + MOVE_PREVPAGE, /// Previous page relative to current context. + MOVE_NEXTPAGE /// Next page relative to current context. +}; + + +// ============================================================================ + +/** Flags for comparison of old and new control layout data. */ +typedef sal_uInt32 ScCsvDiff; + +const ScCsvDiff CSV_DIFF_EQUAL = 0x00000000; +const ScCsvDiff CSV_DIFF_POSCOUNT = 0x00000001; +const ScCsvDiff CSV_DIFF_POSOFFSET = 0x00000002; +const ScCsvDiff CSV_DIFF_HDRWIDTH = 0x00000004; +const ScCsvDiff CSV_DIFF_CHARWIDTH = 0x00000008; +const ScCsvDiff CSV_DIFF_LINECOUNT = 0x00000010; +const ScCsvDiff CSV_DIFF_LINEOFFSET = 0x00000020; +const ScCsvDiff CSV_DIFF_HDRHEIGHT = 0x00000040; +const ScCsvDiff CSV_DIFF_LINEHEIGHT = 0x00000080; +const ScCsvDiff CSV_DIFF_RULERCURSOR = 0x00000100; +const ScCsvDiff CSV_DIFF_GRIDCURSOR = 0x00000200; + +const ScCsvDiff CSV_DIFF_HORIZONTAL = CSV_DIFF_POSCOUNT | CSV_DIFF_POSOFFSET | CSV_DIFF_HDRWIDTH | CSV_DIFF_CHARWIDTH; +const ScCsvDiff CSV_DIFF_VERTICAL = CSV_DIFF_LINECOUNT | CSV_DIFF_LINEOFFSET | CSV_DIFF_HDRHEIGHT | CSV_DIFF_LINEHEIGHT; +const ScCsvDiff CSV_DIFF_CURSOR = CSV_DIFF_RULERCURSOR | CSV_DIFF_GRIDCURSOR; + + +// ---------------------------------------------------------------------------- + +/** A structure containing all layout data valid for both ruler and data grid + (i.e. scroll position or column width). */ +struct ScCsvLayoutData +{ + // horizontal settings + sal_Int32 mnPosCount; /// Number of positions. + sal_Int32 mnPosOffset; /// Horizontal scroll offset. + + sal_Int32 mnWinWidth; /// Width of ruler and data grid. + sal_Int32 mnHdrWidth; /// Width of the header column. + sal_Int32 mnCharWidth; /// Pixel width of one character. + + // vertical settings + sal_Int32 mnLineCount; /// Number of data lines. + sal_Int32 mnLineOffset; /// Index of first visible line (0-based). + + sal_Int32 mnWinHeight; /// Height of entire data grid (incl. header). + sal_Int32 mnHdrHeight; /// Height of the header line. + sal_Int32 mnLineHeight; /// Height of a data line. + + // cursor settings + sal_Int32 mnPosCursor; /// Position of ruler cursor. + sal_Int32 mnColCursor; /// Position of grid column cursor. + + mutable sal_Int32 mnNoRepaint; /// >0 = no repaint. + bool mbAppRTL; /// true = application in RTL mode. + + explicit ScCsvLayoutData(); + +}; + + + + +// ============================================================================ + +/** Enumeration of possible commands to change any settings of the CSV controls. + @descr Controls have to send commands instead of changing their settings directly. + This helps to keep the different controls consistent to each other. + A command can contain 0 to 2 sal_Int32 parameters. In the description of each + command the required parameters are swown in brackets. [-] means no parameter. */ +enum ScCsvCmdType +{ + // misc + CSVCMD_NONE, /// No command. [-] + CSVCMD_REPAINT, /// Repaint all controls. [-] + + // modify horizontal dimensions + CSVCMD_SETPOSCOUNT, /// Change position/column count. [character count] + CSVCMD_SETPOSOFFSET, /// Change position offset (scroll pos). [position] + CSVCMD_SETHDRWIDTH, /// Change width of the header column. [width in pixel] + CSVCMD_SETCHARWIDTH, /// Change character pixel width. [width in pixel] + + // modify vertical dimensions + CSVCMD_SETLINECOUNT, /// Change number of data lines. [line count] + CSVCMD_SETLINEOFFSET, /// Change first visible line. [line index] + CSVCMD_SETHDRHEIGHT, /// Change height of top header line. [height in pixel] + CSVCMD_SETLINEHEIGHT, /// Change data line pixel height. [height in pixel} + + // cursors/positions + CSVCMD_MOVERULERCURSOR, /// Move ruler cursor to new position. [position] + CSVCMD_MOVEGRIDCURSOR, /// Move data grid cursor to new column. [position] + CSVCMD_MAKEPOSVISIBLE, /// Move to make passed position visible (for mouse tracking). [position] + + // table contents + CSVCMD_NEWCELLTEXTS, /// Recalculate splits and cell texts. [-] + CSVCMD_UPDATECELLTEXTS, /// Update cell texts with current split settings. [-] + CSVCMD_SETCOLUMNTYPE, /// Change data type of selected columns. [column type] + CSVCMD_EXPORTCOLUMNTYPE, /// Send selected column type to external controls. [-] + CSVCMD_SETFIRSTIMPORTLINE, /// Set number of first imported line. [line index] + + // splits + CSVCMD_INSERTSPLIT, /// Insert a split. [position] + CSVCMD_REMOVESPLIT, /// Remove a split. [position] + CSVCMD_TOGGLESPLIT, /// Inserts or removes a split. [position] + CSVCMD_MOVESPLIT, /// Move a split. [old position, new position] + CSVCMD_REMOVEALLSPLITS /// Remove all splits. [-] +}; + + +// ---------------------------------------------------------------------------- + +/** Data for a CSV control command. The stored position data is aways character based, + it's never a column index (required for internal consistency). */ +class ScCsvCmd +{ +private: + ScCsvCmdType meType; /// The command. + sal_Int32 mnParam1; /// First parameter. + sal_Int32 mnParam2; /// Second parameter. + +public: + inline explicit ScCsvCmd() : meType( CSVCMD_NONE ), + mnParam1( CSV_POS_INVALID ), mnParam2( CSV_POS_INVALID ) {} + + inline void Set( ScCsvCmdType eType, sal_Int32 nParam1, sal_Int32 nParam2 ); + + inline ScCsvCmdType GetType() const { return meType; } + inline sal_Int32 GetParam1() const { return mnParam1; } + inline sal_Int32 GetParam2() const { return mnParam2; } +}; + +inline void ScCsvCmd::Set( ScCsvCmdType eType, sal_Int32 nParam1, sal_Int32 nParam2 ) +{ + meType = eType; mnParam1 = nParam1; mnParam2 = nParam2; +} + + +// ============================================================================ + +/** Base class for the CSV ruler and the data grid control. Implements command handling. */ +class ScCsvControl : public Control +{ +protected: + typedef ::std::vector< String > StringVec; + typedef ::std::vector< StringVec > StringVecVec; + + typedef ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible > XAccessibleRef; + +private: + Link maCmdHdl; /// External command handler. + ScCsvCmd maCmd; /// Data of last command. + const ScCsvLayoutData& mrData; /// Shared layout data. + + XAccessibleRef mxAccessible; /// The accessible object of the control. + ScAccessibleCsvControl* mpAccessible; /// Pointer to the accessible implementation object. + bool mbValidGfx; /// Content of virtual devices valid? + + // ------------------------------------------------------------------------ +public: + explicit ScCsvControl( ScCsvControl& rParent ); + explicit ScCsvControl( Window* pParent, const ScCsvLayoutData& rData, WinBits nStyle = 0 ); + explicit ScCsvControl( Window* pParent, const ScCsvLayoutData& rData, const ResId& rResId ); + virtual ~ScCsvControl(); + + // event handling --------------------------------------------------------- + + virtual void GetFocus(); + virtual void LoseFocus(); + + /** Sends a GetFocus or LoseFocus event to the accessibility object. */ + void AccSendFocusEvent( bool bFocused ); + + // repaint helpers -------------------------------------------------------- + + + // command handling ------------------------------------------------------- + + /** Sets a new command handler. */ + inline void SetCmdHdl( const Link& rHdl ) { maCmdHdl = rHdl; } + /** Returns the current command handler. */ + inline const Link& GetCmdHdl() const { return maCmdHdl; } + /** Returns data of the last command. */ + inline const ScCsvCmd& GetCmd() const { return maCmd; } + + // layout helpers --------------------------------------------------------- + + /** Returns a reference to the current layout data. */ + inline const ScCsvLayoutData& GetLayoutData() const { return mrData; } + /** Returns true, if the Right-to-Left layout mode is active. */ + inline bool IsRTL() const { return mrData.mbAppRTL; } + + + // static helpers --------------------------------------------------------- + + + + // accessibility ---------------------------------------------------------- +}; + + +// ============================================================================ + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/csvgrid.hxx b/binfilter/bf_sc/source/ui/inc/csvgrid.hxx new file mode 100644 index 000000000000..36d1fa7ac2c9 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/csvgrid.hxx @@ -0,0 +1,150 @@ +/* -*- 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. + * + ************************************************************************/ + +// ============================================================================ + +#ifndef _SC_CSVGRID_HXX +#define _SC_CSVGRID_HXX + +#include <vcl/virdev.hxx> +#include <vcl/menu.hxx> +#include <bf_svtools/lstner.hxx> + +#include <vector> +#include <memory> + +#include "csvcontrol.hxx" +#include "csvsplits.hxx" + +namespace binfilter { +class ColorConfig; + +// ---------------------------------------------------------------------------- + +class EditEngine; +class ScEditEngineDefaulter; +class ScAsciiOptions; +class ScAccessibleCsvControl; + + +// ============================================================================ + +const sal_uInt8 CSV_COLFLAG_NONE = 0x00; /// Nothing set. +const sal_uInt8 CSV_COLFLAG_SELECT = 0x01; /// Column is selected. + +const sal_uInt32 CSV_COLUMN_INVALID = CSV_VEC_NOTFOUND; + + +// ---------------------------------------------------------------------------- + +/** This struct contains the state of one table column. */ +struct ScCsvColState +{ + sal_Int32 mnType; /// Data type. + sal_uInt8 mnFlags; /// Flags (i.e. selection state). + + inline explicit ScCsvColState( + sal_Int32 nType = CSV_TYPE_DEFAULT, + sal_uInt8 nFlags = CSV_COLFLAG_NONE ) : + mnType( nType ), mnFlags( nFlags ) {} + + inline bool IsSelected() const; + inline void Select( bool bSel ); +}; + +inline bool ScCsvColState::IsSelected() const +{ + return (mnFlags & CSV_COLFLAG_SELECT) != 0; +} + +inline void ScCsvColState::Select( bool bSel ) +{ + if( bSel ) mnFlags |= CSV_COLFLAG_SELECT; else mnFlags &= ~CSV_COLFLAG_SELECT; +} + + +// ---------------------------------------------------------------------------- + +typedef ::std::vector< ScCsvColState > ScCsvColStateVec; + + +// ============================================================================ + +/** A data grid control for the CSV import dialog. The design of this control + simulates a Calc spreadsheet with row and column headers. */ +class ScCsvGrid : public ScCsvControl, public SfxListener +{ +private: + typedef ::std::auto_ptr< ScEditEngineDefaulter > ScEditEnginePtr; + + VirtualDevice maBackgrDev; /// Grid background, headers, cell texts. + VirtualDevice maGridDev; /// Data grid with selection and cursor. + PopupMenu maPopup; /// Popup menu for column types. + + ColorConfig& mrColorConfig; /// Application color configuration. + Color maBackColor; /// Cell background color. + Color maGridColor; /// Table grid color. + Color maGridPBColor; /// Grid color for "first imported line" delimiter. + Color maAppBackColor; /// Background color for unused area. + Color maTextColor; /// Text color for data area. + Color maHeaderBackColor; /// Background color for headers. + Color maHeaderGridColor; /// Grid color for headers. + Color maHeaderTextColor; /// Text color for headers. + Color maSelectColor; /// Header color of selected columns. + + ScEditEnginePtr mpEditEngine; /// For drawing cell texts. + Font maHeaderFont; /// Font for column and row headers. + Font maMonoFont; /// Monospace font for data cells. + Size maWinSize; /// Size of the control. + Size maEdEngSize; /// Paper size for edit engine. + + ScCsvSplits maSplits; /// Vector with split positions. + ScCsvColStateVec maColStates; /// State of each column. + StringVec maTypeNames; /// UI names of data types. + StringVecVec maTexts; /// 2D-vector for cell texts. + + sal_Int32 mnFirstImpLine; /// First imported line (0-based). + sal_uInt32 mnRecentSelCol; /// Index of most recently selected column. + sal_uInt32 mnMTCurrCol; /// Current column of mouse tracking. + bool mbMTSelecting; /// Mouse tracking: true = select, false = deselect. + + // ------------------------------------------------------------------------ +public: + explicit ScCsvGrid( ScCsvControl& rParent ); + virtual ~ScCsvGrid(); + + // common grid handling --------------------------------------------------- +}; + + +// ============================================================================ + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/csvruler.hxx b/binfilter/bf_sc/source/ui/inc/csvruler.hxx new file mode 100644 index 000000000000..02d8589bba3f --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/csvruler.hxx @@ -0,0 +1,93 @@ +/* -*- 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. + * + ************************************************************************/ + +// ============================================================================ + +#ifndef _SC_CSVRULER_HXX +#define _SC_CSVRULER_HXX + +#include <vcl/virdev.hxx> + +#include "csvcontrol.hxx" +#include "csvsplits.hxx" +namespace binfilter { + + +class ScAccessibleCsvControl; + + +// ============================================================================ + +/** A ruler control for the CSV import dialog. Supports setting and moving + splits (which divide lines of data into several columns). */ +class ScCsvRuler : public ScCsvControl +{ +private: + VirtualDevice maBackgrDev; /// Ruler background, scaling. + VirtualDevice maRulerDev; /// Ruler with splits and cursor. + + Color maBackColor; /// Background color. + Color maActiveColor; /// Color for active part of ruler. + Color maTextColor; /// Text and scale color. + Color maSplitColor; /// Split area color. + + ScCsvSplits maSplits; /// Vector with split positions. + ScCsvSplits maOldSplits; /// Old state for cancellation. + + sal_Int32 mnPosCursorLast; /// Last valid position of cursor. + sal_Int32 mnPosMTStart; /// Start position of mouse tracking. + sal_Int32 mnPosMTCurr; /// Current position of mouse tracking. + bool mbPosMTMoved; /// Tracking: Anytime moved to another position? + + Size maWinSize; /// Size of the control. + Rectangle maActiveRect; /// The active area of the ruler. + sal_Int32 mnSplitSize; /// Size of a split circle. + + // ------------------------------------------------------------------------ +public: + explicit ScCsvRuler( ScCsvControl& rParent ); + + // common ruler handling -------------------------------------------------- + + // split handling --------------------------------------------------------- + + // event handling --------------------------------------------------------- + + // painting --------------------------------------------------------------- + + + +}; + + +// ============================================================================ + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/csvsplits.hxx b/binfilter/bf_sc/source/ui/inc/csvsplits.hxx new file mode 100644 index 000000000000..a7867f8032bf --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/csvsplits.hxx @@ -0,0 +1,68 @@ +/* -*- 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. + * + ************************************************************************/ + +// ============================================================================ + +#ifndef _SC_CSVSPLITS_HXX +#define _SC_CSVSPLITS_HXX + +#include <sal/types.h> + +#include <vector> +namespace binfilter { + + +// ============================================================================ + +/** Constant for an invalid vector index. */ +const sal_uInt32 CSV_VEC_NOTFOUND = ~0UL; +/** Constant for an invalid ruler position. */ +const sal_Int32 CSV_POS_INVALID = -1; + + +// ---------------------------------------------------------------------------- + +/** A vector of column splits that supports inserting, removing and moving splits. */ +class ScCsvSplits +{ +private: + typedef ::std::vector< sal_Int32 > ScSplitVector; + typedef ScSplitVector::iterator iterator; + typedef ScSplitVector::const_iterator const_iterator; + + ScSplitVector maVec; /// The split containter. + +}; + + +// ============================================================================ + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/csvtablebox.hxx b/binfilter/bf_sc/source/ui/inc/csvtablebox.hxx new file mode 100644 index 000000000000..1d163cd0689e --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/csvtablebox.hxx @@ -0,0 +1,48 @@ +/* -*- 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. + * + ************************************************************************/ + +// ============================================================================ + +#ifndef _SC_CSVTABLEBOX_HXX +#define _SC_CSVTABLEBOX_HXX + +#include <vcl/ctrl.hxx> +#include <vcl/scrbar.hxx> + +#include "csvcontrol.hxx" +#include "csvruler.hxx" +#include "csvgrid.hxx" +class ListBox; +namespace binfilter { + +class ScAsciiOptions; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/dbdocfun.hxx b/binfilter/bf_sc/source/ui/inc/dbdocfun.hxx new file mode 100644 index 000000000000..6c2e99b3544d --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/dbdocfun.hxx @@ -0,0 +1,106 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_DBDOCFUN_HXX +#define SC_DBDOCFUN_HXX + +#include <tools/solar.h> + +#include <com/sun/star/uno/Sequence.hxx> + +class String; +namespace binfilter { + +struct ScImportParam; +struct ScQueryParam; +struct ScSortParam; +struct ScSubTotalParam; + +class SfxViewFrame; +class SbaSelectionList; +class ScDBData; +class ScDocShell; +class ScAddress; +class ScRange; +class ScDPObject; +} //namespace binfilter +namespace com { namespace sun { namespace star { + namespace beans { + struct PropertyValue; + } + namespace sdbc { + class XResultSet; + } +} } } +namespace binfilter {//STRIP009 +// --------------------------------------------------------------------------- + +class ScDBDocFunc +{ +friend class ScDBFunc; + +private: + ScDocShell& rDocShell; + +public: + ScDBDocFunc( ScDocShell& rDocSh ): rDocShell(rDocSh) {} + ~ScDBDocFunc() {} + + BOOL DoImport( USHORT nTab, const ScImportParam& rParam, + const ::com::sun::star::uno::Reference< + ::com::sun::star::sdbc::XResultSet >& xResultSet, + const SbaSelectionList* pSelection, BOOL bRecord, + BOOL bAddrInsert = FALSE ); + + BOOL Sort( USHORT nTab, const ScSortParam& rSortParam, + BOOL bRecord, BOOL bPaint, BOOL bApi ); + + BOOL Query( USHORT nTab, const ScQueryParam& rQueryParam, + const ScRange* pAdvSource, BOOL bRecord, BOOL bApi ); + + BOOL DoSubTotals( USHORT nTab, const ScSubTotalParam& rParam, + const ScSortParam* pForceNewSort, + BOOL bRecord, BOOL bApi ); + + BOOL AddDBRange( const String& rName, const ScRange& rRange, BOOL bApi ); + BOOL DeleteDBRange( const String& rName, BOOL bApi ); + BOOL RenameDBRange( const String& rOld, const String& rNew, BOOL bApi ); + BOOL ModifyDBData( const ScDBData& rNewData, BOOL bApi ); // Name unveraendert + + BOOL RepeatDB( const String& rDBName, BOOL bRecord, BOOL bApi ); + + BOOL DataPilotUpdate( ScDPObject* pOldObj, const ScDPObject* pNewObj, + BOOL bRecord, BOOL bApi ); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/dbfunc.hxx b/binfilter/bf_sc/source/ui/inc/dbfunc.hxx new file mode 100644 index 000000000000..70c3f693cb3c --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/dbfunc.hxx @@ -0,0 +1,78 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_DBFUNC_HXX +#define SC_DBFUNC_HXX + +#include "viewfunc.hxx" +namespace binfilter { + +struct ScSortParam; +struct ScQueryParam; +class ScDBData; +class ScDBCollection; +class ScDPObject; +class ScDPSaveData; + +// --------------------------------------------------------------------------- + +class ScDBFunc : public ScViewFunc +{ +public: + ScDBFunc( Window* pParent, ScDocShell& rDocSh, ScTabViewShell* pViewShell ); + ScDBFunc( Window* pParent, const ScDBFunc& rDBFunc, ScTabViewShell* pViewShell ); + ~ScDBFunc(); + + // nur UISort wiederholt bei Bedarf die Teilergebnisse + + + + + + + + // DB-Bereich vom Cursor + ScDBData* GetDBData( BOOL bMarkArea = TRUE, ScGetDBMode eMode = SC_DB_MAKE ); + + + + + void TestRemoveOutline( BOOL& rCol, BOOL& rRow ); + + + + + void UpdateCharts(BOOL bAllCharts = FALSE); // Default: am Cursor +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/docfunc.hxx b/binfilter/bf_sc/source/ui/inc/docfunc.hxx new file mode 100644 index 000000000000..7fe5687519b6 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/docfunc.hxx @@ -0,0 +1,165 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_DOCFUNC_HXX +#define SC_DOCFUNC_HXX + +#include <tools/link.hxx> + +#include "global.hxx" +namespace binfilter { + +class SfxUndoAction; +class EditEngine; +class ScAddress; +class ScDocShell; +class ScMarkData; +class ScPatternAttr; +class ScRange; +class ScRangeName; +class ScBaseCell; +struct ScTabOpParam; + + +// --------------------------------------------------------------------------- + +class ScDocFunc +{ +private: + ScDocShell& rDocShell; + + BOOL AdjustRowHeight( const ScRange& rRange, BOOL bPaint = TRUE ); + void CreateOneName( ScRangeName& rList, + USHORT nPosX, USHORT nPosY, USHORT nTab, + USHORT nX1, USHORT nY1, USHORT nX2, USHORT nY2, + BOOL& rCancel, BOOL bApi ); + void NotifyInputHandler( const ScAddress& rPos ); + +public: + ScDocFunc( ScDocShell& rDocSh ): rDocShell(rDocSh) {} + ~ScDocFunc() {} + + DECL_LINK( NotifyDrawUndo, SfxUndoAction* ); + + BOOL DetectiveAddPred(const ScAddress& rPos); + BOOL DetectiveDelPred(const ScAddress& rPos); + BOOL DetectiveAddSucc(const ScAddress& rPos); + BOOL DetectiveDelSucc(const ScAddress& rPos); + BOOL DetectiveAddError(const ScAddress& rPos); + BOOL DetectiveMarkInvalid(USHORT nTab); + BOOL DetectiveDelAll(USHORT nTab); + BOOL DetectiveRefresh(BOOL bAutomatic = FALSE); + + BOOL DeleteContents( const ScMarkData& rMark, USHORT nFlags, + BOOL bRecord, BOOL bApi ); + + + BOOL SetNormalString( const ScAddress& rPos, const String& rText, BOOL bApi ); + BOOL PutCell( const ScAddress& rPos, ScBaseCell* pNewCell, BOOL bApi ); + BOOL PutData( const ScAddress& rPos, EditEngine& rEngine, + BOOL bInterpret, BOOL bApi ); + BOOL SetCellText( const ScAddress& rPos, const String& rText, + BOOL bInterpret, BOOL bEnglish, BOOL bApi ); + + // creates a new cell for use with PutCell + ScBaseCell* InterpretEnglishString( const ScAddress& rPos, const String& rText ); + + BOOL SetNoteText( const ScAddress& rPos, const String& rText, BOOL bApi ); + + BOOL ApplyAttributes( const ScMarkData& rMark, const ScPatternAttr& rPattern, + BOOL bRecord, BOOL bApi ); + BOOL ApplyStyle( const ScMarkData& rMark, const String& rStyleName, + BOOL bRecord, BOOL bApi ); + + BOOL InsertCells( const ScRange& rRange, InsCellCmd eCmd, BOOL bRecord, BOOL bApi, + BOOL bPartOfPaste = FALSE ); + BOOL DeleteCells( const ScRange& rRange, DelCellCmd eCmd, BOOL bRecord, BOOL bApi ); + + BOOL MoveBlock( const ScRange& rSource, const ScAddress& rDestPos, + BOOL bCut, BOOL bRecord, BOOL bPaint, BOOL bApi ); + + BOOL InsertTable( USHORT nTab, const String& rName, BOOL bRecord, BOOL bApi ); + BOOL RenameTable( USHORT nTab, const String& rName, BOOL bRecord, BOOL bApi ); + BOOL DeleteTable( USHORT nTab, BOOL bRecord, BOOL bApi ); + + BOOL SetTableVisible( USHORT nTab, BOOL bVisible, BOOL bApi ); + + BOOL SetWidthOrHeight( BOOL bWidth, USHORT nRangeCnt, USHORT* pRanges, + USHORT nTab, ScSizeMode eMode, USHORT nSizeTwips, + BOOL bRecord, BOOL bApi ); + + BOOL InsertPageBreak( BOOL bColumn, const ScAddress& rPos, + BOOL bRecord, BOOL bSetModified, BOOL bApi ); + BOOL RemovePageBreak( BOOL bColumn, const ScAddress& rPos, + BOOL bRecord, BOOL bSetModified, BOOL bApi ); + + BOOL Protect( USHORT nTab, const String& rPassword, BOOL bApi ); + BOOL Unprotect( USHORT nTab, const String& rPassword, BOOL bApi ); + + BOOL ClearItems( const ScMarkData& rMark, const USHORT* pWhich, BOOL bApi ); + BOOL ChangeIndent( const ScMarkData& rMark, BOOL bIncrement, BOOL bApi ); + BOOL AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark, + USHORT nFormatNo, BOOL bRecord, BOOL bApi ); + + BOOL EnterMatrix( const ScRange& rRange, const ScMarkData* pTabMark, + const String& rString, BOOL bApi, BOOL bEnglish ); + + BOOL TabOp( const ScRange& rRange, const ScMarkData* pTabMark, + const ScTabOpParam& rParam, BOOL bRecord, BOOL bApi ); + + BOOL FillSeries( const ScRange& rRange, const ScMarkData* pTabMark, + FillDir eDir, FillCmd eCmd, FillDateCmd eDateCmd, + double fStart, double fStep, double fMax, + BOOL bRecord, BOOL bApi ); + // FillAuto: rRange wird von Source-Range auf Dest-Range angepasst + BOOL FillAuto( ScRange& rRange, const ScMarkData* pTabMark, + FillDir eDir, USHORT nCount, BOOL bRecord, BOOL bApi ); + + + BOOL MergeCells( const ScRange& rRange, BOOL bContents, + BOOL bRecord, BOOL bApi ); + BOOL UnmergeCells( const ScRange& rRange, BOOL bRecord, BOOL bApi ); + + + BOOL ModifyRangeNames( const ScRangeName& rNewRanges, BOOL bApi ); + + BOOL CreateNames( const ScRange& rRange, USHORT nFlags, BOOL bApi ); + BOOL InsertNameList( const ScAddress& rStartPos, BOOL bApi ); + + BOOL InsertAreaLink( const String& rFile, const String& rFilter, + const String& rOptions, const String& rSource, + const ScRange& rDestRange, ULONG nRefresh, + BOOL bFitBlock, BOOL bApi ); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/docsh.hxx b/binfilter/bf_sc/source/ui/inc/docsh.hxx new file mode 100644 index 000000000000..393cdf963bc8 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/docsh.hxx @@ -0,0 +1,330 @@ +/* -*- 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. + * + ************************************************************************/ +#ifndef SC_DOCSHELL_HXX +#define SC_DOCSHELL_HXX + + +#include <bf_sfx2/objsh.hxx> + +#include <bf_sfx2/interno.hxx> + +#include <bf_sfx2/docfac.hxx> + +#include <bf_sfx2/printer.hxx> +#include <bf_svtools/lstner.hxx> + +#include "scdll.hxx" + +#include "document.hxx" +#include "shellids.hxx" +#include "refreshtimer.hxx" +class PrintDialog; +class INetURLObject; +class VirtualDevice; +namespace binfilter { +class FontList; +class SfxStyleSheetBasePool; +class SfxStyleSheetHint; + +class ScEditEngineDefaulter; +struct ChartSelectionInfo; + +class ScPaintItem; +class ScViewData; +class ScDocFunc; +class ScPivot; +class ScDrawLayer; +class ScSbxDocHelper; +class ScAutoStyleList; +class ScRange; +class ScMarkData; +class ScPaintLockData; +class ScJobSetup; +class ScChangeAction; +class ScImportOptions; +class ScDocShellModificator; + +//================================================================== + +//enum ScDBFormat { SC_FORMAT_SDF, SC_FORMAT_DBF }; + + // Extra-Flags fuer Repaint +#define SC_PF_LINES 1 +#define SC_PF_TESTMERGE 2 + +class ScDocShell: public SfxObjectShell, public SfxInPlaceObject, public SfxListener +{ + static const sal_Char __FAR_DATA pStarCalcDoc[]; + static const sal_Char __FAR_DATA pStyleName[]; + + ScDocument aDocument; + + String aDdeTextFmt; + String aConvFilterName; //@ #BugId 54198 + + double nPrtToScreenFactor; + FontList* pFontList; + ScDocFunc* pDocFunc; + + //SfxObjectCreateMode eShellMode; + + BOOL bIsInplace; // wird von der View gesetzt + BOOL bHeaderOn; + BOOL bFooterOn; + BOOL bNoInformLost; + BOOL bIsEmpty; + BOOL bIsInUndo; + BOOL bDocumentModifiedPending; + USHORT nDocumentLock; + sal_Int16 nCanUpdate; // stores the UpdateDocMode from loading a document till update links + BOOL bUpdateEnabled; + + ScSbxDocHelper* pDocHelper; + + ScAutoStyleList* pAutoStyleList; + ScPaintLockData* pPaintLockData; + ScJobSetup* pOldJobSetup; + + VirtualDevice* pVirtualDevice_100th_mm; + + ScDocShellModificator* pModificator; // #109979#; is used to load XML (created in BeforeXMLLoading and destroyed in AfterXMLLoading) + + String aUserData; // #116578# loaded manually, as no view is created + + void InitItems(); + void InitOptions(); + void ResetDrawObjectShell(); + + BOOL LoadCalc( SvStorage* pStor ); + BOOL SaveCalc( SvStorage* pStor ); + BOOL LoadXML( SfxMedium* pMedium, SvStorage* pStor ); + BOOL SaveXML( SfxMedium* pMedium, SvStorage* pStor ); + void UpdateAllRowHeights(); + + void RemoveUnknownObjects(); + + + + void LockPaint_Impl(BOOL bDoc); + void UnlockPaint_Impl(BOOL bDoc); + void LockDocument_Impl(USHORT nNew); + void UnlockDocument_Impl(USHORT nNew); + +protected: + + virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType, + const SfxHint& rHint, const TypeId& rHintType ); + +public: + TYPEINFO(); + + SFX_DECL_OBJECTFACTORY_DLL( ScDocShell, SC_DLL() ); + + ScDocShell( const ScDocShell& rDocShell ); + ScDocShell( SfxObjectCreateMode eMode = SFX_CREATE_MODE_EMBEDDED ); + ~ScDocShell(); + + + virtual void FillClass( SvGlobalName * pClassName, + ULONG * pFormat, + String * pAppName, + String * pFullTypeName, + String * pShortTypeName, + long nFileFormat = SOFFICE_FILEFORMAT_CURRENT ) const; + + virtual BOOL InitNew( SvStorage * ); + virtual BOOL Load( SvStorage * ); + virtual BOOL ConvertFrom( SfxMedium &rMedium ); + virtual void HandsOff(); + virtual BOOL Save(); + virtual BOOL SaveAs( SvStorage * pNewStor ); + + virtual BOOL SaveCompleted( SvStorage * pNewStor ); // SfxInPlaceObject + virtual BOOL DoSaveCompleted( SfxMedium * pNewStor); // SfxObjectShell + + + virtual void SetVisArea( const Rectangle & rVisArea ); + virtual Rectangle GetVisArea( USHORT nAspect ) const; + + virtual Printer* GetDocumentPrinter(); + + virtual void SetModified( BOOL = TRUE ); + + void SetVisAreaOrSize( const Rectangle& rVisArea, BOOL bModifyStart ); + + + + ScDocument* GetDocument() { return &aDocument; } + ScDocFunc& GetDocFunc() { return *pDocFunc; } + + SfxPrinter* GetPrinter(); + USHORT SetPrinter( SfxPrinter* pNewPrinter, USHORT nDiffFlags = SFX_PRINTER_ALL ); + + + + ScDrawLayer* MakeDrawLayer(); + + + /// Protect/unprotect ChangeTrack and return <TRUE/> if + /// protection was successfully changed. + /// If bJustQueryIfProtected==TRUE protection is not + /// changed and <TRUE/> is returned if not protected or + + + void LoadStylesArgs( ScDocShell& rSource, BOOL bReplace, BOOL bCellStyles, BOOL bPageStyles ); + + void PageStyleModified( const String& rStyleName, BOOL bApi ); + + void NotifyStyle( const SfxStyleSheetHint& rHint ); + + Window* GetDialogParent(); + void ErrorMessage( USHORT nGlobStrId ); + BOOL IsEditable() const; + + BOOL AdjustRowHeight( USHORT nStartRow, USHORT nEndRow, USHORT nTab ); + + void DoConsolidate( const ScConsolidateParam& rParam, BOOL bRecord = TRUE ); + void UseScenario( USHORT nTab, const String& rName, BOOL bRecord = TRUE ); + USHORT MakeScenario( USHORT nTab, const String& rName, const String& rComment, + const Color& rColor, USHORT nFlags, + ScMarkData& rMark, BOOL bRecord = TRUE ); + void ModifyScenario( USHORT nTab, const String& rName, const String& rComment, + const Color& rColor, USHORT nFlags ); + BOOL MoveTable( USHORT nSrcTab, USHORT nDestTab, BOOL bCopy, BOOL bRecord ); + + void DoRecalc( BOOL bApi ); + void DoHardRecalc( BOOL bApi ); + + + void DBAreaDeleted( USHORT nTab, USHORT nX1, USHORT nY1, USHORT nX2, USHORT nY2 ); + ScDBData* GetDBData( const ScRange& rMarked, ScGetDBMode eMode, BOOL bForceMark ); + + void UpdateLinks(); // Link-Eintraege aktuallisieren + + + void PostPaint( USHORT nStartCol, USHORT nStartRow, USHORT nStartTab, + USHORT nEndCol, USHORT nEndRow, USHORT nEndTab, USHORT nPart, + USHORT nExtFlags = 0 ); + void PostPaint( const ScRange& rRange, USHORT nPart, USHORT nExtFlags = 0 ); + + void PostPaintCell( USHORT nCol, USHORT nRow, USHORT nTab ); + void PostPaintGridAll(); + void PostPaintExtras(); + + void PostDataChanged(); + + void SetDocumentModified( BOOL bIsModified = TRUE ); + void SetDrawModified( BOOL bIsModified = TRUE ); + + void LockPaint(); + void UnlockPaint(); + USHORT GetLockCount() const; + void SetLockCount(USHORT nNew); + + void LockDocument(); + void UnlockDocument(); + + + virtual SfxStyleSheetBasePool* GetStyleSheetPool(); + + BOOL IsInUndo() const { return bIsInUndo; } + + void CalcOutputFactor(); + double GetOutputFactor() const; + + + const String& GetDdeTextFmt() const { return aDdeTextFmt; } + + ScSbxDocHelper* GetDocHelperObject() { return pDocHelper; } + + void SetDocumentModifiedPending( BOOL bVal ) + { bDocumentModifiedPending = bVal; } + BOOL IsDocumentModifiedPending() const + { return bDocumentModifiedPending; } + + BOOL IsUpdateEnabled() const + { return bUpdateEnabled; } + void SetUpdateEnabled(BOOL bValue) + { bUpdateEnabled = bValue; } + + VirtualDevice* GetVirtualDevice_100th_mm(); + + static ScViewData* GetViewData(); + static USHORT GetCurTab(); + + static String GetOwnFilterName(); + static String GetWebQueryFilterName(); + static String GetAsciiFilterName(); + static String GetLotusFilterName(); + static String GetDBaseFilterName(); + static String GetDifFilterName(); + static BOOL HasAutomaticTableName( const String& rFilter ); + + DECL_LINK( RefreshDBDataHdl, ScDBData* ); + + void BeforeXMLLoading(); + void AfterXMLLoading(sal_Bool bRet); + + const String& GetUserData() const { return aUserData; } // #116578# +}; + +SO2_DECL_REF(ScDocShell) +SO2_IMPL_REF(ScDocShell) + + +// Vor Modifizierungen des Dokuments anlegen und danach zerstoeren. +// Merkt sich im Ctor AutoCalcShellDisabled und IdleDisabled, schaltet sie ab +// und stellt sie im Dtor wieder her, AutoCalcShellDisabled ggbf. auch vor +// einem ScDocShell SetDocumentModified. +// SetDocumentModified hierdran aufrufen statt an der ScDocShell. +// Im Dtor wird wenn ScDocShell bDocumentModifiedPending gesetzt ist und +// bAutoCalcShellDisabled nicht gesetzt ist ein SetDocumentModified gerufen. +class ScDocShellModificator +{ + ScDocShell& rDocShell; + ScRefreshTimerProtector aProtector; + BOOL bAutoCalcShellDisabled; + BOOL bIdleDisabled; + + // not implemented + ScDocShellModificator( const ScDocShellModificator& ); + ScDocShellModificator& operator=( const ScDocShellModificator& ); + +public: + ScDocShellModificator( ScDocShell& ); + ~ScDocShellModificator(); + void SetDocumentModified(); +}; + + + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/drawsh.hxx b/binfilter/bf_sc/source/ui/inc/drawsh.hxx new file mode 100644 index 000000000000..d88c274f8051 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/drawsh.hxx @@ -0,0 +1,81 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_DRAWSH_HXX +#define SC_DRAWSH_HXX + +#include <bf_sfx2/shell.hxx> +#include "shellids.hxx" +#include <bf_sfx2/module.hxx> + +#include <bf_svx/svdmark.hxx> + +#include <tools/link.hxx> +namespace binfilter { + +class SvxNameDialog; +class ScViewData; + + +class ScDrawShell : public SfxShell +{ + + + +public: + TYPEINFO(); + SFX_DECL_INTERFACE(SCID_DRAW_SHELL); + + ScDrawShell(ScViewData* pData){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ScDrawShell(ScViewData* pData); + + void StateDisableItems( SfxItemSet &rSet ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void StateDisableItems( SfxItemSet &rSet ); + + void ExecDrawAttr(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecDrawAttr(SfxRequest& rReq); + void GetDrawAttrState(SfxItemSet &rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetDrawAttrState(SfxItemSet &rSet); + void GetAttrFuncState(SfxItemSet &rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetAttrFuncState(SfxItemSet &rSet); + + void ExecDrawFunc(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecDrawFunc(SfxRequest& rReq); + void GetDrawFuncState(SfxItemSet &rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetDrawFuncState(SfxItemSet &rSet); + void GetState(SfxItemSet &rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetState(SfxItemSet &rSet); + + void ExecFormText(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecFormText(SfxRequest& rReq); // StarFontWork + void GetFormTextState(SfxItemSet& rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetFormTextState(SfxItemSet& rSet); + + void ExecuteHLink(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteHLink(SfxRequest& rReq); // Hyperlink + void GetHLinkState(SfxItemSet& rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetHLinkState(SfxItemSet& rSet); + + +}; + + + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/drawutil.hxx b/binfilter/bf_sc/source/ui/inc/drawutil.hxx new file mode 100644 index 000000000000..8b55befcecc5 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/drawutil.hxx @@ -0,0 +1,54 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_DRAWUTIL_HXX +#define SC_DRAWUTIL_HXX + +#include <tools/solar.h> + +class Fraction; +class OutputDevice; +namespace binfilter { +class ScDocument; + +class ScDrawUtil +{ +public: + static void CalcScale( ScDocument* pDoc, USHORT nTab, + USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, + OutputDevice* pDev, const Fraction& rZoomX, const Fraction& rZoomY, + double nPPTX, double nPPTY, + Fraction& rScaleX, Fraction& rScaleY ); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/drawview.hxx b/binfilter/bf_sc/source/ui/inc/drawview.hxx new file mode 100644 index 000000000000..0a9a47fbb3ff --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/drawview.hxx @@ -0,0 +1,109 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_DRAWVIEW_HXX +#define SC_DRAWVIEW_HXX + +#include <bf_svx/fmview.hxx> + +#include "global.hxx" +namespace binfilter { + +class ScDocument; +class ScViewData; +class SdrViewUserMarker; + +class ScDrawView: public FmFormView +{ + ScViewData* pViewData; + OutputDevice* pDev; //! noetig ? + ScDocument* pDoc; + USHORT nTab; + Fraction aScaleX; // Faktor fuer Drawing-MapMode + Fraction aScaleY; + SdrViewUserMarker* pDropMarker; + SdrObject* pDropMarkObj; + BOOL bInConstruct; + BOOL bDisableHdl; + + void Construct(); + void UpdateBrowser(); + +protected: + virtual void ModelHasChanged(); + + // add custom handles (used by other apps, e.g. AnchorPos) + virtual void AddCustomHdl(); + +public: + ScDrawView( OutputDevice* pOut, ScViewData* pData ); + virtual ~ScDrawView(); + + virtual void MarkListHasChanged(); + virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType, + const SfxHint& rHint, const TypeId& rHintType ); + + void DrawMarks( OutputDevice* pOut ) const; + + + BOOL IsDisableHdl() const { return bDisableHdl; } + + + void InvalidateAttribs(); + void InvalidateDrawTextAttrs(); + + + void GetScale( Fraction& rFractX, Fraction& rFractY ) const; + void RecalcScale(); + void UpdateWorkArea(); + USHORT GetTab() const { return nTab; } + + + + + void VCAddWin( Window* pWin ); + void VCRemoveWin( Window* pWin ); + + + USHORT GetPopupMenuId(); + void UpdateUserViewOptions(); + + + String GetSelectedChartName() const; + + + SdrEndTextEditKind ScEndTextEdit(); // ruft SetDrawTextUndo(0) +}; + + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/drformsh.hxx b/binfilter/bf_sc/source/ui/inc/drformsh.hxx new file mode 100644 index 000000000000..2b7ebeb58810 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/drformsh.hxx @@ -0,0 +1,59 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef DRFORMSH_HXX +#define DRFORMSH_HXX + +#include <bf_sfx2/shell.hxx> +#include "shellids.hxx" +#include <bf_sfx2/module.hxx> + +#include <bf_svx/svdmark.hxx> + +class ScViewData; + + +#include "drawsh.hxx" +namespace binfilter { + +class ScDrawFormShell: public ScDrawShell +{ +public: + + SFX_DECL_INTERFACE(SCID_FORM_SHELL); + + ScDrawFormShell(ScViewData* pData):ScDrawShell(pData){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ScDrawFormShell(ScViewData* pData); + +// void Execute(SfxRequest &); +// void GetState(SfxItemSet &); +}; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/drtxtob.hxx b/binfilter/bf_sc/source/ui/inc/drtxtob.hxx new file mode 100644 index 000000000000..3b5312f0bf3f --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/drtxtob.hxx @@ -0,0 +1,76 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_DRTXTOB_HXX +#define SC_DRTXTOB_HXX + +#ifndef _SFX_HXX +#endif + +#include <bf_sfx2/shell.hxx> +#include <bf_sfx2/module.hxx> +#include <tools/link.hxx> + +#include "shellids.hxx" +class TransferableDataHelper; +class TransferableClipboardListener; +namespace binfilter { + +USHORT ScGetFontWorkId(); // statt SvxFontWorkChildWindow::GetChildWindowId() + +class ScViewData; + +class ScDrawTextObjectBar : public SfxShell +{ + +public: + SFX_DECL_INTERFACE(SCID_DRAW_TEXT_SHELL); + + ScDrawTextObjectBar(ScViewData* pData){DBG_BF_ASSERT(0, "STRIP"); } + + void StateDisableItems( SfxItemSet &rSet ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void StateDisableItems( SfxItemSet &rSet ); + + void Execute( SfxRequest &rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void Execute( SfxRequest &rReq ); + void ExecuteTrans( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteTrans( SfxRequest& rReq ); + void GetState( SfxItemSet& rSet ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetState( SfxItemSet& rSet ); + void GetClipState( SfxItemSet& rSet ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetClipState( SfxItemSet& rSet ); + + void ExecuteAttr( SfxRequest &rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 //STRIP001 void ExecuteAttr( SfxRequest &rReq ); + void GetAttrState( SfxItemSet& rSet ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetAttrState( SfxItemSet& rSet ); + void ExecuteToggle( SfxRequest &rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteToggle( SfxRequest &rReq ); + void ExecuteExtra( SfxRequest &rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteExtra( SfxRequest &rReq ); + void ExecFormText(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecFormText(SfxRequest& rReq); // StarFontWork + void GetFormTextState(SfxItemSet& rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetFormTextState(SfxItemSet& rSet); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/drwtrans.hxx b/binfilter/bf_sc/source/ui/inc/drwtrans.hxx new file mode 100644 index 000000000000..6b21d6591ff6 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/drwtrans.hxx @@ -0,0 +1,29 @@ +/* -*- 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. + * + ************************************************************************/ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/dwfunctr.hxx b/binfilter/bf_sc/source/ui/inc/dwfunctr.hxx new file mode 100644 index 000000000000..fadc09189166 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/dwfunctr.hxx @@ -0,0 +1,70 @@ +/* -*- 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. + * + ************************************************************************/ +#ifndef _SC_DWFUNCTR_HXX +#define _SC_DWFUNCTR_HXX + +#include <bf_sfx2/childwin.hxx> + +#include <bf_sfx2/dockwin.hxx> + +#include <bf_svtools/lstner.hxx> + +#include <bf_svtools/stdctrl.hxx> + +#include <vcl/lstbox.hxx> + +#include <vcl/imagebtn.hxx> + +#include <vcl/combobox.hxx> + +#include "global.hxx" // ScAddress + +namespace binfilter { + +#ifndef LRU_MAX +#define LRU_MAX 10 +#endif +/************************************************************************* +|* +|* Ableitung vom SfxChildWindow als "Behaelter" fuer Controller +|* +\************************************************************************/ + +class ScFunctionChildWindow : public SfxChildWindow +{ + public: + ScFunctionChildWindow( Window* pParent, USHORT nId, SfxBindings* pBindings,SfxChildWinInfo* pInfo):SfxChildWindow( pParent, nId ){DBG_ASSERT(0, "STRIP")}; //STRIP001 ScFunctionChildWindow( Window*, USHORT, SfxBindings*, + + SFX_DECL_CHILDWINDOW(ScFunctionChildWindow); +}; + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/editable.hxx b/binfilter/bf_sc/source/ui/inc/editable.hxx new file mode 100644 index 000000000000..8892d92c16c2 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/editable.hxx @@ -0,0 +1,86 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_EDITABLE_HXX +#define SC_EDITABLE_HXX + +#include <tools/solar.h> +namespace binfilter { + +class ScDocument; +class ScViewFunc; +class ScMarkData; +class ScRange; + + +class ScEditableTester +{ + BOOL bIsEditable; + BOOL bOnlyMatrix; + +public: + // no test in ctor + ScEditableTester(); + + // calls TestBlock + ScEditableTester( ScDocument* pDoc, USHORT nTab, + USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow ); + + // calls TestSelectedBlock + ScEditableTester( ScDocument* pDoc, + USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, + const ScMarkData& rMark ); + + // calls TestRange + ScEditableTester( ScDocument* pDoc, const ScRange& rRange ); + + // calls TestSelection + ScEditableTester( ScDocument* pDoc, const ScMarkData& rMark ); + + // calls TestView + + ~ScEditableTester() {} + + // Several calls to the Test... methods check if *all* of the ranges + // are editable. For several independent checks, Reset() has to be used. + void TestBlock( ScDocument* pDoc, USHORT nTab, + USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow ); + void TestSelectedBlock( ScDocument* pDoc, + USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, + const ScMarkData& rMark ); + + + BOOL IsEditable() const { return bIsEditable; } + BOOL IsFormatEditable() const { return bIsEditable || bOnlyMatrix; } + USHORT GetMessageId() const; +}; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/editsh.hxx b/binfilter/bf_sc/source/ui/inc/editsh.hxx new file mode 100644 index 000000000000..15934b7e1673 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/editsh.hxx @@ -0,0 +1,69 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_EDITSH_HXX +#define SC_EDITSH_HXX + +#include <bf_sfx2/shell.hxx> +#include <bf_sfx2/module.hxx> +#include <tools/link.hxx> + +#include "shellids.hxx" +class TransferableDataHelper; +class TransferableClipboardListener; +namespace binfilter { + +class EditView; +class ScViewData; +class ScInputHandler; +class SvxURLField; + +class ScEditShell : public SfxShell +{ + + +public: + SFX_DECL_INTERFACE(SCID_EDIT_SHELL); + + ScEditShell(EditView* pView, ScViewData* pData){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ScEditShell(EditView* pView, ScViewData* pData); + void Execute(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void Execute(SfxRequest& rReq); + void ExecuteTrans(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteTrans(SfxRequest& rReq); + void GetState(SfxItemSet &rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetState(SfxItemSet &rSet); + void GetClipState(SfxItemSet& rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetClipState(SfxItemSet& rSet); + void ExecuteAttr(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteAttr(SfxRequest& rReq); + void GetAttrState(SfxItemSet &rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetAttrState(SfxItemSet &rSet); + void ExecuteUndo(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteUndo(SfxRequest& rReq); + void GetUndoState(SfxItemSet &rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetUndoState(SfxItemSet &rSet); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/expftext.hxx b/binfilter/bf_sc/source/ui/inc/expftext.hxx new file mode 100644 index 000000000000..140b9823db2b --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/expftext.hxx @@ -0,0 +1,47 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef _SC_EXPFTEXT_HXX +#define _SC_EXPFTEXT_HXX + +#include <vcl/fixed.hxx> +namespace binfilter { + +class ScExpandedFixedText: public FixedText +{ +public: + + ScExpandedFixedText( Window* pParent,WinBits nWinStyle = 0); + ScExpandedFixedText( Window* pWindow, const ResId& rResId); +}; + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/fieldwnd.hxx b/binfilter/bf_sc/source/ui/inc/fieldwnd.hxx new file mode 100644 index 000000000000..b8a65cf750ac --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/fieldwnd.hxx @@ -0,0 +1,213 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_FIELDWND_HXX +#define SC_FIELDWND_HXX + + +#include <vcl/fixed.hxx> + +#include <cppuhelper/weakref.hxx> +namespace binfilter { + +#define MAX_LABELS 256 +#define PAGE_SIZE 16 // count of visible fields for scrollbar +#define LINE_SIZE 8 // count of fields per column for scrollbar +#define MAX_FIELDS 8 // maximum count of fields for row/col/data area + +#define OWIDTH PivotGlobal::nObjWidth +#define OHEIGHT PivotGlobal::nObjHeight +#define SSPACE PivotGlobal::nSelSpace + +class ScDPLayoutDlg; +class ScAccessibleDataPilotControl; + +//=================================================================== + +/** Type of content area. */ +enum ScDPFieldType +{ + TYPE_ROW, /// Area for all row fields. + TYPE_COL, /// Area for all column fields. + TYPE_DATA, /// Area for all data fields. + TYPE_SELECT /// Selection area with all fields. +}; + +//------------------------------------------------------------------- + +/** Represents a field area in the DataPilot layout dialog. */ +class ScDPFieldWindow : public Control +{ +private: + String aName; /// name of the control, used in Accessibility + ScDPLayoutDlg* pDlg; /// Parent dialog. + Rectangle aWndRect; /// Area rectangle in pixels. + FixedText* pFtCaption; /// FixedText containing the name of the control. + Point aTextPos; /// Position of the caption text. + String** aFieldArr; /// Pointer to string array of the field names. + ScDPFieldType eType; /// Type of this area. + Color aFaceColor; /// Color for dialog background. + Color aWinColor; /// Color for window background. + Color aTextColor; /// Color for text in buttons. + Color aWinTextColor; /// Color for text in field windows. + long nFieldSize; /// Maximum count of fields. + long nFieldCount; /// Count of existing fields. + long nFieldSelected; /// Currently selected field. + + ::com::sun::star::uno::WeakReference< ::com::sun::star::accessibility::XAccessible > xAccessible; + ScAccessibleDataPilotControl* pAccessible; + + /** Initilize the object. */ + void Init(); + + /** Reads all needed style settings. */ + void GetStyleSettings(); + + /** Draws the background. */ + void DrawBackground( OutputDevice& rDev ); + /** Draws a field into the specified rectangle. */ + void DrawField( + OutputDevice& rDev, + const Rectangle& rRect, + const String& rText, + BOOL bSelected ); + + /** @return TRUE, if the field index is inside of the control area. */ + BOOL IsValidIndex( long nIndex ) const; + /** @return TRUE, if the field with the given index exists. */ + BOOL IsExistingIndex( long nIndex ) const; + /** @return The new selection index after moving to the given direction. */ + long CalcNewFieldIndex( short nDX, short nDY ) const; + + /** Sets selection to the field with index nIndex. */ + void SetSelection( long nIndex ); + /** Sets selection to first field. */ + void SetSelectionHome(); + /** Sets selection to last field. */ + void SetSelectionEnd(); + /** Sets selection to new position relative to current. */ + void MoveSelection( USHORT nKeyCode, short nDX, short nDY ); + + /** Moves the selected field to nDestIndex. */ + void MoveField( long nDestIndex ); + /** Moves the selected field to the given direction. */ + void MoveFieldRel( short nDX, short nDY ); + +protected: + virtual void Paint( const Rectangle& rRect ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void MouseButtonUp( const MouseEvent& rMEvt ); + virtual void MouseMove( const MouseEvent& rMEvt ); + virtual void KeyInput( const KeyEvent& rKEvt ); + virtual void GetFocus(); + virtual void LoseFocus(); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible(); + +public: + ScDPFieldWindow( + ScDPLayoutDlg* pDialog, + const ResId& rResId, + ScDPFieldType eFieldType, + FixedText* pFtFieldCaption ); + ScDPFieldWindow( + ScDPLayoutDlg* pDialog, + const ResId& rResId, + ScDPFieldType eFieldType, + const String& aName ); + virtual ~ScDPFieldWindow(); + + /** Draws the complete control. */ + void Redraw(); + + /** @return The pixel position of a field (without bound check). */ + Point GetFieldPosition( long nIndex ) const; + /** @return The pixel size of a field. */ + Size GetFieldSize() const; + + /** @return The index of the selected field. */ + inline BOOL IsEmpty() const { return nFieldCount == 0; } + /** @return The index of the selected field. */ + inline long GetSelectedField() const { return nFieldSelected; } + /** @return The pixel position of the last possible field. */ + Point GetLastPosition() const; + + /** @return The count of existing fields. */ + long GetFieldCount() const { return nFieldCount; } + /** Inserts a field to the specified index. */ + void AddField( const String& rText, long nNewIndex ); + /** Removes a field from the specified index. */ + void DelField( long nDelIndex ); + /** Removes all fields. */ + void ClearFields(); + /** Changes the text on an existing field. */ + void SetFieldText( const String& rText, long nIndex ); + /** Returns the text of an existing field. */ + const String& GetFieldText(long nIndex) const; + + /** Inserts a field using the specified pixel position. + @param rPos The coordinates to insert the field. + @param rnIndex The new index of the field is returned here. + @return TRUE, if the field has been created. */ + BOOL AddField( const String& rText, const Point& rPos, long& rnIndex ); + /** Calculates the field index at a specific pixel position. + @param rnIndex The index of the field is returned here. + @return TRUE, if the index value is valid. */ + BOOL GetFieldIndex( const Point& rPos, long& rnIndex ) const; + /** Calculates a field index at a specific pixel position. Returns in every + case the index of an existing field. + @param rnIndex The index of the field is returned here. + @return TRUE, if the index value is valid. */ + void GetExistingIndex( const Point& rPos, long& rnIndex ); + + /** Notifies this control that the offset of the first field has been changed. + The control has to adjust the selection to keep the same field selected + on scrolling with scrollbar. */ + void ModifySelectionOffset( long nOffsetDiff ); + /** Selects the next field. Called i.e. after moving a field from SELECT area. */ + void SelectNext(); + + /** @return The name of the control without shortcut. */ + String GetName()const { return aName; } + + /** @return The description of the control which is used for the accessibility objects. */ + String GetDescription()const; + + /** Grabs focus and sets new selection. */ + void GrabFocusWithSel( long nIndex ); + + /** @return The type of the FieldWindow. */ + ScDPFieldType GetType() const { return eType; } +}; + +//=================================================================== + +} //namespace binfilter +#endif // SC_FIELDWND_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/formatsh.hxx b/binfilter/bf_sc/source/ui/inc/formatsh.hxx new file mode 100644 index 000000000000..6c8246aa9b11 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/formatsh.hxx @@ -0,0 +1,82 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_FORMATSH_HXX +#define SC_FORMATSH_HXX + +#include <bf_sfx2/shell.hxx> +#include "shellids.hxx" +#include <bf_sfx2/module.hxx> + +#include <bf_svx/svdmark.hxx> +namespace binfilter { + +class ScViewData; + +class ScFormatShell: public SfxShell +{ + ScViewData* pViewData; + +protected: + + ScViewData* GetViewData(){return pViewData;} + +public: + + TYPEINFO(); + SFX_DECL_INTERFACE(SCID_FORMAT_SHELL); + + ScFormatShell(ScViewData* pData); + virtual ~ScFormatShell(); + + void ExecuteNumFormat( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteNumFormat( SfxRequest& rReq ); + void GetNumFormatState( SfxItemSet& rSet ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetNumFormatState( SfxItemSet& rSet ); + + void ExecuteAttr( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteAttr( SfxRequest& rReq ); + void GetAttrState( SfxItemSet& rSet ); + + void ExecuteAlignment( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteAlignment( SfxRequest& rReq ); + + void ExecuteTextAttr( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteTextAttr( SfxRequest& rReq ); + void GetTextAttrState( SfxItemSet& rSet ); + + void GetAlignState( SfxItemSet& rSet ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetAlignState( SfxItemSet& rSet ); + void GetBorderState( SfxItemSet& rSet ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetBorderState( SfxItemSet& rSet ); + + void ExecuteStyle( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteStyle( SfxRequest& rReq ); + void GetStyleState( SfxItemSet& rSet ); + + + void ExecuteTextDirection( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteTextDirection( SfxRequest& rReq ); + void GetTextDirectionState( SfxItemSet& rSet ); +}; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/formdata.hxx b/binfilter/bf_sc/source/ui/inc/formdata.hxx new file mode 100644 index 000000000000..024e8068f80d --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/formdata.hxx @@ -0,0 +1,52 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_FORMDATA_HXX +#define SC_FORMDATA_HXX + +#include <tools/string.hxx> + +#include <tools/gen.hxx> +namespace binfilter { + + +//============================================================================ + +class ScFormEditData +{ +public: + ScFormEditData(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ScFormEditData(); + ~ScFormEditData(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ~ScFormEditData(); +}; + + + +} //namespace binfilter +#endif // SC_CRNRDLG_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/fudraw.hxx b/binfilter/bf_sc/source/ui/inc/fudraw.hxx new file mode 100644 index 000000000000..09757bd5296a --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/fudraw.hxx @@ -0,0 +1,68 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_FUDRAW_HXX +#define SC_FUDRAW_HXX + +#include "fupoor.hxx" + +#include <vcl/pointr.hxx> +namespace binfilter { + +/************************************************************************* +|* +|* Basisklasse fuer alle Drawmodul-spezifischen Funktionen +|* +\************************************************************************/ + +class FuDraw : public FuPoor +{ + protected: + Pointer aNewPointer; + Pointer aOldPointer; + + public: + FuDraw(ScTabViewShell* pViewSh, Window* pWin, SdrView* pView, + SdrModel* pDoc, SfxRequest& rReq); + virtual ~FuDraw(); + + + + + + + // #97016# II + +}; + + + +} //namespace binfilter +#endif // _SD_FUDRAW_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/fuedipo.hxx b/binfilter/bf_sc/source/ui/inc/fuedipo.hxx new file mode 100644 index 000000000000..5ef20b8a577f --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/fuedipo.hxx @@ -0,0 +1,67 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_FUEDIPO_HXX +#define SC_FUEDIPO_HXX + +#ifndef _SV_HXX +#endif + +#include "fudraw.hxx" +namespace binfilter { + + +/************************************************************************* +|* +|* Basisklasse fuer alle Funktionen +|* +\************************************************************************/ + +class FuEditPoints : public FuDraw +{ + public: + FuEditPoints(ScTabViewShell* pViewSh, Window* pWin, SdrView* pView, + SdrModel* pDoc, SfxRequest& rReq); + + virtual ~FuEditPoints(); + // Mouse- & Key-Events + virtual BOOL KeyInput(const KeyEvent& rKEvt); + virtual BOOL MouseMove(const MouseEvent& rMEvt); + virtual BOOL MouseButtonUp(const MouseEvent& rMEvt); + virtual BOOL MouseButtonDown(const MouseEvent& rMEvt); + + virtual void Activate(); // Function aktivieren + virtual void Deactivate(); // Function deaktivieren +}; + + + +} //namespace binfilter +#endif // _SD_FUEDIPO_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/fupoor.hxx b/binfilter/bf_sc/source/ui/inc/fupoor.hxx new file mode 100644 index 000000000000..dadbc3acfa12 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/fupoor.hxx @@ -0,0 +1,95 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef _SC_FUPOOR_HXX +#define _SC_FUPOOR_HXX + +#include <vcl/event.hxx> +#include <vcl/timer.hxx> +#include <bf_sfx2/request.hxx> +class Window; +class Dialog; +namespace binfilter { + +class SdrView; +class ScTabViewShell; +class SdrModel; + +// #98185# Create default drawing objects via keyboard +class SdrObject; + +// Return-Werte fuer Command +#define SC_CMD_NONE 0 +#define SC_CMD_USED 1 +#define SC_CMD_IGNORE 2 + +/************************************************************************* +|* +|* Basisklasse fuer alle Funktionen +|* +\************************************************************************/ + +class FuPoor +{ + protected: + SdrView* pView; + ScTabViewShell* pViewShell; + Window* pWindow; + SdrModel* pDrDoc; + + SfxRequest aSfxRequest; + Dialog* pDialog; + + Timer aScrollTimer; // fuer Autoscrolling + DECL_LINK( ScrollHdl, Timer * ); + + Timer aDragTimer; // fuer Drag&Drop + DECL_LINK( DragTimerHdl, Timer * ); + BOOL bIsInDragMode; + Point aMDPos; // Position von MouseButtonDown + + // #95491# member to hold state of the mouse buttons for creation + // of own MouseEvents (like in ScrollHdl) +private: + sal_uInt16 mnCode; + + public: + FuPoor(ScTabViewShell* pViewSh, Window* pWin, SdrView* pView, + SdrModel* pDoc, SfxRequest& rReq); + virtual ~FuPoor(); + + USHORT GetSlotID() const { DBG_BF_ASSERT(0, "STRIP"); return 0;} //STRIP001 USHORT GetSlotID() const { return( aSfxRequest.GetSlot() );} + void StopDragTimer(); +}; + + + +} //namespace binfilter +#endif // _SD_FUPOOR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/fusel.hxx b/binfilter/bf_sc/source/ui/inc/fusel.hxx new file mode 100644 index 000000000000..753bf8fb121d --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/fusel.hxx @@ -0,0 +1,71 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_FUSEL_HXX +#define SC_FUSEL_HXX + +#ifndef _SV_HXX +#endif + +#include "fudraw.hxx" +namespace binfilter { + +//class Outliner; +//class OutlinerView; +class SdrPageView; + + +/************************************************************************* +|* +|* Basisklasse fuer alle Funktionen +|* +\************************************************************************/ + +class FuSelection : public FuDraw +{ + protected: +// Outliner* pOutliner; +// OutlinerView* pOutlinerView; + BOOL bVCAction; + + private: + + public: + FuSelection(ScTabViewShell* pViewSh, Window* pWin, SdrView* pView, + SdrModel* pDoc, SfxRequest& rReq ); + + virtual ~FuSelection(); + // Mouse- & Key-Events +}; + + + +} //namespace binfilter +#endif // _SD_FUSEL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/graphsh.hxx b/binfilter/bf_sc/source/ui/inc/graphsh.hxx new file mode 100644 index 000000000000..ee5868a8fa11 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/graphsh.hxx @@ -0,0 +1,60 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef GRAPHSH_HXX +#define GRAPHSH_HXX + +#include <bf_sfx2/shell.hxx> +#include "shellids.hxx" +#include <bf_sfx2/module.hxx> + +#include <bf_svx/svdmark.hxx> + +class ScViewData; + +#include "drawsh.hxx" +namespace binfilter { + +class ScGraphicShell: public ScDrawShell +{ +public: + + SFX_DECL_INTERFACE(SCID_GRAPHIC_SHELL); + + ScGraphicShell(ScViewData* pData):ScDrawShell(pData){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ScGraphicShell(ScViewData* pData); + void Execute(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void Execute(SfxRequest& rReq); + void GetAttrState(SfxItemSet &rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetAttrState(SfxItemSet &rSet); + + void ExecuteFilter(SfxRequest& rReq){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void ExecuteFilter(SfxRequest& rReq); + void GetFilterState(SfxItemSet &rSet){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 //STRIP001 void GetFilterState(SfxItemSet &rSet); +}; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/gridmerg.hxx b/binfilter/bf_sc/source/ui/inc/gridmerg.hxx new file mode 100644 index 000000000000..fc7c70a13798 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/gridmerg.hxx @@ -0,0 +1,65 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_GRIDMERG_HXX +#define SC_GRIDMERG_HXX + +#include <tools/solar.h> + +class OutputDevice; +namespace binfilter { + +class ScGridMerger +{ +private: + OutputDevice* pDev; + long nOneX; + long nOneY; + long nFixStart; + long nFixEnd; + long nVarStart; + long nVarDiff; + long nCount; + BOOL bVertical; + BOOL bOptimize; + + +public: + ScGridMerger( OutputDevice* pOutDev, long nOnePixelX, long nOnePixelY ); + ~ScGridMerger(); + + void Flush(); +}; + + + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/gridwin.hxx b/binfilter/bf_sc/source/ui/inc/gridwin.hxx new file mode 100644 index 000000000000..2a72e9d72eeb --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/gridwin.hxx @@ -0,0 +1,259 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_GRIDWIN_HXX +#define SC_GRIDWIN_HXX + +#include <tools/string.hxx> + +#include <bf_svtools/transfer.hxx> + +// nur auf dem MAC Auto-Filter per Popup +#ifdef MAC +#define AUTOFILTER_POPUP +#else +#undef AUTOFILTER_POPUP +#endif + +#include "viewutil.hxx" + +#include "viewdata.hxx" + +#include "cbutton.hxx" +class FloatingWindow; +namespace binfilter { + +// --------------------------------------------------------------------------- + +struct RowInfo; +class ScViewSelectionEngine; +class ScPivot; +class ScDPObject; +class ScOutputData; +class ScFilterListBox; +class AutoFilterPopup; +class SdrObject; +class SdrEditView; +class ScNoteMarker; +class SdrHdlList; + + // Maus-Status (nMouseStatus) + +#define SC_GM_NONE 0 +#define SC_GM_TABDOWN 1 +#define SC_GM_DBLDOWN 2 +#define SC_GM_FILTER 3 +#define SC_GM_IGNORE 4 +#define SC_GM_WATERUNDO 5 +#define SC_GM_URLDOWN 6 + + // Page-Drag-Modus + +#define SC_PD_NONE 0 +#define SC_PD_RANGE_L 1 +#define SC_PD_RANGE_R 2 +#define SC_PD_RANGE_T 4 +#define SC_PD_RANGE_B 8 +#define SC_PD_RANGE_TL (SC_PD_RANGE_T|SC_PD_RANGE_L) +#define SC_PD_RANGE_TR (SC_PD_RANGE_T|SC_PD_RANGE_R) +#define SC_PD_RANGE_BL (SC_PD_RANGE_B|SC_PD_RANGE_L) +#define SC_PD_RANGE_BR (SC_PD_RANGE_B|SC_PD_RANGE_R) +#define SC_PD_BREAK_H 16 +#define SC_PD_BREAK_V 32 + + + + +class ScGridWindow : public Window, public DropTargetHelper, public DragSourceHelper +{ + // ScFilterListBox wird immer fuer Auswahlliste benutzt + friend class ScFilterListBox; +#ifdef AUTOFILTER_POPUP + friend class AutoFilterPopup; +#endif + +private: + ScViewData* pViewData; + ScSplitPos eWhich; + ScHSplitPos eHWhich; + ScVSplitPos eVWhich; + + ScNoteMarker* pNoteMarker; + + ScFilterListBox* pFilterBox; + USHORT nFilterBoxCol; + USHORT nFilterBoxRow; + FloatingWindow* pFilterFloat; + + USHORT nCursorHideCount; + + BOOL bMarking; + + USHORT nButtonDown; + BOOL bEEMouse; // Edit-Engine hat Maus + BYTE nMouseStatus; + + BOOL bPivotMouse; // Pivot-D&D (alte Pivottabellen) + ScPivot* pDragPivot; + BOOL bPivotColField; + USHORT nPivotCol; + USHORT nPivotField; + + BOOL bDPMouse; // DataPilot-D&D (neue Pivottabellen) + long nDPField; + ScDPObject* pDragDPObj; //! name? + + BOOL bRFMouse; // RangeFinder-Drag + BOOL bRFSize; + USHORT nRFIndex; + short nRFAddX; + short nRFAddY; + + USHORT nPagebreakMouse; // Pagebreak-Modus Drag + USHORT nPagebreakBreak; + USHORT nPagebreakPrev; + ScRange aPagebreakSource; + ScRange aPagebreakDrag; + BOOL bPagebreakDrawn; + + BYTE nPageScript; + + long nLastClickX; + long nLastClickY; + + BOOL bDragRect; + USHORT nDragStartX; + USHORT nDragStartY; + USHORT nDragEndX; + USHORT nDragEndY; + + USHORT nCurrentPointer; + + BOOL bIsInScroll; + BOOL bIsInPaint; + + ScDDComboBoxButton aComboButton; + + Point aCurMousePos; + + USHORT nPaintCount; + Rectangle aRepaintPixel; + BOOL bNeedsRepaint; + + BOOL bAutoMarkVisible; + ScAddress aAutoMarkPos; + + Rectangle aInvertRect; + + + + + + + + + + + + + + void DrawEndAction(); + SdrObject* GetEditObject(); + void DrawStartTimer(); + + void DrawRedraw( ScOutputData& rOutputData, const Rectangle& rDrawingRect, + ScUpdateMode eMode, ULONG nLayer ); + void DrawSdrGrid( const Rectangle& rDrawingRect ); + void DrawMarks(); + BOOL NeedDrawMarks(); + + + + + +#ifdef AUTOFILTER_POPUP +#endif + + +protected: + + + +public: + ScGridWindow( Window* pParent, ScViewData* pData, ScSplitPos eWhichPos ); + ~ScGridWindow(); + + + + + + + void ClickExtern(); + + + + + void UpdateFormulas(); + + + void DrawButtons( USHORT nX1, USHORT nY1, USHORT nX2, USHORT nY2, + RowInfo* pRowInfo, USHORT nArrCount ); + + void Draw( USHORT nX1, USHORT nY1, USHORT nX2, USHORT nY2, + ScUpdateMode eMode = SC_UPDATE_ALL ); + + + + + + void HideCursor(); + void ShowCursor(); + void DrawCursor(); + void DrawAutoFillMark(); + void UpdateAutoFillMark(BOOL bMarked, const ScRange& rMarkRange); + + void HideNoteMarker(); + + MapMode GetDrawMapMode( BOOL bForce = FALSE ); + + void ContinueDrag(); + + void StopMarking(); + + void CheckInverted() { if (nPaintCount) bNeedsRepaint = TRUE; } + + + void CheckNeedsRepaint(); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/hdrcont.hxx b/binfilter/bf_sc/source/ui/inc/hdrcont.hxx new file mode 100644 index 000000000000..2746e7d6e37e --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/hdrcont.hxx @@ -0,0 +1,123 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_HDRCONT_HXX +#define SC_HDRCONT_HXX + +#include <vcl/window.hxx> +#include <vcl/seleng.hxx> +namespace binfilter { + +// --------------------------------------------------------------------------- + + +#define HDR_HORIZONTAL 0 +#define HDR_VERTICAL 1 + +#define HDR_SIZE_OPTIMUM 0xFFFF + + + // Groesse des Sliders +#define HDR_SLIDERSIZE 2 + +class ScHeaderControl : public Window +{ +private: + SelectionEngine* pSelEngine; + Font aNormFont; + Font aBoldFont; + BOOL bBoldSet; + + USHORT nFlags; + BOOL bVertical; // Vertikal = Zeilenheader + + long nWidth; + long nSmallWidth; + long nBigWidth; + + USHORT nSize; + + USHORT nMarkStart; + USHORT nMarkEnd; + BOOL bMarkRange; + + BOOL bDragging; // Groessen aendern + USHORT nDragNo; + long nDragStart; + long nDragPos; + BOOL bDragMoved; + + BOOL bIgnoreMove; + + long GetScrPos( USHORT nEntryNo ); + + + void DoPaint( USHORT nStart, USHORT nEnd ); + +protected: + // von Window ueberladen + + + + + // neue Methoden + + virtual USHORT GetPos() = 0; // aktuelle Position (Scrolling) + virtual USHORT GetEntrySize( USHORT nEntryNo ) = 0; // Breite / Hoehe (Pixel) + virtual String GetEntryText( USHORT nEntryNo ) = 0; + + + virtual void SetEntrySize( USHORT nPos, USHORT nNewWidth ) = 0; + virtual void HideEntries( USHORT nStart, USHORT nEnd ) = 0; + + virtual void SetMarking( BOOL bSet ); + + +public: + ScHeaderControl( Window* pParent, SelectionEngine* pSelectionEngine, + USHORT nNewSize, USHORT nNewFlags ); + ~ScHeaderControl(); + + void SetIgnoreMove(BOOL bSet) { bIgnoreMove = bSet; } + + void StopMarking(); + + void SetMark( BOOL bNewSet, USHORT nNewStart, USHORT nNewEnd ); + + long GetWidth() const { return nWidth; } + long GetSmallWidth() const { return nSmallWidth; } + long GetBigWidth() const { return nBigWidth; } + void SetWidth( long nNew ); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/hintwin.hxx b/binfilter/bf_sc/source/ui/inc/hintwin.hxx new file mode 100644 index 000000000000..ddd8376dd630 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/hintwin.hxx @@ -0,0 +1,46 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_HINTWIN_HXX +#define SC_HINTWIN_HXX + +#include <vcl/window.hxx> +namespace binfilter { + +class ScHintWindow : public Window +{ +public: + ScHintWindow( Window* pParent, const String& rTit, const String& rMsg ):Window( pParent ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ;//STRIP001 ScHintWindow( Window* pParent, const String& rTit, const String& rMsg ); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/hiranges.hxx b/binfilter/bf_sc/source/ui/inc/hiranges.hxx new file mode 100644 index 000000000000..9572ca2207a4 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/hiranges.hxx @@ -0,0 +1,52 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_HIRANGES_HXX +#define SC_HIRANGES_HXX + +#include <tools/color.hxx> + +#include <tools/debug.hxx> //STRIP001 +namespace binfilter { +//================================================================== + + +class ScHighlightRanges +{ + +public: + ScHighlightRanges(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ScHighlightRanges(); +}; + + + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/imoptdlg.hxx b/binfilter/bf_sc/source/ui/inc/imoptdlg.hxx new file mode 100644 index 000000000000..1b6f3637a24d --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/imoptdlg.hxx @@ -0,0 +1,112 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_IMOPTDLG_HXX +#define SC_IMOPTDLG_HXX + +#include <vcl/dialog.hxx> + +#include <vcl/fixed.hxx> + +#include <vcl/combobox.hxx> + +#include <vcl/lstbox.hxx> + +#include <vcl/imagebtn.hxx> + +#include <bf_svx/txencbox.hxx> + +#include "global.hxx" +namespace binfilter { + +//=================================================================== + +class ScImportOptions; +class ScDelimiterTable; + + +//------------------------------------------------------------------------ + +class ScImportOptions +{ +public: + ScImportOptions() + : nFieldSepCode(0),nTextSepCode(0),eCharSet(RTL_TEXTENCODING_DONTKNOW),bFixedWidth(FALSE) + {} + + ScImportOptions( sal_Unicode nFieldSep, sal_Unicode nTextSep, const String& rStr ) + : nFieldSepCode(nFieldSep),nTextSepCode(nTextSep),aStrFont(rStr),bFixedWidth(FALSE) + { eCharSet = ScGlobal::GetCharsetValue(aStrFont); } + + ScImportOptions( sal_Unicode nFieldSep, sal_Unicode nTextSep, rtl_TextEncoding nEnc ) + : nFieldSepCode(nFieldSep),nTextSepCode(nTextSep),bFixedWidth(FALSE) + { SetTextEncoding( nEnc ); } + + ScImportOptions( const ScImportOptions& rCpy ) + : nFieldSepCode (rCpy.nFieldSepCode), + nTextSepCode (rCpy.nTextSepCode), + aStrFont (rCpy.aStrFont), + eCharSet (rCpy.eCharSet), + bFixedWidth (rCpy.bFixedWidth) + {} + + ScImportOptions& operator=( const ScImportOptions& rCpy ) + { + nFieldSepCode = rCpy.nFieldSepCode; + nTextSepCode = rCpy.nTextSepCode; + aStrFont = rCpy.aStrFont; + eCharSet = rCpy.eCharSet; + bFixedWidth = rCpy.bFixedWidth; + return *this; + } + + BOOL operator==( const ScImportOptions& rCmp ) + { + return + nFieldSepCode == rCmp.nFieldSepCode + && nTextSepCode == rCmp.nTextSepCode + && eCharSet == rCmp.eCharSet + && aStrFont == rCmp.aStrFont + && bFixedWidth == rCmp.bFixedWidth; + } + void SetTextEncoding( rtl_TextEncoding nEnc ); + + sal_Unicode nFieldSepCode; + sal_Unicode nTextSepCode; + String aStrFont; + CharSet eCharSet; + BOOL bFixedWidth; +}; + + +} //namespace binfilter +#endif // SC_IMOPTDLG_HXX + + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/impex.hxx b/binfilter/bf_sc/source/ui/inc/impex.hxx new file mode 100644 index 000000000000..f2e6c9705022 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/impex.hxx @@ -0,0 +1,126 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_IMPEX_HXX +#define SC_IMPEX_HXX + +#include <sot/exchange.hxx> + +#include "global.hxx" +#include <osl/endian.h> +class SvStream; +namespace binfilter { + +class ScDocShell; +class ScDocument; +class SfxMedium; +class ScAsciiOptions; + +class ScImportExport +{ + ScDocShell* pDocSh; + ScDocument* pDoc; + ScDocument* pUndoDoc; + ScRange aRange; + String aStreamPath; + String aNonConvertibleChars; + ULONG nSizeLimit; + sal_Unicode cSep; // Separator + sal_Unicode cStr; // String Delimiter + BOOL bFormulas; // Formeln im Text? + BOOL bIncludeFiltered; // include filtered rows? (default true) + BOOL bAll; // keine Selektion + BOOL bSingle; // Einfachselektion + BOOL bUndo; // Mit Undo? + BOOL bOverflow; // zuviele Zeilen/Spalten + + ScAsciiOptions* pExtOptions; // erweiterte Optionen + + BOOL ExtText2Doc( SvStream& ); // mit pExtOptions + + //! only if stream is only used in own (!) memory + +public: + ScImportExport( ScDocument* ); // Gesamtdokument + ~ScImportExport(); + + void SetExtOptions( const ScAsciiOptions& rOpt ); + + BOOL IsDoubleRef() const { return BOOL( !( bAll || bSingle ) ); } + BOOL IsSingleRef() const { return bSingle; } + BOOL IsNoRef() const { return bAll; } + BOOL IsRef() const { return BOOL( !bAll ); } + + const ScRange& GetRange() const { return aRange; } + + BOOL IsUndo() const { return bUndo; } + void SetUndo( BOOL b ) { bUndo = b; } + + static const sal_Unicode* ScanNextFieldFromString( const sal_Unicode* p, + String& rField, sal_Unicode cStr, const sal_Unicode* pSeps, BOOL bMergeSeps ); + static inline BOOL IsEndianSwap( const SvStream& rStrm ); + + sal_Unicode GetSeparator() const { return cSep; } + void SetSeparator( sal_Unicode c ) { cSep = c; } + sal_Unicode GetDelimiter() const { return cStr; } + void SetDelimiter( sal_Unicode c ) { cStr = c; } + BOOL IsFormulas() const { return bFormulas; } + void SetFormulas( BOOL b ) { bFormulas = b; } + BOOL IsIncludeFiltered() const { return bIncludeFiltered; } + void SetIncludeFiltered( BOOL b ) { bIncludeFiltered = b; } + + void SetSizeLimit( ULONG nNew ) { nSizeLimit = nNew; } // momentan nur fuer Ascii + + void SetStreamPath( const String& rPath ) { aStreamPath = rPath; } + const String& GetStreamPath() const { return aStreamPath; } + + + BOOL ImportStream( SvStream&, ULONG=FORMAT_STRING ); + + + BOOL IsOverflow() const { return bOverflow; } // nach dem Importieren + + const String& GetNonConvertibleChars() const { return aNonConvertibleChars; } +}; + + +// static +inline BOOL ScImportExport::IsEndianSwap( const SvStream& rStrm ) +{ +#ifdef OSL_BIGENDIAN + return rStrm.GetNumberFormatInt() != NUMBERFORMAT_INT_BIGENDIAN; +#else + return rStrm.GetNumberFormatInt() != NUMBERFORMAT_INT_LITTLEENDIAN; +#endif +} + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/inputhdl.hxx b/binfilter/bf_sc/source/ui/inc/inputhdl.hxx new file mode 100644 index 000000000000..559f013989d3 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/inputhdl.hxx @@ -0,0 +1,235 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_INPUTHDL_HXX +#define SC_INPUTHDL_HXX + +#include "global.hxx" + +#include <tools/fract.hxx> + +#include <tools/gen.hxx> +class Timer; +class KeyEvent; +namespace binfilter { + +class ScDocument; +class ScTabView; +class ScTabViewShell; +class ScInputWindow; +class ScPatternAttr; +class EditEngine; +class ScEditEngineDefaulter; +class EditView; +class EditTextObject; +class ScInputHdlState; +class TypedStrCollection; +class ScRangeFindList; +class CommandEvent; + +struct ESelection; + +//======================================================================== +// ScInputHandler +//======================================================================== + +class ScInputHandler +{ +private: + ScInputWindow* pInputWin; + + ScEditEngineDefaulter* pEngine; // editierte Daten in der Tabelle + EditView* pTableView; // aktive EditView dazu + EditView* pTopView; // EditView in der Eingabezeile + + TypedStrCollection* pColumnData; + TypedStrCollection* pFormulaData; + ULONG nTipVisible; + String aManualTip; + String aAutoSearch; + USHORT nAutoPos; + BOOL bUseTab; // Blaettern moeglich + + BOOL bTextValid; // Text noch nicht in Edit-Engine + String aCurrentText; + + String aFormText; // fuer Funktions-Autopilot + xub_StrLen nFormSelStart; // Selektion fuer Funktions-Autopilot + xub_StrLen nFormSelEnd; + + USHORT nAutoPar; // autom.parentheses than can be overwritten + + ScAddress aCursorPos; + ScInputMode eMode; + BOOL bModified; + BOOL bSelIsRef; + BOOL bFormulaMode; + BOOL bInRangeUpdate; + BOOL bParenthesisShown; + BOOL bCreatingFuncView; + BOOL bInEnterHandler; + BOOL bCommandErrorShown; + BOOL bInOwnChange; + + BOOL bProtected; + BOOL bCellHasPercentFormat; + ULONG nValidation; + USHORT nAttrAdjust; // enum SvxCellHorJustify + + Fraction aScaleX; // fuer Ref-MapMode + Fraction aScaleY; + + ScTabViewShell* pRefViewSh; + ScTabViewShell* pActiveViewSh; + + const ScPatternAttr* pLastPattern; + SfxItemSet* pEditDefaults; + BOOL bLastIsSymbol; + + ScInputHdlState* pLastState; + Timer* pDelayTimer; + + ScRangeFindList* pRangeFindList; + + static BOOL bAutoComplete; // aus App-Optionen + static BOOL bOptLoaded; + +#ifdef _INPUTHDL_CXX +private: + void ImplCreateEditEngine(); + void DeleteRangeFinder(); + void ResetAutoPar(); + void StopInputWinEngine( BOOL bAll ); + DECL_LINK( ModifyHdl, void* ); +#endif + +public: + ScInputHandler(); + virtual ~ScInputHandler(); + + BOOL IsInputMode() const { return (eMode != SC_INPUT_NONE); } + BOOL IsEditMode() const { return (eMode != SC_INPUT_NONE && + eMode != SC_INPUT_TYPE); } + BOOL IsTopMode() const { return (eMode == SC_INPUT_TOP); } + + const String& GetFormString() const { return aFormText; } + + + void EnterHandler( BYTE nBlockMode = 0 ); + + + + + void ViewShellGone(ScTabViewShell* pViewSh){DBG_BF_ASSERT(0, "STRIP");}; //STRIP001 void ViewShellGone(ScTabViewShell* pViewSh); + void SetRefViewShell(ScTabViewShell* pRefVsh) {pRefViewSh=pRefVsh;} + + + void NotifyChange( const ScInputHdlState* pState, BOOL bForce = FALSE, + ScTabViewShell* pSourceSh = NULL, + BOOL bStopEditing = TRUE); + + + void HideTip(); + + void SetRefScale( const Fraction& rX, const Fraction& rY ); + void UpdateRefDevice(); + + EditView* GetTableView() { return pTableView; } + EditView* GetTopView() { return pTopView; } + + + BOOL TakesReturn() const { return ( nTipVisible != 0 ); } + + void SetModified() { bModified = TRUE; } + + BOOL GetSelIsRef() const { return bSelIsRef; } + void SetSelIsRef(BOOL bSet) { bSelIsRef = bSet; } + + + ScRangeFindList* GetRangeFindList() { return pRangeFindList; } + + + // Kommunikation mit Funktionsautopilot + + BOOL IsFormulaMode() const { return bFormulaMode; } + ScInputWindow* GetInputWindow() { return pInputWin; } + void SetInputWindow( ScInputWindow* pNew ) { pInputWin = pNew; } + + BOOL IsInEnterHandler() const { return bInEnterHandler; } + BOOL IsInOwnChange() const { return bInOwnChange; } + + + + + + + + // eigentlich private, fuer SID_INPUT_SUM public + + static void SetAutoComplete(BOOL bSet) { bAutoComplete = bSet; } +}; + +//======================================================================== +// ScInputHdlState +//======================================================================== +class ScInputHdlState +{ + friend class ScInputHandler; + +public: + ScInputHdlState( const ScAddress& rCurPos, + const ScAddress& rStartPos, + const ScAddress& rEndPos, + const String& rString, + const EditTextObject* pData ); + ScInputHdlState( const ScInputHdlState& rCpy ); + ~ScInputHdlState(); + + ScInputHdlState& operator= ( const ScInputHdlState& r ); + + const ScAddress& GetPos() const { return aCursorPos; } + const ScAddress& GetStartPos() const { return aStartPos; } + const ScAddress& GetEndPos() const { return aEndPos; } + const String& GetString() const { return aString; } + const EditTextObject* GetEditData() const { return pEditData; } + +private: + ScAddress aCursorPos; + ScAddress aStartPos; + ScAddress aEndPos; + String aString; + EditTextObject* pEditData; +}; + + + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/inputwin.hxx b/binfilter/bf_sc/source/ui/inc/inputwin.hxx new file mode 100644 index 000000000000..68cc6dcabd61 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/inputwin.hxx @@ -0,0 +1,176 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_INPUTWIN_HXX +#define SC_INPUTWIN_HXX + + +#include <vcl/toolbox.hxx> +#include <bf_sfx2/childwin.hxx> +#include <bf_svtools/lstner.hxx> +#include <vcl/combobox.hxx> +#include <vcl/window.hxx> +#include <bf_svtools/transfer.hxx> +namespace binfilter { + +class ScEditEngineDefaulter; +class EditView; +struct ESelection; +class ScInputHandler; +class ScAccessibleEditLineTextData; +struct EENotify; +class ScRangeList; + +//======================================================================== + +class ScTextWnd : public Window, public DragSourceHelper // edit window +{ +public: + ScTextWnd( Window* pParent ); + virtual ~ScTextWnd(); + + + + // fuer FunktionsAutopiloten + + + + + + + DECL_LINK( NotifyHdl, EENotify* ); + +protected: + virtual void Resize(); + + + + +private: + void ImplInitSettings(); + void UpdateAutoCorrFlag(); + +private: + String aString; + Font aTextFont; + ScEditEngineDefaulter* pEditEngine; // erst bei Bedarf angelegt + EditView* pEditView; + ScAccessibleEditLineTextData* pAccTextData; + BOOL bIsRTL; + BOOL bIsInsertMode; + BOOL bFormulaMode; + + // #102710#; this flag should be true if a key input or a command is handled + // it prevents the call of InputChanged in the ModifyHandler of the EditEngine + BOOL bInputMode; +}; + +//======================================================================== + +class ScPosWnd : public ComboBox, public SfxListener // Positionsanzeige +{ +private: + String aPosStr; + Accelerator* pAccel; + BOOL bFormulaMode; + BOOL bTopHadFocus; + +public: + ScPosWnd( Window* pParent ); + virtual ~ScPosWnd(); + + +protected: + + + virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType, + const SfxHint& rHint, const TypeId& rHintType ); + +private: + void FillRangeNames(); + +}; + +//======================================================================== + +class ScInputWindow : public ToolBox // Parent-Toolbox +{ +public: + ScInputWindow( Window* pParent, SfxBindings* pBind ); + virtual ~ScInputWindow(); + + virtual void Resize(); + + + + + + + // Fuer FunktionsAutopiloten + + + + ScInputHandler* GetInputHandler(){ return pInputHdl;} + + void StateChanged( StateChangedType nType ); + + +protected: + + sal_Bool UseSubTotal( ScRangeList* pRangeList ) const; + +private: + ScPosWnd aWndPos; + ScTextWnd aTextWindow; + ScInputHandler* pInputHdl; + SfxBindings* pBindings; + String aTextOk; + String aTextCancel; + String aTextSum; + String aTextEqual; + BOOL bIsOkCancelMode; +}; + +//================================================================== + +class ScInputWindowWrapper : public SfxChildWindow +{ +public: + ScInputWindowWrapper( Window* pParent, + USHORT nId, + SfxBindings* pBindings, + SfxChildWinInfo* pInfo ); + + SFX_DECL_CHILDWINDOW(ScInputWindowWrapper); +}; + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/invmerge.hxx b/binfilter/bf_sc/source/ui/inc/invmerge.hxx new file mode 100644 index 000000000000..501af516f624 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/invmerge.hxx @@ -0,0 +1,60 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_INVMERGE_HXX +#define SC_INVMERGE_HXX + +#include <tools/gen.hxx> + +class Window; +namespace binfilter { + +class ScInvertMerger +{ +private: + Window* pWin; + Rectangle aTotalRect; + Rectangle aLineRect; + + void FlushLine(); + void FlushTotal(); + +public: + ScInvertMerger( Window* pWindow ); + ~ScInvertMerger(); + + void Flush(); +}; + + + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/msgpool.hxx b/binfilter/bf_sc/source/ui/inc/msgpool.hxx new file mode 100644 index 000000000000..90af584927f5 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/msgpool.hxx @@ -0,0 +1,78 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_MSGPOOL_HXX +#define SC_MSGPOOL_HXX + +#include "scitems.hxx" + +#include <bf_svtools/itempool.hxx> +#include <bf_svtools/stritem.hxx> +#include <bf_svtools/eitem.hxx> +#include <bf_sfx2/srchitem.hxx> + +#include "uiitems.hxx" +namespace binfilter { + + +//------------------------------------------------------------------------ + +class ScDocumentPool; + +//------------------------------------------------------------------------ + +class ScMessagePool: public SfxItemPool +{ + SfxStringItem aGlobalStringItem; + SvxSearchItem aGlobalSearchItem; + ScSortItem aGlobalSortItem; + ScQueryItem aGlobalQueryItem; + ScSubTotalItem aGlobalSubTotalItem; + ScConsolidateItem aGlobalConsolidateItem; + ScPivotItem aGlobalPivotItem; + ScSolveItem aGlobalSolveItem; + ScUserListItem aGlobalUserListItem; + + SfxBoolItem aPrintWarnItem; + + SfxPoolItem** ppPoolDefaults; + ScDocumentPool* pDocPool; + +public: + ScMessagePool(); + ~ScMessagePool(); + + virtual SfxMapUnit GetMetric( USHORT nWhich ) const; +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/namecrea.hxx b/binfilter/bf_sc/source/ui/inc/namecrea.hxx new file mode 100644 index 000000000000..a26372084c79 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/namecrea.hxx @@ -0,0 +1,66 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_NAMECREA_HXX +#define SC_NAMECREA_HXX + +#include <vcl/dialog.hxx> + +#include <vcl/imagebtn.hxx> + +#include <vcl/fixed.hxx> +namespace binfilter { + + +#define NAME_TOP 1 +#define NAME_LEFT 2 +#define NAME_BOTTOM 4 +#define NAME_RIGHT 8 + +class ScNameCreateDlg : public ModalDialog +{ +protected: + FixedLine aFixedLine; + CheckBox aTopBox; + CheckBox aLeftBox; + CheckBox aBottomBox; + CheckBox aRightBox; + OKButton aOKButton; + CancelButton aCancelButton; + HelpButton aHelpButton; +public: + ScNameCreateDlg( Window * pParent, USHORT nFlags ); + + USHORT GetFlags() const; +}; + + +} //namespace binfilter +#endif //SC_NAMECREA_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/navipi.hxx b/binfilter/bf_sc/source/ui/inc/navipi.hxx new file mode 100644 index 000000000000..dad293da4f43 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/navipi.hxx @@ -0,0 +1,120 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_NAVIPI_HXX +#define SC_NAVIPI_HXX + +#include <vcl/toolbox.hxx> +#include <vcl/field.hxx> +#include <vcl/lstbox.hxx> +#include <bf_svtools/stdctrl.hxx> +#include <bf_svtools/poolitem.hxx> +#include <bf_svtools/lstner.hxx> +#include <bf_sfx2/childwin.hxx> + +#include "content.hxx" + +#include <bf_svtools/svmedit.hxx> +namespace binfilter { + + +class ScTabViewShell; +class ScViewData; +class ScArea; +class ScScenarioWindow; +class ScNavigatorControllerItem; +class ScNavigatorDialogWrapper; +class ScNavigatorDlg; +class ScNavigatorSettings; +class ScRange; + +//======================================================================== + +#define SC_DROPMODE_URL 0 +#define SC_DROPMODE_LINK 1 +#define SC_DROPMODE_COPY 2 + +enum NavListMode { NAV_LMODE_NONE = 0x4000, + NAV_LMODE_AREAS = 0x2000, + NAV_LMODE_DBAREAS = 0x1000, + NAV_LMODE_DOCS = 0x800, + NAV_LMODE_SCENARIOS = 0x400 }; + +//======================================================================== +// class ScScenarioListBox ----------------------------------------------- +//======================================================================== + +//======================================================================== +// class ScScenarioWindow ------------------------------------------------ +//======================================================================== + +//================================================================== +// class ColumnEdit +//================================================================== + + +//================================================================== +// class RowEdit +//================================================================== + + +//================================================================== +// class ScDocListBox +//================================================================== + + +//================================================================== +// class CommandToolBox +//================================================================== + +//================================================================== +// class ScNavigatorDlg +//================================================================== + + +//================================================================== + +class ScNavigatorDialogWrapper: public SfxChildWindowContext +{ +public: + ScNavigatorDialogWrapper( Window* pParent, + USHORT nId, + SfxBindings* pBindings, + SfxChildWinInfo* pInfo ):SfxChildWindowContext( nId ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 SfxChildWinInfo* pInfo ); + + SFX_DECL_CHILDWINDOW_CONTEXT(ScNavigatorDialogWrapper) + + +}; + + + +} //namespace binfilter +#endif // SC_NAVIPI_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/navsett.hxx b/binfilter/bf_sc/source/ui/inc/navsett.hxx new file mode 100644 index 000000000000..81ee89d41130 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/navsett.hxx @@ -0,0 +1,63 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_NAVSETT_HXX +#define SC_NAVSETT_HXX + +#include <tools/solar.h> + +#include <vector> +namespace binfilter { + +/** Contains settings of the navigator listbox. This includes the expand state + of each listbox entry and the index of the selected entry and sub entry. */ +class ScNavigatorSettings +{ +private: + ::std::vector< BOOL > maExpandedVec; /// Array of Booleans for expand state. + USHORT mnRootSelected; /// Index of selected root entry. + ULONG mnChildSelected; /// Index of selected child entry. + +public: + ScNavigatorSettings(); + + inline void SetExpanded( USHORT nIndex, BOOL bExpand ) { maExpandedVec[ nIndex ] = bExpand; } + inline BOOL IsExpanded( USHORT nIndex ) const { return maExpandedVec[ nIndex ]; } + + inline void SetRootSelected( USHORT nIndex ) { mnRootSelected = nIndex; } + inline USHORT GetRootSelected() const { return mnRootSelected; } + + inline void SetChildSelected( ULONG nIndex ) { mnChildSelected = nIndex; } + inline ULONG GetChildSelected() const { return mnChildSelected; } +}; + + +} //namespace binfilter +#endif // SC_NAVSETT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/notemark.hxx b/binfilter/bf_sc/source/ui/inc/notemark.hxx new file mode 100644 index 000000000000..02ee7d79677d --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/notemark.hxx @@ -0,0 +1,53 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_NOTEMARK_HXX +#define SC_NOTEMARK_HXX + +#include <vcl/mapmod.hxx> +#include <vcl/timer.hxx> + +#include "global.hxx" +namespace binfilter { + +class ScNoteMarker +{ +public: + ScNoteMarker( Window* pWin, //STRIP001 ScNoteMarker( Window* pWin, + Window* pRight, Window* pBottom, Window* pDiagonal,//STRIP001 Window* pRight, Window* pBottom, Window* pDiagonal, + ScDocument* pD, ScAddress aPos, //STRIP001 ScDocument* pD, ScAddress aPos, + const String& rUser, const MapMode& rMap, //STRIP001 const String& rUser, const MapMode& rMap, + BOOL bLeftEdge, BOOL bForce, BOOL bKeyboard ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 BOOL bLeftEdge, BOOL bForce, BOOL bKeyboard ); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/oleobjsh.hxx b/binfilter/bf_sc/source/ui/inc/oleobjsh.hxx new file mode 100644 index 000000000000..5a6d7887e33d --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/oleobjsh.hxx @@ -0,0 +1,56 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef OLEOBJSH_HXX +#define OLEOBJSH_HXX + +#include <bf_sfx2/shell.hxx> +#include "shellids.hxx" +#include <bf_sfx2/module.hxx> + +#include <bf_svx/svdmark.hxx> + +class ScViewData; + +#include "drawsh.hxx" +namespace binfilter { + +class ScOleObjectShell: public ScDrawShell +{ +public: + + SFX_DECL_INTERFACE(SCID_OLEOBJECT_SHELL); + + ScOleObjectShell(ScViewData* pData):ScDrawShell(pData){DBG_BF_ASSERT(0, "STRIP"); } + +}; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/olinefun.hxx b/binfilter/bf_sc/source/ui/inc/olinefun.hxx new file mode 100644 index 000000000000..072a79ebe79f --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/olinefun.hxx @@ -0,0 +1,67 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_OLINEFUN_HXX +#define SC_OLINEFUN_HXX + +#include "global.hxx" +namespace binfilter { + +class ScDocShell; +class ScRange; + + +// --------------------------------------------------------------------------- + +class ScOutlineDocFunc +{ +private: + ScDocShell& rDocShell; + +public: + ScOutlineDocFunc( ScDocShell& rDocSh ): rDocShell(rDocSh) {} + ~ScOutlineDocFunc() {} + + BOOL MakeOutline( const ScRange& rRange, BOOL bColumns, BOOL bRecord, BOOL bApi ); + BOOL RemoveOutline( const ScRange& rRange, BOOL bColumns, BOOL bRecord, BOOL bApi ); + BOOL RemoveAllOutlines( USHORT nTab, BOOL bRecord, BOOL bApi ); + BOOL AutoOutline( const ScRange& rRange, BOOL bRecord, BOOL bApi ); + + BOOL SelectLevel( USHORT nTab, BOOL bColumns, USHORT nLevel, + BOOL bRecord, BOOL bPaint, BOOL bApi ); + + BOOL ShowMarkedOutlines( const ScRange& rRange, BOOL bRecord, BOOL bApi ); + BOOL HideMarkedOutlines( const ScRange& rRange, BOOL bRecord, BOOL bApi ); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/olinewin.hxx b/binfilter/bf_sc/source/ui/inc/olinewin.hxx new file mode 100644 index 000000000000..4e1fd1871000 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/olinewin.hxx @@ -0,0 +1,98 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_OLINEWIN_HXX +#define SC_OLINEWIN_HXX + +#include "viewdata.hxx" +namespace binfilter { + +class ScOutlineArray; + + +// ============================================================================ + +enum ScOutlineMode { SC_OUTLINE_HOR, SC_OUTLINE_VER }; + + +// ---------------------------------------------------------------------------- + +/** The window left of or above the spreadsheet containing the outline groups + and controls to expand/collapse them. */ +class ScOutlineWindow : public Window +{ +private: + ScViewData& mrViewData; /// View data containing the document. + ScSplitPos meWhich; /// Which area in split window. + bool mbHoriz; /// true = Horizontal orientation. + bool mbMirrorHdr; /// true = Header at end of the window (bottom or right). + + ImageList* mpSymbols; /// Symbols for buttons. + Color maLineColor; /// Line color for expanded groups. + sal_Int32 mnHeaderSize; /// Size of the header area in entry direction. + sal_Int32 mnHeaderPos; /// Position of the header area in entry direction. + sal_Int32 mnMainFirstPos; /// First position of main area in entry direction. + sal_Int32 mnMainLastPos; /// Last position of main area in entry direction. + + sal_uInt16 mnMTLevel; /// Mouse tracking: Level of active button. + sal_uInt16 mnMTEntry; /// Mouse tracking: Entry index of active button. + bool mbMTActive; /// Mouse tracking active? + bool mbMTPressed; /// Mouse tracking: Button currently drawed pressed? + + Rectangle maFocusRect; /// Focus rectangle on screen. + sal_uInt16 mnFocusLevel; /// Level of focused button. + sal_uInt16 mnFocusEntry; /// Entry index of focused button. + bool mbDontDrawFocus; /// Do not redraw focus in next Paint(). + +public: + ScOutlineWindow( + Window* pParent, + ScOutlineMode eMode, + ScViewData* pViewData, + ScSplitPos eWhich ); + virtual ~ScOutlineWindow(); + + /** Sets the size of the header area (width/height dep. on window type). */ + void SetHeaderSize( sal_Int32 nNewSize ); + /** Returns the width/height the window needs to show all levels. */ + sal_Int32 GetDepthSize() const; + + +private: + /** Initializes color and image settings. */ + void InitSettings(); + +}; + + +// ============================================================================ + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/optload.hrc b/binfilter/bf_sc/source/ui/inc/optload.hrc new file mode 100644 index 000000000000..e949cfd10cc1 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/optload.hrc @@ -0,0 +1,40 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#include "bf_sc.hrc" // -> RID_SCPAGE_OPREDLINE + +#define GB_LINK 1 +#define RB_ALWAYS 2 +#define RB_REQUEST 3 +#define RB_NEVER 4 +#define CB_DOCONLY 5 +#define CB_MERGE_PARA_DIST 6 +#define GB_COMPAT 7 +#define CB_AUTO_UPDATE_FIELDS 8 +#define CB_AUTO_UPDATE_CHARTS 9 +#define FT_UPDATE_LINKS 10 + + diff --git a/binfilter/bf_sc/source/ui/inc/optload.hxx b/binfilter/bf_sc/source/ui/inc/optload.hxx new file mode 100644 index 000000000000..12d4535ff259 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/optload.hxx @@ -0,0 +1,68 @@ +/* -*- 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. + * + ************************************************************************/ +#ifndef _OPTLOAD_HXX +#define _OPTLOAD_HXX + +#include <vcl/group.hxx> +#include <vcl/fixed.hxx> +namespace binfilter { + +class ScDocument; + +class ScLoadOptPage : public SfxTabPage +{ +private: + FixedText aLinkFT; + RadioButton aAlwaysRB; + RadioButton aRequestRB; + RadioButton aNeverRB; + CheckBox aDocOnlyCB; + GroupBox aLinkGB; + ScDocument *pDoc; + + DECL_LINK( UpdateHdl, CheckBox* ); + +public: + ScLoadOptPage( Window* pParent, + const SfxItemSet& rSet ); + ~ScLoadOptPage(); + + static SfxTabPage* Create( Window* pParent, + const SfxItemSet& rAttrSet); + + void SetDocument(ScDocument*); + + virtual BOOL FillItemSet( SfxItemSet& rSet ); + virtual void Reset( const SfxItemSet& rSet ); +}; + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/output.hxx b/binfilter/bf_sc/source/ui/inc/output.hxx new file mode 100644 index 000000000000..bf1fd37f7e97 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/output.hxx @@ -0,0 +1,212 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_OUTPUT_HXX +#define SC_OUTPUT_HXX + +#include <tools/list.hxx> +#include <tools/color.hxx> +#include <tools/fract.hxx> +class Rectangle; +class Font; +class OutputDevice; +class Window; +namespace binfilter { + +class SvInPlaceObjectRef; +class EditEngine; +class ScDocument; +class ScBaseCell; +class ScPatternAttr; +class SvxMarginItem; +class SdrObject; +class SdrOle2Obj; +struct RowInfo; +class ScTabViewShell; +class ScPageBreakData; + +// --------------------------------------------------------------------------- + +#define SC_SCENARIO_HSPACE 60 +#define SC_SCENARIO_VSPACE 50 + +// Twips (Hoehe wird passend in Pixeln berechnet) +#define SC_CLIPMARK_SIZE 64 + +// --------------------------------------------------------------------------- + +#define SC_OBJECTS_NONE 0 +#define SC_OBJECTS_DRAWING 1 +#define SC_OBJECTS_OLE 2 +#define SC_OBJECTS_CHARTS 4 +#define SC_OBJECTS_ALL ( SC_OBJECTS_DRAWING | SC_OBJECTS_OLE | SC_OBJECTS_CHARTS ) + +enum ScOutputType { OUTTYPE_WINDOW, OUTTYPE_PRINTER }; + +class ScOutputData +{ +friend class ScDrawStringsVars; +private: + OutputDevice* pDev; // Device + OutputDevice* pRefDevice; // printer if used for preview + OutputDevice* pFmtDevice; // reference for text formatting + RowInfo* pRowInfo; // Info-Block + USHORT nArrCount; // belegte Zeilen im Info-Block + ScDocument* pDoc; // Dokument + USHORT nTab; // Tabelle + long nScrX; // Ausgabe Startpos. (Pixel) + long nScrY; + long nScrW; // Ausgabe Groesse (Pixel) + long nScrH; + USHORT nX1; // Start-/Endkoordinaten + USHORT nY1; // ( incl. versteckte ) + USHORT nX2; + USHORT nY2; + USHORT nVisX1; // Start-/Endkoordinaten + USHORT nVisY1; // ( sichtbarer Bereich ) + USHORT nVisX2; + USHORT nVisY2; + ScOutputType eType; // Bildschirm/Drucker ... + double nPPTX; // Pixel per Twips + double nPPTY; +// USHORT nZoom; // Zoom-Faktor (Prozent) - fuer GetFont + Fraction aZoomX; + Fraction aZoomY; + + SdrObject* pEditObj; // beim Painten auslassen + + ScTabViewShell* pViewShell; // zum Connecten von sichtbaren Plug-Ins + + BOOL bEditMode; // InPlace editierte Zelle - nicht ausgeben + USHORT nEditCol; + USHORT nEditRow; + + BOOL bMetaFile; // Ausgabe auf Metafile (nicht in Pixeln!) + BOOL bSingleGrid; // beim Gitter bChanged auswerten + + BOOL bPagebreakMode; // Seitenumbruch-Vorschau + BOOL bSolidBackground; // weiss statt transparent + + BOOL bUseStyleColor; + BOOL bForceAutoColor; + + BOOL bSyntaxMode; // Syntax-Highlighting + Color* pValueColor; + Color* pTextColor; + Color* pFormulaColor; + + Color aGridColor; + + BOOL bShowNullValues; + BOOL bShowFormulas; + BOOL bShowSpellErrors; // Spell-Errors in EditObjekten anzeigen + BOOL bMarkClipped; + + BOOL bSnapPixel; + + BOOL bAnyRotated; // intern + BOOL bAnyClipped; // intern + BOOL bTabProtected; + BYTE nTabTextDirection; // EEHorizontalTextDirection values + + // private Methoden + + BOOL IsEmptyCellText( RowInfo* pThisRowInfo, USHORT nX, USHORT nY ); + void GetVisibleCell( USHORT nCol, USHORT nRow, USHORT nTab, ScBaseCell*& rpCell ); + + BOOL IsAvailable( USHORT nX, USHORT nY ); + long GetAvailableWidth( USHORT nX, USHORT nY, long nNeeded ); + + + + + void DrawRotatedFrame( const Color* pForceColor ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void DrawRotatedFrame( const Color* pForceColor ); // pixel + +public: + ScOutputData( OutputDevice* pNewDev, ScOutputType eNewType, + RowInfo* pNewRowInfo, USHORT nNewCount, + ScDocument* pNewDoc, + USHORT nNewTab, long nNewScrX, long nNewScrY, + USHORT nNewX1, USHORT nNewY1, USHORT nNewX2, USHORT nNewY2, + double nPixelPerTwipsX, double nPixelPerTwipsY, + const Fraction* pZoomX = NULL, + const Fraction* pZoomY = NULL ); + + ~ScOutputData(); + + void SetRefDevice( OutputDevice* pRDev ) { pRefDevice = pFmtDevice = pRDev; } + void SetFmtDevice( OutputDevice* pRDev ) { pFmtDevice = pRDev; } + void SetEditObject( SdrObject* pObj ) { pEditObj = pObj; } + void SetViewShell( ScTabViewShell* pSh ) { pViewShell = pSh; } + + void SetSolidBackground( BOOL bSet ) { bSolidBackground = bSet; } + void SetUseStyleColor( BOOL bSet ) { bUseStyleColor = bSet; } + + void SetSyntaxMode( BOOL bNewMode ); + void SetSingleGrid( BOOL bNewMode ); + void SetGridColor( const Color& rColor ); + void SetMarkClipped( BOOL bSet ); + void SetShowNullValues ( BOOL bSet = TRUE ); + void SetShowFormulas ( BOOL bSet = TRUE ); + void SetShowSpellErrors( BOOL bSet = TRUE ); + long GetScrW() const { return nScrW; } + long GetScrH() const { return nScrH; } + + + void DrawGrid( BOOL bGrid, BOOL bPage ); + void DrawStrings( BOOL bPixelToLogic = FALSE ); + void DrawBackground(); + void DrawShadow(); + void DrawFrame(); + + // with logic MapMode set! + void DrawEdit(BOOL bPixelToLogic); + + void FindRotated(); + + + // nur Bildschirm: + + void DrawingSingle( USHORT nLayer, USHORT nObjectFlags, USHORT nDummyFlags ); + + + BOOL SetChangedClip(); // FALSE = nix + + void FindChanged(); + void DrawMark( Window* pWin ); + void DrawClipMarks(); + + void DrawNoteMarks(); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/pagedata.hxx b/binfilter/bf_sc/source/ui/inc/pagedata.hxx new file mode 100644 index 000000000000..1f944b07d2c5 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/pagedata.hxx @@ -0,0 +1,51 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_PAGEDATA_HXX +#define SC_PAGEDATA_HXX + +#include "global.hxx" +namespace binfilter { + + +//============================================================================ + + +class ScPageBreakData +{ + +public: + ScPageBreakData(USHORT nMax){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ScPageBreakData(USHORT nMax); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/pfuncache.hxx b/binfilter/bf_sc/source/ui/inc/pfuncache.hxx new file mode 100644 index 000000000000..8b16d4933473 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/pfuncache.hxx @@ -0,0 +1,98 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_PFUNCACHE_HXX +#define SC_PFUNCACHE_HXX + +#include "rangelst.hxx" +namespace binfilter { + +class ScDocShell; +class ScMarkData; + + +/** Possible types of selection for print functions */ + +enum ScPrintSelectionMode +{ + SC_PRINTSEL_INVALID, + SC_PRINTSEL_DOCUMENT, + SC_PRINTSEL_CURSOR, + SC_PRINTSEL_RANGE +}; + + +/** Stores the selection in the ScPrintFuncCache so it is only used + for the same selection again. */ + +class ScPrintSelectionStatus +{ + ScPrintSelectionMode eMode; + ScRangeList aRanges; + +public: + ScPrintSelectionStatus() : eMode(SC_PRINTSEL_INVALID) {} + ~ScPrintSelectionStatus() {} + + void SetMode(ScPrintSelectionMode eNew) { eMode = eNew; } + void SetRanges(const ScRangeList& rNew) { aRanges = rNew; } + + BOOL operator==(const ScPrintSelectionStatus& rOther) const + { return eMode == rOther.eMode && aRanges == rOther.aRanges; } +}; + + +/** Stores the data for printing that is needed from several sheets, + so it doesn't have to be calculated for rendering each page. */ + +class ScPrintFuncCache +{ + ScPrintSelectionStatus aSelection; + ScDocShell* pDocSh; + long nTotalPages; + long nPages[MAXTAB+1]; + long nFirstAttr[MAXTAB+1]; + +public: + ScPrintFuncCache( ScDocShell* pD, const ScMarkData& rMark, + const ScPrintSelectionStatus& rStatus ); + ~ScPrintFuncCache(); + + BOOL IsSameSelection( const ScPrintSelectionStatus& rStatus ) const; + + long GetPageCount() const { return nTotalPages; } + long GetFirstAttr( USHORT nTab ) const { return nFirstAttr[nTab]; } + USHORT GetTabForPage( long nPage ) const; + long GetTabStart( USHORT nTab ) const; + long GetDisplayStart( USHORT nTab ) const; +}; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/pgbrksh.hxx b/binfilter/bf_sc/source/ui/inc/pgbrksh.hxx new file mode 100644 index 000000000000..2cd2c4742452 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/pgbrksh.hxx @@ -0,0 +1,55 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_PGBRKSH_HXX +#define SC_PGBRKSH_HXX + +#include <bf_sfx2/module.hxx> +#include <bf_sfx2/shell.hxx> + +#include "shellids.hxx" +namespace binfilter { + +class ScTabViewShell; + +class ScPageBreakShell : public SfxShell +{ +public: + SFX_DECL_INTERFACE(SCID_PAGEBREAK_SHELL); + + ScPageBreakShell( ScTabViewShell* pView ):SfxShell(NULL){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ScPageBreakShell( ScTabViewShell* pView ); + +}; + + + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/pivotobj.hxx b/binfilter/bf_sc/source/ui/inc/pivotobj.hxx new file mode 100644 index 000000000000..d31beab4d8e3 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/pivotobj.hxx @@ -0,0 +1,39 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef _PIVOTOBJ_HXX +#define _PIVOTOBJ_HXX +namespace binfilter { + +#error pivotobj.hxx is dead + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/pivotsh.hxx b/binfilter/bf_sc/source/ui/inc/pivotsh.hxx new file mode 100644 index 000000000000..655148323b1c --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/pivotsh.hxx @@ -0,0 +1,57 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_PIVOTSH_HXX +#define SC_PIVOTSH_HXX + +#include <bf_sfx2/module.hxx> +#include <bf_sfx2/shell.hxx> + +#include "shellids.hxx" +namespace binfilter { + +class ScTabViewShell; +class ScDPObject; + +class ScPivotShell : public SfxShell +{ +public: + SFX_DECL_INTERFACE(SCID_PIVOT_SHELL); + + ScPivotShell( ScTabViewShell* pView ):SfxShell(NULL){DBG_ASSERT(0, "STRIP")}; //STRIP001 ScPivotShell( ScTabViewShell* pView ); + void Execute ( SfxRequest& rReq ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void Execute ( SfxRequest& rReq ); + void GetState( SfxItemSet& rSet ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void GetState( SfxItemSet& rSet ); +}; + + + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/pntlock.hxx b/binfilter/bf_sc/source/ui/inc/pntlock.hxx new file mode 100644 index 000000000000..3abce3907d23 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/pntlock.hxx @@ -0,0 +1,71 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_PNTLOCK_HXX +#define SC_PNTLOCK_HXX + +#include "rangelst.hxx" +namespace binfilter { + +class ScPaintLockData +{ +private: + ScRangeListRef xRangeList; + USHORT nMode; + USHORT nLevel; + USHORT nDocLevel; + USHORT nParts; + BOOL bModified; + +public: + ScPaintLockData(USHORT nNewMode); + ~ScPaintLockData(); + + void AddRange( const ScRange& rRange, USHORT nP ); + + void SetModified() { bModified = TRUE; } + void IncLevel(sal_Bool bDoc) + { if (bDoc) ++nDocLevel; else ++nLevel; } + void DecLevel(sal_Bool bDoc) + { if (bDoc) --nDocLevel; else --nLevel; } + + const ScRangeListRef& GetRangeList() const { return xRangeList; } + USHORT GetParts() const { return nParts; } + USHORT GetLevel(sal_Bool bDoc) const + { return bDoc ? nDocLevel : nLevel; } + BOOL GetModified() const { return bModified; } + + // fuer Wiederherstellen nach Reset + void SetLevel(USHORT nNew, sal_Bool bDoc) + { if (bDoc) nDocLevel = nNew; else nLevel = nNew; } +}; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/popmenu.hxx b/binfilter/bf_sc/source/ui/inc/popmenu.hxx new file mode 100644 index 000000000000..6575dfd1f779 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/popmenu.hxx @@ -0,0 +1,40 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_POPMENU_HXX +#define SC_POPMENU_HXX + +namespace binfilter { + + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/printfun.hxx b/binfilter/bf_sc/source/ui/inc/printfun.hxx new file mode 100644 index 000000000000..21c5a8ff6923 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/printfun.hxx @@ -0,0 +1,282 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_PRINTFUN_HXX +#define SC_PRINTFUN_HXX + + +#include "pagepar.hxx" + +#include "editutil.hxx" + +#include <vcl/print.hxx> +class MultiSelection; +namespace binfilter { + +class SfxItemSet; +class SfxPrinter; +class SfxProgress; +class ScDocShell; +class ScDocument; +class ScViewData; +class ScPageHFItem; +class EditTextObject; +class ScHeaderEditEngine; +class ScPageBreakData; +class ScPreviewLocationData; +class ScPrintOptions; +class SvxBoxItem; +class SvxBrushItem; +class SvxShadowItem; +class FmFormView; + +#define RANGENO_NORANGE USHRT_MAX + +#define PRINT_HEADER_WIDTH (1.0 * TWIPS_PER_CM) +#define PRINT_HEADER_HEIGHT (12.8 * TWIPS_PER_POINT) +#define PRINT_HEADER_FONTHEIGHT 200 + + + // Einstellungen fuer Kopf-/Fusszeilen +struct ScPrintHFParam +{ + BOOL bEnable; + BOOL bDynamic; + BOOL bShared; + long nHeight; // insgesamt (Hoehe+Abstand+Rahmen) + long nManHeight; // eingestellte Groesse (Min. bei dynamisch) + USHORT nDistance; + USHORT nLeft; // Raender + USHORT nRight; + const ScPageHFItem* pLeft; + const ScPageHFItem* pRight; + const SvxBoxItem* pBorder; + const SvxBrushItem* pBack; + const SvxShadowItem* pShadow; +}; + + +// "Ersatz" fuer SV-JobSetup: + +class ScJobSetup +{ +}; + +struct ScPrintState // Variablen aus ScPrintFunc retten +{ + USHORT nPrintTab; + USHORT nStartCol; + USHORT nStartRow; + USHORT nEndCol; + USHORT nEndRow; + USHORT nZoom; + USHORT nPagesX; + USHORT nPagesY; + long nTabPages; + long nTotalPages; + long nPageStart; + long nDocPages; +}; + +class ScPageRowEntry +{ +private: + USHORT nStartRow; + USHORT nEndRow; + USHORT nPagesX; + BOOL* pHidden; + //! Anzahl wirklich sichtbarer cachen??? + +public: + ScPageRowEntry() { nStartRow = nEndRow = nPagesX = 0; pHidden = NULL; } + ~ScPageRowEntry() { delete[] pHidden; } + + + USHORT GetStartRow() const { return nStartRow; } + USHORT GetEndRow() const { return nEndRow; } + USHORT GetPagesX() const { return nPagesX; } + void SetStartRow(USHORT n) { nStartRow = n; } + void SetEndRow(USHORT n) { nEndRow = n; } + + void SetPagesX(USHORT nNew); + +}; + +class ScPrintFunc +{ +private: + ScDocShell* pDocShell; + ScDocument* pDoc; + SfxPrinter* pPrinter; + OutputDevice* pDev; + FmFormView* pDrawView; + + MapMode aOldPrinterMode; // MapMode vor dem Aufruf + + Point aSrcOffset; // Papier-1/100 mm + Point aOffset; // mit Faktor aus Seitenformat skaliert + USHORT nManualZoom; // Zoom in Preview (Prozent) + BOOL bClearWin; // Ausgabe vorher loeschen + BOOL bUseStyleColor; + BOOL bIsRender; + + USHORT nPrintTab; + long nPageStart; // Offset fuer erste Seite + long nDocPages; // Seiten im Dokument + + const ScRange* pUserArea; // Selektion, wenn im Dialog eingestellt + + const SfxItemSet* pParamSet; // eingestellte Vorlage + BOOL bState; // aus State-struct erzeugt + + // Parameter aus Vorlage: + USHORT nLeftMargin; + USHORT nTopMargin; + USHORT nRightMargin; + USHORT nBottomMargin; + BOOL bCenterHor; + BOOL bCenterVer; + BOOL bLandscape; + BOOL bSourceRangeValid; + + USHORT nPageUsage; + Size aPageSize; // Drucker-Twips + const SvxBoxItem* pBorderItem; + const SvxBrushItem* pBackgroundItem; + const SvxShadowItem* pShadowItem; + + ScRange aLastSourceRange; + ScPrintHFParam aHdr; + ScPrintHFParam aFtr; + ScPageTableParam aTableParam; + ScPageAreaParam aAreaParam; + + // berechnete Werte: + USHORT nZoom; + BOOL bPrintCurrentTable; + BOOL bMultiArea; + long nTabPages; + long nTotalPages; + + USHORT nObjectFlags; + + Rectangle aPageRect; // Dokument-Twips + + MapMode aLogicMode; // in DoPrint gesetzt + MapMode aOffsetMode; + MapMode aTwipMode; + double nScaleX; + double nScaleY; + + USHORT nRepeatStartCol; + USHORT nRepeatEndCol; + USHORT nRepeatStartRow; + USHORT nRepeatEndRow; + + USHORT nStartCol; + USHORT nStartRow; + USHORT nEndCol; + USHORT nEndRow; + + USHORT* pPageEndX; // Seitenaufteilung + USHORT* pPageEndY; + ScPageRowEntry* pPageRows; + USHORT nPagesX; + USHORT nPagesY; + USHORT nTotalY; + + ScHeaderEditEngine* pEditEngine; + SfxItemSet* pEditDefaults; + + ScHeaderFieldData aFieldData; + + List aNotePosList; // Reihenfolge der Notizen + + ScPageBreakData* pPageData; // zum Eintragen der Umbrueche etc. + +public: + ScPrintFunc( ScDocShell* pShell, SfxPrinter* pNewPrinter, USHORT nTab, + long nPage = 0, long nDocP = 0, + const ScRange* pArea = NULL, + const ScPrintOptions* pOptions = NULL, + ScPageBreakData* pData = NULL ); + + ~ScPrintFunc(); + + + void SetDateTime( const Date& rDate, const Time& rTime ); + + BOOL UpdatePages(); + + Size GetPageSize() const { return aPageSize; } + long GetFirstPageNo() const { return aTableParam.nFirstPageNo; } + + // letzte Werte abfragen - nach DoPrint !!! + + double GetScaleX() const { return nScaleX; } + double GetScaleY() const { return nScaleY; } + long GetTotalPages() const { return nTotalPages; } + USHORT GetZoom() const { return nZoom; } + + void ResetBreaks( USHORT nTab ); + + BOOL GetLastSourceRange( ScRange& rRange ) const{DBG_BF_ASSERT(0, "STRIP"); return FALSE;} //STRIP001 BOOL GetLastSourceRange( ScRange& rRange ) const; + +#ifdef _PRINTFUN_CXX +private: + void Construct( const ScPrintOptions* pOptions ); + void InitParam( const ScPrintOptions* pOptions ); + void CalcZoom( USHORT nRangeNo ); + void CalcPages(); + long CountPages(); + long CountNotePages(); + + BOOL AdjustPrintArea( BOOL bNew ); + + Size GetDocPageSize(); + + long TextHeight( const EditTextObject* pObject ); + void MakeEditEngine(); + void UpdateHFHeight( ScPrintHFParam& rParam ); + + void InitModes(); + + void ReplaceFields( long nPageNo ); // aendert Text in pEditEngine + + + + +#endif +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/pvlaydlg.hxx b/binfilter/bf_sc/source/ui/inc/pvlaydlg.hxx new file mode 100644 index 000000000000..d85c4061d201 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/pvlaydlg.hxx @@ -0,0 +1,84 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_PVLAYDLG_HXX +#define SC_PVLAYDLG_HXX + +#include <vcl/lstbox.hxx> +#include <vcl/scrbar.hxx> +#include <bf_svtools/stdctrl.hxx> +#include <vcl/morebtn.hxx> + +#include "global.hxx" + +#include "anyrefdg.hxx" + +#include "fieldwnd.hxx" +namespace binfilter { + + +/*==========================================================================*\ + + Eine Instanz der Klasse ScPivotLayoutDlg ist ein (semi-)modaler + Dialog, in dem mit der Maus Felder mit Spaltenueberschriften den + drei Pivot-Kategorien "Spalte", "Zeile" und "Daten" zugeordnet + werden koennen. + + Der Dialog erhaelt in der Struktur LabelData Informationen ueber + diese Ueberschriften (Name, Art (Zahl/String) und Funktionsmaske). + Weiterhin werden drei PivotFeld-Arrays uebergeben, mit denen die + drei Kategorie-Fenster initialisiert werden. Ein Kategorie-Fenster + wird durch eine Instanz der Klasse FieldWindow dargestellt. Ein + solches Fenster ist fuer die Darstellung der Datenstrukturen am + Schirm zustaendig. Es meldet Mausaktionen an den Dialog weiter und + bietet entsprechende Methoden zur Veraenderung der Darstellung. + Der Dialog sorgt fuer den Abgleich der interenen Datenstrukturen mit + der Bildschirmdarstellung. Ein weiteres FieldWindow (Select) bietet + alle Tabellenueberschriften zur Auswahl an, ist also "read-only". + +\*==========================================================================*/ + +//============================================================================ + +class ScViewData; +class ScDocument; +class ScRangeData; +struct FuncData; +class ScDPObject; + +//============================================================================ + +#define FUNC_COUNT 11 + + + + +} //namespace binfilter +#endif // SC_PVLAYDLG_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/refundo.hxx b/binfilter/bf_sc/source/ui/inc/refundo.hxx new file mode 100644 index 000000000000..ca1d70a28af6 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/refundo.hxx @@ -0,0 +1,51 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_REFUNDO_HXX +#define SC_REFUNDO_HXX + +#include <tools/solar.h> +#include <tools/debug.hxx> +namespace binfilter { +class ScDocument; + +class ScRefUndoData +{ +private: + +public: + ScRefUndoData( const ScDocument* pDoc ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 ScRefUndoData( const ScDocument* pDoc ); + +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/rfindlst.hxx b/binfilter/bf_sc/source/ui/inc/rfindlst.hxx new file mode 100644 index 000000000000..105082ad99e9 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/rfindlst.hxx @@ -0,0 +1,72 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_RFINDLST_HXX +#define SC_RFINDLST_HXX + +#include <tools/color.hxx> + +#include "global.hxx" +namespace binfilter { + +//================================================================== + +struct ScRangeFindData +{ + ScRange aRef; + USHORT nFlags; + xub_StrLen nSelStart; + xub_StrLen nSelEnd; + + ScRangeFindData( const ScRange& rR, USHORT nF, xub_StrLen nS, xub_StrLen nE ) : + aRef(rR), nFlags(nF), nSelStart(nS), nSelEnd(nE) {} +}; + +class ScRangeFindList +{ + List aEntries; + String aDocName; + BOOL bHidden; + +public: + ~ScRangeFindList(); + + ULONG Count() const { return aEntries.Count(); } + ScRangeFindData* GetObject( ULONG nIndex ) const + { return (ScRangeFindData*)aEntries.GetObject(nIndex); } + const String& GetDocName() const { return aDocName; } + BOOL IsHidden() const { return bHidden; } +}; + + + +} //namespace binfilter +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/scsbx.hxx b/binfilter/bf_sc/source/ui/inc/scsbx.hxx new file mode 100644 index 000000000000..02f359f8bd8d --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/scsbx.hxx @@ -0,0 +1,39 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef _SCSBX_HXX +#define _SCSBX_HXX +namespace binfilter { + +#error scsbx.hxx is dead + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/select.hxx b/binfilter/bf_sc/source/ui/inc/select.hxx new file mode 100644 index 000000000000..e57d2eb89e37 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/select.hxx @@ -0,0 +1,124 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_SELECT_HXX +#define SC_SELECT_HXX + +#include <vcl/seleng.hxx> + +#include "viewdata.hxx" // ScSplitPos +namespace binfilter { + +// --------------------------------------------------------------------------- + +class ScTabView; +class ScViewData; + + +class ScViewSelectionEngine : public SelectionEngine +{ +private: + ScSplitPos eWhich; +public: + ScViewSelectionEngine( Window* pWindow, ScTabView* pView, + ScSplitPos eSplitPos ); + + ScSplitPos GetWhich() const { return eWhich; } + void SetWhich(ScSplitPos eNew) { eWhich = eNew; } +}; + + +class ScViewFunctionSet : public FunctionSet // View (Gridwin / Tastatur) +{ +private: + ScViewData* pViewData; + ScViewSelectionEngine* pEngine; + + BOOL bAnchor; + BOOL bStarted; + ScTripel aAnchorPos; + + +public: + ScViewFunctionSet( ScViewData* pNewViewData ); + + void SetSelectionEngine( ScViewSelectionEngine* pSelEngine ); + + + virtual void BeginDrag(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void BeginDrag(); + virtual void CreateAnchor(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void CreateAnchor(); + virtual void DestroyAnchor(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void DestroyAnchor(); + virtual BOOL SetCursorAtPoint( const Point& rPointPixel, BOOL bDontSelectAtCursor = FALSE ){DBG_BF_ASSERT(0, "STRIP");return FALSE;} //STRIP001 virtual BOOL SetCursorAtPoint( const Point& rPointPixel, BOOL bDontSelectAtCursor = FALSE ); + virtual BOOL IsSelectionAtPoint( const Point& rPointPixel ){DBG_BF_ASSERT(0, "STRIP"); return FALSE;} //STRIP001 virtual BOOL IsSelectionAtPoint( const Point& rPointPixel ); + virtual void DeselectAtPoint( const Point& rPointPixel ){DBG_ASSERT(0, "STRIP")}; //STRIP001 virtual void DeselectAtPoint( const Point& rPointPixel ); + virtual void DeselectAll(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void DeselectAll(); + +}; + + +// --------------------------------------------------------------------------- + + +class ScHeaderFunctionSet : public FunctionSet // Spalten- / Zeilenkoepfe +{ +private: + ScViewData* pViewData; + BOOL bColumn; // Col- / Rowbar + ScSplitPos eWhich; + + BOOL bAnchor; + USHORT nCursorPos; + +public: + ScHeaderFunctionSet( ScViewData* pNewViewData ); + + + virtual void BeginDrag(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void BeginDrag(); + virtual void CreateAnchor(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void CreateAnchor(); + virtual void DestroyAnchor(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void DestroyAnchor(); + virtual BOOL SetCursorAtPoint( const Point& rPointPixel, BOOL bDontSelectAtCursor = FALSE ){DBG_BF_ASSERT(0, "STRIP");return FALSE;} //STRIP001 virtual BOOL SetCursorAtPoint( const Point& rPointPixel, BOOL bDontSelectAtCursor = FALSE ); + virtual BOOL IsSelectionAtPoint( const Point& rPointPixel ){DBG_BF_ASSERT(0, "STRIP");return FALSE;}//STRIP001 virtual BOOL IsSelectionAtPoint( const Point& rPointPixel ); + virtual void DeselectAtPoint( const Point& rPointPixel ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void DeselectAtPoint( const Point& rPointPixel ); + virtual void DeselectAll(){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 virtual void DeselectAll(); + + void SetAnchorFlag(BOOL bSet) { bAnchor = bSet; } +}; + + +class ScHeaderSelectionEngine : public SelectionEngine +{ +public: + ScHeaderSelectionEngine( Window* pWindow, ScHeaderFunctionSet* pFuncSet ); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/sizedev.hxx b/binfilter/bf_sc/source/ui/inc/sizedev.hxx new file mode 100644 index 000000000000..ffb8d2a8ce56 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/sizedev.hxx @@ -0,0 +1,59 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_SIZEDEV_HXX +#define SC_SIZEDEV_HXX + +#include <vcl/mapmod.hxx> +class OutputDevice; +namespace binfilter { + +class ScDocShell; + +class ScSizeDeviceProvider +{ + OutputDevice* pDevice; + BOOL bOwner; + double nPPTX; + double nPPTY; + MapMode aOldMapMode; + +public: + ScSizeDeviceProvider( ScDocShell* pDocSh ); + ~ScSizeDeviceProvider(); + + OutputDevice* GetDevice() const { return pDevice; } + double GetPPTX() const { return nPPTX; } + double GetPPTY() const { return nPPTY; } + BOOL IsPrinter() const { return !bOwner; } +}; + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/submenu.hrc b/binfilter/bf_sc/source/ui/inc/submenu.hrc new file mode 100644 index 000000000000..1a77b40842f7 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/submenu.hrc @@ -0,0 +1,68 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +// IDs fuer Untermenues + +// 1 ist nicht erlaubt ???? +#define SUBMENU_EDIT 2 +#define SUBMENU_FILL 3 +#define SUBMENU_DELBREAK 4 +#define SUBMENU_VIEW 5 +#define SUBMENU_INSERT 6 +#define SUBMENU_INSBREAK 7 +#define SUBMENU_NAME 8 +#define SUBMENU_INSOBJ 9 +#define SUBMENU_DATA 10 +#define SUBMENU_FILTER 11 +#define SUBMENU_OUTLINE 12 +#define SUBMENU_PIVOT 13 +#define SUBMENU_EXTRA 14 +#define SUBMENU_AUDIT 15 +#define SUBMENU_PROTECT 16 +#define SUBMENU_ROW 17 +#define SUBMENU_COL 18 +#define SUBMENU_TAB 19 +#define SUBMENU_MERGE 20 +#define SUBMENU_AREA 21 +#define SUBMENU_MIRROR 22 +#define SUBMENU_OBJARRANGE 23 +#define SUBMENU_ANCHOR 24 +#define SUBMENU_POPARRANGE 25 +#define SUBMENU_OLEARRANGE 26 +#define SUBMENU_MAIL 27 +#define SUBMENU_OPTIONS 28 +#define SUBMENU_TOOLBARS 29 +#define SUBMENU_GRAPHIC 30 +#define SUBMENU_SPELLING 31 +#define SUBMENU_CELLCONT 32 +#define SUBMENU_OBJMIRROR 33 +#define SUBMENU_OBJALIGN 34 +#define SUBMENU_OBJANCHOR 35 +#define SUBMENU_SENDTO 36 +#define SUBMENU_CHANGES 37 +#define SUBMENU_EDIT_TABLE 38 +#define MN_TEMPLATES 39 diff --git a/binfilter/bf_sc/source/ui/inc/sumctl.hxx b/binfilter/bf_sc/source/ui/inc/sumctl.hxx new file mode 100644 index 000000000000..90a044857336 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/sumctl.hxx @@ -0,0 +1,36 @@ +/* -*- 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. + * + ************************************************************************/ + +// ist jetzt im SvxPosSizeStatusBarControl + +#error sumctl.hxx wird nicht mehr verwendet! + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/tabcont.hxx b/binfilter/bf_sc/source/ui/inc/tabcont.hxx new file mode 100644 index 000000000000..6b21d6591ff6 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/tabcont.hxx @@ -0,0 +1,29 @@ +/* -*- 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. + * + ************************************************************************/ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/tabsplit.hxx b/binfilter/bf_sc/source/ui/inc/tabsplit.hxx new file mode 100644 index 000000000000..446347dd990e --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/tabsplit.hxx @@ -0,0 +1,60 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TABSPLIT_HXX +#define SC_TABSPLIT_HXX + + +#include <vcl/split.hxx> +namespace binfilter { + +class ScViewData; + +class ScTabSplitter : public Splitter +{ +private: + ScViewData* pViewData; + BOOL bFixed; + +protected: + + +public: + ScTabSplitter( Window* pParent, WinBits nWinStyle, + ScViewData* pData ); + ~ScTabSplitter(); + + void SetFixed(BOOL bSet); +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/tabview.hxx b/binfilter/bf_sc/source/ui/inc/tabview.hxx new file mode 100644 index 000000000000..1c41539cb62b --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/tabview.hxx @@ -0,0 +1,366 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TABVIEW_HXX +#define SC_TABVIEW_HXX + +#include <vcl/scrbar.hxx> + +#include <bf_svx/zoomitem.hxx> + +#include <bf_so3/ipclient.hxx> + +#include "viewutil.hxx" +#include "select.hxx" +class SvBorder; +class Splitter; +namespace binfilter { + +#ifndef SO2_DECL_SVINPLACECLIENT_DEFINED +#define SO2_DECL_SVINPLACECLIENT_DEFINED +SO2_DECL_REF(SvInPlaceClient) +#endif + +class ScEditEngineDefaulter; +class ScGridWindow; +class ScOutlineWindow; +class ScRowBar; +class ScColBar; +class ScTabControl; +class ScTabViewShell; +class SfxPrinter; +class ScDrawView; +class FuPoor; +class ScTabSplitter; +class SdrView; +class SdrObject; +class ScHintWindow; +class ScPageBreakData; +class ScHighlightRanges; +class SchMemChart; +struct ChartSelectionInfo; +class SdrHdlList; + +#define SPLIT_HANDLE_SIZE 3 +#define SC_FORCEMODE_NONE 0xff + +// --------------------------------------------------------------------------- +// Hilfs - Fenster + +class ScCornerButton : public Window +{ +private: + ScViewData* pViewData; + BOOL bAdd; + +protected: + virtual void Resize(); +public: + ScCornerButton( Window* pParent, ScViewData* pData, BOOL bAdditional ); + ~ScCornerButton(); + + virtual void StateChanged( StateChangedType nType ); +}; + + +// --------------------------------------------------------------------------- + +class ScTabView +{ +private: + Window* pFrameWin; // als erstes !!! + ScViewData aViewData; // muss ganz vorne stehen ! + + ScViewSelectionEngine* pSelEngine; + ScViewFunctionSet aFunctionSet; + + ScHeaderSelectionEngine* pHdrSelEng; + ScHeaderFunctionSet aHdrFunc; + + SvInPlaceClientRef aIPClient; + + ScDrawView* pDrawView; + + Size aFrameSize; // wie bei DoResize uebergeben + Point aBorderPos; + + BOOL bDrawSelMode; // nur Zeichenobjekte selektieren ? + + FuPoor* pDrawActual; + FuPoor* pDrawOld; + + ScGridWindow* pGridWin[4]; + ScColBar* pColBar[2]; + ScRowBar* pRowBar[2]; + ScOutlineWindow* pColOutline[2]; + ScOutlineWindow* pRowOutline[2]; + ScTabSplitter* pHSplitter; + ScTabSplitter* pVSplitter; + ScTabControl* pTabControl; + ScrollBar aVScrollTop; + ScrollBar aVScrollBottom; // anfangs sichtbar + ScrollBar aHScrollLeft; // anfangs sichtbar + ScrollBar aHScrollRight; + ScCornerButton aCornerButton; + ScCornerButton aTopButton; + ScrollBarBox aScrollBarBox; + + ScHintWindow* pInputHintWindow; // Eingabemeldung bei Gueltigkeit + + ScPageBreakData* pPageBreakData; // fuer Seitenumbruch-Modus + ScHighlightRanges* pHighlightRanges; + + Timer aScrollTimer; + ScGridWindow* pTimerWindow; + MouseEvent aTimerMEvt; + + ULONG nTipVisible; + + BOOL bDragging; // fuer Scrollbars + long nPrevDragPos; + + BOOL bIsBlockMode; // Block markieren + BOOL bBlockNeg; // wird Markierung aufgehoben? + BOOL bBlockCols; // werden ganze Spalten markiert? + BOOL bBlockRows; // werden ganze Zeilen markiert? + USHORT nBlockStartX; + USHORT nBlockEndX; + USHORT nBlockStartY; + USHORT nBlockEndY; + USHORT nBlockStartZ; + USHORT nBlockEndZ; + + SvxZoomType eZoomType; + BOOL bMinimized; + BOOL bInUpdateHeader; + BOOL bInActivatePart; + BOOL bInZoomUpdate; + BOOL bMoveIsShift; + BOOL bNewStartIfMarking; + + + void Init(); + + + void InitScrollBar( ScrollBar& rScrollBar, long nMaxVal ); + DECL_LINK( ScrollHdl, ScrollBar* ); + DECL_LINK( EndScrollHdl, ScrollBar* ); + + DECL_LINK( SplitHdl, Splitter* ); + + DECL_LINK( TimerHdl, Timer* ); + + void UpdateHeaderWidth( const ScVSplitPos* pWhich = NULL, + const USHORT* pPosY = NULL ); + void UpdateVarZoom(); + +protected: + + void ZoomChanged(); + void UpdateShow(); + void GetBorderSize( SvBorder& rBorder, const Size& rSize ); + + void DrawEnableAnim(BOOL bSet); + + void MakeDrawView( BYTE nForceDesignMode = SC_FORCEMODE_NONE ); + + void HideNoteMarker(); + + +public: + ScTabView( Window* pParent, ScDocShell& rDocSh, ScTabViewShell* pViewShell ); + ScTabView( Window* pParent, const ScTabView& rScTabView, ScTabViewShell* pViewShell ); + ~ScTabView(); + + + void HideListBox(); + + void TestHintWindow(); + + + DECL_LINK( TabBarResize, void* ); + + void DoResize( const Point& rOffset, const Size& rSize, BOOL bInner = FALSE ); + void RepeatResize( BOOL bUpdateFix = TRUE ); + void UpdateFixPos(); + + BOOL IsDrawSelMode() const { return bDrawSelMode; } + void SetDrawSelMode(BOOL bNew) { bDrawSelMode = bNew; } + + void SetDrawFuncPtr(FuPoor* pFuncPtr) { pDrawActual = pFuncPtr; } + void SetDrawFuncOldPtr(FuPoor* pFuncPtr) { pDrawOld = pFuncPtr; } + FuPoor* GetDrawFuncPtr() { return pDrawActual; } + FuPoor* GetDrawFuncOldPtr() { return pDrawOld; } + + + ScPageBreakData* GetPageBreakData() { return pPageBreakData; } + ScHighlightRanges* GetHighlightRanges() { return pHighlightRanges; } + + + + ScViewData* GetViewData() { return &aViewData; } + const ScViewData* GetViewData() const { return &aViewData; } + + ScViewFunctionSet* GetFunctionSet() { return &aFunctionSet; } + ScViewSelectionEngine* GetSelEngine() { return pSelEngine; } + + + ScDrawView* GetScDrawView() { return pDrawView; } + SdrView* GetSdrView(); // gegen CLOKs + + BOOL IsMinimized() const { return bMinimized; } + + void SetZoom( const Fraction& rNewX, const Fraction& rNewY ); + + void UpdateLayerLocks(); + + + void UpdateInputLine(); + + + void StopMarking(); + + Window* GetActiveWin(); + Window* GetWindowByPos( ScSplitPos ePos ); + + + + + + void SetCursor( USHORT nPosX, USHORT nPosY, BOOL bNew = FALSE ); + + + void CheckSelectionTransfer(); + + + + void UpdateAutoFillMark(); + + + void AlignToCursor( short nCurX, short nCurY, ScFollowMode eMode, + const ScSplitPos* pWhich = NULL ); + + SvxZoomType GetZoomType() const { return eZoomType; } + void SetZoomType( SvxZoomType eNew ) { eZoomType = eNew; } + USHORT CalcZoom( SvxZoomType eType, USHORT nOldZoom ){DBG_BF_ASSERT(0, "STRIP"); return 0; } //STRIP001 USHORT CalcZoom( SvxZoomType eType, USHORT nOldZoom ); + +// void CalcZoom( SvxZoomType eType, USHORT& rZoom, USHORT& rCol, USHORT& rRow ); + + + // MoveCursorAbs - absolut + // MoveCursorRel - einzelne Zellen + // MoveCursorPage - Bildschirmseite + // MoveCursorArea - Datenblock + // MoveCursorEnd - links oben / benutzter Bereich + + + + + + void SetTabNo( USHORT nTab, BOOL bNew = FALSE ); + + BOOL IsInActivatePart() const { return bInActivatePart; } + + + void ScrollX( long nDeltaX, ScHSplitPos eWhich, BOOL bUpdBars = TRUE ); + void ScrollY( long nDeltaY, ScVSplitPos eWhich, BOOL bUpdBars = TRUE ); + + + void ScrollToObject( SdrObject* pDrawObj ); + + // Zeichnen + + + + void PaintArea( USHORT nStartCol, USHORT nStartRow, USHORT nEndCol, USHORT nEndRow, + ScUpdateMode eMode = SC_UPDATE_ALL ); + + void PaintGrid(); + + void PaintTopArea( USHORT nStartCol, USHORT nEndCol ); + void PaintTop(); + + void PaintLeftArea( USHORT nStartRow, USHORT nEndRow ); + void PaintLeft(); + + BOOL PaintExtras(); + + + + void UpdateFormulas(); + void InterpretVisible(); + + + + long GetGridWidth( ScHSplitPos eWhich ); + long GetGridHeight( ScVSplitPos eWhich ); + + void UpdateScrollBars(); + void SetNewVisArea(); + + + void KillEditView( BOOL bNoPaint ); + + + // Bloecke + + + void InitOwnBlockMode(); + void DoneBlockMode( BOOL bContinue = FALSE ); + + BOOL IsBlockMode() const { return bIsBlockMode; } + + void MarkMatrixFormula(); + void Unmark(); + + void MarkRange( const ScRange& rRange, BOOL bSetCursor = TRUE, BOOL bContinue = FALSE ); + + + + USHORT GetLockedModifiers() const; + void ViewOptionsHasChanged( BOOL bHScrollChanged, + BOOL bGraphicsChanged = FALSE); + + + void FreezeSplitters( BOOL bFreeze ); + void RemoveSplit(); + void SplitAtPixel( const Point& rPixel, BOOL bHor, BOOL bVer ); + void InvalidateSplit(); + + void ErrorMessage( USHORT nGlobStrId ); + + + Window* GetFrameWin() const { return pFrameWin; } +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/target.hxx b/binfilter/bf_sc/source/ui/inc/target.hxx new file mode 100644 index 000000000000..81a40f26c8d2 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/target.hxx @@ -0,0 +1,56 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TARGET_HXX +#define SC_TARGET_HXX + +#include <bf_svtools/undo.hxx> +namespace binfilter { + +class ScTabViewShell; + +class ScTabViewTarget : public SfxRepeatTarget +{ +private: + ScTabViewShell* pViewShell; + +public: + TYPEINFO(); + + ScTabViewTarget( ScTabViewShell* pShell ) : pViewShell( pShell ) {} + virtual ~ScTabViewTarget(); + + ScTabViewShell* GetViewShell() const { return pViewShell; } +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/tbinsert.hrc b/binfilter/bf_sc/source/ui/inc/tbinsert.hrc new file mode 100644 index 000000000000..b80e6fb5863b --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/tbinsert.hrc @@ -0,0 +1,32 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#define RID_TOOLBOX_INSERT 1 +#define RID_TOOLBOX_INSCELLS 2 +#define RID_TOOLBOX_INSOBJ 3 + + diff --git a/binfilter/bf_sc/source/ui/inc/tbinsert.hxx b/binfilter/bf_sc/source/ui/inc/tbinsert.hxx new file mode 100644 index 000000000000..54bc278f0c14 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/tbinsert.hxx @@ -0,0 +1,67 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TBINSERT_HXX +#define SC_TBINSERT_HXX + +#include <bf_sfx2/tbxctrl.hxx> + +#include <bf_sfx2/tbxmgr.hxx> +namespace binfilter { + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + +class ScTbxInsertCtrl : public SfxToolBoxControl +{ + USHORT nLastSlotId; + + +public: + SFX_DECL_TOOLBOX_CONTROL(); + + ScTbxInsertCtrl( USHORT nId, ToolBox& rTbx, SfxBindings& rBind ); + ~ScTbxInsertCtrl(); + + virtual void StateChanged( USHORT nSID, + SfxItemState eState, + const SfxPoolItem* pState ); +}; + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/teamdlg.hxx b/binfilter/bf_sc/source/ui/inc/teamdlg.hxx new file mode 100644 index 000000000000..bb69e32bab98 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/teamdlg.hxx @@ -0,0 +1,58 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TEAMDLG_HXX +#define SC_TEAMDLG_HXX + + +#include <vcl/floatwin.hxx> + +#include <vcl/fixed.hxx> +namespace binfilter { + + +//======================================================================== + +class ScTeamDlg : public FloatingWindow +{ +public: + ScTeamDlg( Window* pParent ); + ~ScTeamDlg(); + + virtual BOOL Close(); + void Center(); + +private: + FixedBitmap aBmpTeam; +}; + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/template.hxx b/binfilter/bf_sc/source/ui/inc/template.hxx new file mode 100644 index 000000000000..d38211324da6 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/template.hxx @@ -0,0 +1,39 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TEMPLATE_HXX +#define SC_TEMPLATE_HXX +namespace binfilter { + +#error template.hxx gibt's nicht mehr! + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/tpcalc.hxx b/binfilter/bf_sc/source/ui/inc/tpcalc.hxx new file mode 100644 index 000000000000..f5ec805b379e --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/tpcalc.hxx @@ -0,0 +1,49 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TPCALC_HXX +#define SC_TPCALC_HXX + + + + + + +namespace binfilter { + + +//=================================================================== + +class ScDocOptions; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/tphf.hxx b/binfilter/bf_sc/source/ui/inc/tphf.hxx new file mode 100644 index 000000000000..1a4034a6c49e --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/tphf.hxx @@ -0,0 +1,103 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TPHF_HXX +#define SC_TPHF_HXX + + +#include <bf_svx/hdft2.hxx> +namespace binfilter { + +class ScStyleDlg; + +//======================================================================== + +class ScHFPage : public SvxHFPage +{ +public: + virtual ~ScHFPage(); + + virtual void Reset( const SfxItemSet& rSet ); + virtual BOOL FillItemSet( SfxItemSet& rOutSet ); + + void SetPageStyle( const String& rName ) { aStrPageStyle = rName; } + void SetStyleDlg ( const ScStyleDlg* pDlg ) { pStyleDlg = pDlg; } + +protected: + ScHFPage( Window* pParent, + USHORT nResId, + const SfxItemSet& rSet, + USHORT nSetId ); + + virtual void ActivatePage( const SfxItemSet& rSet ); + virtual int DeactivatePage( SfxItemSet* pSet = 0 ); + +private: + PushButton aBtnEdit; + SfxItemSet aDataSet; + String aStrPageStyle; + USHORT nPageUsage; + const ScStyleDlg* pStyleDlg; + +#ifdef _TPHF_CXX +private: + DECL_LINK( BtnHdl, PushButton* ); + DECL_LINK( HFEditHdl, void* ); + DECL_LINK( TurnOnHdl, CheckBox* ); +#endif +}; + +//======================================================================== + +class ScHeaderPage : public ScHFPage +{ +public: + static SfxTabPage* Create( Window* pParent, const SfxItemSet& rSet ); + static USHORT* GetRanges(); + +private: + ScHeaderPage( Window* pParent, const SfxItemSet& rSet ); +}; + +//======================================================================== + +class ScFooterPage : public ScHFPage +{ +public: + static SfxTabPage* Create( Window* pParent, const SfxItemSet& rSet ); + static USHORT* GetRanges(); + +private: + ScFooterPage( Window* pParent, const SfxItemSet& rSet ); +}; + + +} //namespace binfilter +#endif // SC_TPHF_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/tphfedit.hxx b/binfilter/bf_sc/source/ui/inc/tphfedit.hxx new file mode 100644 index 000000000000..5f1de613fa4b --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/tphfedit.hxx @@ -0,0 +1,238 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TPHFEDIT_HXX +#define SC_TPHFEDIT_HXX + +#include <bf_svx/pageitem.hxx> + +#include <bf_svtools/stdctrl.hxx> + +#include <vcl/group.hxx> + +#include "scitems.hxx" // wegen enum SvxNumType + +#include <vcl/timer.hxx> + +#include <vcl/virdev.hxx> + +#include <popmenu.hxx> + +#include <com/sun/star/accessibility/XAccessible.hpp> +#include <cppuhelper/weakref.hxx> +namespace binfilter { + +//=================================================================== + +class ScHeaderEditEngine; +class ScPatternAttr; +class EditView; +class EditTextObject; +class SvxFieldItem; +class ScAccessibleEditObject; + +enum ScEditWindowLocation +{ + Left, + Center, + Right +}; + +class ScEditWindow : public Control +{ +public: + ScEditWindow( Window* pParent, const ResId& rResId, ScEditWindowLocation eLoc ); + ~ScEditWindow(); + + void SetFont( const ScPatternAttr& rPattern ); + void SetText( const EditTextObject& rTextObject ); + EditTextObject* CreateTextObject(); + void SetCharAttriutes(); + + void InsertField( const SvxFieldItem& rFld ); + + void SetNumType(SvxNumType eNumType); + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible(); + +protected: + virtual void Paint( const Rectangle& rRec ); + virtual void MouseMove( const MouseEvent& rMEvt ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void MouseButtonUp( const MouseEvent& rMEvt ); + virtual void KeyInput( const KeyEvent& rKEvt ); + virtual void Command( const CommandEvent& rCEvt ); + virtual void GetFocus(); + virtual void LoseFocus(); + +private: + ScHeaderEditEngine* pEdEngine; + EditView* pEdView; + ScEditWindowLocation eLocation; + + ::com::sun::star::uno::WeakReference< ::com::sun::star::accessibility::XAccessible > xAcc; + ScAccessibleEditObject* pAcc; +}; + +//=================================================================== +class ScExtIButton : public ImageButton +{ +private: + + Timer aTimer; + ScPopupMenu* pPopupMenu; + Link aMLink; + USHORT nSelected; + + DECL_LINK( TimerHdl, Timer*); + +// void DrawArrow(); + +protected: + + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void MouseButtonUp( const MouseEvent& rMEvt); + virtual void Click(); + + virtual void StartPopup(); + +public: + + ScExtIButton(Window* pParent, const ResId& rResId ); + + void SetPopupMenu(ScPopupMenu* pPopUp); + + USHORT GetSelected(); + + void SetMenuHdl( const Link& rLink ) { aMLink = rLink; } + const Link& GetMenuHdl() const { return aMLink; } + + virtual long PreNotify( NotifyEvent& rNEvt ); +}; + + +//=================================================================== + +class ScHFEditPage : public SfxTabPage +{ +public: + virtual BOOL FillItemSet ( SfxItemSet& rCoreSet ); + virtual void Reset ( const SfxItemSet& rCoreSet ); + + void SetNumType(SvxNumType eNumType); + +protected: + ScHFEditPage( Window* pParent, + USHORT nResId, + const SfxItemSet& rCoreSet, + USHORT nWhich ); + virtual ~ScHFEditPage(); + +private: + FixedText aFtLeft; + ScEditWindow aWndLeft; + FixedText aFtCenter; + ScEditWindow aWndCenter; + FixedText aFtRight; + ScEditWindow aWndRight; + ImageButton aBtnText; + ScExtIButton aBtnFile; + ImageButton aBtnTable; + ImageButton aBtnPage; + ImageButton aBtnLastPage; + ImageButton aBtnDate; + ImageButton aBtnTime; + FixedLine aFlInfo; + FixedInfo aFtInfo; + ScPopupMenu aPopUpFile; + + USHORT nWhich; + String aCmdArr[6]; + +private: +#ifdef _TPHFEDIT_CXX + void FillCmdArr(); + DECL_LINK( ClickHdl, ImageButton* ); + DECL_LINK( MenuHdl, ScExtIButton* ); +#endif +}; + +//=================================================================== + +class ScRightHeaderEditPage : public ScHFEditPage +{ +public: + static SfxTabPage* Create( Window* pParent, const SfxItemSet& rCoreSet ); + static USHORT* GetRanges(); + +private: + ScRightHeaderEditPage( Window* pParent, const SfxItemSet& rSet ); +}; + +//=================================================================== + +class ScLeftHeaderEditPage : public ScHFEditPage +{ +public: + static SfxTabPage* Create( Window* pParent, const SfxItemSet& rCoreSet ); + static USHORT* GetRanges(); + +private: + ScLeftHeaderEditPage( Window* pParent, const SfxItemSet& rSet ); +}; + +//=================================================================== + +class ScRightFooterEditPage : public ScHFEditPage +{ +public: + static SfxTabPage* Create( Window* pParent, const SfxItemSet& rCoreSet ); + static USHORT* GetRanges(); + +private: + ScRightFooterEditPage( Window* pParent, const SfxItemSet& rSet ); +}; + +//=================================================================== + +class ScLeftFooterEditPage : public ScHFEditPage +{ +public: + static SfxTabPage* Create( Window* pParent, const SfxItemSet& rCoreSet ); + static USHORT* GetRanges(); + +private: + ScLeftFooterEditPage( Window* pParent, const SfxItemSet& rSet ); +}; + + + +} //namespace binfilter +#endif // SC_TPHFEDIT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/tpprint.hxx b/binfilter/bf_sc/source/ui/inc/tpprint.hxx new file mode 100644 index 000000000000..dd725a3a2c06 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/tpprint.hxx @@ -0,0 +1,41 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TPPRINT_HXX +#define SC_TPPRINT_HXX + + +namespace binfilter { + +//=================================================================== + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/tptable.hxx b/binfilter/bf_sc/source/ui/inc/tptable.hxx new file mode 100644 index 000000000000..dd8bffefb0d8 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/tptable.hxx @@ -0,0 +1,100 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TPTABLE_HXX +#define SC_TPTABLE_HXX + +#include <vcl/fixed.hxx> + +#include <vcl/field.hxx> +namespace binfilter { + +//=================================================================== + +class ScTablePage : public SfxTabPage +{ +public: + static SfxTabPage* Create ( Window* pParent, + const SfxItemSet& rCoreSet ); + static USHORT* GetRanges (); + virtual BOOL FillItemSet ( SfxItemSet& rCoreSet ); + virtual void Reset ( const SfxItemSet& rCoreSet ); + virtual int DeactivatePage ( SfxItemSet* pSet = NULL ); + virtual void DataChanged ( const DataChangedEvent& rDCEvt ); + +private: + ScTablePage( Window* pParent, + const SfxItemSet& rCoreSet ); + ~ScTablePage(); + + void ShowImage(); + +private: + FixedLine aFlPageDir; + RadioButton aBtnTopDown; + RadioButton aBtnLeftRight; + FixedImage aBmpPageDir; + Image aImgLeftRight; + Image aImgTopDown; + Image aImgLeftRightHC; + Image aImgTopDownHC; + CheckBox aBtnPageNo; + NumericField aEdPageNo; + + FixedLine aFlPrint; + CheckBox aBtnHeaders; + CheckBox aBtnGrid; + CheckBox aBtnNotes; + CheckBox aBtnObjects; + CheckBox aBtnCharts; + CheckBox aBtnDrawings; + CheckBox aBtnFormulas; + CheckBox aBtnNullVals; + + FixedLine aFlScale; + RadioButton aBtnScaleAll; + RadioButton aBtnScalePageNum; + MetricField aEdScaleAll; + NumericField aEdScalePageNum; + +#ifdef _TPTABLE_CXX +private: + //------------------------------------ + // Handler: + DECL_LINK( ScaleHdl, RadioButton* ); + DECL_LINK( PageDirHdl, RadioButton* ); + DECL_LINK( PageNoHdl, CheckBox* ); +#endif +}; + + + +} //namespace binfilter +#endif // SC_TPTABLE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/tpusrlst.hxx b/binfilter/bf_sc/source/ui/inc/tpusrlst.hxx new file mode 100644 index 000000000000..d81e507cc86c --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/tpusrlst.hxx @@ -0,0 +1,53 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_TPUSRLST_HXX +#define SC_TPUSRLST_HXX + + + + +namespace binfilter { + +#define SC_MAXFIELDS 200 + +//======================================================================== +// Benutzerdefinierte Listen: + +class ScUserList; +class ScDocument; +class ScViewData; +class ScRangeUtil; + + + + +} //namespace binfilter +#endif // SC_TPUSRLST_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/ui_pch.hxx b/binfilter/bf_sc/source/ui/inc/ui_pch.hxx new file mode 100644 index 000000000000..17b7b3325a29 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/ui_pch.hxx @@ -0,0 +1,352 @@ +/* -*- 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. + * + ************************************************************************/ + +// ItemID-Defines etc. muessen immer ganz vorne stehen + +#include "scitems.hxx" +#include "eetext.hxx" + +#define ITEMID_FIELD EE_FEATURE_FIELD + +#define _ZFORLIST_DECLARE_TABLE + +#define _PRINTFUN_CXX +#define _INPUTHDL_CXX + +// ab hier automatisch per makepch generiert +// folgende duerfen nicht aufgenommen werden: +// scslots.hxx + +#include <tools/solar.h> +#include <tools/string.hxx> +#include <bf_svtools/solar.hrc> +#include <tools/rtti.hxx> +#include <string.h> +#include <tools/contnr.hxx> +#include <vcl/sv.h> +#include <tools/ref.hxx> +#include <tools/list.hxx> +#include <tools/link.hxx> +#include <tools/lang.hxx> +#include <bf_sfx2/sfx.hrc> +#include <bf_svtools/memberid.hrc> +#include <bf_sfx2/sfxsids.hrc> +#include <bf_svtools/cntwids.hrc> +#include <tools/resid.hxx> +#include <tools/rc.hxx> +#include <tools/resmgr.hxx> +#include <tools/gen.hxx> +#include <tools/fract.hxx> +#include <tools/date.hxx> +#include <tools/time.hxx> +#include <vcl/keycod.hxx> +#include <vcl/keycodes.hxx> +#include <tools/globname.hxx> +#include <tools/color.hxx> +#include <vcl/region.hxx> +#include <vcl/mapmod.hxx> +#include <vcl/bitmap.hxx> +#include <sot/sotref.hxx> +#include <bf_svx/svxids.hrc> +#include <vcl/vclenum.hxx> +#include <sot/object.hxx> +#include <sot/sotdata.hxx> +#include <sot/factory.hxx> +#include <tools/ownlist.hxx> +#include <vcl/font.hxx> +#include <vcl/wall.hxx> +#include <vcl/settings.hxx> +#include <vcl/accel.hxx> +#include <vcl/outdev.hxx> +#include <vcl/pointr.hxx> +#include <vcl/ptrstyle.hxx> +#include <vcl/wintypes.hxx> +#include <vcl/event.hxx> +#include <limits.h> +#include <tools/errinf.hxx> +#include <tools/errcode.hxx> +#include <tools/stream.hxx> +#include <vcl/window.hxx> +#include <global.hxx> +#include <vcl/syswin.hxx> +#include <tools/debug.hxx> +#include <bf_svtools/svarray.hxx> +#include <vcl/ctrl.hxx> +#include <bf_svtools/hint.hxx> +#include <bf_svtools/poolitem.hxx> +#include <bf_svtools/args.hxx> +#include <vcl/image.hxx> +#include <vcl/timer.hxx> +#include <tools/unqidx.hxx> +#include <vcl/symbol.hxx> +#include <vcl/fixed.hxx> +#include <bf_svtools/brdcst.hxx> +#include <vcl/timer.hxx> +#include <sc.hrc> +#include <stdarg.h> +#include <bf_svx/dialogs.hrc> +#include "bf_basic/sbxdef.hxx" +#include <bf_svtools/lstner.hxx> +#include <bf_sfx2/shell.hxx> +#include <vcl/window.hxx> +#include <vcl/group.hxx> +#include <tools/unqid.hxx> +#include <tools/table.hxx> +#include <bf_svtools/itemset.hxx> +#include <vcl/dialog.hxx> +#include <vcl/button.hxx> +#include <rangelst.hxx> +#include <vcl/edit.hxx> +#include <vcl/combobox.h> +#include <tools/shl.hxx> +#include <vcl/field.hxx> +#include <vcl/spinfld.hxx> +#include <vcl/combobox.hxx> +#include <tools/pstm.hxx> +#include <bf_svtools/eitem.hxx> +#include <bf_svtools/itempool.hxx> +#include <bf_so3/so2ref.hxx> +#include <vcl/tabdlg.hxx> +#include <vcl/tabpage.hxx> +#include <vcl/tabctrl.hxx> +#include <shellids.hxx> +#include <vcl/event.hxx> +#include <bf_so3/advise.hxx> +#include <bf_so3/protocol.hxx> +#include <bf_svtools/intitem.hxx> +#include <bf_so3/ipclient.hxx> +#include <bf_sfx2/cfgitem.hxx> +#include <bf_svtools/confitem.hxx> +#include <markdata.hxx> +#include <bf_svx/optgrid.hxx> +#include <vcl/apptypes.hxx> +#include <viewopti.hxx> +#include <viewdata.hxx> +#include <bf_sfx2/viewsh.hxx> +#include <bf_sfx2/clientsh.hxx> +#include <document.hxx> +#include <vcl/prntypes.hxx> +#include <table.hxx> +#include <column.hxx> +#include <markarr.hxx> +#include <vcl/mapmod.hxx> +#include <bf_svtools/undo.hxx> +#include <vcl/seleng.hxx> +#include <rsc/rscsfx.hxx> +#include <bf_svx/zoomitem.hxx> +#include <vcl/scrbar.hxx> +#include <viewutil.hxx> +#include <vcl/svapp.hxx> +#include <tools/datetime.hxx> +#include <tabview.hxx> +#include <select.hxx> +#include <bf_sfx2/imgdef.hxx> +#include <viewfunc.hxx> +#include <bf_sfx2/module.hxx> +#include <dbfunc.hxx> +#include <vcl/accel.hxx> +#include <bf_svtools/smplhint.hxx> +#include <bf_sfx2/viewfac.hxx> +#include <bf_so3/svstor.hxx> +#include <bf_sfx2/objsh.hxx> +#include <bf_so3/so2defs.hxx> +#include <bf_so3/persist.hxx> +#include <target.hxx> +#include <tabvwsh.hxx> +#include <bf_svtools/inethist.hxx> +#include <bf_svtools/inetdef.hxx> +#include <bf_sfx2/sfxdefs.hxx> +#include <bf_svtools/cancel.hxx> +#include <bf_svtools/inetmsg.hxx> +#include <bf_sfx2/app.hxx> +#include <tools/urlobj.hxx> +#include <scdll.hxx> +#include <bf_sfx2/msg.hxx> +#include <bf_svtools/ownlist.hxx> +#include <bf_so3/persist.hxx> +#include <bf_so3/pseudo.hxx> +#include <bf_sfx2/objface.hxx> +#include <bf_sfx2/viewfrm.hxx> +#include <bf_sfx2/frame.hxx> +#include <bf_so3/ipobj.hxx> +#include <bf_so3/embobj.hxx> +#include <bf_so3/ipobj.hxx> +#include <scresid.hxx> +#include <docsh.hxx> +#include <bf_sfx2/interno.hxx> +#include <vcl/wintypes.hxx> +#include <bf_sfx2/docfac.hxx> +#include <scitems.hxx> +#include <vcl/virdev.hxx> +#include <globstr.hrc> +#include <tcov.hxx> +#include <vcl/dialog.hxx> +#include <vcl/gdimtf.hxx> +#include <vcl/lstbox.h> +#include <bf_sfx2/minarray.hxx> +#include <bf_sfx2/bindings.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/pointr.hxx> +#include <vcl/prntypes.hxx> +#include <vcl/jobset.hxx> +#include <bf_svx/svdtypes.hxx> +#include <vcl/btndlg.hxx> +#include <vcl/svapp.hxx> +#include <bf_svtools/svstdarr.hxx> +#include <vcl/edit.hxx> +#include <bf_svtools/stritem.hxx> +#include <collect.hxx> +#include <bf_svx/svdsob.hxx> +#include <vcl/imagebtn.hxx> +#include <bf_svx/svdobj.hxx> +#include <bf_svx/svdglue.hxx> +#include <bf_svx/svdlayer.hxx> +#include <vcl/msgbox.hxx> +#include <bf_svx/svdmrkv.hxx> +#include <bf_svx/svdmark.hxx> +#include <bf_svx/svdhdl.hxx> +#include <bf_svx/svdsnpv.hxx> +#include <bf_svx/svdpntv.hxx> +#include <bf_svx/svddrag.hxx> +#include <bf_svx/svdhlpln.hxx> +#include <scmod.hxx> +#include <bf_sfx2/request.hxx> +#include <vcl/field.hxx> +#include <bf_svx/svdview.hxx> +#include <bf_svx/svdcrtv.hxx> +#include <vcl/print.hxx> +#include <vcl/floatwin.hxx> +#include <vcl/wrkwin.hxx> +#include <bf_sfx2/childwin.hxx> +#include <bf_sfx2/chalign.hxx> +#include <bf_sfx2/dispatch.hxx> +#include <vcl/graph.hxx> +#include <vcl/bitmapex.hxx> +#include <vcl/animate.hxx> +#include <vcl/graph.h> +#include <bf_svx/editdata.hxx> +#include <bf_svtools/stdctrl.hxx> +#include <bf_sfx2/basedlgs.hxx> +#include <conditio.hxx> +#include <vcl/combobox.hxx> +#include <vcl/print.hxx> +#include <uiitems.hxx> +#include <bf_svx/svdmodel.hxx> +#include <bf_svx/editeng.hxx> +#include <bf_svx/pageitem.hxx> +#include <anyrefdg.hxx> +#include "bf_basic/sbxcore.hxx" +#include <vcl/ctrl.hxx> +#include <bf_svx/xenum.hxx> +#include <dbcolect.hxx> +#include <sot/exchange.hxx> +#include <math.h> +#include <vcl/wrkwin.hxx> +#include "bf_basic/sbxvar.hxx" +#include <vcl/image.hxx> +#include <bf_svx/xdef.hxx> +#include <drwlayer.hxx> +#include <editutil.hxx> +#include <bf_svx/xit.hxx> +#include <bf_svx/xcolit.hxx> +#include <attrib.hxx> +#include <patattr.hxx> +#include <bf_svx/xfillit0.hxx> +#include <bf_svx/xlineit0.hxx> +#include <bf_svx/xflasit.hxx> +#include <bf_svx/xlnasit.hxx> +#include <bf_svx/svdattr.hxx> +#include <bf_svx/sdangitm.hxx> +#include <bf_svx/sderitm.hxx> +#include <bf_svx/sdmetitm.hxx> +#include <bf_svx/svddef.hxx> +#include <bf_svx/sdmsitm.hxx> +#include <bf_svx/sdolsitm.hxx> +#include <bf_svx/sdooitm.hxx> +#include <bf_svx/sdprcitm.hxx> +#include <bf_svx/sdshcitm.hxx> +#include <bf_svx/sdshitm.hxx> +#include <bf_svx/sdshsitm.hxx> +#include <bf_svx/sdshtitm.hxx> +#include <bf_svx/sdsxyitm.hxx> +#include <bf_svx/sdtaaitm.hxx> +#include <bf_svx/sdtacitm.hxx> +#include <bf_svx/sdtaditm.hxx> +#include <bf_svx/sdtagitm.hxx> +#include <bf_svx/sdtaiitm.hxx> +#include <bf_svx/sdynitm.hxx> +#include <bf_svx/sdtaitm.hxx> +#include <bf_svx/sdtakitm.hxx> +#include <bf_svx/sdtayitm.hxx> +#include <bf_svx/sdtcfitm.hxx> +#include <bf_svx/sdtditm.hxx> +#include <bf_svx/sdtfsitm.hxx> +#include <bf_svx/sdtmfitm.hxx> +#include <tools/poly.hxx> +#include <vcl/gdimtf.hxx> +#include <cell.hxx> +#include <stddef.h> +#include <tools/mempool.hxx> +#include <bf_svtools/style.hrc> +#include <drawview.hxx> +#include <bf_svx/view3d.hxx> +#include <bf_svx/def3d.hxx> +#include <bf_goodies/vector3d.hxx> +#include <vcl/floatwin.hxx> +#include "bf_basic/sbxobj.hxx" +#include <bf_svx/svxenum.hxx> +#include <bf_svx/xtextit0.hxx> +#include <bf_svx/svdtrans.hxx> +#include <bf_svx/xtxasit.hxx> +#include <bf_svtools/style.hxx> +#include <reffact.hxx> +#include <bf_svx/svdotext.hxx> +#include <bf_svx/svdoattr.hxx> +#include <tools/wldcrd.hxx> +#include <rangenam.hxx> +#include <undobase.hxx> +#include <vcl/dockwin.hxx> +#include <vcl/virdev.hxx> +#include <bf_so3/so2defs.hxx> +#include <rangeutl.hxx> +#include <vcl/toolbox.hxx> +#include <fupoor.hxx> +#include <docpool.hxx> +#include <vcl/button.hxx> +#include <bf_svx/srchitem.hxx> +#include <bf_svx/svdorect.hxx> +#include <bf_svtools/whiter.hxx> +#include <stlpool.hxx> +#include <bf_svx/eeitem.hxx> +#include <inputhdl.hxx> +#include <bf_svx/svdpage.hxx> + + + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/uiitems.hxx b/binfilter/bf_sc/source/ui/inc/uiitems.hxx new file mode 100644 index 000000000000..112c3f443b8d --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/uiitems.hxx @@ -0,0 +1,284 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_UIITEMS_HXX +#define SC_UIITEMS_HXX + +#include "conditio.hxx" +#include "sortparam.hxx" + +#include <bf_svtools/poolitem.hxx> +namespace binfilter { + +class ScEditEngineDefaulter; +class EditTextObject; +class ScViewData; +class ScDPSaveData; + +// --------------------------------------------------------------------------- + +// Items + + + +#define SC_TAB_INSERTED 1 +#define SC_TAB_DELETED 2 +#define SC_TAB_MOVED 3 +#define SC_TAB_COPIED 4 +#define SC_TAB_HIDDEN 5 + +class ScTablesHint : public SfxHint +{ + USHORT nId; + USHORT nTab1; + USHORT nTab2; + +public: + TYPEINFO(); + ScTablesHint(USHORT nNewId, USHORT nTable1, USHORT nTable2=0); + ~ScTablesHint(); + + USHORT GetId() const { return nId; } + USHORT GetTab1() const { return nTab1; } + USHORT GetTab2() const { return nTab2; } +}; + +class ScEditViewHint : public SfxHint +{ + ScEditEngineDefaulter* pEditEngine; + ScAddress aCursorPos; + +public: + TYPEINFO(); + ~ScEditViewHint(); + + USHORT GetCol() const { return aCursorPos.Col(); } + USHORT GetRow() const { return aCursorPos.Row(); } + USHORT GetTab() const { return aCursorPos.Tab(); } + ScEditEngineDefaulter* GetEngine() const { return pEditEngine; } +}; + +class ScIndexHint : public SfxHint +{ + USHORT nId; + USHORT nIndex; + +public: + TYPEINFO(); + ~ScIndexHint(); + + USHORT GetId() const { return nId; } + USHORT GetIndex() const { return nIndex; } +}; + +//---------------------------------------------------------------------------- +// Parameter-Item fuer den Sortierdialog: + +class ScSortItem : public SfxPoolItem +{ +public: + TYPEINFO(); + ScSortItem( USHORT nWhich, + const ScSortParam* pSortData ); + ScSortItem( const ScSortItem& rItem ); + ~ScSortItem(); + + virtual int operator==( const SfxPoolItem& ) const{DBG_BF_ASSERT(0, "STRIP");return 0;}; //STRIP001 virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const{DBG_BF_ASSERT(0, "STRIP");return NULL;}; //STRIP001 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + ScViewData* GetViewData () const { return pViewData; } + +private: + ScViewData* pViewData; + ScSortParam theSortData; +}; + +//---------------------------------------------------------------------------- +// Parameter-Item fuer den Filterdialog: + +class ScQueryItem : public SfxPoolItem +{ +public: + TYPEINFO(); + ScQueryItem( USHORT nWhich, + ScViewData* ptrViewData, + const ScQueryParam* pQueryData ); + ScQueryItem( const ScQueryItem& rItem ); + ~ScQueryItem(); + + virtual int operator==( const SfxPoolItem& ) const{DBG_BF_ASSERT(0, "STRIP");return 0;}; //STRIP001 virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const{DBG_BF_ASSERT(0, "STRIP"); return NULL;}; //STRIP001 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + ScViewData* GetViewData () const { return pViewData; } + + +private: + ScViewData* pViewData; + ScQueryParam theQueryData; + BOOL bIsAdvanced; + ScRange aAdvSource; +}; + +//---------------------------------------------------------------------------- +// Parameter-Item fuer den Zwischenergebnisdialog: + +class ScSubTotalItem : public SfxPoolItem +{ +public: + TYPEINFO(); + ScSubTotalItem( USHORT nWhich, + ScViewData* ptrViewData, + const ScSubTotalParam* pSubTotalData ); + ScSubTotalItem( const ScSubTotalItem& rItem ); + ~ScSubTotalItem(); + + virtual int operator==( const SfxPoolItem& ) const{DBG_BF_ASSERT(0, "STRIP"); return 0;}; //STRIP001 virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const{DBG_BF_ASSERT(0, "STRIP"); return NULL;}; //STRIP001 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + ScViewData* GetViewData () const { return pViewData; } + const ScSubTotalParam& GetSubTotalData() const { return theSubTotalData; } + +private: + ScViewData* pViewData; + ScSubTotalParam theSubTotalData; +}; + +//---------------------------------------------------------------------------- +// Parameter-Item fuer die Benutzerlisten-TabPage: + +class ScUserListItem : public SfxPoolItem +{ +public: + TYPEINFO(); + ScUserListItem( USHORT nWhich ); + ScUserListItem( const ScUserListItem& rItem ); + ~ScUserListItem(); + + virtual int operator==( const SfxPoolItem& ) const{DBG_BF_ASSERT(0, "STRIP");return 0;}; //STRIP001 virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const{DBG_BF_ASSERT(0, "STRIP"); return NULL;}; //STRIP001 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + +private: + ScUserList* pUserList; +}; + +//---------------------------------------------------------------------------- +// Parameter-Item fuer die Konsolidieren-Dialog + +class ScConsolidateItem : public SfxPoolItem +{ +public: + TYPEINFO(); + ScConsolidateItem( USHORT nWhich, + const ScConsolidateParam* pParam ); + ScConsolidateItem( const ScConsolidateItem& rItem ); + ~ScConsolidateItem(); + + virtual int operator==( const SfxPoolItem& ) const{DBG_BF_ASSERT(0, "STRIP"); return 0;}; //STRIP001 virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const{DBG_BF_ASSERT(0, "STRIP"); return NULL;}; //STRIP001 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + +private: + ScConsolidateParam theConsData; +}; + +//---------------------------------------------------------------------------- +// Parameter-Item fuer den Pivot-Dialog + +class ScPivotItem : public SfxPoolItem +{ +public: + TYPEINFO(); + ScPivotItem( USHORT nWhich, const ScDPSaveData* pData, + const ScRange* pRange, BOOL bNew ); + ScPivotItem( const ScPivotItem& rItem ); + ~ScPivotItem(); + + virtual int operator==( const SfxPoolItem& ) const{DBG_BF_ASSERT(0, "STRIP");return 0;}; //STRIP001 virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const{DBG_BF_ASSERT(0, "STRIP");return NULL;}; //STRIP001 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + +private: + ScDPSaveData* pSaveData; + ScRange aDestRange; + BOOL bNewSheet; +}; + +//---------------------------------------------------------------------------- +// Parameter-Item fuer den Solver-Dialog + +class ScSolveItem : public SfxPoolItem +{ +public: + TYPEINFO(); + ScSolveItem( USHORT nWhich, + const ScSolveParam* pParam ); + ScSolveItem( const ScSolveItem& rItem ); + ~ScSolveItem(); + + virtual int operator==( const SfxPoolItem& ) const{DBG_BF_ASSERT(0, "STRIP");return 0;}; //STRIP001 virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const{DBG_BF_ASSERT(0, "STRIP"); return NULL;}; //STRIP001 virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + +private: + ScSolveParam theSolveData; +}; + +//---------------------------------------------------------------------------- +// Parameter-Item fuer den Mehrfachoperationen-Dialog + + +//---------------------------------------------------------------------------- +// Parameter-Item fuer den Dialog bedingte Formatierung + +class ScCondFrmtItem : public SfxPoolItem +{ +public: + TYPEINFO(); + ScCondFrmtItem( USHORT nWhich, +//! const ScConditionalFormat* pCondFrmt ); + const ScConditionalFormat& rCondFrmt ); + ScCondFrmtItem( const ScCondFrmtItem& rItem ); + ~ScCondFrmtItem(); + + virtual String GetValueText() const; + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + const ScConditionalFormat& GetData() const { return theCondFrmtData; } + +private: + ScConditionalFormat theCondFrmtData; +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/undobase.hxx b/binfilter/bf_sc/source/ui/inc/undobase.hxx new file mode 100644 index 000000000000..60a010ae7190 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/undobase.hxx @@ -0,0 +1,112 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_UNDOBASE_HXX +#define SC_UNDOBASE_HXX + +#include <bf_svtools/undo.hxx> + +#include "global.hxx" +namespace binfilter { + +class ScDocument; +class ScDocShell; +class SdrUndoAction; +class ScRefUndoData; + +//---------------------------------------------------------------------------- + +class ScSimpleUndo: public SfxUndoAction +{ +public: + ScSimpleUndo( ScDocShell* pDocSh ); + virtual ~ScSimpleUndo(); + + virtual BOOL Merge( SfxUndoAction *pNextAction ); + +protected: + ScDocShell* pDocShell; + SfxUndoAction* pDetectiveUndo; + +}; + +//---------------------------------------------------------------------------- + +enum ScBlockUndoMode { SC_UNDO_SIMPLE, SC_UNDO_MANUALHEIGHT, SC_UNDO_AUTOHEIGHT }; + +class ScBlockUndo: public ScSimpleUndo +{ +public: + ScBlockUndo( ScDocShell* pDocSh, const ScRange& rRange, + ScBlockUndoMode eBlockMode ); + virtual ~ScBlockUndo(); + +protected: + ScRange aBlockRange; + SdrUndoAction* pDrawUndo; + ScBlockUndoMode eMode; + +// void BeginRedo(); + +}; + +//---------------------------------------------------------------------------- + + + +//---------------------------------------------------------------------------- + +class ScUndoWrapper: public SfxUndoAction // for manual merging of actions +{ + SfxUndoAction* pWrappedUndo; + +public: + TYPEINFO(); + ScUndoWrapper( SfxUndoAction* pUndo ); + virtual ~ScUndoWrapper(); + + SfxUndoAction* GetWrappedUndo() { return pWrappedUndo; } + void ForgetWrappedUndo(); + + virtual BOOL IsLinked(); + virtual void SetLinked( BOOL bIsLinked ); + virtual void Undo(); + virtual void Redo(); + virtual void Repeat(SfxRepeatTarget& rTarget); + virtual BOOL CanRepeat(SfxRepeatTarget& rTarget) const; + virtual BOOL Merge( SfxUndoAction *pNextAction ); + virtual String GetComment() const; + virtual String GetRepeatComment(SfxRepeatTarget&) const; + virtual USHORT GetId() const; +}; + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/undocell.hxx b/binfilter/bf_sc/source/ui/inc/undocell.hxx new file mode 100644 index 000000000000..5f9a869f1e55 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/undocell.hxx @@ -0,0 +1,122 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_UNDOCELL_HXX +#define SC_UNDOCELL_HXX + +#include "undobase.hxx" +namespace binfilter { + +class ScDocShell; +class ScBaseCell; +class ScPatternAttr; +class EditTextObject; +class SdrUndoAction; +class ScDetOpList; +class ScDetOpData; +class ScRangeName; + +//---------------------------------------------------------------------------- + + + + + + + +class ScUndoPutCell: public ScSimpleUndo +{ +public: + ScUndoPutCell( ScDocShell* pNewDocShell, + const ScAddress& rNewPos, + ScBaseCell* pUndoCell, ScBaseCell* pRedoCell, BOOL bHeight ); + virtual ~ScUndoPutCell(); + + virtual BOOL CanRepeat(SfxRepeatTarget& rTarget) const; + + virtual String GetComment() const; + +private: + ScAddress aPos; + ScBaseCell* pOldCell; + ScBaseCell* pEnteredCell; + ULONG nEndChangeAction; + BOOL bNeedHeight; + + void SetChangeTrack(); +}; + + + + + + +class ScUndoNote: public ScSimpleUndo +{ +public: + ScUndoNote( ScDocShell* pNewDocShell, + BOOL bShow, const ScAddress& rNewPos, + SdrUndoAction* pDraw ); + virtual ~ScUndoNote(); + + + +private: + BOOL bIsShow; + ScAddress aPos; + SdrUndoAction* pDrawUndo; +}; + + + + + + +class ScUndoRangeNames: public ScSimpleUndo +{ +public: + ScUndoRangeNames( ScDocShell* pNewDocShell, + ScRangeName* pOld, ScRangeName* pNew ); + virtual ~ScUndoRangeNames(); + + virtual BOOL CanRepeat(SfxRepeatTarget& rTarget) const; + + virtual String GetComment() const; + +private: + ScRangeName* pOldRanges; + ScRangeName* pNewRanges; + +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/undodat.hxx b/binfilter/bf_sc/source/ui/inc/undodat.hxx new file mode 100644 index 000000000000..0942185c22d3 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/undodat.hxx @@ -0,0 +1,132 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_UNDODAT_HXX +#define SC_UNDODAT_HXX + +#include "undobase.hxx" + +#include "rangeutl.hxx" // ScArea + +#include "rangelst.hxx" // ScRangeListRef + +#include "markdata.hxx" + +#include "sortparam.hxx" +namespace binfilter { + + +class ScDocShell; +class ScDocument; +class ScOutlineTable; +class ScRangeName; +class ScDBData; +class ScDBCollection; +class ScPivot; +class ScDPObject; + +//---------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + +class ScUndoDBData: public ScSimpleUndo +{ +public: + ScUndoDBData( ScDocShell* pNewDocShell, + ScDBCollection* pNewUndoColl, ScDBCollection* pNewRedoColl ); + virtual ~ScUndoDBData(); + + virtual BOOL CanRepeat(SfxRepeatTarget& rTarget) const; + + virtual String GetComment() const; + +private: + ScDBCollection* pUndoColl; + ScDBCollection* pRedoColl; +}; + + + + + + + + + + + + +class ScUndoChartData: public ScSimpleUndo +{ +public: + ScUndoChartData( ScDocShell* pNewDocShell, + const String& rName, const ScRange& rNew, + BOOL bColHdr, BOOL bRowHdr, BOOL bAdd ); + ScUndoChartData( ScDocShell* pNewDocShell, + const String& rName, const ScRangeListRef& rNew, + BOOL bColHdr, BOOL bRowHdr, BOOL bAdd ); + virtual ~ScUndoChartData(); + + + +private: + String aChartName; + ScRangeListRef aOldRangeListRef; + BOOL bOldColHeaders; + BOOL bOldRowHeaders; +// ScRange aNewRange; + ScRangeListRef aNewRangeListRef; + BOOL bNewColHeaders; + BOOL bNewRowHeaders; + BOOL bAddRange; + +}; + + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/undodraw.hxx b/binfilter/bf_sc/source/ui/inc/undodraw.hxx new file mode 100644 index 000000000000..0f321ecdf808 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/undodraw.hxx @@ -0,0 +1,57 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_UNDODRAW_HXX +#define SC_UNDODRAW_HXX + +#include <bf_svtools/undo.hxx> +namespace binfilter { + +class ScDocShell; + +class ScUndoDraw: public SfxUndoAction +{ + SfxUndoAction* pDrawUndo; + ScDocShell* pDocShell; + +public: + TYPEINFO(); + ScUndoDraw( SfxUndoAction* pUndo, ScDocShell* pDocSh ); + virtual ~ScUndoDraw(); + + SfxUndoAction* GetDrawUndo() { return pDrawUndo; } + void ForgetDrawUndo(); + +}; + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/undoolk.hxx b/binfilter/bf_sc/source/ui/inc/undoolk.hxx new file mode 100644 index 000000000000..3d646cbed180 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/undoolk.hxx @@ -0,0 +1,46 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_UNDOOLK_HXX +#define SC_UNDOOLK_HXX + +#include <tools/solar.h> +namespace binfilter { + +class SdrUndoAction; +class ScDocument; + +SdrUndoAction* GetSdrUndoAction ( ScDocument* pDoc ); +void DeleteSdrUndoAction ( SdrUndoAction* pUndoAction ); + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/undotab.hxx b/binfilter/bf_sc/source/ui/inc/undotab.hxx new file mode 100644 index 000000000000..c848ef1bdc1a --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/undotab.hxx @@ -0,0 +1,161 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_UNDOTAB_HXX +#define SC_UNDOTAB_HXX + +#include "undobase.hxx" +#include "markdata.hxx" + +#ifndef _SVSTDARR_USHORTS + +#define _SVSTDARR_USHORTS +#include <bf_svtools/svstdarr.hxx> + +#endif + +#ifndef _SVSTDARR_STRINGS + +#define _SVSTDARR_STRINGS +#include <bf_svtools/svstdarr.hxx> + +#endif +namespace binfilter { +class ScDocShell; +class ScDocument; +class SdrUndoAction; +class ScPrintRangeSaver; +class SdrObject; + +//---------------------------------------------------------------------------- + +class ScUndoInsertTab : public ScSimpleUndo +{ +public: + ScUndoInsertTab( + ScDocShell* pNewDocShell, + USHORT nTabNum, + BOOL bApp, + const String& rNewName); + virtual ~ScUndoInsertTab(); + + virtual BOOL CanRepeat(SfxRepeatTarget& rTarget) const; + + virtual String GetComment() const; + +private: + String sNewName; + SdrUndoAction* pDrawUndo; + ULONG nEndChangeAction; + USHORT nTab; + BOOL bAppend; + + void SetChangeTrack(); +}; + + + + + +class ScUndoRenameTab: public ScSimpleUndo +{ +public: + ScUndoRenameTab( + ScDocShell* pNewDocShell, + USHORT nT, + const String& rOldName, + const String& rNewName); + virtual ~ScUndoRenameTab(); + + virtual BOOL CanRepeat(SfxRepeatTarget& rTarget) const; + + virtual String GetComment() const; + +private: + USHORT nTab; + String sOldName; + String sNewName; + +}; + + + + + + + + + + + + +class ScUndoShowHideTab : public ScSimpleUndo +{ +public: + ScUndoShowHideTab( + ScDocShell* pShell, + USHORT nNewTab, BOOL bNewShow ); + virtual ~ScUndoShowHideTab(); + + virtual BOOL CanRepeat(SfxRepeatTarget& rTarget) const; + + virtual String GetComment() const; + +private: + USHORT nTab; + BOOL bShow; + +}; + + + + +class ScUndoPrintRange : public ScSimpleUndo +{ +public: + ScUndoPrintRange( ScDocShell* pShell, USHORT nNewTab, + ScPrintRangeSaver* pOld, ScPrintRangeSaver* pNew ); + virtual ~ScUndoPrintRange(); + +private: + USHORT nTab; + ScPrintRangeSaver* pOldRanges; + ScPrintRangeSaver* pNewRanges; + +}; + + + + + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/viewdata.hxx b/binfilter/bf_sc/source/ui/inc/viewdata.hxx new file mode 100644 index 000000000000..af204e10d932 --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/viewdata.hxx @@ -0,0 +1,401 @@ +/* -*- 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. + * + ************************************************************************/ +#ifndef SC_VIEWDATA_HXX +#define SC_VIEWDATA_HXX + +#include "viewopti.hxx" + +#include "markdata.hxx" +class Window; +namespace binfilter { + + +// --------------------------------------------------------------------------- + +#define SC_SLIDER_SIZE 2 +#define SC_SMALL3DSHADOW COL_BLACK +#define SC_SIZE_NONE 65535 +#define SC_TABSTART_NONE 65535 + +#define SC_FILL_NONE 0 +#define SC_FILL_FILL 1 +#define SC_FILL_EMBED_LT 2 +#define SC_FILL_EMBED_RB 3 +#define SC_FILL_MATRIX 4 + +enum ScSplitMode { SC_SPLIT_NONE = 0, SC_SPLIT_NORMAL, SC_SPLIT_FIX }; + +enum ScSplitPos { SC_SPLIT_TOPLEFT, SC_SPLIT_TOPRIGHT, SC_SPLIT_BOTTOMLEFT, SC_SPLIT_BOTTOMRIGHT }; +enum ScHSplitPos { SC_SPLIT_LEFT, SC_SPLIT_RIGHT }; +enum ScVSplitPos { SC_SPLIT_TOP, SC_SPLIT_BOTTOM }; + +inline ScHSplitPos WhichH( ScSplitPos ePos ); +inline ScVSplitPos WhichV( ScSplitPos ePos ); +inline ScSplitPos Which( ScHSplitPos eHPos ); +inline ScSplitPos Which( ScVSplitPos eVPos ); + +// Bildschirmverhalten bei Cursorbewegungen: +enum ScFollowMode { SC_FOLLOW_NONE, SC_FOLLOW_LINE, SC_FOLLOW_FIX, SC_FOLLOW_JUMP }; + +// Mausmodi um Bereiche zu selektieren +enum ScRefType { SC_REFTYPE_NONE, SC_REFTYPE_REF, SC_REFTYPE_FILL, + SC_REFTYPE_EMBED_LT, SC_REFTYPE_EMBED_RB }; + +class ScDocShell; +class ScDocument; +class ScDBFunc; +class ScDrawView; +class ScEditEngineDefaulter; +class EditView; +class EditStatus; +class Outliner; +class SfxObjectShell; +class ScPatternAttr; +class ScRangeListRef; +class ScExtDocOptions; + +//-------------------------------------------------------------------------- + + +class ScViewDataTable // Daten pro Tabelle +{ +friend class ScViewData; +private: + long nTPosX[2]; // MapMode - Offset (Twips) + long nTPosY[2]; + long nMPosX[2]; // MapMode - Offset (1/100 mm) + long nMPosY[2]; + long nPixPosX[2]; // Offset in Pixeln + long nPixPosY[2]; + long nHSplitPos; + long nVSplitPos; + + ScSplitMode eHSplitMode; + ScSplitMode eVSplitMode; + ScSplitPos eWhichActive; + + USHORT nFixPosX; // Zellposition des Splitters beim Fixieren + USHORT nFixPosY; + + USHORT nCurX; + USHORT nCurY; + USHORT nOldCurX; + USHORT nOldCurY; + USHORT nPosX[2]; + USHORT nPosY[2]; + + BOOL bOldCurValid; // "virtuelle" Cursorpos. bei zusammengefassten + + ScViewDataTable(); + ~ScViewDataTable(); + + void WriteUserDataSequence(::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue>& rSettings); + void ReadUserDataSequence(const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue>& rSettings); // #116578# +}; + +// --------------------------------------------------------------------------- + +class ScViewData +{ +private: + double nPPTX, nPPTY; // Scaling-Faktoren + + ScViewDataTable* pTabData[MAXTAB+1]; + ScViewDataTable* pThisTab; // Daten der angezeigten Tabelle + ScDocShell* pDocShell; + ScDocument* pDoc; +// ScDBFunc* pView; +// ScTabViewShell* pViewShell; + EditView* pEditView[4]; // gehoert dem Fenster + ScViewOptions* pOptions; + EditView* pSpellingView; + + ScMarkData aMarkData; + + long nEditMargin; + + Size aScenButSize; // Groesse eines Szenario-Buttons + + Size aScrSize; + MapMode aLogicMode; // skalierter 1/100mm-MapMode + + Fraction aZoomX; // eingestellter Zoom X + Fraction aZoomY; // eingestellter Zoom Y (angezeigt) + Fraction aPageZoomX; // Zoom im Seitenumbruch-Vorschaumodus + Fraction aPageZoomY; + + ScRefType eRefType; + + USHORT nTabNo; // angezeigte Tabelle + USHORT nRefTabNo; // Tabelle auf die sich RefInput bezieht + USHORT nRefStartX; + USHORT nRefStartY; + USHORT nRefStartZ; + USHORT nRefEndX; + USHORT nRefEndY; + USHORT nRefEndZ; + USHORT nFillStartX; // Fill-Cursor + USHORT nFillStartY; + USHORT nFillEndX; + USHORT nFillEndY; + USHORT nEditCol; // Position dazu + USHORT nEditRow; + USHORT nEditEndCol; // Ende der Edit-View + USHORT nEditEndRow; + USHORT nTabStartCol; // fuer Enter nach Tab + ScRange aDelRange; // fuer AutoFill-Loeschen + + BOOL bEditActive[4]; // aktiv? + BOOL bActive; // aktives Fenster ? + BOOL bIsRefMode; // Referenzeingabe + BOOL bDelMarkValid; // nur gueltig bei SC_REFTYPE_FILL + BYTE nFillMode; // Modus + BOOL bPagebreak; // Seitenumbruch-Vorschaumodus + + long nTabBarWidth; // #116578# from user data + + + void CalcPPT(); + +public: + ScViewData( ScDocShell* pDocSh ); + ~ScViewData(); + + + + ScDocShell* GetDocShell() const { return pDocShell; } + ScMarkData& GetMarkData() { return aMarkData; } + + void WriteUserData(String& rData); + void ReadUserData(const String& rData); // #116578# + void WriteUserDataSequence(::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue>& rSettings); + void ReadUserDataSequence(const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue>& rSettings); // #116578# + + ScDocument* GetDocument() const; + + + BOOL IsActive() const { return bActive; } + void Activate(BOOL bActivate) { bActive = bActivate; } + + USHORT GetRefTabNo() const { return nRefTabNo; } + void SetRefTabNo( USHORT nNewTab ) { nRefTabNo = nNewTab; } + + USHORT GetTabNo() const { return nTabNo; } + ScSplitPos GetActivePart() const { return pThisTab->eWhichActive; } + USHORT GetPosX( ScHSplitPos eWhich ) const { return pThisTab->nPosX[eWhich]; } + USHORT GetPosY( ScVSplitPos eWhich ) const { return pThisTab->nPosY[eWhich]; } + USHORT GetCurX() const { return pThisTab->nCurX; } + USHORT GetCurY() const { return pThisTab->nCurY; } + BOOL HasOldCursor() const { return pThisTab->bOldCurValid; } + ScSplitMode GetHSplitMode() const { return pThisTab->eHSplitMode; } + ScSplitMode GetVSplitMode() const { return pThisTab->eVSplitMode; } + long GetHSplitPos() const { return pThisTab->nHSplitPos; } + long GetVSplitPos() const { return pThisTab->nVSplitPos; } + USHORT GetFixPosX() const { return pThisTab->nFixPosX; } + USHORT GetFixPosY() const { return pThisTab->nFixPosY; } + BOOL IsPagebreakMode() const { return bPagebreak; } + + void SetCurX( USHORT nNewCurX ) { pThisTab->nCurX = nNewCurX; } + void SetCurY( USHORT nNewCurY ) { pThisTab->nCurY = nNewCurY; } + void SetHSplitMode( ScSplitMode eMode ) { pThisTab->eHSplitMode = eMode; } + void SetVSplitMode( ScSplitMode eMode ) { pThisTab->eVSplitMode = eMode; } + void SetHSplitPos( long nPos ) { pThisTab->nHSplitPos = nPos; } + void SetVSplitPos( long nPos ) { pThisTab->nVSplitPos = nPos; } + void SetFixPosX( USHORT nPos ) { pThisTab->nFixPosX = nPos; } + void SetFixPosY( USHORT nPos ) { pThisTab->nFixPosY = nPos; } + void SetPagebreakMode( BOOL bSet ); // #116578# + + const Fraction& GetZoomX() const { return bPagebreak ? aPageZoomX : aZoomX; } + const Fraction& GetZoomY() const { return bPagebreak ? aPageZoomY : aZoomY; } + + long GetTPosX( ScHSplitPos eWhich ) const { return pThisTab->nTPosX[eWhich]; } + long GetTPosY( ScVSplitPos eWhich ) const { return pThisTab->nTPosY[eWhich]; } + + double GetPPTX() const { return nPPTX; } + double GetPPTY() const { return nPPTY; } + + void GetMultiArea( ScRangeListRef& rRange ){DBG_BF_ASSERT(0, "STRIP");} //STRIP001 void GetMultiArea( ScRangeListRef& rRange ); + + + BOOL IsAnyFillMode() { return nFillMode != SC_FILL_NONE; } + BOOL IsFillMode() { return nFillMode == SC_FILL_FILL; } + BYTE GetFillMode() { return nFillMode; } + + // TRUE: Zelle ist zusammengefasst + BOOL GetMergeSizePixel( USHORT nX, USHORT nY, long& rSizeXPix, long& rSizeYPix ); + BOOL GetPosFromPixel( long nClickX, long nClickY, ScSplitPos eWhich, + short& rPosX, short& rPosY, + BOOL bTestMerge = TRUE, BOOL bRepair = FALSE, + BOOL bNextIfLarge = TRUE ); + BOOL IsRefMode() const { return bIsRefMode; } + ScRefType GetRefType() const { return eRefType; } + USHORT GetRefStartX() const { return nRefStartX; } + USHORT GetRefStartY() const { return nRefStartY; } + USHORT GetRefStartZ() const { return nRefStartZ; } + USHORT GetRefEndX() const { return nRefEndX; } + USHORT GetRefEndY() const { return nRefEndY; } + USHORT GetRefEndZ() const { return nRefEndZ; } + + void SetRefMode( BOOL bNewMode, ScRefType eNewType ) + { bIsRefMode = bNewMode; eRefType = eNewType; } + + void SetRefStart( USHORT nNewX, USHORT nNewY, USHORT nNewZ ) + { nRefStartX = nNewX; nRefStartY = nNewY; nRefStartZ = nNewZ; } + void SetRefEnd( USHORT nNewX, USHORT nNewY, USHORT nNewZ ) + { nRefEndX = nNewX; nRefEndY = nNewY; nRefEndZ = nNewZ; } + + void ResetDelMark() { bDelMarkValid = FALSE; } + void SetDelMark( const ScRange& rRange ) + { aDelRange = rRange; bDelMarkValid = TRUE; } + + BOOL GetDelMark( ScRange& rRange ) const + { rRange = aDelRange; return bDelMarkValid; } + + inline void GetMoveCursor( USHORT& rCurX, USHORT& rCurY ); + + const ScViewOptions& GetOptions() const { return *pOptions; } + BOOL IsGridMode () const { return pOptions->GetOption( VOPT_GRID ); } + void SetGridMode ( BOOL bNewMode ) { pOptions->SetOption( VOPT_GRID, bNewMode ); } + BOOL IsSyntaxMode () const { return pOptions->GetOption( VOPT_SYNTAX ); } + void SetSyntaxMode ( BOOL bNewMode ) { pOptions->SetOption( VOPT_SYNTAX, bNewMode ); } + BOOL IsHeaderMode () const { return pOptions->GetOption( VOPT_HEADER ); } + void SetHeaderMode ( BOOL bNewMode ) { pOptions->SetOption( VOPT_HEADER, bNewMode ); } + BOOL IsTabMode () const { return pOptions->GetOption( VOPT_TABCONTROLS ); } + void SetTabMode ( BOOL bNewMode ) { pOptions->SetOption( VOPT_TABCONTROLS, bNewMode ); } + BOOL IsVScrollMode () const { return pOptions->GetOption( VOPT_VSCROLL ); } + void SetVScrollMode ( BOOL bNewMode ) { pOptions->SetOption( VOPT_VSCROLL, bNewMode ); } + BOOL IsHScrollMode () const { return pOptions->GetOption( VOPT_HSCROLL ); } + void SetHScrollMode ( BOOL bNewMode ) { pOptions->SetOption( VOPT_HSCROLL, bNewMode ); } + BOOL IsOutlineMode () const { return pOptions->GetOption( VOPT_OUTLINER ); } + void SetOutlineMode ( BOOL bNewMode ) { pOptions->SetOption( VOPT_OUTLINER, bNewMode ); } + + void KillEditView(); + BOOL HasEditView( ScSplitPos eWhich ) const + { return pEditView[eWhich] && bEditActive[eWhich]; } + EditView* GetEditView( ScSplitPos eWhich ) const + { return pEditView[eWhich]; } + + + USHORT GetEditViewCol() const { return nEditCol; } + USHORT GetEditViewRow() const { return nEditRow; } + USHORT GetEditEndCol() const { return nEditEndCol; } + USHORT GetEditEndRow() const { return nEditEndRow; } + + + void SetTabNo( USHORT nNewTab ); // #116578# + + Point GetScrPos( USHORT nWhereX, USHORT nWhereY, ScSplitPos eWhich, + BOOL bAllowNeg = FALSE ) const; + Point GetScrPos( USHORT nWhereX, USHORT nWhereY, ScHSplitPos eWhich ) const; + Point GetScrPos( USHORT nWhereX, USHORT nWhereY, ScVSplitPos eWhich ) const; + + USHORT CellsAtX( short nPosX, short nDir, ScHSplitPos eWhichX, USHORT nScrSizeY = SC_SIZE_NONE ) const; + USHORT CellsAtY( short nPosY, short nDir, ScVSplitPos eWhichY, USHORT nScrSizeX = SC_SIZE_NONE ) const; + + USHORT VisibleCellsX( ScHSplitPos eWhichX ) const; // angezeigte komplette Zellen + USHORT VisibleCellsY( ScVSplitPos eWhichY ) const; + + + + Size GetScrSize() const { return aScrSize; } + + void RecalcPixPos(); + Point GetPixPos( ScSplitPos eWhich ) const + { return Point( pThisTab->nPixPosX[WhichH(eWhich)], + pThisTab->nPixPosY[WhichV(eWhich)] ); } + void SetSpellingView( EditView* pSpView) { pSpellingView = pSpView; } + EditView* GetSpellingView() const { return pSpellingView; } + + + + + USHORT GetTabStartCol() const { return nTabStartCol; } + void SetTabStartCol(USHORT nNew) { nTabStartCol = nNew; } + + + const Size& GetScenButSize() const { return aScenButSize; } + void SetScenButSize(const Size& rNew) { aScenButSize = rNew; } + + static inline long ToPixel( USHORT nTwips, double nFactor ); +}; + + +// --------------------------------------------------------------------------- + +inline long ScViewData::ToPixel( USHORT nTwips, double nFactor ) +{ + long nRet = (long)( nTwips * nFactor ); + if ( !nRet && nTwips ) + nRet = 1; + return nRet; +} + +inline void ScViewData::GetMoveCursor( USHORT& rCurX, USHORT& rCurY ) +{ + if ( bIsRefMode ) + { + rCurX = nRefEndX; + rCurY = nRefEndY; + } + else + { + rCurX = GetCurX(); + rCurY = GetCurY(); + } +} + +inline ScHSplitPos WhichH( ScSplitPos ePos ) +{ + return (ePos==SC_SPLIT_TOPLEFT || ePos==SC_SPLIT_BOTTOMLEFT) ? + SC_SPLIT_LEFT : SC_SPLIT_RIGHT; +} + +inline ScVSplitPos WhichV( ScSplitPos ePos ) +{ + return (ePos==SC_SPLIT_TOPLEFT || ePos==SC_SPLIT_TOPRIGHT) ? + SC_SPLIT_TOP : SC_SPLIT_BOTTOM; +} + +inline ScSplitPos Which( ScHSplitPos eHPos ) +{ + return (eHPos==SC_SPLIT_LEFT) ? + SC_SPLIT_BOTTOMLEFT : SC_SPLIT_BOTTOMRIGHT; +} + +inline ScSplitPos Which( ScVSplitPos eVPos ) +{ + return (eVPos==SC_SPLIT_TOP) ? + SC_SPLIT_TOPLEFT : SC_SPLIT_BOTTOMLEFT; +} + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/inc/viewutil.hxx b/binfilter/bf_sc/source/ui/inc/viewutil.hxx new file mode 100644 index 000000000000..afd3b26c19ae --- /dev/null +++ b/binfilter/bf_sc/source/ui/inc/viewutil.hxx @@ -0,0 +1,70 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifndef SC_VIEWUTIL_HXX +#define SC_VIEWUTIL_HXX + +#include <tools/solar.h> +class String; +namespace binfilter { + +class SfxItemSet; +class SvxFontItem; + +class ScChangeAction; +class ScChangeViewSettings; +class ScDocument; +class ScAddress; + + +enum ScUpdateMode { SC_UPDATE_ALL, SC_UPDATE_CHANGED, SC_UPDATE_MARKS }; + + +// --------------------------------------------------------------------------- + +class ScViewUtil // static Methoden +{ +public: + + + static void PutItemScript( SfxItemSet& rShellSet, const SfxItemSet& rCoreSet, + USHORT nWhichId, USHORT nScript ); + + +}; + +// --------------------------------------------------------------------------- + + + + + +} //namespace binfilter +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/src/makefile.mk b/binfilter/bf_sc/source/ui/src/makefile.mk new file mode 100644 index 000000000000..06e9af773242 --- /dev/null +++ b/binfilter/bf_sc/source/ui/src/makefile.mk @@ -0,0 +1,65 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +EXTERNAL_WARNINGS_NOT_ERRORS := TRUE +PRJ=..$/..$/..$/.. +BFPRJ=..$/..$/.. + +PRJNAME=binfilter +TARGET=sc_ui + +#GEN_HID=TRUE +#GEN_HID_OTHER=TRUE +NO_HIDS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk +INC+= -I$(PRJ)$/inc$/bf_sc +#IMGLST_SRS=$(SRS)$/sc_ui.srs +#BMP_IN=$(BFPRJ)$/res/imglst/apptbx +# --- Update-Version ----------------------------------------------- + +RSCUPDVER=$(RSCREVISION)(SV$(UPD)$(UPDMINOR)) + +# --- Files -------------------------------------------------------- + +SRS1NAME=$(TARGET) +SRC1FILES = \ + sc_sc.src \ + sc_pseudo.src \ + sc_scstring.src \ + sc_hdrcont.src \ + sc_globstr.src \ + sc_scerrors.src + +# --- Targets ------------------------------------------------------- + +.INCLUDE : target.mk + +$(SRS)$/sc_ui.srs: $(PRJ)$/inc$/bf_svx$/globlmn.hrc + diff --git a/binfilter/bf_sc/source/ui/src/sc_globstr.src b/binfilter/bf_sc/source/ui/src/sc_globstr.src new file mode 100644 index 000000000000..d17afdafa5a8 --- /dev/null +++ b/binfilter/bf_sc/source/ui/src/sc_globstr.src @@ -0,0 +1,11325 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#define NO_LOCALIZE_EXPORT +#include "globstr.hrc" +#include "bf_sc.hrc" + + + +Resource RID_GLOBSTR +{ +//STRIP001 String STR_UNDO_INSERTCELLS +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Einfügen : Einf³gen */ +//STRIP001 Text = "Einfügen" ; +//STRIP001 Text [ ENGLISH ] = "Insert" ; +//STRIP001 Text [ norwegian ] = "Sett inn" ; +//STRIP001 Text [ italian ] = "Inserisci" ; +//STRIP001 Text [ portuguese_brazilian ] = "Inserir" ; +//STRIP001 Text [ portuguese ] = "Inserir" ; +//STRIP001 Text [ finnish ] = "Lisää" ; +//STRIP001 Text [ danish ] = "Indsæt" ; +//STRIP001 Text [ french ] = "Insérer" ; +//STRIP001 Text [ swedish ] = "Infoga" ; +//STRIP001 Text [ dutch ] = "Invoegen" ; +//STRIP001 Text [ spanish ] = "Insertar" ; +//STRIP001 Text [ english_us ] = "Insert" ; +//STRIP001 Text[ chinese_simplified ] = "æ’å…¥"; +//STRIP001 Text[ russian ] = "Âñòàâèòü"; +//STRIP001 Text[ polish ] = "Wstaw"; +//STRIP001 Text[ japanese ] = "挿入"; +//STRIP001 Text[ chinese_traditional ] = "æ’å…¥"; +//STRIP001 Text[ arabic ] = "ÅÏÑÇ?"; +//STRIP001 Text[ greek ] = "ÅéóáãùãÞ"; +//STRIP001 Text[ korean ] = "삽입"; +//STRIP001 Text[ turkish ] = "Ekle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Insereix"; +//STRIP001 Text[ thai ] = "à¹à¸—รà¸"; +//STRIP001 Text[ czech ] = "Vložit"; +//STRIP001 Text[ hebrew ] = "‮הוספהâ€?"; +//STRIP001 Text[ hindi ] = "जोड़à¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DELETECELLS +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Löschen : L÷schen */ +//STRIP001 Text = "Löschen" ; +//STRIP001 Text [ ENGLISH ] = "Delete" ; +//STRIP001 Text [ norwegian ] = "Slett" ; +//STRIP001 Text [ italian ] = "Elimina" ; +//STRIP001 Text [ portuguese_brazilian ] = "Excluir" ; +//STRIP001 Text [ portuguese ] = "Eliminar" ; +//STRIP001 Text [ finnish ] = "Poista" ; +//STRIP001 Text [ danish ] = "Slet" ; +//STRIP001 Text [ french ] = "Données supprimées" ; +//STRIP001 Text [ swedish ] = "Radera" ; +//STRIP001 Text [ dutch ] = "Wissen" ; +//STRIP001 Text [ spanish ] = "Borrar" ; +//STRIP001 Text [ english_us ] = "Delete" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤"; +//STRIP001 Text[ russian ] = "Óäàëèò?"; +//STRIP001 Text[ polish ] = "Usu?"; +//STRIP001 Text[ japanese ] = "削除"; +//STRIP001 Text[ chinese_traditional ] = "刪除"; +//STRIP001 Text[ arabic ] = "ÍÐ?"; +//STRIP001 Text[ greek ] = "ÄéáãñáöÞ"; +//STRIP001 Text[ korean ] = "ì‚ì œ"; +//STRIP001 Text[ turkish ] = "Sil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suprimeix"; +//STRIP001 Text[ thai ] = "ลบ"; +//STRIP001 Text[ czech ] = "Smazat"; +//STRIP001 Text[ hebrew ] = "‮מחיקהâ€?"; +//STRIP001 Text[ hindi ] = "मिटाà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_CUT +//STRIP001 { +//STRIP001 Text = "Ausschneiden" ; +//STRIP001 Text [ ENGLISH ] = "Cut" ; +//STRIP001 Text [ norwegian ] = "Cut" ; +//STRIP001 Text [ italian ] = "Taglia" ; +//STRIP001 Text [ portuguese_brazilian ] = "Cortar" ; +//STRIP001 Text [ portuguese ] = "Cortar" ; +//STRIP001 Text [ finnish ] = "Leikkaa" ; +//STRIP001 Text [ danish ] = "Klip" ; +//STRIP001 Text [ french ] = "Couper" ; +//STRIP001 Text [ swedish ] = "Klipp ut" ; +//STRIP001 Text [ dutch ] = "Knippen" ; +//STRIP001 Text [ spanish ] = "Cortar" ; +//STRIP001 Text [ english_us ] = "Cut" ; +//STRIP001 Text[ chinese_simplified ] = "剪切"; +//STRIP001 Text[ russian ] = "Âûðåçàòü"; +//STRIP001 Text[ polish ] = "Wytnij"; +//STRIP001 Text[ japanese ] = "切りå–ã‚Š"; +//STRIP001 Text[ chinese_traditional ] = "剪下"; +//STRIP001 Text[ arabic ] = "ÞÕ"; +//STRIP001 Text[ greek ] = "Áðïêïð?"; +//STRIP001 Text[ korean ] = "잘ë¼ë‚´ê¸°"; +//STRIP001 Text[ turkish ] = "Kes"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Retalla"; +//STRIP001 Text[ thai ] = "ตัà¸?"; +//STRIP001 Text[ czech ] = "Vyjmout"; +//STRIP001 Text[ hebrew ] = "‮גזירהâ€?"; +//STRIP001 Text[ hindi ] = "काटो"; +//STRIP001 }; +//STRIP001 String STR_UNDO_PASTE +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Einfügen : Einf³gen */ +//STRIP001 Text = "Einfügen" ; +//STRIP001 Text [ ENGLISH ] = "Insert" ; +//STRIP001 Text [ norwegian ] = "Sett inn" ; +//STRIP001 Text [ italian ] = "Inserisci" ; +//STRIP001 Text [ portuguese_brazilian ] = "Inserir" ; +//STRIP001 Text [ portuguese ] = "Inserir" ; +//STRIP001 Text [ finnish ] = "Lisää" ; +//STRIP001 Text [ danish ] = "Indsæt" ; +//STRIP001 Text [ french ] = "Insérer" ; +//STRIP001 Text [ swedish ] = "Infoga" ; +//STRIP001 Text [ dutch ] = "Invoegen" ; +//STRIP001 Text [ spanish ] = "Insertar" ; +//STRIP001 Text [ english_us ] = "Insert" ; +//STRIP001 Text[ chinese_simplified ] = "æ’å…¥"; +//STRIP001 Text[ russian ] = "Âñòàâèòü"; +//STRIP001 Text[ polish ] = "Wstaw"; +//STRIP001 Text[ japanese ] = "挿入"; +//STRIP001 Text[ chinese_traditional ] = "æ’å…¥"; +//STRIP001 Text[ arabic ] = "ÅÏÑÇ?"; +//STRIP001 Text[ greek ] = "ÅéóáãùãÞ"; +//STRIP001 Text[ korean ] = "삽입"; +//STRIP001 Text[ turkish ] = "Ekle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Insereix"; +//STRIP001 Text[ thai ] = "à¹à¸—รà¸"; +//STRIP001 Text[ czech ] = "Vložit"; +//STRIP001 Text[ hebrew ] = "‮הוספהâ€?"; +//STRIP001 Text[ hindi ] = "जोड़à¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DRAGDROP +//STRIP001 { +//STRIP001 Text = "Drag&Drop" ; +//STRIP001 Text [ ENGLISH ] = "Drag&Drop" ; +//STRIP001 Text [ norwegian ] = "Dra&Slipp" ; +//STRIP001 Text [ italian ] = "Drag&Drop" ; +//STRIP001 Text [ portuguese_brazilian ] = "Arrastar e Soltar" ; +//STRIP001 Text [ portuguese ] = "Arrastar&Largar" ; +//STRIP001 Text [ french ] = "Glisser-Déposer" ; +//STRIP001 Text [ dutch ] = "Slepen & neerzetten" ; +//STRIP001 Text [ spanish ] = "Arrastrar y colocar" ; +//STRIP001 Text [ danish ] = "Træk-og-slip" ; +//STRIP001 Text [ swedish ] = "Dra-och-släpp" ; +//STRIP001 Text [ finnish ] = "Ved?ja pudota" ; +//STRIP001 Text [ english_us ] = "Drag and Drop" ; +//STRIP001 Text[ chinese_simplified ] = "拖放"; +//STRIP001 Text[ russian ] = "Ïåðåòàñêèâàíèå"; +//STRIP001 Text[ polish ] = "Przeci¹gnij i upuœæ"; +//STRIP001 Text[ japanese ] = "ドラッグ&ドãƒãƒƒãƒ?"; +//STRIP001 Text[ chinese_traditional ] = "拖曳"; +//STRIP001 Text[ arabic ] = "ÓÍ??ÅÓÞÇ?"; +//STRIP001 Text[ greek ] = "Ìåôáêßíçóç êá?Aðüèåóç"; +//STRIP001 Text[ korean ] = "ëŒì–´ 놓기"; +//STRIP001 Text[ turkish ] = "Sürükle ve býrak"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Arrossega i deixa anar"; +//STRIP001 Text[ thai ] = "ลาà¸à¹à¸¥à¸°à¸›à¸¥à¹ˆà¸à¸?"; +//STRIP001 Text[ czech ] = "Táhni a pusÅ¥"; +//STRIP001 Text[ hebrew ] = "Drag&Drop"; +//STRIP001 Text[ hindi ] = "खींचà¥?और गिराà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_MOVE +//STRIP001 { +//STRIP001 Text = "Verschieben" ; +//STRIP001 Text [ ENGLISH ] = "Move" ; +//STRIP001 Text [ norwegian ] = "Flytt" ; +//STRIP001 Text [ italian ] = "Sposta" ; +//STRIP001 Text [ portuguese_brazilian ] = "Mover" ; +//STRIP001 Text [ portuguese ] = "Mover" ; +//STRIP001 Text [ finnish ] = "Siirr?" ; +//STRIP001 Text [ danish ] = "Flyt" ; +//STRIP001 Text [ french ] = "Déplacer" ; +//STRIP001 Text [ swedish ] = "Flytta" ; +//STRIP001 Text [ dutch ] = "Verplaatsen" ; +//STRIP001 Text [ spanish ] = "Desplazar" ; +//STRIP001 Text [ english_us ] = "Move" ; +//STRIP001 Text[ chinese_simplified ] = "移动"; +//STRIP001 Text[ russian ] = "Ïåðåìåñòèò?"; +//STRIP001 Text[ polish ] = "Przesu?"; +//STRIP001 Text[ japanese ] = "移動"; +//STRIP001 Text[ chinese_traditional ] = "移動"; +//STRIP001 Text[ arabic ] = "ÅÒÇÍ?"; +//STRIP001 Text[ greek ] = "Ìåôáêßíçóç"; +//STRIP001 Text[ korean ] = "ì´ë™"; +//STRIP001 Text[ turkish ] = "Taþý"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Mou"; +//STRIP001 Text[ thai ] = "ย้าย"; +//STRIP001 Text[ czech ] = "PÅ™esunout"; +//STRIP001 Text[ hebrew ] = "Verschieben"; +//STRIP001 Text[ hindi ] = "सà¥à¤¥à¤¾à¤?परिवरà¥à¤¤à¤¨ करà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_COPY +//STRIP001 { +//STRIP001 Text = "Kopieren" ; +//STRIP001 Text [ ENGLISH ] = "Copy" ; +//STRIP001 Text [ norwegian ] = "Kopi" ; +//STRIP001 Text [ italian ] = "Copia" ; +//STRIP001 Text [ portuguese_brazilian ] = "Copiar" ; +//STRIP001 Text [ portuguese ] = "Copiar" ; +//STRIP001 Text [ finnish ] = "Kopioi" ; +//STRIP001 Text [ danish ] = "Kopier" ; +//STRIP001 Text [ french ] = "Copier" ; +//STRIP001 Text [ swedish ] = "Kopiera" ; +//STRIP001 Text [ dutch ] = "Kopiëren" ; +//STRIP001 Text [ spanish ] = "Copiar" ; +//STRIP001 Text [ english_us ] = "Copy" ; +//STRIP001 Text[ chinese_simplified ] = "å¤åˆ¶"; +//STRIP001 Text[ russian ] = "Êîïèðîâàòü"; +//STRIP001 Text[ polish ] = "Kopiuj"; +//STRIP001 Text[ japanese ] = "コピãƒ?"; +//STRIP001 Text[ chinese_traditional ] = "複製"; +//STRIP001 Text[ arabic ] = "äÓ?"; +//STRIP001 Text[ greek ] = "Áíôéãñáö?"; +//STRIP001 Text[ korean ] = "복사"; +//STRIP001 Text[ turkish ] = "Kopyala"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Copia"; +//STRIP001 Text[ thai ] = "คัดลà¸à¸"; +//STRIP001 Text[ czech ] = "KopÃrovat"; +//STRIP001 Text[ hebrew ] = "‮העתקהâ€?"; +//STRIP001 Text[ hindi ] = "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DELETECONTENTS +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Löschen : L÷schen */ +//STRIP001 Text = "Löschen" ; +//STRIP001 Text [ ENGLISH ] = "Delete" ; +//STRIP001 Text [ norwegian ] = "Slett" ; +//STRIP001 Text [ italian ] = "Elimina" ; +//STRIP001 Text [ portuguese_brazilian ] = "Excluir" ; +//STRIP001 Text [ portuguese ] = "Eliminar" ; +//STRIP001 Text [ finnish ] = "Poista" ; +//STRIP001 Text [ danish ] = "Slet" ; +//STRIP001 Text [ french ] = "Données supprimées" ; +//STRIP001 Text [ swedish ] = "Radera" ; +//STRIP001 Text [ dutch ] = "Wissen" ; +//STRIP001 Text [ spanish ] = "Borrar" ; +//STRIP001 Text [ english_us ] = "Delete" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤"; +//STRIP001 Text[ russian ] = "Óäàëèò?"; +//STRIP001 Text[ polish ] = "Usu?"; +//STRIP001 Text[ japanese ] = "削除"; +//STRIP001 Text[ chinese_traditional ] = "刪除"; +//STRIP001 Text[ arabic ] = "ÍÐ?"; +//STRIP001 Text[ greek ] = "ÄéáãñáöÞ"; +//STRIP001 Text[ korean ] = "ì‚ì œ"; +//STRIP001 Text[ turkish ] = "Sil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suprimeix"; +//STRIP001 Text[ thai ] = "ลบ"; +//STRIP001 Text[ czech ] = "Smazat"; +//STRIP001 Text[ hebrew ] = "‮מחיקהâ€?"; +//STRIP001 Text[ hindi ] = "मिटाà¤?"; +//STRIP001 }; + String STR_UNDO_SELATTR + { + Text [ de ] = "Attribute" ; + Text [ en-US ] = "Attributes" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Atributos"; + Text[ ru ] = "Ðтрибуты"; + Text[ el ] = "Ιδιότητες"; + Text[ nl ] = "Attributen"; + Text[ fr ] = "Attributs"; + Text[ es ] = "Atributos"; + Text[ fi ] = "Määritteet"; + Text[ ca ] = "Atributs"; + Text[ it ] = "Attributi"; + Text[ da ] = "Attributter"; + Text[ sv ] = "Attribut"; + Text[ pl ] = "Atrybuty"; + Text[ pt-BR ] = "Atributos"; + Text[ th ] = "คุณลัà¸à¸©à¸“ะ"; + Text[ ja ] = "属性"; + Text[ ko ] = "ì†ì„±"; + Text[ zh-CN ] = "属性"; + Text[ zh-TW ] = "屬性"; + Text[ tr ] = "Öznitelikler"; + Text[ hi-IN ] = "à¤à¤Ÿà¥à¤°à¤¿à¤¬à¥à¤¯à¥‚टà¥à¤¸"; + Text[ ar ] = "السمات"; + Text[ he ] = "â€®×ª×›×•× ×•×ªâ€¬"; + }; + String STR_UNDO_SELATTRLINES + { + Text [ de ] = "Attribute/Linien" ; + Text [ en-US ] = "Attributes/Lines" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Atributos/Linhas"; + Text[ ru ] = "Ðтрибуты/Линии"; + Text[ el ] = "Ιδιότητες/ΓÏαμμÎÏ‚"; + Text[ nl ] = "Attributen/lijnen"; + Text[ fr ] = "Attributs/lignes"; + Text[ es ] = "Atributos/LÃneas"; + Text[ fi ] = "Määritteet/rivit"; + Text[ ca ] = "Atributs/LÃnies"; + Text[ it ] = "Attributi/Linee"; + Text[ da ] = "Attributter/Linjer"; + Text[ sv ] = "Attribut/Linjer"; + Text[ pl ] = "Atrybuty/Linie"; + Text[ pt-BR ] = "Atributos/Linhas"; + Text[ th ] = "คุณลัà¸à¸©à¸“ะ/บรรทัด"; + Text[ ja ] = "属性/ç·š"; + Text[ ko ] = "ì†ì„±/ì„ "; + Text[ zh-CN ] = "属性/线æ¡"; + Text[ zh-TW ] = "屬性/ç·šæ¢"; + Text[ tr ] = "Öznitelikler/Çizgiler"; + Text[ hi-IN ] = "à¤à¤Ÿà¥à¤°à¤¿à¤¬à¥à¤¯à¥‚टà¥à¤¸/रेखाà¤à¤"; + Text[ ar ] = "السمات/الخطوط"; + Text[ he ] = "Attribute/Linien"; + }; + String STR_UNDO_COLWIDTH + { + Text [ de ] = "Spaltenbreite" ; + Text [ en-US ] = "Column Width" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Largura da coluna"; + Text[ ru ] = "Ширина Ñтолбца"; + Text[ el ] = "Πλάτος στήλης"; + Text[ nl ] = "Kolombreedte"; + Text[ fr ] = "Largeur de colonne"; + Text[ es ] = "Ancho de columna"; + Text[ fi ] = "Sarakkeen leveys"; + Text[ ca ] = "Amplada de la columna"; + Text[ it ] = "Larghezza colonna"; + Text[ da ] = "Kolonnebredde"; + Text[ sv ] = "Kolumnbredd"; + Text[ pl ] = "Szerokość kolumny"; + Text[ pt-BR ] = "Largura da Coluna"; + Text[ th ] = "ความà¸à¸§à¹‰à¸²à¸‡à¸„à¸à¸¥à¸±à¸¡à¸™à¹Œ"; + Text[ ja ] = "列幅"; + Text[ ko ] = "ì—´ 너비"; + Text[ zh-CN ] = "列宽"; + Text[ zh-TW ] = "欄寬"; + Text[ tr ] = "Sütun geniÅŸliÄŸi"; + Text[ hi-IN ] = "सà¥à¤¤à¤‚ठचौड़ाई"; + Text[ ar ] = "عرض الأعمدة"; + Text[ he ] = "Spaltenbreite"; + }; + String STR_UNDO_OPTCOLWIDTH + { + Text [ de ] = "optimale Spaltenbreite" ; + Text [ en-US ] = "Optimal Column Width" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Largura ideal da coluna"; + Text[ ru ] = "ÐžÐ¿Ñ‚Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° Ñтолбца"; + Text[ el ] = "βÎλτιστο πλάτος στήλης"; + Text[ nl ] = "optimale kolombreedte"; + Text[ fr ] = "Largeur de colonne optimale"; + Text[ es ] = "Ancho de columna óptimo"; + Text[ fi ] = "Optimaalinen palstaleveys"; + Text[ ca ] = "Amplada òptima de la columna"; + Text[ it ] = "Larghezza colonna ottimale"; + Text[ da ] = "Optimal kolonnebredde"; + Text[ sv ] = "optimal kolumnbredd"; + Text[ pl ] = "Optymalna szerokość kolumn"; + Text[ pt-BR ] = "Otimizar Largura da Coluna"; + Text[ th ] = "ความà¸à¸§à¹‰à¸²à¸‡à¸„à¸à¸¥à¸±à¸¡à¸™à¹Œà¸—ี่เหมาะที่สุด"; + Text[ ja ] = "最é©ãªåˆ—å¹…"; + Text[ ko ] = "최ì ì˜ ì—´ 너비"; + Text[ zh-CN ] = "最佳列宽"; + Text[ zh-TW ] = "最é©æ¬„寬"; + Text[ tr ] = "Optimum Sütun geniÅŸliÄŸi"; + Text[ hi-IN ] = "योगà¥à¤¯ सà¥à¤¤à¤‚ठचौड़ाई"; + Text[ ar ] = "العرض الأمثل للعمود"; + Text[ he ] = "‮רוחב טור מיטבי‬"; + }; + String STR_UNDO_ROWHEIGHT + { + /* ### ACHTUNG: Neuer Text in Resource? Zeilenhöhe : Zeilenh÷he */ + Text [ de ] = "Zeilenhöhe" ; + Text [ en-US ] = "Row height" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Altura da linha"; + Text[ ru ] = "Ð’Ñ‹Ñота Ñтроки"; + Text[ el ] = "Ύψος γÏαμμής"; + Text[ nl ] = "Rijhoogte"; + Text[ fr ] = "Hauteur de ligne"; + Text[ es ] = "Altura de fila"; + Text[ fi ] = "Rivin korkeus"; + Text[ ca ] = "Alçada de la fila"; + Text[ it ] = "Altezza riga"; + Text[ da ] = "Rækkehøjde"; + Text[ sv ] = "Radhöjd"; + Text[ pl ] = "Wysokość wierszy"; + Text[ pt-BR ] = "Altura da linha"; + Text[ th ] = "ความสูงขà¸à¸‡à¹à¸–ว"; + Text[ ja ] = "è¡Œã®é«˜ã•"; + Text[ ko ] = "í–‰ 높ì´"; + Text[ zh-CN ] = "行高"; + Text[ zh-TW ] = "列高"; + Text[ tr ] = "Satır yüksekliÄŸi"; + Text[ hi-IN ] = "पंकà¥à¤¤à¤¿ ऊà¤à¤šà¤¾à¤ˆ"; + Text[ ar ] = "ارتÙاع الصÙ"; + Text[ he ] = "Zeilenhöhe"; + }; + String STR_UNDO_OPTROWHEIGHT + { + /* ### ACHTUNG: Neuer Text in Resource? optimale Zeilenhöhe : optimale Zeilenh÷he */ + Text [ de ] = "optimale Zeilenhöhe" ; + Text [ en-US ] = "Optimal Row Height" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Altura ideal da linha"; + Text[ ru ] = "ÐžÐ¿Ñ‚Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð²Ñ‹Ñота Ñтроки"; + Text[ el ] = "Î’Îλτιστο Ïψος γÏαμμής"; + Text[ nl ] = "optimale rijhoogte"; + Text[ fr ] = "Hauteur de ligne optimale"; + Text[ es ] = "Altura óptima de fila"; + Text[ fi ] = "Optimaalinen rivikorkeus"; + Text[ ca ] = "Alçada òptima de la fila"; + Text[ it ] = "Altezza riga ottimale"; + Text[ da ] = "Optimal rækkehøjde"; + Text[ sv ] = "optimal radhöjd"; + Text[ pl ] = "Optymalna wysokość wierszy"; + Text[ pt-BR ] = "Otimizar Altura da Linha"; + Text[ th ] = "ความสูงขà¸à¸‡à¹à¸–วที่เหมาะที่สุด"; + Text[ ja ] = "最é©ãªè¡Œã®é«˜ã•"; + Text[ ko ] = "최ì ì˜ í–‰ 높ì´"; + Text[ zh-CN ] = "最佳行高"; + Text[ zh-TW ] = "最é©åˆ—高"; + Text[ tr ] = "Optimum satır yüksekliÄŸi"; + Text[ hi-IN ] = "योगà¥à¤¯ पंकà¥à¤¤à¤¿ ऊà¤à¤šà¤¾à¤ˆ"; + Text[ ar ] = "الارتÙاع الأمثل للصÙ"; + Text[ he ] = "‮גובה שורה מיטבי‬"; + }; +//STRIP001 String STR_UNDO_AUTOFILL +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Füllen : F³llen */ +//STRIP001 Text = "Füllen" ; +//STRIP001 Text [ ENGLISH ] = "Autofill" ; +//STRIP001 Text [ norwegian ] = "Autofill" ; +//STRIP001 Text [ italian ] = "Riempimento" ; +//STRIP001 Text [ portuguese_brazilian ] = "Preencher" ; +//STRIP001 Text [ portuguese ] = "Preencher" ; +//STRIP001 Text [ finnish ] = "Täyt?" ; +//STRIP001 Text [ danish ] = "Fyld" ; +//STRIP001 Text [ french ] = "Remplir" ; +//STRIP001 Text [ swedish ] = "Fyll" ; +//STRIP001 Text [ dutch ] = "Invullen" ; +//STRIP001 Text [ spanish ] = "Rellenar" ; +//STRIP001 Text [ english_us ] = "Fill" ; +//STRIP001 Text[ chinese_simplified ] = "å¡«å……"; +//STRIP001 Text[ russian ] = "Çàëèâê?"; +//STRIP001 Text[ polish ] = "Wype³nij"; +//STRIP001 Text[ japanese ] = "連続デーã‚?"; +//STRIP001 Text[ chinese_traditional ] = "å¡«å……"; +//STRIP001 Text[ arabic ] = "ÊÚÈÆ?"; +//STRIP001 Text[ greek ] = "ÃÝìéóì?"; +//STRIP001 Text[ korean ] = "채우ê¸?"; +//STRIP001 Text[ turkish ] = "Doldur"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Emplena"; +//STRIP001 Text[ thai ] = "เติà¸?"; +//STRIP001 Text[ czech ] = "Vyplnit"; +//STRIP001 Text[ hebrew ] = "Füllen"; +//STRIP001 Text[ hindi ] = "à¤à¤°à¥?"; +//STRIP001 }; + String STR_UNDO_MERGE + { + Text [ de ] = "Zusammenfassen" ; + Text [ en-US ] = "Merge" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Intercalar"; + Text[ ru ] = "Объединить"; + Text[ el ] = "ΣυγκÎντÏωση"; + Text[ nl ] = "Samenvatten"; + Text[ fr ] = "Fusionner"; + Text[ es ] = "Unir"; + Text[ fi ] = "Yhdistä"; + Text[ ca ] = "Fusiona"; + Text[ it ] = "Unisci"; + Text[ da ] = "Flet"; + Text[ sv ] = "Sammanfoga"; + Text[ pl ] = "Scal"; + Text[ pt-BR ] = "Mesclar"; + Text[ th ] = "ผสาน"; + Text[ ja ] = "çµåˆ"; + Text[ ko ] = "병합"; + Text[ zh-CN ] = "åˆå¹¶"; + Text[ zh-TW ] = "åˆä½µ"; + Text[ tr ] = "BirleÅŸtir"; + Text[ hi-IN ] = "मिलाओ"; + Text[ ar ] = "دمج"; + Text[ he ] = "Zusammenfassen"; + }; + String STR_UNDO_REMERGE + { + Text [ de ] = "Zusammenfassung aufheben" ; + Text [ en-US ] = "Split" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Dividir"; + Text[ ru ] = "Разбить"; + Text[ el ] = "ΚατάÏγηση συγχώνευσης"; + Text[ nl ] = "Samenvatting opheffen"; + Text[ fr ] = "Diviser"; + Text[ es ] = "Dividir"; + Text[ fi ] = "Jaa"; + Text[ ca ] = "Divideix"; + Text[ it ] = "Dividi"; + Text[ da ] = "Opdel"; + Text[ sv ] = "Dela"; + Text[ pl ] = "Podziel"; + Text[ pt-BR ] = "Dividir"; + Text[ th ] = "à¹à¸¢à¸"; + Text[ ja ] = "çµåˆã®è§£é™¤"; + Text[ ko ] = "ë¶„í• "; + Text[ zh-CN ] = "å–消åˆå¹¶"; + Text[ zh-TW ] = "å–消åˆä½µ"; + Text[ tr ] = "Böl"; + Text[ hi-IN ] = "अलगाना"; + Text[ ar ] = "إزالة الضم"; + Text[ he ] = "Zusammenfassung aufheben"; + }; +//STRIP001 String STR_UNDO_AUTOFORMAT +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? AutoFormat : Auto-Format */ +//STRIP001 Text = "AutoFormat" ; +//STRIP001 Text [ ENGLISH ] = "AutoFormat" ; +//STRIP001 Text [ norwegian ] = "AutoFormat" ; +//STRIP001 Text [ italian ] = "Formattazione automatica" ; +//STRIP001 Text [ portuguese_brazilian ] = "AutoFormatação" ; +//STRIP001 Text [ portuguese ] = "AutoFormato" ; +//STRIP001 Text [ finnish ] = "Automaattinen muotoilu" ; +//STRIP001 Text [ danish ] = "AutoFormat" ; +//STRIP001 Text [ french ] = "AutoFormat" ; +//STRIP001 Text [ swedish ] = "Autoformat" ; +//STRIP001 Text [ dutch ] = "AutoOpmaak" ; +//STRIP001 Text [ spanish ] = "Formateado automático" ; +//STRIP001 Text [ english_us ] = "AutoFormat" ; +//STRIP001 Text[ chinese_simplified ] = "è‡ªåŠ¨æ ¼å¼"; +//STRIP001 Text[ russian ] = "Àâòîôîðìàò"; +//STRIP001 Text[ polish ] = "Autoformatowanie"; +//STRIP001 Text[ japanese ] = "オートフォーマッãƒ?"; +//STRIP001 Text[ chinese_traditional ] = "è‡ªå‹•æ ¼å¼"; +//STRIP001 Text[ arabic ] = "ÇáÊäÓí?ÇáÊáÞÇÆí"; +//STRIP001 Text[ greek ] = "ÁõôïÌïñö?"; +//STRIP001 Text[ korean ] = "ìžë™ ì„œì‹"; +//STRIP001 Text[ turkish ] = "Otomatik format"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Formatatge automàtic"; +//STRIP001 Text[ thai ] = "รูปà¹à¸šà¸šà¸à¸±à¸•à¹‚นมัตà¸?"; +//STRIP001 Text[ czech ] = "Automatický formát"; +//STRIP001 Text[ hebrew ] = "‮עיצו×?×וטומטיâ€?"; +//STRIP001 Text[ hindi ] = "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रचना"; +//STRIP001 }; +//STRIP001 String STR_UNDO_REPLACE +//STRIP001 { +//STRIP001 Text = "Ersetzen" ; +//STRIP001 Text [ ENGLISH ] = "Replace" ; +//STRIP001 Text [ norwegian ] = "Replace" ; +//STRIP001 Text [ italian ] = "Sostituisci" ; +//STRIP001 Text [ portuguese_brazilian ] = "Substituir" ; +//STRIP001 Text [ portuguese ] = "Substituir" ; +//STRIP001 Text [ finnish ] = "Korvaa" ; +//STRIP001 Text [ danish ] = "Erstat" ; +//STRIP001 Text [ french ] = "Remplacer" ; +//STRIP001 Text [ swedish ] = "Ersätt" ; +//STRIP001 Text [ dutch ] = "Vervangen" ; +//STRIP001 Text [ spanish ] = "Reemplazar" ; +//STRIP001 Text [ english_us ] = "Replace" ; +//STRIP001 Text[ chinese_simplified ] = "替æ¢"; +//STRIP001 Text[ russian ] = "Çàìåíèòü"; +//STRIP001 Text[ polish ] = "Zamie?"; +//STRIP001 Text[ japanese ] = "ç½®æ›"; +//STRIP001 Text[ chinese_traditional ] = "代替"; +//STRIP001 Text[ arabic ] = "ÇÓÊÈÏÇ?"; +//STRIP001 Text[ greek ] = "ÁíôéêáôÜóôáó?"; +//STRIP001 Text[ korean ] = "바꾸ê¸?"; +//STRIP001 Text[ turkish ] = "Deðiþtir"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Reemplaça"; +//STRIP001 Text[ thai ] = "à¹à¸—นที่"; +//STRIP001 Text[ czech ] = "Nahradit"; +//STRIP001 Text[ hebrew ] = "‮החלפהâ€?"; +//STRIP001 Text[ hindi ] = "पà¥à¤°à¤¤à¤¿à¤¸à¥à¤¥à¤¾à¤ªà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_CURSORATTR +//STRIP001 { +//STRIP001 Text = "Attribute" ; +//STRIP001 Text [ ENGLISH ] = "Attributes" ; +//STRIP001 Text [ norwegian ] = "Attributes" ; +//STRIP001 Text [ italian ] = "Attributi" ; +//STRIP001 Text [ portuguese_brazilian ] = "Atributos" ; +//STRIP001 Text [ portuguese ] = "Atributos" ; +//STRIP001 Text [ finnish ] = "Määritteet" ; +//STRIP001 Text [ danish ] = "Attributter" ; +//STRIP001 Text [ french ] = "Attributs" ; +//STRIP001 Text [ swedish ] = "Attribut" ; +//STRIP001 Text [ dutch ] = "Attributen" ; +//STRIP001 Text [ spanish ] = "Atributos" ; +//STRIP001 Text [ english_us ] = "Attributes" ; +//STRIP001 Text[ chinese_simplified ] = "属æ€?"; +//STRIP001 Text[ russian ] = "Àòðèáóòû"; +//STRIP001 Text[ polish ] = "Atrybuty"; +//STRIP001 Text[ japanese ] = "属æ€?"; +//STRIP001 Text[ chinese_traditional ] = "屬æ€?"; +//STRIP001 Text[ arabic ] = "ÇáÓãÇÊ"; +//STRIP001 Text[ greek ] = "Éäéüôçôå?"; +//STRIP001 Text[ korean ] = "ì†ì„±"; +//STRIP001 Text[ turkish ] = "Öznitelikler"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Atributs"; +//STRIP001 Text[ thai ] = "คุณลัà¸à¸©à¸“à¸?"; +//STRIP001 Text[ czech ] = "Atributy"; +//STRIP001 Text[ hebrew ] = "â€®×ª×›×•× ×•×ªâ€?"; +//STRIP001 Text[ hindi ] = "à¤à¤Ÿà¥à¤°à¤¿à¤¬à¥à¤¯à¥‚टà¥à¤¸"; +//STRIP001 }; + String STR_UNDO_ENTERDATA + { + Text [ de ] = "Eingabe" ; + Text [ en-US ] = "Input" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Entrada"; + Text[ ru ] = "Ввод"; + Text[ el ] = "Εισαγωγή"; + Text[ nl ] = "Invoer"; + Text[ fr ] = "Saisie"; + Text[ es ] = "Entrada"; + Text[ fi ] = "Syötä"; + Text[ ca ] = "Entrada"; + Text[ it ] = "Digitazione"; + Text[ da ] = "Input"; + Text[ sv ] = "Inmatning"; + Text[ pl ] = "WejÅ›cie"; + Text[ pt-BR ] = "Entrada"; + Text[ th ] = "ป้à¸à¸™à¸„่า"; + Text[ ja ] = "入力"; + Text[ ko ] = "ìž…ë ¥"; + Text[ zh-CN ] = "输入"; + Text[ zh-TW ] = "輸入"; + Text[ tr ] = "Girdi"; + Text[ hi-IN ] = "इनपà¥à¤Ÿà¥"; + Text[ ar ] = "إدخال"; + Text[ he ] = "Eingabe"; + }; +//STRIP001 String STR_UNDO_INSCOLBREAK +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Spaltenumbruch einfügen : Spaltenumbruch einf³gen */ +//STRIP001 Text = "Spaltenumbruch einfügen" ; +//STRIP001 Text [ ENGLISH ] = "Insert Column Break" ; +//STRIP001 Text [ norwegian ] = "Insert Column Break" ; +//STRIP001 Text [ italian ] = "Inserisci interruzione colonna" ; +//STRIP001 Text [ portuguese_brazilian ] = "Inserir Quebra de Coluna" ; +//STRIP001 Text [ portuguese ] = "Inserir quebra de coluna" ; +//STRIP001 Text [ finnish ] = "Lisää sarakevaihto" ; +//STRIP001 Text [ danish ] = "Indsæt spalteskift" ; +//STRIP001 Text [ french ] = "Insérer un saut de colonne" ; +//STRIP001 Text [ swedish ] = "Infoga kolumnbrytning" ; +//STRIP001 Text [ dutch ] = "Kolomeinde invoegen" ; +//STRIP001 Text [ spanish ] = "Insertar salto de columna" ; +//STRIP001 Text [ english_us ] = "Insert Column Break" ; +//STRIP001 Text[ chinese_simplified ] = "æ’入分列ç¬?"; +//STRIP001 Text[ russian ] = "Âñòàâèòü ðàçðûâ ñòîëáö?"; +//STRIP001 Text[ polish ] = "Wstaw podzia?kolumny"; +//STRIP001 Text[ japanese ] = "改列ã®æŒ¿å…?"; +//STRIP001 Text[ chinese_traditional ] = "æ’å…¥æ›æ¬„"; +//STRIP001 Text[ arabic ] = "ÅÏÑÇ?ÝÇÕá ÃÚãÏ?"; +//STRIP001 Text[ greek ] = "ÅéóáãùãÞ áëëáãÞ?óôÞëçò"; +//STRIP001 Text[ korean ] = "ì—?나누ê¸?삽입"; +//STRIP001 Text[ turkish ] = "Sütun sonu ekle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Insereix un salt de columna"; +//STRIP001 Text[ thai ] = "à¹à¸—รà¸à¸•à¸±à¸§à¹à¸šà¹ˆà¸‡à¸„à¸à¸¥à¸±à¸¡à¸™à¹Œ"; +//STRIP001 Text[ czech ] = "Vložit zalomenà sloupce"; +//STRIP001 Text[ hebrew ] = "‮הוספ×?הפסרת טור יזומהâ€?"; +//STRIP001 Text[ hindi ] = "Insert Column Break"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DELCOLBREAK +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Spaltenumbruch löschen : Spaltenumbruch l÷schen */ +//STRIP001 Text = "Spaltenumbruch löschen" ; +//STRIP001 Text [ ENGLISH ] = "Delete Column Break " ; +//STRIP001 Text [ norwegian ] = "Delete Column Break " ; +//STRIP001 Text [ italian ] = "Elimina interruzione colonna" ; +//STRIP001 Text [ portuguese_brazilian ] = "Excluir quebra de coluna" ; +//STRIP001 Text [ portuguese ] = "Eliminar quebra de coluna" ; +//STRIP001 Text [ finnish ] = "Poista sarakevaihto" ; +//STRIP001 Text [ danish ] = "Slet spalteskift" ; +//STRIP001 Text [ french ] = "Supprimer le saut de colonne" ; +//STRIP001 Text [ swedish ] = "Radera kolumnbrytning" ; +//STRIP001 Text [ dutch ] = "Kolomeinde verwijderen" ; +//STRIP001 Text [ spanish ] = "Borrar salto de columna" ; +//STRIP001 Text [ english_us ] = "Delete column break" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤åˆ†åˆ—ç¬?"; +//STRIP001 Text[ russian ] = "Óäàëèò?ðàçðûâ ñòîëáö?"; +//STRIP001 Text[ polish ] = "Usu?podzia?kolumny"; +//STRIP001 Text[ japanese ] = "改列ã®å‰Šé™?"; +//STRIP001 Text[ chinese_traditional ] = "刪除æ›æ¬„"; +//STRIP001 Text[ arabic ] = "ÍÐ?ÝæÇÕ?ÇáÃÚãÏ?"; +//STRIP001 Text[ greek ] = "ÄéáãñáöÞ áëëáãÞ?óôÞëçò"; +//STRIP001 Text[ korean ] = "ì—?나누ê¸?ì‚ì œ"; +//STRIP001 Text[ turkish ] = "Sütun sonunu sil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suprimeix el salt de columna"; +//STRIP001 Text[ thai ] = "ลบตัวà¹à¸šà¹ˆà¸‡à¸„à¸à¸¥à¸±à¸¡à¸™à¹Œ"; +//STRIP001 Text[ czech ] = "Odstranit zalomenà sloupce"; +//STRIP001 Text[ hebrew ] = "Spaltenumbruch löschen"; +//STRIP001 Text[ hindi ] = "सà¥à¤¤à¤‚à¤?खणà¥à¤¡à¤?मिटाà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_INSROWBREAK +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Zeilenumbruch einfügen : Zeilenumbruch einf³gen */ +//STRIP001 Text = "Zeilenumbruch einfügen" ; +//STRIP001 Text [ ENGLISH ] = "Insert Row Break" ; +//STRIP001 Text [ norwegian ] = "Insert Row Break" ; +//STRIP001 Text [ italian ] = "Inserisci interruzione riga" ; +//STRIP001 Text [ portuguese_brazilian ] = "Inserir Quebra de Linha" ; +//STRIP001 Text [ portuguese ] = "Inserir quebra de linha" ; +//STRIP001 Text [ finnish ] = "Lisää rivinvaihto" ; +//STRIP001 Text [ danish ] = "Indsæt linjeskift" ; +//STRIP001 Text [ french ] = "Insérer un renvoi ?la ligne" ; +//STRIP001 Text [ swedish ] = "Infoga radbrytning" ; +//STRIP001 Text [ dutch ] = "Rij-einde invoegen" ; +//STRIP001 Text [ spanish ] = "Insertar salto de fila" ; +//STRIP001 Text [ english_us ] = "Insert Row Break" ; +//STRIP001 Text[ chinese_simplified ] = "æ’å…¥æ¢è¡Œ"; +//STRIP001 Text[ russian ] = "Âñòàâèòü ðàçðûâ ñòðîêè"; +//STRIP001 Text[ polish ] = "Wstaw podzia?wiersza"; +//STRIP001 Text[ japanese ] = "改行ã®æŒ¿å…?"; +//STRIP001 Text[ chinese_traditional ] = "æ’å…¥æ›æ¬„"; +//STRIP001 Text[ arabic ] = "ÅÏÑÇ?ÝÇÕá ÕÝæÝ"; +//STRIP001 Text[ greek ] = "ÅéóáãùãÞ áëëáãÞ?ãñáììÞ?"; +//STRIP001 Text[ korean ] = "í–?나누ê¸?삽입"; +//STRIP001 Text[ turkish ] = "Satýr sonu ekle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Insereix un salt de fila"; +//STRIP001 Text[ thai ] = "à¹à¸—รà¸à¸•à¸±à¸§à¹à¸šà¹ˆà¸‡à¹à¸–ว"; +//STRIP001 Text[ czech ] = "Vložit zalomenà řádku"; +//STRIP001 Text[ hebrew ] = "Zeilenumbruch einfügen"; +//STRIP001 Text[ hindi ] = "पंकà¥à¤¤à¤¿ खणà¥à¤¡à¤?जोड़à¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DELROWBREAK +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Zeilenumbruch löschen : Zeilenumbruch l÷schen */ +//STRIP001 Text = "Zeilenumbruch löschen" ; +//STRIP001 Text [ ENGLISH ] = "Delete Row Break" ; +//STRIP001 Text [ norwegian ] = "Delete Row Break" ; +//STRIP001 Text [ italian ] = "Elimina interruzione riga" ; +//STRIP001 Text [ portuguese_brazilian ] = "Excluir quebra de linha" ; +//STRIP001 Text [ portuguese ] = "Eliminar quebra de linha" ; +//STRIP001 Text [ finnish ] = "Poista rivinvaihto" ; +//STRIP001 Text [ danish ] = "Slet linjeskift" ; +//STRIP001 Text [ french ] = "Supprimer le renvoi ?la ligne" ; +//STRIP001 Text [ swedish ] = "Radera radbrytning" ; +//STRIP001 Text [ dutch ] = "Rij-einde verwijderen" ; +//STRIP001 Text [ spanish ] = "Borrar salto de fila" ; +//STRIP001 Text [ english_us ] = "Delete row break" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤æ¢è¡Œç¬?"; +//STRIP001 Text[ russian ] = "Óäàëèò?ðàçðûâ ñòðîêè"; +//STRIP001 Text[ polish ] = "Usu?podzia?wiersza"; +//STRIP001 Text[ japanese ] = "改行ã®å‰Šé™?"; +//STRIP001 Text[ chinese_traditional ] = "å–消æ›åˆ—"; +//STRIP001 Text[ arabic ] = "ÍÐ?ÝÇÕá ÇáÃÓØÑ"; +//STRIP001 Text[ greek ] = "ÄéáãñáöÞ áëëáãÞ?ãñáììÞ?"; +//STRIP001 Text[ korean ] = "í–?나누ê¸?ì‚ì œ"; +//STRIP001 Text[ turkish ] = "Satýr sonunu sil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suprimeix el salt de fila"; +//STRIP001 Text[ thai ] = "ลบตัวà¹à¸šà¹ˆà¸‡à¹à¸–ว"; +//STRIP001 Text[ czech ] = "Odstranit zalomenà řádku"; +//STRIP001 Text[ hebrew ] = "Zeilenumbruch löschen"; +//STRIP001 Text[ hindi ] = "पंकà¥à¤¤à¤¿ खणà¥à¤¡à¤?मिटाà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DOOUTLINE +//STRIP001 { +//STRIP001 Text = "Detail einblenden" ; +//STRIP001 Text [ ENGLISH ] = "Open Outline" ; +//STRIP001 Text [ norwegian ] = "Open Outline" ; +//STRIP001 Text [ italian ] = "Mostra dettaglio" ; +//STRIP001 Text [ portuguese_brazilian ] = "Ver Detalhes" ; +//STRIP001 Text [ portuguese ] = "Mostrar detalhe" ; +//STRIP001 Text [ finnish ] = "Näyt?tiedot" ; +//STRIP001 Text [ danish ] = "Vis detaljer" ; +//STRIP001 Text [ french ] = "Afficher les détails" ; +//STRIP001 Text [ swedish ] = "Visa detalj" ; +//STRIP001 Text [ dutch ] = "Details weergeven" ; +//STRIP001 Text [ spanish ] = "Mostrar detalles" ; +//STRIP001 Text [ english_us ] = "View Details" ; +//STRIP001 Text[ chinese_simplified ] = "显示细节"; +//STRIP001 Text[ russian ] = "Ïîêàçàòü äåòàëè"; +//STRIP001 Text[ polish ] = "Poka?szczegó³y"; +//STRIP001 Text[ japanese ] = "詳細表示"; +//STRIP001 Text[ chinese_traditional ] = "顯示細節"; +//STRIP001 Text[ arabic ] = "ÅÙåÇ?ÇáÊÝÇÕíá"; +//STRIP001 Text[ greek ] = "ÅìöÜíéóç ëåðôïìåñåéþí"; +//STRIP001 Text[ korean ] = "세부 ì •ë³´ 표시"; +//STRIP001 Text[ turkish ] = "Ayrýntýlar?görüntüle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Detalls de visualitzaci?"; +//STRIP001 Text[ thai ] = "รายละเà¸à¸µà¸¢à¸”มุมมà¸à¸‡"; +//STRIP001 Text[ czech ] = "Zobrazit detaily"; +//STRIP001 Text[ hebrew ] = "Detail einblenden"; +//STRIP001 Text[ hindi ] = "दृशà¥à¤?विवरà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_REDOOUTLINE +//STRIP001 { +//STRIP001 Text = "Detail ausblenden" ; +//STRIP001 Text [ ENGLISH ] = "Close Outline" ; +//STRIP001 Text [ norwegian ] = "Close Outline" ; +//STRIP001 Text [ italian ] = "Nascondi dettaglio" ; +//STRIP001 Text [ portuguese_brazilian ] = "Ocultar detalhes" ; +//STRIP001 Text [ portuguese ] = "Ocultar detalhes" ; +//STRIP001 Text [ finnish ] = "Piilota tiedot" ; +//STRIP001 Text [ danish ] = "Skjul detaljer" ; +//STRIP001 Text [ french ] = "Masquer les détails" ; +//STRIP001 Text [ swedish ] = "Dölj detalj" ; +//STRIP001 Text [ dutch ] = "Details verbergen" ; +//STRIP001 Text [ spanish ] = "Ocultar detalles" ; +//STRIP001 Text [ english_us ] = "Hide details" ; +//STRIP001 Text[ chinese_simplified ] = "éšå…¥ç»†èŠ‚"; +//STRIP001 Text[ russian ] = "Ñêðûòü äåòàëè"; +//STRIP001 Text[ polish ] = "Ukryj szczegó³y"; +//STRIP001 Text[ japanese ] = "詳細表示ã—ãªã?"; +//STRIP001 Text[ chinese_traditional ] = "隱入細節"; +//STRIP001 Text[ arabic ] = "ÅÎÝÇ?ÇáÊÝÇÕíá"; +//STRIP001 Text[ greek ] = "Áðüêñõøç ëåðôïìåñåéþí"; +//STRIP001 Text[ korean ] = "세부 ì •ë³´ 숨기ê¸?"; +//STRIP001 Text[ turkish ] = "Ayrýntýlar?gizle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Oculta els detalls"; +//STRIP001 Text[ thai ] = "ซ่à¸à¸™à¸£à¸²à¸¢à¸¥à¸°à¹€à¸à¸µà¸¢à¸”"; +//STRIP001 Text[ czech ] = "Skrýt detaily"; +//STRIP001 Text[ hebrew ] = "Detail ausblenden"; +//STRIP001 Text[ hindi ] = "विवरणोà¤?को छिपाना"; +//STRIP001 }; +//STRIP001 String STR_UNDO_MAKEOUTLINE +//STRIP001 { +//STRIP001 Text = "Gruppierung" ; +//STRIP001 Text [ ENGLISH ] = "Make Outline" ; +//STRIP001 Text [ norwegian ] = "Make Outline" ; +//STRIP001 Text [ italian ] = "Raggruppa" ; +//STRIP001 Text [ portuguese_brazilian ] = "Agrupar" ; +//STRIP001 Text [ portuguese ] = "Agrupar" ; +//STRIP001 Text [ finnish ] = "Ryhm?" ; +//STRIP001 Text [ danish ] = "Gruppering" ; +//STRIP001 Text [ french ] = "Grouper" ; +//STRIP001 Text [ swedish ] = "Gruppering" ; +//STRIP001 Text [ dutch ] = "Groep" ; +//STRIP001 Text [ spanish ] = "Agrupar" ; +//STRIP001 Text [ english_us ] = "Group" ; +//STRIP001 Text[ chinese_simplified ] = "分组"; +//STRIP001 Text[ russian ] = "Ãðóïïèðîâàòü"; +//STRIP001 Text[ polish ] = "Grupuj"; +//STRIP001 Text[ japanese ] = "グループåŒ?"; +//STRIP001 Text[ chinese_traditional ] = "群組"; +//STRIP001 Text[ arabic ] = "ÇáÊÌãí?"; +//STRIP001 Text[ greek ] = "Ïìáäïðïßçó?"; +//STRIP001 Text[ korean ] = "그룹"; +//STRIP001 Text[ turkish ] = "Grupla"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Grup"; +//STRIP001 Text[ thai ] = "จัดà¸à¸¥à¸¸à¹ˆà¸¡"; +//STRIP001 Text[ czech ] = "Seskupit"; +//STRIP001 Text[ hebrew ] = "Gruppierung"; +//STRIP001 Text[ hindi ] = "समूह"; +//STRIP001 }; +//STRIP001 String STR_UNDO_REMAKEOUTLINE +//STRIP001 { +//STRIP001 Text = "Gruppierung aufheben" ; +//STRIP001 Text [ ENGLISH ] = "Delete Outline" ; +//STRIP001 Text [ norwegian ] = "Delete Outline" ; +//STRIP001 Text [ italian ] = "Elimina struttura" ; +//STRIP001 Text [ portuguese_brazilian ] = "Desagrupar" ; +//STRIP001 Text [ portuguese ] = "Desagrupar" ; +//STRIP001 Text [ finnish ] = "Pura ryhm?" ; +//STRIP001 Text [ danish ] = "Ophæv gruppering" ; +//STRIP001 Text [ french ] = "Dissocier" ; +//STRIP001 Text [ swedish ] = "Upphäv gruppering" ; +//STRIP001 Text [ dutch ] = "Groepering opheffen" ; +//STRIP001 Text [ spanish ] = "Desagrupar" ; +//STRIP001 Text [ english_us ] = "Ungroup" ; +//STRIP001 Text[ chinese_simplified ] = "å–消分组"; +//STRIP001 Text[ russian ] = "Ðàçãðóïïèðîâàò?"; +//STRIP001 Text[ polish ] = "Rozgrupuj"; +//STRIP001 Text[ japanese ] = "グループ解除"; +//STRIP001 Text[ chinese_traditional ] = "å–消群組"; +//STRIP001 Text[ arabic ] = "ÅÒÇá?ÇáÊÌãí?"; +//STRIP001 Text[ greek ] = "ÊáôÜñãçó?ïìáäïðïßçóçò"; +//STRIP001 Text[ korean ] = "그룹 í•´ì œ"; +//STRIP001 Text[ turkish ] = "Grubu çöz"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Desagrupa"; +//STRIP001 Text[ thai ] = "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸¥à¸¸à¹ˆà¸¡"; +//STRIP001 Text[ czech ] = "ZruÅ¡it seskupenÃ"; +//STRIP001 Text[ hebrew ] = "Gruppierung aufheben"; +//STRIP001 Text[ hindi ] = "अलगाना"; +//STRIP001 }; +//STRIP001 String STR_UNDO_OUTLINELEVEL +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Gliederungsebene auswählen : Gliederungsebene auswõhlen */ +//STRIP001 Text = "Gliederungsebene auswählen" ; +//STRIP001 Text [ ENGLISH ] = "Select Outline Level" ; +//STRIP001 Text [ norwegian ] = "Select Outline Level" ; +//STRIP001 Text [ italian ] = "Seleziona livello struttura" ; +//STRIP001 Text [ portuguese_brazilian ] = "Selecionar nível do tópico" ; +//STRIP001 Text [ portuguese ] = "Seleccionar nível de esquema" ; +//STRIP001 Text [ finnish ] = "Valitse jäsennystaso" ; +//STRIP001 Text [ danish ] = "Marker dispositionsniveau" ; +//STRIP001 Text [ french ] = "Sélectionner niveau de plan" ; +//STRIP001 Text [ swedish ] = "Välj dispositionsniv?" ; +//STRIP001 Text [ dutch ] = "Overzichtsniveau kiezen" ; +//STRIP001 Text [ spanish ] = "Seleccionar nivel del esquema" ; +//STRIP001 Text [ english_us ] = "Select outline level" ; +//STRIP001 Text[ chinese_simplified ] = "选择大纲çº?"; +//STRIP001 Text[ russian ] = "Âûáðàò?óðîâåí?ðàçìåòêè"; +//STRIP001 Text[ polish ] = "Wybierz poziom konspektu"; +//STRIP001 Text[ japanese ] = "アウトラインレベルã®é¸æŠž"; +//STRIP001 Text[ chinese_traditional ] = "é¸æ“‡å¤§ç¶±ç´?"; +//STRIP001 Text[ arabic ] = "ÊÍÏí?ãÓÊæ?ÇáÊÞÓí?"; +//STRIP001 Text[ greek ] = "Åðéëïã?åðéðÝäïõ äéÜñèñùóçò"; +//STRIP001 Text[ korean ] = "개요 수준 ì„ íƒ"; +//STRIP001 Text[ turkish ] = "Anahat düzeyini se?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Seleccioneu el nivell de contorn"; +//STRIP001 Text[ thai ] = "เลืà¸à¸à¸£à¸°à¸”ับเค้าร่าà¸?"; +//STRIP001 Text[ czech ] = "Vybrat úroveň osnovy"; +//STRIP001 Text[ hebrew ] = "Gliederungsebene auswählen"; +//STRIP001 Text[ hindi ] = "बाहरी रूपरेखà¤?सà¥à¤¤à¤° चà¥à¤¨à¥‹"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DOOUTLINEBLK +//STRIP001 { +//STRIP001 Text = "Detail einblenden" ; +//STRIP001 Text [ ENGLISH ] = "Open Outline" ; +//STRIP001 Text [ norwegian ] = "Open Outline" ; +//STRIP001 Text [ italian ] = "Mostra dettaglio" ; +//STRIP001 Text [ portuguese_brazilian ] = "Ver Detalhes" ; +//STRIP001 Text [ portuguese ] = "Mostrar detalhe" ; +//STRIP001 Text [ finnish ] = "Näyt?tiedot" ; +//STRIP001 Text [ danish ] = "Vis detaljer" ; +//STRIP001 Text [ french ] = "Afficher les détails" ; +//STRIP001 Text [ swedish ] = "Visa detalj" ; +//STRIP001 Text [ dutch ] = "Details weergeven" ; +//STRIP001 Text [ spanish ] = "Mostrar detalles" ; +//STRIP001 Text [ english_us ] = "View Details" ; +//STRIP001 Text[ chinese_simplified ] = "显示细节"; +//STRIP001 Text[ russian ] = "Ïîêàçàòü äåòàëè"; +//STRIP001 Text[ polish ] = "Poka?szczegó³y"; +//STRIP001 Text[ japanese ] = "詳細表示"; +//STRIP001 Text[ chinese_traditional ] = "顯示細節"; +//STRIP001 Text[ arabic ] = "ÅÙåÇ?ÇáÊÝÇÕíá"; +//STRIP001 Text[ greek ] = "ÅìöÜíéóç ëåðôïìåñåéþí"; +//STRIP001 Text[ korean ] = "세부 ì •ë³´ 표시"; +//STRIP001 Text[ turkish ] = "Ayrýntýlar?görüntüle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Mostra els detalls"; +//STRIP001 Text[ thai ] = "รายละเà¸à¸µà¸¢à¸”มุมมà¸à¸‡"; +//STRIP001 Text[ czech ] = "Zobrazit detaily"; +//STRIP001 Text[ hebrew ] = "Detail einblenden"; +//STRIP001 Text[ hindi ] = "दृशà¥à¤?विवरà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_REDOOUTLINEBLK +//STRIP001 { +//STRIP001 Text = "Detail ausblenden" ; +//STRIP001 Text [ ENGLISH ] = "Close Outline" ; +//STRIP001 Text [ norwegian ] = "Close Outline" ; +//STRIP001 Text [ italian ] = "Nascondi dettaglio" ; +//STRIP001 Text [ portuguese_brazilian ] = "Ocultar detalhes" ; +//STRIP001 Text [ portuguese ] = "Ocultar detalhes" ; +//STRIP001 Text [ finnish ] = "Piilota tiedot" ; +//STRIP001 Text [ danish ] = "Skjul detaljer" ; +//STRIP001 Text [ french ] = "Masquer les détails" ; +//STRIP001 Text [ swedish ] = "Dölj detalj" ; +//STRIP001 Text [ dutch ] = "Details verbergen" ; +//STRIP001 Text [ spanish ] = "Ocultar detalles" ; +//STRIP001 Text [ english_us ] = "Hide details" ; +//STRIP001 Text[ chinese_simplified ] = "éšå…¥ç»†èŠ‚"; +//STRIP001 Text[ russian ] = "Ñêðûòü äåòàëè"; +//STRIP001 Text[ polish ] = "Ukryj szczegó³y"; +//STRIP001 Text[ japanese ] = "詳細表示ã—ãªã?"; +//STRIP001 Text[ chinese_traditional ] = "隱入細節"; +//STRIP001 Text[ arabic ] = "ÅÎÝÇ?ÇáÊÝÇÕíá"; +//STRIP001 Text[ greek ] = "Áðüêñõøç ëåðôïìåñåéþí"; +//STRIP001 Text[ korean ] = "세부 ì •ë³´ 숨기ê¸?"; +//STRIP001 Text[ turkish ] = "Ayrýntýlar?gizle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Oculta els detalls"; +//STRIP001 Text[ thai ] = "ซ่à¸à¸™à¸£à¸²à¸¢à¸¥à¸°à¹€à¸à¸µà¸¢à¸”"; +//STRIP001 Text[ czech ] = "Skrýt detaily"; +//STRIP001 Text[ hebrew ] = "Detail ausblenden"; +//STRIP001 Text[ hindi ] = "विवरणोà¤?को छिपाना"; +//STRIP001 }; +//STRIP001 String STR_UNDO_REMOVEALLOTLNS +//STRIP001 { +//STRIP001 Text = "Gliederung entfernen" ; +//STRIP001 Text [ ENGLISH ] = "Remove All Outlines" ; +//STRIP001 Text [ norwegian ] = "Remove All Outlines" ; +//STRIP001 Text [ italian ] = "Rimuovi tutte le strutture" ; +//STRIP001 Text [ portuguese_brazilian ] = "Remover Tópico" ; +//STRIP001 Text [ portuguese ] = "Remover esquema" ; +//STRIP001 Text [ finnish ] = "Tyhjenn?ääriviiva" ; +//STRIP001 Text [ danish ] = "Fjern disposition" ; +//STRIP001 Text [ french ] = "Effacer le plan" ; +//STRIP001 Text [ swedish ] = "Ta bort disposition" ; +//STRIP001 Text [ dutch ] = "Overzicht verwijderen" ; +//STRIP001 Text [ spanish ] = "Borrar esquema" ; +//STRIP001 Text [ english_us ] = "Clear Outline" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤å¤§çº²"; +//STRIP001 Text[ russian ] = "Î÷èñòèòü ðàçìåòêó"; +//STRIP001 Text[ polish ] = "Wyczyœæ konspekt"; +//STRIP001 Text[ japanese ] = "アウトラインã®å‰Šé™?"; +//STRIP001 Text[ chinese_traditional ] = "刪除大綱"; +//STRIP001 Text[ arabic ] = "ÅÒÇá?ÇáÊÞÓí?"; +//STRIP001 Text[ greek ] = "ÊáôÜñãçó?äéÜñèñùóçò"; +//STRIP001 Text[ korean ] = "아웃트ë¼ì?ì‚ì œ"; +//STRIP001 Text[ turkish ] = "Anahat?kaldýr"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Esborra el contorn"; +//STRIP001 Text[ thai ] = "ล้างเค้าร่าà¸?"; +//STRIP001 Text[ czech ] = "VyÄistit osnovu"; +//STRIP001 Text[ hebrew ] = "Gliederung entfernen"; +//STRIP001 Text[ hindi ] = "बाहरी रूपरेखà¤?की सफाई"; +//STRIP001 }; +//STRIP001 String STR_UNDO_AUTOOUTLINE +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? AutoGliederung : Auto-Gliederung */ +//STRIP001 Text = "AutoGliederung" ; +//STRIP001 Text [ ENGLISH ] = "Auto Outline" ; +//STRIP001 Text [ norwegian ] = "Auto Outline" ; +//STRIP001 Text [ italian ] = "Struttura automatica" ; +//STRIP001 Text [ portuguese_brazilian ] = "Tópicos Automáticos" ; +//STRIP001 Text [ portuguese ] = "AutoEsquema" ; +//STRIP001 Text [ finnish ] = "Automaattinen rajaus" ; +//STRIP001 Text [ danish ] = "AutoDisposition" ; +//STRIP001 Text [ french ] = "AutoPlan" ; +//STRIP001 Text [ swedish ] = "AutoDisposition" ; +//STRIP001 Text [ dutch ] = "AutoOverzicht" ; +//STRIP001 Text [ spanish ] = "Esquema automático" ; +//STRIP001 Text [ english_us ] = "AutoOutline" ; +//STRIP001 Text[ chinese_simplified ] = "自动显示大纲"; +//STRIP001 Text[ russian ] = "Àâòîðàçìåòêà"; +//STRIP001 Text[ polish ] = "Autokonspekt"; +//STRIP001 Text[ japanese ] = "アウトラインã®è‡ªå‹•ä½œæˆ?"; +//STRIP001 Text[ chinese_traditional ] = "自動顯示大綱"; +//STRIP001 Text[ arabic ] = "ÊÞÓí?ÊáÞÇÆí"; +//STRIP001 Text[ greek ] = "ÁõôïÄéÜñèñùó?"; +//STRIP001 Text[ korean ] = "ìžë™ 윤곽"; +//STRIP001 Text[ turkish ] = "Otomatik anahat"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Contorn automàtic"; +//STRIP001 Text[ thai ] = "เค้าร่างà¸à¸±à¸•à¹‚นมัติ"; +//STRIP001 Text[ czech ] = "Automatické souhrny"; +//STRIP001 Text[ hebrew ] = "AutoGliederung"; +//STRIP001 Text[ hindi ] = "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ बाहरी रूपरेखà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_SUBTOTALS +//STRIP001 { +//STRIP001 Text = "Teilergebnisse" ; +//STRIP001 Text [ ENGLISH ] = "Subtotals" ; +//STRIP001 Text [ norwegian ] = "Subtotals" ; +//STRIP001 Text [ italian ] = "Subtotali" ; +//STRIP001 Text [ portuguese_brazilian ] = "Sub-totais" ; +//STRIP001 Text [ portuguese ] = "Subtotais" ; +//STRIP001 Text [ finnish ] = "Välisummat" ; +//STRIP001 Text [ danish ] = "Subtotaler" ; +//STRIP001 Text [ french ] = "Sous-totaux" ; +//STRIP001 Text [ swedish ] = "Delresultat" ; +//STRIP001 Text [ dutch ] = "Subtotalen" ; +//STRIP001 Text [ spanish ] = "Subtotales" ; +//STRIP001 Text [ english_us ] = "Subtotals" ; +//STRIP001 Text[ chinese_simplified ] = "分类汇æ€?"; +//STRIP001 Text[ russian ] = "Ïðîìåæóòî÷íû?èòîã?"; +//STRIP001 Text[ polish ] = "Sumy czêœciowe"; +//STRIP001 Text[ japanese ] = "å°è¨ˆ"; +//STRIP001 Text[ chinese_traditional ] = "å°è¨ˆ"; +//STRIP001 Text[ arabic ] = "ÇáãÌÇãíÚ ÇáÝÑÚí?"; +//STRIP001 Text[ greek ] = "ÌåñéêÜ áèñïßóìáôá"; +//STRIP001 Text[ korean ] = "부분합"; +//STRIP001 Text[ turkish ] = "Ara toplamlar"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Subtotals"; +//STRIP001 Text[ thai ] = "ผลรวมย่à¸à¸?"; +//STRIP001 Text[ czech ] = "MezisouÄty"; +//STRIP001 Text[ hebrew ] = "Teilergebnisse"; +//STRIP001 Text[ hindi ] = "आधà¤?कà¥à¤²à¤œà¥‹à¤¡"; +//STRIP001 }; +//STRIP001 String STR_UNDO_SORT +//STRIP001 { +//STRIP001 Text = "Sortieren" ; +//STRIP001 Text [ ENGLISH ] = "Sort" ; +//STRIP001 Text [ norwegian ] = "Sorter" ; +//STRIP001 Text [ italian ] = "Ordina" ; +//STRIP001 Text [ portuguese_brazilian ] = "Ordenar" ; +//STRIP001 Text [ portuguese ] = "Ordenar" ; +//STRIP001 Text [ finnish ] = "Lajittele" ; +//STRIP001 Text [ danish ] = "Sorter" ; +//STRIP001 Text [ french ] = "Trier" ; +//STRIP001 Text [ swedish ] = "Sortera" ; +//STRIP001 Text [ dutch ] = "Sorteren" ; +//STRIP001 Text [ spanish ] = "Ordenar" ; +//STRIP001 Text [ english_us ] = "Sort" ; +//STRIP001 Text[ chinese_simplified ] = "排åº"; +//STRIP001 Text[ russian ] = "Ñîðòèðîâàò?"; +//STRIP001 Text[ polish ] = "Sortuj"; +//STRIP001 Text[ japanese ] = "並ã¹æ›¿ãˆ"; +//STRIP001 Text[ chinese_traditional ] = "排åº"; +//STRIP001 Text[ arabic ] = "ÇáÝÑ?"; +//STRIP001 Text[ greek ] = "Ôáîéíüìçóç"; +//STRIP001 Text[ korean ] = "ì •ë ¬"; +//STRIP001 Text[ turkish ] = "Sýrala"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Ordena"; +//STRIP001 Text[ thai ] = "เรียงลำดัà¸?"; +//STRIP001 Text[ czech ] = "Řadit"; +//STRIP001 Text[ hebrew ] = "‮מיוןâ€?"; +//STRIP001 Text[ hindi ] = "सोरà¥à¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_QUERY +//STRIP001 { +//STRIP001 Text = "Filtern" ; +//STRIP001 Text [ ENGLISH ] = "Query" ; +//STRIP001 Text [ norwegian ] = "Query" ; +//STRIP001 Text [ italian ] = "Filtra" ; +//STRIP001 Text [ portuguese_brazilian ] = "Filtro" ; +//STRIP001 Text [ portuguese ] = "Filtro" ; +//STRIP001 Text [ finnish ] = "Suodatus" ; +//STRIP001 Text [ danish ] = "Filtrer" ; +//STRIP001 Text [ french ] = "Filtrer" ; +//STRIP001 Text [ swedish ] = "Filtrera" ; +//STRIP001 Text [ dutch ] = "Filteren" ; +//STRIP001 Text [ spanish ] = "Filtrar" ; +//STRIP001 Text [ english_us ] = "Filter" ; +//STRIP001 Text[ chinese_simplified ] = "ç›é€?"; +//STRIP001 Text[ russian ] = "Ôèëüòð"; +//STRIP001 Text[ polish ] = "Filtr"; +//STRIP001 Text[ japanese ] = "フィルタ"; +//STRIP001 Text[ chinese_traditional ] = "篩é¸"; +//STRIP001 Text[ arabic ] = "ÊÕÝí?"; +//STRIP001 Text[ greek ] = "ÖéëôñÜñéóì?"; +//STRIP001 Text[ korean ] = "í•„í„°ë§?"; +//STRIP001 Text[ turkish ] = "Filtrele"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Filtre"; +//STRIP001 Text[ thai ] = "ตัวà¸à¸£à¸à¸?"; +//STRIP001 Text[ czech ] = "Filtr"; +//STRIP001 Text[ hebrew ] = "â€®×¡×™× ×•×Ÿâ€?"; +//STRIP001 Text[ hindi ] = "फिलà¥à¤Ÿà¤°"; +//STRIP001 }; + String STR_UNDO_DBDATA + { + /* ### ACHTUNG: Neuer Text in Resource? Datenbankbereiche ändern : Datenbankbereiche õndern */ + Text [ de ] = "Datenbankbereiche ändern" ; + Text [ en-US ] = "Change Database Range" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Modificar área da base de dados"; + Text[ ru ] = "Изменить диапазон базы данных"; + Text[ el ] = "Αλλαγή πεÏιοχών βάσης δεδομÎνων"; + Text[ nl ] = "Databasebereik wijzigen"; + Text[ fr ] = "Modifier les plages de base de données"; + Text[ es ] = "Modificar el área de la base de datos"; + Text[ fi ] = "Muuta tietokanta-aluetta"; + Text[ ca ] = "Canvia l'à rea de la base de dades"; + Text[ it ] = "Modifica aree database"; + Text[ da ] = "Modificer databaseomrÃ¥de"; + Text[ sv ] = "Ändra databasomrÃ¥den"; + Text[ pl ] = "ZmieÅ„ zakres bazy danych"; + Text[ pt-BR ] = "Alterar o Intervalo do Banco de Dados"; + Text[ th ] = "เปลี่ยนช่วงà¸à¸²à¸™à¸‚้à¸à¸¡à¸¹à¸¥"; + Text[ ja ] = "データベース範囲ã®å¤‰æ›´"; + Text[ ko ] = "ë°ì´í„°ë² ì´ìŠ¤ 범위 ìˆ˜ì •"; + Text[ zh-CN ] = "更改数æ®åº“区域"; + Text[ zh-TW ] = "變更資料庫å€åŸŸ"; + Text[ tr ] = "Veritabanı aralığını deÄŸiÅŸtir"; + Text[ hi-IN ] = "लेखासंचय फैलाव बदलो"; + Text[ ar ] = "تعديل نطاقات قاعدة بيانات"; + Text[ he ] = "Datenbankbereiche ändern"; + }; + String STR_UNDO_IMPORTDATA + { + Text [ de ] = "Importieren" ; + Text [ en-US ] = "Importing" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Importar"; + Text[ ru ] = "Импорт"; + Text[ el ] = "Εισαγωγή"; + Text[ nl ] = "Importeren"; + Text[ fr ] = "Importer"; + Text[ es ] = "Importar"; + Text[ fi ] = "Tuodaan"; + Text[ ca ] = "S'està important"; + Text[ it ] = "Importa"; + Text[ da ] = "Importerer"; + Text[ sv ] = "Importera"; + Text[ pl ] = "Importowanie"; + Text[ pt-BR ] = "Importando"; + Text[ th ] = "นำเข้า"; + Text[ ja ] = "インãƒãƒ¼ãƒˆ"; + Text[ ko ] = "ê°€ì ¸ì˜¤ê¸°"; + Text[ zh-CN ] = "输入"; + Text[ zh-TW ] = "匯入"; + Text[ tr ] = "İçe aktarıyor"; + Text[ hi-IN ] = "निरà¥à¤¯à¤¾à¤¤ करना"; + Text[ ar ] = "استيراد"; + Text[ he ] = "Importieren"; + }; +//STRIP001 String STR_UNDO_REPEATDB +//STRIP001 { +//STRIP001 Text = "Bereich aktualisieren" ; +//STRIP001 Text [ ENGLISH ] = "Refresh" ; +//STRIP001 Text [ portuguese ] = "Actualizar dados" ; +//STRIP001 Text [ english_us ] = "Refresh range" ; +//STRIP001 Text [ portuguese_brazilian ] = "Atualizar intervalo" ; +//STRIP001 Text [ swedish ] = "Uppdatera område" ; +//STRIP001 Text [ danish ] = "Opdater område" ; +//STRIP001 Text [ italian ] = "Aggiorna area" ; +//STRIP001 Text [ spanish ] = "Actualizar área" ; +//STRIP001 Text [ french ] = "Actualiser la plage" ; +//STRIP001 Text [ dutch ] = "Bereik bijwerken" ; +//STRIP001 Text[ chinese_simplified ] = "更新区域"; +//STRIP001 Text[ russian ] = "Îáíîâèòü äèàïàçîí"; +//STRIP001 Text[ polish ] = "Odœwie?zakres"; +//STRIP001 Text[ japanese ] = "範囲ã®æ›´æ–?"; +//STRIP001 Text[ chinese_traditional ] = "æ›´æ–°å€åŸ?"; +//STRIP001 Text[ arabic ] = "ÊÍÏí?ÇáäØÇÞ"; +//STRIP001 Text[ greek ] = "ÁíáíÝùóç ðåñéï÷Þò"; +//STRIP001 Text[ korean ] = "범위 새로 ê³ ì¹¨"; +//STRIP001 Text[ turkish ] = "Aralýð?güncelle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Refresca l'àrea"; +//STRIP001 Text[ finnish ] = "Päivit?alue"; +//STRIP001 Text[ thai ] = "ฟื้นฟูช่วง"; +//STRIP001 Text[ czech ] = "Obnovit oblast"; +//STRIP001 Text[ hebrew ] = "Bereich aktualisieren"; +//STRIP001 Text[ hindi ] = "नवीकरà¤?फैलाà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_GRAFEDIT +//STRIP001 { +//STRIP001 Text = "Grafik bearbeiten" ; +//STRIP001 Text [ ENGLISH ] = "Edit graphics" ; +//STRIP001 Text [ dutch ] = "Afbeelding bewerken" ; +//STRIP001 Text [ english_us ] = "Edit graphics" ; +//STRIP001 Text [ italian ] = "Modifica immagine" ; +//STRIP001 Text [ spanish ] = "Editar imagen" ; +//STRIP001 Text [ french ] = "Éditer l'image" ; +//STRIP001 Text [ swedish ] = "Redigera grafik" ; +//STRIP001 Text [ danish ] = "Rediger grafik" ; +//STRIP001 Text [ portuguese ] = "Editar imagem" ; +//STRIP001 Text [ portuguese_brazilian ] = "Editar figuras" ; +//STRIP001 Text[ chinese_simplified ] = "编辑图形"; +//STRIP001 Text[ russian ] = "Ïðàâêà ãðàôè÷åñêè?îáúåêòîâ"; +//STRIP001 Text[ polish ] = "Edytuj grafik?"; +//STRIP001 Text[ japanese ] = "図ã®ç·¨é›†"; +//STRIP001 Text[ chinese_traditional ] = "編輯圖形"; +//STRIP001 Text[ arabic ] = "ÊÍÑí?ÑÓæãÇÊ"; +//STRIP001 Text[ greek ] = "Åðåîåñãáóß?ãñáöéêïý"; +//STRIP001 Text[ korean ] = "그림 편집"; +//STRIP001 Text[ turkish ] = "Grafikleri düzenle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Edita els gràfics"; +//STRIP001 Text[ finnish ] = "Muuta grafiikkaa"; +//STRIP001 Text[ thai ] = "à¹à¸à¹‰à¹„ขà¸à¸£à¸²à¸Ÿà¸´à¸?"; +//STRIP001 Text[ czech ] = "Upravit obrázek"; +//STRIP001 Text[ hebrew ] = "Grafik bearbeiten"; +//STRIP001 Text[ hindi ] = "सà¥à¤šà¤¿à¤¤à¥à¤?का संपादन"; +//STRIP001 }; +//STRIP001 String STR_UNDO_LISTNAMES +//STRIP001 { +//STRIP001 Text = "Namen auflisten" ; +//STRIP001 Text [ ENGLISH ] = "List names" ; +//STRIP001 Text [ english_us ] = "List names" ; +//STRIP001 Text [ italian ] = "Elenca nomi" ; +//STRIP001 Text [ spanish ] = "Lista de nombres" ; +//STRIP001 Text [ french ] = "Liste des noms" ; +//STRIP001 Text [ dutch ] = "Lijst namen weergeven" ; +//STRIP001 Text [ swedish ] = "Lista upp namn" ; +//STRIP001 Text [ danish ] = "Opstil navne" ; +//STRIP001 Text [ portuguese ] = "Lista de nomes" ; +//STRIP001 Text [ portuguese_brazilian ] = "Nomes da lista" ; +//STRIP001 Text[ chinese_simplified ] = "列出å称"; +//STRIP001 Text[ russian ] = "Ñïèñîê èìåí"; +//STRIP001 Text[ polish ] = "Lista nazw"; +//STRIP001 Text[ japanese ] = "åå‰ãƒªã‚¹ãƒˆã‚’作る"; +//STRIP001 Text[ chinese_traditional ] = "列出å稱"; +//STRIP001 Text[ arabic ] = "Úã?ÞÇÆã?ÈÇáÃÓãÇÁ"; +//STRIP001 Text[ greek ] = "Ëßóô?ïíïìÜôùí"; +//STRIP001 Text[ korean ] = "ì´ë¦„ 목ë¡"; +//STRIP001 Text[ turkish ] = "Adlar?sýrala"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Noms de llista"; +//STRIP001 Text[ finnish ] = "Luettelonimet"; +//STRIP001 Text[ thai ] = "รายà¸à¸²à¸£à¸Šà¸·à¹ˆà¸"; +//STRIP001 Text[ czech ] = "Vypsat názvy"; +//STRIP001 Text[ hebrew ] = "Namen auflisten"; +//STRIP001 Text[ hindi ] = "सूची नाà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_PIVOT_NEW +//STRIP001 { +//STRIP001 Text = "Datenpilot-Tabelle anlegen" ; +//STRIP001 Text [ ENGLISH ] = "Create Data Pilot Table" ; +//STRIP001 Text [ english_us ] = "Create DataPilot Table" ; +//STRIP001 Text [ italian ] = "Crea tabella di DataPilot" ; +//STRIP001 Text [ spanish ] = "Crear tabla del Piloto de Datos" ; +//STRIP001 Text [ french ] = "Créer une table du pilote de données" ; +//STRIP001 Text [ dutch ] = "DataPiloot-tabel maken" ; +//STRIP001 Text [ swedish ] = "Skapa Datapilottabell" ; +//STRIP001 Text [ danish ] = "Opret DataPilot-tabel" ; +//STRIP001 Text [ portuguese ] = "Criar tabela do Piloto de Dados" ; +//STRIP001 Text [ portuguese_brazilian ] = "Criar Tabela Dinâmica" ; +//STRIP001 Text[ chinese_simplified ] = "建立数æ®åŠ©ç†å·¥ä½œè¡?"; +//STRIP001 Text[ russian ] = "Ñîçäàò?ñâîäíó?òàáëèö?"; +//STRIP001 Text[ polish ] = "Utwórz tabel?Pilota danych"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã®è¡¨ã‚’作æˆ?"; +//STRIP001 Text[ chinese_traditional ] = "建立資料助ç†å·¥ä½œè¡?"; +//STRIP001 Text[ arabic ] = "ÅäÔÇ?ÌÏæá ãÑÔÏ ÈíÇäÇÊ"; +//STRIP001 Text[ greek ] = "Äçìéïõñãßá ðßíáêá ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?í‘?만들ê¸?"; +//STRIP001 Text[ turkish ] = "Veri pilotu tablosu oluþtur"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Crea una taula del DataPilot"; +//STRIP001 Text[ finnish ] = "Luo tietojen ohjaustaulukko"; +//STRIP001 Text[ thai ] = "สร้างตารางข้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸‡"; +//STRIP001 Text[ czech ] = "VytvoÅ™it KontingenÄnà tabulku"; +//STRIP001 Text[ hebrew ] = "Datenpilot-Tabelle anlegen"; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠसारणी को उतà¥à¤ªà¤¨à¥à¤?करà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_PIVOT_MODIFY +//STRIP001 { +//STRIP001 Text = "Datenpilot-Tabelle bearbeiten" ; +//STRIP001 Text [ ENGLISH ] = "Modify Data Pilot Table" ; +//STRIP001 Text [ dutch ] = "DataPiloot-tabel bewerken" ; +//STRIP001 Text [ english_us ] = "Edit DataPilot Table" ; +//STRIP001 Text [ italian ] = "Modifica tabella di DataPilot" ; +//STRIP001 Text [ spanish ] = "Modificar tabla del Piloto de Datos" ; +//STRIP001 Text [ french ] = "Éditer la table du pilote de données" ; +//STRIP001 Text [ swedish ] = "Redigera Datapilottabell" ; +//STRIP001 Text [ danish ] = "Rediger DataPilot-tabel" ; +//STRIP001 Text [ portuguese ] = "Editar tabela do Piloto de Dados" ; +//STRIP001 Text [ portuguese_brazilian ] = "Editar Tabela Dinâmica" ; +//STRIP001 Text[ chinese_simplified ] = "编辑数æ®åŠ©ç†å·¥ä½œè¡?"; +//STRIP001 Text[ russian ] = "Èçìåíèòü ñâîäíó?òàáëèö?"; +//STRIP001 Text[ polish ] = "Edytuj tabel?Pilota danych"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã®è¡¨ã‚’ç·¨é›?"; +//STRIP001 Text[ chinese_traditional ] = "編輯資料助ç†å·¥ä½œè¡?"; +//STRIP001 Text[ arabic ] = "ÊÍÑí?ÌÏæá ãÑÔÏ ÇáÈíÇäÇÊ"; +//STRIP001 Text[ greek ] = "Åðåîåñãáóß?ðßíáêá ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?í‘?편집"; +//STRIP001 Text[ turkish ] = "Veri pilotu tablosunu düzenle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Edita la taula del DataPilot"; +//STRIP001 Text[ finnish ] = "Muuta tietojen ohjaustalukkoa"; +//STRIP001 Text[ thai ] = "à¹à¸à¹‰à¸•à¸²à¸£à¸²à¸‡à¸‚้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸‡"; +//STRIP001 Text[ czech ] = "Upravit KontingenÄnà tabulku"; +//STRIP001 Text[ hebrew ] = "Datenpilot-Tabelle bearbeiten"; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠसारणी का संपादन"; +//STRIP001 }; +//STRIP001 String STR_UNDO_PIVOT_DELETE +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Datenpilot-Tabelle löschen : Datenpilot-Tabelle l÷schen */ +//STRIP001 Text = "Datenpilot-Tabelle löschen" ; +//STRIP001 Text [ ENGLISH ] = "Delete Data Pilot Table" ; +//STRIP001 Text [ dutch ] = "DataPiloot-tabel wissen" ; +//STRIP001 Text [ english_us ] = "Delete DataPilot Table" ; +//STRIP001 Text [ italian ] = "Elimina tabella di DataPilot" ; +//STRIP001 Text [ spanish ] = "Borrar tabla del Piloto de Datos" ; +//STRIP001 Text [ french ] = "Supprimer la table du pilote de données" ; +//STRIP001 Text [ swedish ] = "Radera Datapilottabell" ; +//STRIP001 Text [ danish ] = "Slet DataPilot-tabel" ; +//STRIP001 Text [ portuguese ] = "Eliminar tabela do Piloto de Dados" ; +//STRIP001 Text [ portuguese_brazilian ] = "Excluir Tabela Dinâmica" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤æ•°æ®åŠ©ç†-工作è¡?"; +//STRIP001 Text[ russian ] = "Óäàëèò?ñâîäíó?òàáëèö?"; +//STRIP001 Text[ polish ] = "Usu?tabel?Pilota danych"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã®è¡¨ã‚’削é™?"; +//STRIP001 Text[ chinese_traditional ] = "刪除資料助ç†å·¥ä½œè¡?"; +//STRIP001 Text[ arabic ] = "ÍÐ?ÌÏæá ãÑÔÏ ÇáÈíÇäÇÊ"; +//STRIP001 Text[ greek ] = "ÄéáãñáöÞ ðßíáêá ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?í‘?ì‚ì œ"; +//STRIP001 Text[ turkish ] = "Veri pilotu tablosunu sil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suprimeix la taula del DataPilot"; +//STRIP001 Text[ finnish ] = "Poista tietojen ohjaustaulukko"; +//STRIP001 Text[ thai ] = "ลบตารางข้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸?"; +//STRIP001 Text[ czech ] = "Smazat KontingenÄnà tabulku"; +//STRIP001 Text[ hebrew ] = "Datenpilot-Tabelle löschen"; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠसारणी को मिटाà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_CONSOLIDATE +//STRIP001 { +//STRIP001 Text = "Konsolidieren" ; +//STRIP001 Text [ ENGLISH ] = "Consolidate" ; +//STRIP001 Text [ dutch ] = "Consolideren" ; +//STRIP001 Text [ english_us ] = "Consolidate" ; +//STRIP001 Text [ italian ] = "Consolida" ; +//STRIP001 Text [ spanish ] = "Consolidar" ; +//STRIP001 Text [ french ] = "Consolider" ; +//STRIP001 Text [ swedish ] = "Konsolidera" ; +//STRIP001 Text [ danish ] = "Konsolider" ; +//STRIP001 Text [ portuguese ] = "Consolidar" ; +//STRIP001 Text [ portuguese_brazilian ] = "Consolidar" ; +//STRIP001 Text[ chinese_simplified ] = "åˆå¹¶è®¡ç®—"; +//STRIP001 Text[ russian ] = "Îáúåäèíèòü"; +//STRIP001 Text[ polish ] = "Konsoliduj"; +//STRIP001 Text[ japanese ] = "çµ±åˆ"; +//STRIP001 Text[ chinese_traditional ] = "åˆä½µè¨ˆç®—"; +//STRIP001 Text[ arabic ] = "Ïã?"; +//STRIP001 Text[ greek ] = "Åíïðïßçó?"; +//STRIP001 Text[ korean ] = "통합"; +//STRIP001 Text[ turkish ] = "Birleþtir"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Consolida"; +//STRIP001 Text[ finnish ] = "Yhdist?"; +//STRIP001 Text[ thai ] = "รวบรวม"; +//STRIP001 Text[ czech ] = "Konsolidovat"; +//STRIP001 Text[ hebrew ] = "Konsolidieren"; +//STRIP001 Text[ hindi ] = "à¤à¤• करना"; +//STRIP001 }; +//STRIP001 String STR_UNDO_USESCENARIO +//STRIP001 { +//STRIP001 Text = "Szenario anwenden" ; +//STRIP001 Text [ ENGLISH ] = "Use scenario" ; +//STRIP001 Text [ dutch ] = "Scenario gebruiken" ; +//STRIP001 Text [ english_us ] = "Use scenario" ; +//STRIP001 Text [ italian ] = "Applica scenario" ; +//STRIP001 Text [ spanish ] = "Aplicar escenario" ; +//STRIP001 Text [ french ] = "Utiliser scénario" ; +//STRIP001 Text [ swedish ] = "Använd scenario" ; +//STRIP001 Text [ danish ] = "Anvend scenario" ; +//STRIP001 Text [ portuguese ] = "Aplicar cenário" ; +//STRIP001 Text [ portuguese_brazilian ] = "Usar cenário" ; +//STRIP001 Text[ chinese_simplified ] = "使用方案"; +//STRIP001 Text[ russian ] = "Èñïîëüçîâàòü ñöåíàðèé"; +//STRIP001 Text[ polish ] = "U¿yj scenariusza"; +//STRIP001 Text[ japanese ] = "シナリオã®é©ç”?"; +//STRIP001 Text[ chinese_traditional ] = "使用分æžè—本"; +//STRIP001 Text[ arabic ] = "ÇÓÊÎÏÇ?ÇáÓíäÇÑí?"; +//STRIP001 Text[ greek ] = "ÅöáñìïãÞ óåíáñßïõ"; +//STRIP001 Text[ korean ] = "시나리오 ì ìš©"; +//STRIP001 Text[ turkish ] = "Senaryoyu kullan"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Utilitza l'escenari"; +//STRIP001 Text[ finnish ] = "Käyt?skenaariota"; +//STRIP001 Text[ thai ] = "ใช้สถานà¸à¸²à¸£à¸“์สมมตà¸?"; +//STRIP001 Text[ czech ] = "PoužÃt scénář"; +//STRIP001 Text[ hebrew ] = "Szenario anwenden"; +//STRIP001 Text[ hindi ] = "विवरà¤?का उपयोà¤?करà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_MAKESCENARIO +//STRIP001 { +//STRIP001 Text = "Szenario anlegen" ; +//STRIP001 Text [ ENGLISH ] = "Make scenario" ; +//STRIP001 Text [ dutch ] = "Scenario maken" ; +//STRIP001 Text [ english_us ] = "Create scenario" ; +//STRIP001 Text [ italian ] = "Crea scenario" ; +//STRIP001 Text [ spanish ] = "Crear escenario" ; +//STRIP001 Text [ french ] = "Créer scénario" ; +//STRIP001 Text [ swedish ] = "Skapa scenario" ; +//STRIP001 Text [ danish ] = "Opret scenario" ; +//STRIP001 Text [ portuguese ] = "Criar cenário" ; +//STRIP001 Text [ portuguese_brazilian ] = "Criar cenário" ; +//STRIP001 Text[ chinese_simplified ] = "建立方案"; +//STRIP001 Text[ russian ] = "Ñîçäàò?ñöåíàðèé"; +//STRIP001 Text[ polish ] = "Utwórz scenariusz"; +//STRIP001 Text[ japanese ] = "シナリオã®ä½œæˆ?"; +//STRIP001 Text[ chinese_traditional ] = "建立分æžè—本"; +//STRIP001 Text[ arabic ] = "ÅäÔÇ?ÓíäÇÑí?"; +//STRIP001 Text[ greek ] = "Äçìéïõñãßá óåíáñßïõ"; +//STRIP001 Text[ korean ] = "시나리오 만들ê¸?"; +//STRIP001 Text[ turkish ] = "Senaryo oluþtur"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Crea l'escenari"; +//STRIP001 Text[ finnish ] = "Luo skenaario"; +//STRIP001 Text[ thai ] = "สร้างสถานà¸à¸²à¸£à¸“์สมมตà¸?"; +//STRIP001 Text[ czech ] = "VytvoÅ™it scénář"; +//STRIP001 Text[ hebrew ] = "Szenario anlegen"; +//STRIP001 Text[ hindi ] = "विवरà¤?उतà¥à¤ªà¤¨à¥à¤?करà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_EDITSCENARIO +//STRIP001 { +//STRIP001 Text = "Szenario bearbeiten" ; +//STRIP001 Text [ ENGLISH ] = "Edit scenario" ; +//STRIP001 Text [ portuguese ] = "Editar cenário" ; +//STRIP001 Text [ english_us ] = "Edit scenario" ; +//STRIP001 Text [ portuguese_brazilian ] = "Editar cenário" ; +//STRIP001 Text [ swedish ] = "Redigera scenario" ; +//STRIP001 Text [ danish ] = "Rediger scenario" ; +//STRIP001 Text [ italian ] = "Modifica scenario" ; +//STRIP001 Text [ spanish ] = "Editar escenario" ; +//STRIP001 Text [ french ] = "Éditer le scénario" ; +//STRIP001 Text [ dutch ] = "Scenario bewerken" ; +//STRIP001 Text[ chinese_simplified ] = "编辑方案"; +//STRIP001 Text[ russian ] = "Ïðàâêà ñöåíàð?"; +//STRIP001 Text[ polish ] = "Edytuj scenariusz"; +//STRIP001 Text[ japanese ] = "シナリオã®ç·¨é›?"; +//STRIP001 Text[ chinese_traditional ] = "編輯分æžè—本"; +//STRIP001 Text[ arabic ] = "ÊÍÑí?ÓíäÇÑí?"; +//STRIP001 Text[ greek ] = "Åðåîåñãáóß?óåíáñßïõ"; +//STRIP001 Text[ korean ] = "시나리오 편집"; +//STRIP001 Text[ turkish ] = "Senaryoyu düzenle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Edita l'escenari"; +//STRIP001 Text[ finnish ] = "Muuta skenaariota"; +//STRIP001 Text[ thai ] = "à¹à¸à¹‰à¹„ขสถานà¸à¸²à¸£à¸“์สมมตà¸?"; +//STRIP001 Text[ czech ] = "Upravit scénář"; +//STRIP001 Text[ hebrew ] = "Szenario bearbeiten"; +//STRIP001 Text[ hindi ] = "विवरà¤?का संपादन"; +//STRIP001 }; + String STR_UNDO_APPLYCELLSTYLE + { + Text [ de ] = "Zellvorlage anwenden" ; + Text [ en-US ] = "Apply Cell Style" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Aplicar estilo de célula"; + Text[ ru ] = "Применить Ñтиль Ñчейки"; + Text[ el ] = "ΕφαÏμογή στυλ κελιών"; + Text[ nl ] = "Celopmaakprofiel gebruiken"; + Text[ fr ] = "Appliquer un style de cellule"; + Text[ es ] = "Aplicar estilo de celda"; + Text[ fi ] = "Käytä solun tyyli"; + Text[ ca ] = "Aplica l'estil de la cel.la"; + Text[ it ] = "Applica modello di cella"; + Text[ da ] = "Anvend celletypografi"; + Text[ sv ] = "Använd cellmall"; + Text[ pl ] = "Zastosuj styl komórki"; + Text[ pt-BR ] = "Aplicar Estilo de Célula"; + Text[ th ] = "ใช้ลัà¸à¸©à¸“ะเซลล์"; + Text[ ja ] = "セルスタイルをé©ç”¨"; + Text[ ko ] = "ì…€ ìŠ¤íƒ€ì¼ ì ìš©"; + Text[ zh-CN ] = "使用å•å…ƒæ ¼æ ·å¼"; + Text[ zh-TW ] = "使用儲å˜æ ¼æ¨£å¼"; + Text[ tr ] = "Hücre biçimini uygula"; + Text[ hi-IN ] = "कोषà¥à¤ शैली लागू करो"; + Text[ ar ] = "استخدام نمط خلية"; + Text[ he ] = "Zellvorlage anwenden"; + }; +//STRIP001 String STR_UNDO_EDITCELLSTYLE +//STRIP001 { +//STRIP001 Text = "Zellvorlage bearbeiten" ; +//STRIP001 Text [ ENGLISH ] = "Edit cell style" ; +//STRIP001 Text[ english_us ] = "Edit Cell Style"; +//STRIP001 Text[ portuguese ] = "Editar estilo de célula"; +//STRIP001 Text[ russian ] = "Ïðàâêà ñòèëÿ ñòðàíèöû"; +//STRIP001 Text[ greek ] = "Åðåîåñãáóß?ôï?óôõë ôï?êåëéïý"; +//STRIP001 Text[ dutch ] = "Celopmaakprofiel bewerken"; +//STRIP001 Text[ french ] = "Éditer le style de cellule"; +//STRIP001 Text[ spanish ] = "Editar estilo de celda"; +//STRIP001 Text[ italian ] = "Modifica modello di cella"; +//STRIP001 Text[ danish ] = "Rediger celletypografi"; +//STRIP001 Text[ swedish ] = "Redigera cellformatmall"; +//STRIP001 Text[ polish ] = "Edytuj styl komórki"; +//STRIP001 Text[ portuguese_brazilian ] = "Editar estilo de célula"; +//STRIP001 Text[ japanese ] = "セルスタイルã®ç·¨é›?"; +//STRIP001 Text[ korean ] = "ì…€ 스타ì?편집"; +//STRIP001 Text[ chinese_simplified ] = "编辑å•å…ƒæ ¼æ ·å¼?"; +//STRIP001 Text[ chinese_traditional ] = "編輯儲å˜æ ¼æ¨£å¼?"; +//STRIP001 Text[ turkish ] = "Hücre biçimi düzenle"; +//STRIP001 Text[ arabic ] = "ÊÍÑí?äã?ÇáÎáíÉ"; +//STRIP001 Text[ catalan ] = "Edita l'estil de la cel.la"; +//STRIP001 Text[ finnish ] = "Muuta solun tyyli?"; +//STRIP001 Text[ thai ] = "à¹à¸à¹‰à¹„ขลัà¸à¸©à¸“ะเซลล์"; +//STRIP001 Text[ czech ] = "Upravit styl buňky"; +//STRIP001 Text[ hebrew ] = "Zellvorlage bearbeiten"; +//STRIP001 Text[ hindi ] = "कोषà¥à¤?शैली का संपादन"; +//STRIP001 }; +//STRIP001 String STR_UNDO_APPLYPAGESTYLE +//STRIP001 { +//STRIP001 Text = "Seitenvorlage anwenden" ; +//STRIP001 Text [ ENGLISH ] = "Apply page style" ; +//STRIP001 Text[ english_us ] = "Apply Page Style"; +//STRIP001 Text[ portuguese ] = "Aplicar estilo de página"; +//STRIP001 Text[ russian ] = "Ïðèìåíèò?ñòèë?ñòðàíèöû"; +//STRIP001 Text[ greek ] = "ÅöáñìïóÞ ôï?óôõë óåëßäá?"; +//STRIP001 Text[ dutch ] = "Pagina-opmaakprofiel toepassen"; +//STRIP001 Text[ french ] = "Appliquer le style de page"; +//STRIP001 Text[ spanish ] = "Aplicar estilo de página"; +//STRIP001 Text[ italian ] = "Applica modello di pagina"; +//STRIP001 Text[ danish ] = "Anvend sidetypografi"; +//STRIP001 Text[ swedish ] = "Använd sidformatmall"; +//STRIP001 Text[ polish ] = "Zastosuj styl strony"; +//STRIP001 Text[ portuguese_brazilian ] = "Aplicar estilo de página"; +//STRIP001 Text[ japanese ] = "ページスタイルã®é©ç”¨"; +//STRIP001 Text[ korean ] = "페ì´ì§€ 스타ì?ì ìš©"; +//STRIP001 Text[ chinese_simplified ] = "套用页é¢æ ·å¼"; +//STRIP001 Text[ chinese_traditional ] = "採用é é¢æ¨£å¼"; +//STRIP001 Text[ turkish ] = "Sayfa biçimini uygula"; +//STRIP001 Text[ arabic ] = "ÊÚíí?äã?ÇáÕÝÍÉ"; +//STRIP001 Text[ catalan ] = "Aplica l'estil de la pàgina"; +//STRIP001 Text[ finnish ] = "Käyt?sivun tyyli?"; +//STRIP001 Text[ thai ] = "ใช้ลัà¸à¸©à¸“ะหน้à¸?"; +//STRIP001 Text[ czech ] = "PoužÃt styl stránky"; +//STRIP001 Text[ hebrew ] = "‮החל×?×¡×’× ×•×Ÿ דףâ€?"; +//STRIP001 Text[ hindi ] = "पृषà¥à¤?शैली लागू करà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_EDITPAGESTYLE +//STRIP001 { +//STRIP001 Text = "Seitenvorlage bearbeiten" ; +//STRIP001 Text [ ENGLISH ] = "Edit page style" ; +//STRIP001 Text[ english_us ] = "Edit Page Style"; +//STRIP001 Text[ portuguese ] = "Editar estilo de página"; +//STRIP001 Text[ russian ] = "Ïðàâèò?ñòèë?ñòðàíèöû"; +//STRIP001 Text[ greek ] = "Åðåîåñãáóß?ôï?óôõë óåëßäá?"; +//STRIP001 Text[ dutch ] = "Pagina-opmaakprofiel bewerken"; +//STRIP001 Text[ french ] = "Éditer le style de page"; +//STRIP001 Text[ spanish ] = "Editar estilo de página"; +//STRIP001 Text[ italian ] = "Modifica modello di pagina"; +//STRIP001 Text[ danish ] = "Rediger sidetypografi"; +//STRIP001 Text[ swedish ] = "Redigera sidformatmall"; +//STRIP001 Text[ polish ] = "Edytuj styl strony"; +//STRIP001 Text[ portuguese_brazilian ] = "Editar estilo de página"; +//STRIP001 Text[ japanese ] = "ページスタイルã®ç·¨é›†"; +//STRIP001 Text[ korean ] = "페ì´ì§€ 스타ì?편집"; +//STRIP001 Text[ chinese_simplified ] = "编辑页é¢æ ·å¼"; +//STRIP001 Text[ chinese_traditional ] = "編輯é é¢æ¨£å¼"; +//STRIP001 Text[ turkish ] = "Sayfa biçimini düzenle"; +//STRIP001 Text[ arabic ] = "ÊÍÑí?äã?ÇáÕÝÍÉ"; +//STRIP001 Text[ catalan ] = "Edita l'estil de la pàgina"; +//STRIP001 Text[ finnish ] = "Muuta sivun tyyli?"; +//STRIP001 Text[ thai ] = "à¹à¸à¹‰à¹„ขลัà¸à¸©à¸“ะหน้à¸?"; +//STRIP001 Text[ czech ] = "Upravit styl stránky"; +//STRIP001 Text[ hebrew ] = "Seitenvorlage bearbeiten"; +//STRIP001 Text[ hindi ] = "पृषà¥à¤?शैली का संपादन"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DETADDPRED +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Spur zum Vorgänger : Spur zum Vorgõnger */ +//STRIP001 Text = "Spur zum Vorgänger" ; +//STRIP001 Text [ ENGLISH ] = "Trace Predescessor" ; +//STRIP001 Text [ english_us ] = "Trace Precedents" ; +//STRIP001 Text [ italian ] = "Individua ~precedenti" ; +//STRIP001 Text [ spanish ] = "Rastrear los precedentes" ; +//STRIP001 Text [ french ] = "Repérer les antécédents" ; +//STRIP001 Text [ dutch ] = "Spoor naar voorganger" ; +//STRIP001 Text [ swedish ] = "Spår till överordnade" ; +//STRIP001 Text [ danish ] = "Spor overordnede" ; +//STRIP001 Text [ portuguese ] = "Analisar precedentes" ; +//STRIP001 Text [ portuguese_brazilian ] = "Rastrear Precedentes" ; +//STRIP001 Text[ chinese_simplified ] = "å‘å‰çš„追踪ç®å¤?"; +//STRIP001 Text[ russian ] = "Âë?þùèå ÿ÷åéê?"; +//STRIP001 Text[ polish ] = "Œled?poprzedzaj¹ce"; +//STRIP001 Text[ japanese ] = "å‚照元トレーã‚?"; +//STRIP001 Text[ chinese_traditional ] = "儲å˜æ ¼å‰å°Žç®è™?"; +//STRIP001 Text[ arabic ] = "ÊÊÈÚ ÇáÓÇÈÞÇÊ"; +//STRIP001 Text[ greek ] = "º÷íï?ðñïçãïýìåíïõ"; +//STRIP001 Text[ korean ] = "ì„ ë¡€ 추ì "; +//STRIP001 Text[ turkish ] = "Örnekleri izle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Rastreja els anteriors"; +//STRIP001 Text[ finnish ] = "Jäljit?edeltäjät"; +//STRIP001 Text[ thai ] = "ติดตามเซลล์ที่ถูà¸à¸à¹‰à¸²à¸‡"; +//STRIP001 Text[ czech ] = "Sledovat pÅ™edchůdce"; +//STRIP001 Text[ hebrew ] = "Spur zum Vorgänger"; +//STRIP001 Text[ hindi ] = "पूरà¥à¤?अवलमà¥à¤¬à¥€ को जाचठकरà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DETDELPRED +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Spur zum Vorgänger entfernen : Spur zum Vorgõnger entfernen */ +//STRIP001 Text = "Spur zum Vorgänger entfernen" ; +//STRIP001 Text [ ENGLISH ] = "Remove Predescessor" ; +//STRIP001 Text [ english_us ] = "Remove Precedent" ; +//STRIP001 Text [ italian ] = "Rimuovi traccia sul precedente" ; +//STRIP001 Text [ spanish ] = "Borrar el rastro al precedente" ; +//STRIP001 Text [ french ] = "Supprimer le repérage des antécédents" ; +//STRIP001 Text [ dutch ] = "Spoor naar voorganger verwijderen" ; +//STRIP001 Text [ swedish ] = "Ta bort spår till överordnade" ; +//STRIP001 Text [ danish ] = "Fjern spor til overordnede" ; +//STRIP001 Text [ portuguese ] = "Remover precedentes" ; +//STRIP001 Text [ portuguese_brazilian ] = "Remover Precedente" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤å‘å‰çš„追踪ç®å¤?"; +//STRIP001 Text[ russian ] = "Óäàëèò?ñòðåëê??âë?þùèì ÿ÷åéêàì"; +//STRIP001 Text[ polish ] = "Usu?poprzedzaj¹ce"; +//STRIP001 Text[ japanese ] = "å‚照先トレースã®å‰Šé™¤"; +//STRIP001 Text[ chinese_traditional ] = "刪除儲å˜æ ¼å‰å°Žç®è™?"; +//STRIP001 Text[ arabic ] = "ÅÒÇá?ÇáÓÇÈÞÇÊ"; +//STRIP001 Text[ greek ] = "ÊáôÜñãçó?ß÷íï?ðñïçãïýìåíïõ"; +//STRIP001 Text[ korean ] = "ì„ ë¡€ 추ì ì œê±°"; +//STRIP001 Text[ turkish ] = "Örnek sil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suprimeix l'anterior"; +//STRIP001 Text[ finnish ] = "Poista edeltäjänuoli"; +//STRIP001 Text[ thai ] = "เà¸à¸²à¹€à¸‹à¸¥à¸¥à¹Œà¸—ี่ถูà¸à¸à¹‰à¸²à¸‡à¸à¸à¸?"; +//STRIP001 Text[ czech ] = "Odstranit pÅ™edchůdce"; +//STRIP001 Text[ hebrew ] = "Spur zum Vorgänger entfernen"; +//STRIP001 Text[ hindi ] = "पूरà¥à¤?अवलमà¥à¤¬à¥€ को हटाओ"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DETADDSUCC +//STRIP001 { +//STRIP001 Text = "Spur zum Nachfolger" ; +//STRIP001 Text [ ENGLISH ] = "Trace Successor" ; +//STRIP001 Text [ dutch ] = "Spoor naar opvolger" ; +//STRIP001 Text [ english_us ] = "Trace Dependents" ; +//STRIP001 Text [ italian ] = "Individua ~dipendenti" ; +//STRIP001 Text [ spanish ] = "Rastrear los dependientes" ; +//STRIP001 Text [ french ] = "Repérer les dépendants" ; +//STRIP001 Text [ swedish ] = "Spår till underordnade" ; +//STRIP001 Text [ danish ] = "Spor underordnede" ; +//STRIP001 Text [ portuguese ] = "Analisar dependentes" ; +//STRIP001 Text [ portuguese_brazilian ] = "Rastrear Dependentes" ; +//STRIP001 Text[ chinese_simplified ] = "å‘åŽçš„追踪ç®å¤?"; +//STRIP001 Text[ russian ] = "Çàâèñèìû?ÿ÷åéê?"; +//STRIP001 Text[ polish ] = "Œled?zale¿ne"; +//STRIP001 Text[ japanese ] = "å‚照先トレーã‚?"; +//STRIP001 Text[ chinese_traditional ] = "å‘後的追蹤ç®è™?"; +//STRIP001 Text[ arabic ] = "ÊÊÈÚ ÇáÊæÇÈ?"; +//STRIP001 Text[ greek ] = "º÷íï?ðñïò ôï åðüìåí?"; +//STRIP001 Text[ korean ] = "ì¢…ì† ì¶”ì "; +//STRIP001 Text[ turkish ] = "Baðýmlýlar?izle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Rastreja els dependents"; +//STRIP001 Text[ finnish ] = "Jäljit?seuraajat"; +//STRIP001 Text[ thai ] = "ติดตามเซลล์ที่à¸à¹‰à¸²à¸‡à¸–ึง"; +//STRIP001 Text[ czech ] = "Sledovat závislosti"; +//STRIP001 Text[ hebrew ] = "Spur zum Nachfolger"; +//STRIP001 Text[ hindi ] = "अवलमà¥à¤¬à¥€ को जाà¤à¤š करà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DETDELSUCC +//STRIP001 { +//STRIP001 Text = "Spur zum Nachfolger entfernen" ; +//STRIP001 Text [ ENGLISH ] = "Remove Successor" ; +//STRIP001 Text [ english_us ] = "Remove Dependent" ; +//STRIP001 Text [ italian ] = "Rimuovi ~freccia sul dipendente" ; +//STRIP001 Text [ spanish ] = "Borrar rastro al sucesor" ; +//STRIP001 Text [ french ] = "Supprimer le repérage des dépendants" ; +//STRIP001 Text [ dutch ] = "Spoor naar opvolger verwijderen" ; +//STRIP001 Text [ swedish ] = "Ta bort spår till underordnade" ; +//STRIP001 Text [ danish ] = "Fjern spor til underordnede" ; +//STRIP001 Text [ portuguese ] = "Remover dependentes" ; +//STRIP001 Text [ portuguese_brazilian ] = "Remover Dependente" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤å‘åŽçš„追踪ç®å¤?"; +//STRIP001 Text[ russian ] = "Óäàëèò?ñòðåëê??çàâèñèìû?ÿ÷åéêàì"; +//STRIP001 Text[ polish ] = "Usu?zale¿noœæ"; +//STRIP001 Text[ japanese ] = "å‚照元トレースã®å‰Šé™¤"; +//STRIP001 Text[ chinese_traditional ] = "刪除å‘後的追蹤ç®è™?"; +//STRIP001 Text[ arabic ] = "ÅÒÇá?ÇáÊæÇÈ?"; +//STRIP001 Text[ greek ] = "ÊáôÜñãçó?ß÷íïõò ðñïò åðüìåí?"; +//STRIP001 Text[ korean ] = "ì¢…ì† ì¶”ì ì œê±°"; +//STRIP001 Text[ turkish ] = "Baðýml?sil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suprimeix el dependent"; +//STRIP001 Text[ finnish ] = "Poista seuraajanuoli"; +//STRIP001 Text[ thai ] = "เà¸à¸²à¹€à¸‹à¸¥à¸¥à¹Œà¸—ี่à¸à¹‰à¸²à¸‡à¸–ึงà¸à¸à¸?"; +//STRIP001 Text[ czech ] = "Odstranit závislost"; +//STRIP001 Text[ hebrew ] = "Spur zum Nachfolger entfernen"; +//STRIP001 Text[ hindi ] = "अवलमà¥à¤¬à¥€ को हटाओ"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DETADDERROR +//STRIP001 { +//STRIP001 Text = "Spur zum Fehler" ; +//STRIP001 Text [ ENGLISH ] = "Trace Error" ; +//STRIP001 Text [ dutch ] = "Spoor naar fout" ; +//STRIP001 Text [ english_us ] = "Trace Error" ; +//STRIP001 Text [ italian ] = "Individua ~errore" ; +//STRIP001 Text [ spanish ] = "Rastrear error" ; +//STRIP001 Text [ french ] = "Repérer les erreurs" ; +//STRIP001 Text [ swedish ] = "Spår till fel" ; +//STRIP001 Text [ danish ] = "Spor fejl" ; +//STRIP001 Text [ portuguese ] = "Analisar erro" ; +//STRIP001 Text [ portuguese_brazilian ] = "Rastrear Erro" ; +//STRIP001 Text[ chinese_simplified ] = "指å‘错误的追踪ç®å¤?"; +//STRIP001 Text[ russian ] = "Ïîêàçàòü îøèáêè"; +//STRIP001 Text[ polish ] = "Œled?b³êdy"; +//STRIP001 Text[ japanese ] = "エラーã®ãƒˆãƒ¬ãƒ¼ã‚¹"; +//STRIP001 Text[ chinese_traditional ] = "追蹤錯誤"; +//STRIP001 Text[ arabic ] = "ÊÊÈÚ ÇáÎØ?"; +//STRIP001 Text[ greek ] = "º÷íï?ðñïò ôï óöÜëìá"; +//STRIP001 Text[ korean ] = "오류 추ì "; +//STRIP001 Text[ turkish ] = "Hatay?izle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Rastreja l'error"; +//STRIP001 Text[ finnish ] = "Jäljit?virhe"; +//STRIP001 Text[ thai ] = "ติดตามความผิดพลาà¸?"; +//STRIP001 Text[ czech ] = "Chyba ve sledovánÃ"; +//STRIP001 Text[ hebrew ] = "Spur zum Fehler"; +//STRIP001 Text[ hindi ] = "गलती जाचठकरà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DETDELALL +//STRIP001 { +//STRIP001 Text = "Alle Spuren entfernen" ; +//STRIP001 Text [ ENGLISH ] = "Remove all Traces" ; +//STRIP001 Text [ english_us ] = "Remove all Traces" ; +//STRIP001 Text [ italian ] = "Rimuovi tutte le tracce" ; +//STRIP001 Text [ spanish ] = "Borrar todos los rastros" ; +//STRIP001 Text [ french ] = "Supprimer tous les repères" ; +//STRIP001 Text [ dutch ] = "Alle sporen verwijderen" ; +//STRIP001 Text [ swedish ] = "Ta bort alla spår" ; +//STRIP001 Text [ danish ] = "Fjern alle spor" ; +//STRIP001 Text [ portuguese ] = "Remover todas as setas" ; +//STRIP001 Text [ portuguese_brazilian ] = "Remover Todas as Setas" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤å…¨éƒ¨çš„è¿½è¸ªç®å¤?"; +//STRIP001 Text[ russian ] = "Óäàëèò?âñ?ñòðåëê?"; +//STRIP001 Text[ polish ] = "Usu?wszystkie œlady"; +//STRIP001 Text[ japanese ] = "ã™ã¹ã¦ã®ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’削é™?"; +//STRIP001 Text[ chinese_traditional ] = "刪除全部追蹤ç®è™Ÿ"; +//STRIP001 Text[ arabic ] = "ãÍ?ßá ÇáÂËÇÑ"; +//STRIP001 Text[ greek ] = "ÄéáãñáöÞ üëùí ôù?é÷íþ?"; +//STRIP001 Text[ korean ] = "ëª¨ë“ ì¶”ì ì œê±°"; +//STRIP001 Text[ turkish ] = "Tüm izleri sil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suprimeix tots els rastres"; +//STRIP001 Text[ finnish ] = "Poista kaikki nuolet"; +//STRIP001 Text[ thai ] = "เà¸à¸²à¸•à¸±à¸§à¸•à¸´à¸”ตามà¸à¸à¸à¸—ั้งหมà¸?"; +//STRIP001 Text[ czech ] = "Odstranit vÅ¡echna sledovánÃ"; +//STRIP001 Text[ hebrew ] = "Alle Spuren entfernen"; +//STRIP001 Text[ hindi ] = "सब जाचठको हटाओ"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DETINVALID +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Ungültige Daten einkreisen : Ung³ltige Daten einkreisen */ +//STRIP001 Text = "Ungültige Daten einkreisen" ; +//STRIP001 Text [ ENGLISH ] = "Mark invalid data" ; +//STRIP001 Text [ dutch ] = "Ongeldige gegevens markeren" ; +//STRIP001 Text [ english_us ] = "Mark invalid data" ; +//STRIP001 Text [ italian ] = "Evidenzia i dati non validi" ; +//STRIP001 Text [ spanish ] = "Marcar los datos no válidos" ; +//STRIP001 Text [ french ] = "Marquer les données incorrectes" ; +//STRIP001 Text [ swedish ] = "Markera ogiltiga data" ; +//STRIP001 Text [ danish ] = "Marker ugyldige data" ; +//STRIP001 Text [ portuguese ] = "Marcar dados não válidos" ; +//STRIP001 Text [ portuguese_brazilian ] = "Marcar dados inválidos" ; +//STRIP001 Text[ chinese_simplified ] = "æ ‡è®°æ— æ•ˆçš„æ•°æ?"; +//STRIP001 Text[ russian ] = "Îòìåòèòü íåâåðíûå äàííûå"; +//STRIP001 Text[ polish ] = "Zaznacz nieprawid³owe dane"; +//STRIP001 Text[ japanese ] = "無効ãªãƒ‡ãƒ¼ã‚¿ã®ãƒžãƒ¼ã‚¯"; +//STRIP001 Text[ chinese_traditional ] = "標記無效的資æ–?"; +//STRIP001 Text[ arabic ] = "æÖ?ÚáÇã?Úá?ÇáÈíÇäÇÊ ÇáÛí?ÕÇáÍ?"; +//STRIP001 Text[ greek ] = "ÓÞìáíó?(ìå êýêë? ìç Ýãêõñù?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "잘못ë?ë°ì´í„?표시"; +//STRIP001 Text[ turkish ] = "Geçersiz verileri iþaretle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Marca les dades no vàlides"; +//STRIP001 Text[ finnish ] = "Ympyröi virhe"; +//STRIP001 Text[ thai ] = "ทำเครื่à¸à¸‡à¸«à¸¡à¸²à¸¢à¸‚้à¸à¸¡à¸¹à¸¥à¸—ี่ใช้ไม่ได้"; +//STRIP001 Text[ czech ] = "OznaÄit neplatná data"; +//STRIP001 Text[ hebrew ] = "Ungültige Daten einkreisen"; +//STRIP001 Text[ hindi ] = "अमानà¥à¤¯ ड़ॉटà¤?को चिहà¥à¤¨à¤¿à¤?करà¥?"; +//STRIP001 }; + String STR_UNDO_DETREFRESH + { + Text [ de ] = "Spuren aktualisieren" ; + Text [ en-US ] = "Refresh Traces" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Actualizar setas"; + Text[ ru ] = "Обновить Ñтрелки"; + Text[ el ] = "ΑνανÎωση ιχνών"; + Text[ nl ] = "Sporen bijwerken"; + Text[ fr ] = "Actualiser les repères"; + Text[ es ] = "Actualizar rastros"; + Text[ fi ] = "Jäljitä uudelleen"; + Text[ ca ] = "Refresca els rastres"; + Text[ it ] = "Aggiorna tracce"; + Text[ da ] = "Opdater spor"; + Text[ sv ] = "Uppdatera spÃ¥r"; + Text[ pl ] = "OdÅ›wież Å›lady"; + Text[ pt-BR ] = "Atualizar Setas"; + Text[ th ] = "ฟื้นฟูตัวติดตาม"; + Text[ ja ] = "トレースã®æ›´æ–°"; + Text[ ko ] = "추ì 새로 ê³ ì¹¨"; + Text[ zh-CN ] = "更新追踪ç®å¤´"; + Text[ zh-TW ] = "更新追蹤ç®è™Ÿ"; + Text[ tr ] = "Ä°zleri güncelle"; + Text[ hi-IN ] = "जाचठनवीकरण"; + Text[ ar ] = "تØديث الآثار"; + Text[ he ] = "Spuren aktualisieren"; + }; +//STRIP001 String STR_UNDO_CHARTDATA +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Datenbereich von Diagramm ändern : Datenbereich von Diagramm õndern */ +//STRIP001 Text = "Datenbereich von Diagramm ändern" ; +//STRIP001 Text [ ENGLISH ] = "Modify Chart" ; +//STRIP001 Text [ dutch ] = "Gegevensbereik van diagram wijzigen" ; +//STRIP001 Text [ english_us ] = "Modify chart data range" ; +//STRIP001 Text [ italian ] = "Modifica area dati del diagramma" ; +//STRIP001 Text [ spanish ] = "Modificar el área de datos del diagrama" ; +//STRIP001 Text [ french ] = "Modifier la plage de données du diagramme" ; +//STRIP001 Text [ swedish ] = "Ändra diagramets dataområde" ; +//STRIP001 Text [ danish ] = "Modificer diagrammets dataområde" ; +//STRIP001 Text [ portuguese ] = "Alterar área de dados do gráfico" ; +//STRIP001 Text [ portuguese_brazilian ] = "Modificar intervalo de dados do gráfico" ; +//STRIP001 Text[ chinese_simplified ] = "更改图表数æ®åŒºåŸŸ"; +//STRIP001 Text[ russian ] = "Èçìåíèòü äèàïàçîí äàííûõ äèàãðàìì?"; +//STRIP001 Text[ polish ] = "Modyfikuj zakres danych wykresu"; +//STRIP001 Text[ japanese ] = "グラフã®ãƒ‡ãƒ¼ã‚¿ç¯„囲を変更"; +//STRIP001 Text[ chinese_traditional ] = "變更圖表資料å€åŸ?"; +//STRIP001 Text[ arabic ] = "ÊÚÏí?äØÇÞ ÇáÈíÇäÇÊ ÇáÎÇ?ÈÑÓã ÈíÇä?"; +//STRIP001 Text[ greek ] = "ÁëëáãÞ ðåñéï÷Þò äåäïìÝíù?ôï?äéáãñÜììáôïò"; +//STRIP001 Text[ korean ] = "차트 ë°ì´í„?범위 ìˆ˜ì •"; +//STRIP001 Text[ turkish ] = "Þemanýn veri aralýðýn?deðiþtir"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Modifica l'àrea de dades del diagrama"; +//STRIP001 Text[ finnish ] = "Muuta kaavion tietoaluetta"; +//STRIP001 Text[ thai ] = "ดัดà¹à¸›à¸¥à¸‡à¸Šà¹ˆà¸§à¸‡à¸‚้à¸à¸¡à¸¹à¸¥à¸‚à¸à¸‡à¹à¸œà¸™à¸ ูมà¸?"; +//STRIP001 Text[ czech ] = "Upravit oblast dat grafu"; +//STRIP001 Text[ hebrew ] = "Datenbereich von Diagramm ändern"; +//STRIP001 Text[ hindi ] = "चारà¥à¤?ड़ॉटà¤?फैलाà¤?को सà¥à¤§à¤¾à¤°à¥‹"; +//STRIP001 }; +//STRIP001 String STR_UNDO_ORIGINALSIZE +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Originalgröße : Originalgr÷˜e */ +//STRIP001 Text = "Originalgröße" ; +//STRIP001 Text [ ENGLISH ] = "Real Size" ; +//STRIP001 Text [ norwegian ] = "Real Size" ; +//STRIP001 Text [ italian ] = "Dimensione originale" ; +//STRIP001 Text [ portuguese_brazilian ] = "Tamanho Original" ; +//STRIP001 Text [ portuguese ] = "Tamanho real" ; +//STRIP001 Text [ finnish ] = "Alkuperäinen koko" ; +//STRIP001 Text [ danish ] = "Oprindelig størrelse" ; +//STRIP001 Text [ french ] = "Taille d'origine" ; +//STRIP001 Text [ swedish ] = "Originalstorlek" ; +//STRIP001 Text [ dutch ] = "Originele grootte" ; +//STRIP001 Text [ spanish ] = "Tamaño original" ; +//STRIP001 Text [ english_us ] = "Original Size" ; +//STRIP001 Text[ chinese_simplified ] = "原件大å°"; +//STRIP001 Text[ russian ] = "Èñõîäíûé ðàçìåð"; +//STRIP001 Text[ polish ] = "Rozmiar oryginalny"; +//STRIP001 Text[ japanese ] = "å…ƒã®å¤§ãã?"; +//STRIP001 Text[ chinese_traditional ] = "原件大å°"; +//STRIP001 Text[ arabic ] = "ÇáÍÌ?ÇáÃÕáí"; +//STRIP001 Text[ greek ] = "Áñ÷éêü ìÝãåèï?"; +//STRIP001 Text[ korean ] = "ì›ëž˜ í¬ê¸°"; +//STRIP001 Text[ turkish ] = "Gerçek boyut"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Mida original"; +//STRIP001 Text[ thai ] = "ขนาดต้นฉบัà¸?"; +//STRIP001 Text[ czech ] = "Původnà velikost"; +//STRIP001 Text[ hebrew ] = "Originalgröße"; +//STRIP001 Text[ hindi ] = "यथारà¥à¤¥ परिमाण"; +//STRIP001 }; +//STRIP001 String STR_UNDO_UPDATELINK +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Verknüpfung aktualisieren : Verkn³pfung aktualisieren */ +//STRIP001 Text = "Verknüpfung aktualisieren" ; +//STRIP001 Text [ ENGLISH ] = "Update Link" ; +//STRIP001 Text [ english_us ] = "Update Link" ; +//STRIP001 Text [ italian ] = "Aggiorna i collegamenti" ; +//STRIP001 Text [ spanish ] = "Actualizar vínculo" ; +//STRIP001 Text [ french ] = "Actualiser le lien" ; +//STRIP001 Text [ dutch ] = "Koppeling bijwerken" ; +//STRIP001 Text [ swedish ] = "Uppdatera länk" ; +//STRIP001 Text [ danish ] = "Opdater kæde" ; +//STRIP001 Text [ portuguese ] = "Actualizar ligação" ; +//STRIP001 Text [ portuguese_brazilian ] = "Atualizar Vínculo" ; +//STRIP001 Text[ chinese_simplified ] = "更新链接"; +//STRIP001 Text[ russian ] = "Îáíîâèòü ññûëêó"; +//STRIP001 Text[ polish ] = "Aktualizuj ³¹cze"; +//STRIP001 Text[ japanese ] = "リンクã®æ›´æ–°"; +//STRIP001 Text[ chinese_traditional ] = "æ›´æ–°æ·å¾‘"; +//STRIP001 Text[ arabic ] = "ÊÍÏí?ÇáÇÑÊÈÇØ"; +//STRIP001 Text[ greek ] = "ÅíçìÝñùó?óýíäåóçò"; +//STRIP001 Text[ korean ] = "ë§í¬ ì—…ë°ì´íŠ¸"; +//STRIP001 Text[ turkish ] = "Baðlantýy?güncelle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Actualitza l'enlla?"; +//STRIP001 Text[ finnish ] = "Päivit?linkki"; +//STRIP001 Text[ thai ] = "ปรับปรุงà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¹‚ยง"; +//STRIP001 Text[ czech ] = "Aktualizovat odkaz"; +//STRIP001 Text[ hebrew ] = "Verknüpfung aktualisieren"; +//STRIP001 Text[ hindi ] = "लिंक अपडेटॠकरà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_REMOVELINK +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Verknüpfung aufheben : Verkn³pfung aufheben */ +//STRIP001 Text = "Verknüpfung aufheben" ; +//STRIP001 Text [ ENGLISH ] = "Remove Link" ; +//STRIP001 Text [ dutch ] = "Koppeling opheffen" ; +//STRIP001 Text [ english_us ] = "Unlink" ; +//STRIP001 Text [ italian ] = "Rimuovi i collegamenti" ; +//STRIP001 Text [ spanish ] = "Borrar vínculo" ; +//STRIP001 Text [ french ] = "Supprimer le lien" ; +//STRIP001 Text [ swedish ] = "Upphäv länk" ; +//STRIP001 Text [ danish ] = "Ophæv kæde" ; +//STRIP001 Text [ portuguese ] = "Remover ligação" ; +//STRIP001 Text [ portuguese_brazilian ] = "Desvincular" ; +//STRIP001 Text[ chinese_simplified ] = "å–消链接"; +//STRIP001 Text[ russian ] = "Óáðàòü ññûëêó"; +//STRIP001 Text[ polish ] = "Usu?³¹cze"; +//STRIP001 Text[ japanese ] = "リンクã®è§£é™¤"; +//STRIP001 Text[ chinese_traditional ] = "å–消æ·å¾‘"; +//STRIP001 Text[ arabic ] = "ÅÒÇá?ÇáÇÑÊÈÇØ"; +//STRIP001 Text[ greek ] = "ÊáôÜñãçó?óýíäåóçò"; +//STRIP001 Text[ korean ] = "ì—°ê²° í•´ì œ"; +//STRIP001 Text[ turkish ] = "Baðlantýy?kaldýr"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Desenllaça"; +//STRIP001 Text[ finnish ] = "Poista linkki"; +//STRIP001 Text[ thai ] = "ไม่เชื่à¸à¸¡à¹‚ยง"; +//STRIP001 Text[ czech ] = "Bez odkazu"; +//STRIP001 Text[ hebrew ] = "Verknüpfung aufheben"; +//STRIP001 Text[ hindi ] = "लिंक हटाओ"; +//STRIP001 }; +//STRIP001 String STR_UNDO_INSERTAREALINK +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Verknüpfung einfügen : Verkn³pfung einf³gen */ +//STRIP001 Text = "Verknüpfung einfügen" ; +//STRIP001 Text [ ENGLISH ] = "Insert Link" ; +//STRIP001 Text [ dutch ] = "Koppeling invoegen" ; +//STRIP001 Text [ english_us ] = "Insert Link" ; +//STRIP001 Text [ italian ] = "Inserisci collegamento" ; +//STRIP001 Text [ spanish ] = "Insertar vínculo" ; +//STRIP001 Text [ french ] = "Insérer un lien" ; +//STRIP001 Text [ swedish ] = "Infoga länk" ; +//STRIP001 Text [ danish ] = "Indsæt kæde" ; +//STRIP001 Text [ portuguese ] = "Inserir ligação" ; +//STRIP001 Text [ portuguese_brazilian ] = "Inserir Vínculo" ; +//STRIP001 Text[ chinese_simplified ] = "æ’入链接"; +//STRIP001 Text[ russian ] = "Âñòàâèòü ññûëêó"; +//STRIP001 Text[ polish ] = "Wstaw ³¹cze"; +//STRIP001 Text[ japanese ] = "リンクã®æŒ¿å…¥"; +//STRIP001 Text[ chinese_traditional ] = "æ’å…¥æ·å¾‘"; +//STRIP001 Text[ arabic ] = "ÅÏÑÇ?ÇÑÊÈÇØ"; +//STRIP001 Text[ greek ] = "ÅéóáãùãÞ óýíäåóçò"; +//STRIP001 Text[ korean ] = "ë§í¬ 삽입"; +//STRIP001 Text[ turkish ] = "Baðlant?ekle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Insereix un enlla?"; +//STRIP001 Text[ finnish ] = "Lisää linkki"; +//STRIP001 Text[ thai ] = "à¹à¸—รà¸à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¹‚ยง"; +//STRIP001 Text[ czech ] = "Vložit odkaz"; +//STRIP001 Text[ hebrew ] = "Verknüpfung einfügen"; +//STRIP001 Text[ hindi ] = "लिंक जोड़à¥?"; +//STRIP001 }; + String STR_UNDO_ENTERMATRIX + { + /* ### ACHTUNG: Neuer Text in Resource? Matrixformel einfügen : Matrixformel einf³gen */ + Text [ de ] = "Matrixformel einfügen" ; + Text [ en-US ] = "Insert Array Formula" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Inserir fórmula matriz"; + Text[ ru ] = "Ð’Ñтавить формулу маÑÑива"; + Text[ el ] = "Εισαγωγή Ï„Ïπου πινάκων"; + Text[ nl ] = "Matrixformule invoegen"; + Text[ fr ] = "Insérer une formule de matrice"; + Text[ es ] = "Insertar una fórmula de matriz"; + Text[ fi ] = "Lisää taulukkokaava"; + Text[ ca ] = "Insereix la fórmula de la matriu"; + Text[ it ] = "Inserisci formula di matrice"; + Text[ da ] = "Indsæt matrixformel"; + Text[ sv ] = "Infoga matrisformel"; + Text[ pl ] = "Wstaw formuÅ‚Ä™ macierzy"; + Text[ pt-BR ] = "Inserir Fórmula de Matriz"; + Text[ th ] = "à¹à¸—รà¸à¸ªà¸¹à¸•à¸£à¹à¸–วลำดับ"; + Text[ ja ] = "行列å¼ã®æŒ¿å…¥"; + Text[ ko ] = "í–‰ë ¬ ìˆ˜ì‹ ì‚½ìž…"; + Text[ zh-CN ] = "æ’入矩阵公å¼"; + Text[ zh-TW ] = "æ’入矩陣公å¼"; + Text[ tr ] = "Matriks formulü ekle"; + Text[ hi-IN ] = "शà¥à¤°à¥‡à¤£à¥€ सूतà¥à¤° को जोड़ो"; + Text[ ar ] = "إدراج صيغة مصÙÙˆÙØ©"; + Text[ he ] = "Matrixformel einfügen"; + }; +//STRIP001 String STR_UNDO_SHOWNOTE +//STRIP001 { +//STRIP001 Text = "Notiz anzeigen" ; +//STRIP001 Text [ ENGLISH ] = "Show Note" ; +//STRIP001 Text [ dutch ] = "Aantekening weergeven" ; +//STRIP001 Text [ english_us ] = "Show Note" ; +//STRIP001 Text [ swedish ] = "Visa anteckning" ; +//STRIP001 Text [ danish ] = "Vis note" ; +//STRIP001 Text [ italian ] = "Mostra nota" ; +//STRIP001 Text [ spanish ] = "Mostrar nota" ; +//STRIP001 Text [ french ] = "Afficher la note" ; +//STRIP001 Text [ portuguese ] = "Mostrar anotação" ; +//STRIP001 Text [ portuguese_brazilian ] = "Mostrar Anotação" ; +//STRIP001 Text[ chinese_simplified ] = "显示备注"; +//STRIP001 Text[ russian ] = "Ïîêàçàòü ïðèìå÷àíèå"; +//STRIP001 Text[ polish ] = "Poka?notatk?"; +//STRIP001 Text[ japanese ] = "コメントã®è¡¨ç¤?"; +//STRIP001 Text[ chinese_traditional ] = "顯示備註"; +//STRIP001 Text[ arabic ] = "ÅÙåÇ?ÇáãáÇÍÙÉ"; +//STRIP001 Text[ greek ] = "ÅìöÜíéóç óçìåßùóç?"; +//STRIP001 Text[ korean ] = "메모 표시"; +//STRIP001 Text[ turkish ] = "Notu görüntüle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Mostra la nota"; +//STRIP001 Text[ finnish ] = "Näyt?huomautus"; +//STRIP001 Text[ thai ] = "à¹à¸ªà¸”งบันทึà¸à¸¢à¹ˆà¸?"; +//STRIP001 Text[ czech ] = "Zobrazit poznámku"; +//STRIP001 Text[ hebrew ] = "Notiz anzeigen"; +//STRIP001 Text[ hindi ] = "टिपà¥à¤ªà¤£à¥€ दिखाà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_HIDENOTE +//STRIP001 { +//STRIP001 Text = "Notiz ausblenden" ; +//STRIP001 Text [ ENGLISH ] = "Hide Note" ; +//STRIP001 Text [ dutch ] = "Aantekening verbergen" ; +//STRIP001 Text [ english_us ] = "Hide note" ; +//STRIP001 Text [ swedish ] = "Dölj anteckning" ; +//STRIP001 Text [ danish ] = "Skjul note" ; +//STRIP001 Text [ italian ] = "Nascondi nota" ; +//STRIP001 Text [ spanish ] = "Ocultar nota" ; +//STRIP001 Text [ french ] = "Masquer la note" ; +//STRIP001 Text [ portuguese ] = "Ocultar anotação" ; +//STRIP001 Text [ portuguese_brazilian ] = "Ocultar anotação" ; +//STRIP001 Text[ chinese_simplified ] = "éšå…¥å¤‡æ³¨"; +//STRIP001 Text[ russian ] = "Ñêðûòü ïðèìå÷àíèå"; +//STRIP001 Text[ polish ] = "Ukryj notatk?"; +//STRIP001 Text[ japanese ] = "コメントã®éžè¡¨ç¤º"; +//STRIP001 Text[ chinese_traditional ] = "隱入備註"; +//STRIP001 Text[ arabic ] = "ÅÎÝÇ?ÇáãáÇÍÙÉ"; +//STRIP001 Text[ greek ] = "Áðüêñõøç óçìåßùóç?"; +//STRIP001 Text[ korean ] = "메모 숨기ê¸?"; +//STRIP001 Text[ turkish ] = "Notu gizle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Oculta la nota"; +//STRIP001 Text[ finnish ] = "Piilota huomautus"; +//STRIP001 Text[ thai ] = "ซ่à¸à¸™à¸šà¸±à¸™à¸—ึà¸à¸¢à¹ˆà¸?"; +//STRIP001 Text[ czech ] = "Skrýt poznámku"; +//STRIP001 Text[ hebrew ] = "Notiz ausblenden"; +//STRIP001 Text[ hindi ] = "टिपà¥à¤ªà¤£à¥€ छिपाà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_EDITNOTE +//STRIP001 { +//STRIP001 Text = "Notiz bearbeiten" ; +//STRIP001 Text [ ENGLISH ] = "Edit Note" ; +//STRIP001 Text [ portuguese ] = "Editar anotação" ; +//STRIP001 Text [ english_us ] = "Edit Note" ; +//STRIP001 Text [ portuguese_brazilian ] = "Editar Anotação" ; +//STRIP001 Text [ swedish ] = "Redigera anteckning" ; +//STRIP001 Text [ danish ] = "Rediger note" ; +//STRIP001 Text [ italian ] = "Modifica nota" ; +//STRIP001 Text [ spanish ] = "Editar nota" ; +//STRIP001 Text [ french ] = "Éditer la note" ; +//STRIP001 Text [ dutch ] = "Aantekening bewerken" ; +//STRIP001 Text[ chinese_simplified ] = "编辑备注"; +//STRIP001 Text[ russian ] = "Ïðàâêà ïðèìå÷àí?"; +//STRIP001 Text[ polish ] = "Edytuj notatk?"; +//STRIP001 Text[ japanese ] = "コメントã®ç·¨é›?"; +//STRIP001 Text[ chinese_traditional ] = "編輯備註"; +//STRIP001 Text[ arabic ] = "ÊÍÑí?ãáÇÍÙÉ"; +//STRIP001 Text[ greek ] = "Åðåîåñãáóß?óçìåßùóç?"; +//STRIP001 Text[ korean ] = "메모 편집"; +//STRIP001 Text[ turkish ] = "Notu düzenle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Edita la nota"; +//STRIP001 Text[ finnish ] = "Muuta huomautusta"; +//STRIP001 Text[ thai ] = "à¹à¸à¹‰à¹„ขบันทึà¸à¸¢à¹ˆà¸"; +//STRIP001 Text[ czech ] = "Upravit poznámku"; +//STRIP001 Text[ hebrew ] = "Notiz bearbeiten"; +//STRIP001 Text[ hindi ] = "टिपà¥à¤ªà¤£à¥€ संपादन"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DEC_INDENT +//STRIP001 { +//STRIP001 Text = "Einzug vermindern" ; +//STRIP001 Text [ ENGLISH ] = "Decrease Indent" ; +//STRIP001 Text [ dutch ] = "Inspringing verkleinen" ; +//STRIP001 Text [ english_us ] = "Decrease Indent" ; +//STRIP001 Text [ swedish ] = "Förminska indrag" ; +//STRIP001 Text [ danish ] = "Formindsk indrykning" ; +//STRIP001 Text [ italian ] = "Riduci rientro" ; +//STRIP001 Text [ spanish ] = "Reducir la sangría" ; +//STRIP001 Text [ french ] = "Réduire le retrait" ; +//STRIP001 Text [ portuguese ] = "Diminuir avanço" ; +//STRIP001 Text [ portuguese_brazilian ] = "Reduzir Recuo" ; +//STRIP001 Text[ chinese_simplified ] = "å‡å°‘缩进"; +//STRIP001 Text[ russian ] = "Óìåíüøèò?îòñòóï"; +//STRIP001 Text[ polish ] = "Zmniejsz wciêcie"; +//STRIP001 Text[ japanese ] = "インデントを減らã?"; +//STRIP001 Text[ chinese_traditional ] = "減少縮排"; +//STRIP001 Text[ arabic ] = "ÊÞáí?ÇáÅÒÇÍ?"; +//STRIP001 Text[ greek ] = "Ìåßùóç åóï÷Þò"; +//STRIP001 Text[ korean ] = "내어쓰기"; +//STRIP001 Text[ turkish ] = "Girintiyi küçült"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Redueix el sagnat"; +//STRIP001 Text[ finnish ] = "Vähenn?sisennyst?"; +//STRIP001 Text[ thai ] = "ลดระยะเยื้à¸à¸?"; +//STRIP001 Text[ czech ] = "ZmenÅ¡it odsazenÃ"; +//STRIP001 Text[ hebrew ] = "‮הפחת×?שוליי×â€?"; +//STRIP001 Text[ hindi ] = "इनà¥à¤¡à¥‡à¤¨à¥à¤Ÿ घटाओ"; +//STRIP001 }; +//STRIP001 String STR_UNDO_INC_INDENT +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Einzug erhöhen : Einzug erh÷hen */ +//STRIP001 Text = "Einzug erhöhen" ; +//STRIP001 Text [ ENGLISH ] = "Increase Indent" ; +//STRIP001 Text [ dutch ] = "Inspringing vergroten" ; +//STRIP001 Text [ english_us ] = "Increase Indent" ; +//STRIP001 Text [ swedish ] = "Förstora indrag" ; +//STRIP001 Text [ danish ] = "Forøg indrykning" ; +//STRIP001 Text [ italian ] = "Aumenta rientro" ; +//STRIP001 Text [ spanish ] = "Aumentar sangría" ; +//STRIP001 Text [ french ] = "Augmenter le retrait" ; +//STRIP001 Text [ portuguese ] = "Aumentar avanço " ; +//STRIP001 Text [ portuguese_brazilian ] = "Aumentar Recuo" ; +//STRIP001 Text[ chinese_simplified ] = "增大缩进"; +//STRIP001 Text[ russian ] = "Óâåëè÷èò?îòñòóï"; +//STRIP001 Text[ polish ] = "Zwiêksz wciêcie"; +//STRIP001 Text[ japanese ] = "インデントを増やã?"; +//STRIP001 Text[ chinese_traditional ] = "擴大縮排"; +//STRIP001 Text[ arabic ] = "ÒíÇÏ?ÇáÅÒÇÍ?"; +//STRIP001 Text[ greek ] = "Áýîçóç åóï÷Þò"; +//STRIP001 Text[ korean ] = "들여쓰기"; +//STRIP001 Text[ turkish ] = "Girintiyi büyüt"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Augmenta el sagnat"; +//STRIP001 Text[ finnish ] = "Lisää sisennyst?"; +//STRIP001 Text[ thai ] = "เพิ่มระยะเยื้à¸à¸?"; +//STRIP001 Text[ czech ] = "ZvÄ›tÅ¡it odsazenÃ"; +//STRIP001 Text[ hebrew ] = "‮הוספ×?שוליי×â€?"; +//STRIP001 Text[ hindi ] = "इनà¥à¤¡à¥‡à¤¨à¥à¤Ÿ बढाओ"; +//STRIP001 }; +//STRIP001 String STR_UNDO_PROTECT_TAB +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Tabelle schützen : Tabelle sch³tzen */ +//STRIP001 Text = "Tabelle schützen" ; +//STRIP001 Text [ ENGLISH ] = "Protect Table" ; +//STRIP001 Text [ portuguese ] = "Proteger folha" ; +//STRIP001 Text [ english_us ] = "Protect sheet" ; +//STRIP001 Text [ portuguese_brazilian ] = "Proteger planilha" ; +//STRIP001 Text [ swedish ] = "Skydda tabell" ; +//STRIP001 Text [ danish ] = "Beskyt ark" ; +//STRIP001 Text [ italian ] = "proteggi tabella" ; +//STRIP001 Text [ spanish ] = "Proteger hoja" ; +//STRIP001 Text [ french ] = "Protéger la feuille" ; +//STRIP001 Text [ dutch ] = "Werkblad beveiligen" ; +//STRIP001 Text[ chinese_simplified ] = "ä¿æŠ¤å·¥ä½œè¡?"; +//STRIP001 Text[ russian ] = "Óñòàíîâèòü çàùèòó ëèñò?"; +//STRIP001 Text[ polish ] = "Chro?arkusz"; +//STRIP001 Text[ japanese ] = "表ã®ä¿è·"; +//STRIP001 Text[ chinese_traditional ] = "ä¿è·å·¥ä½œè¡?"; +//STRIP001 Text[ arabic ] = "ÍãÇí?ÇáÌÏæá"; +//STRIP001 Text[ greek ] = "Ðñïóôáóß?ðßíáêá"; +//STRIP001 Text[ korean ] = "시트 보호"; +//STRIP001 Text[ turkish ] = "Tabloyu koru"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Protegeix el full"; +//STRIP001 Text[ finnish ] = "Suojaa taulukko"; +//STRIP001 Text[ thai ] = "ป้à¸à¸‡à¸à¸±à¸™à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; +//STRIP001 Text[ czech ] = "Zamknout list"; +//STRIP001 Text[ hebrew ] = "Tabelle schützen"; +//STRIP001 Text[ hindi ] = "शीटॠको रकà¥à¤·à¤?करà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_UNPROTECT_TAB +//STRIP001 { +//STRIP001 Text = "Tabellenschutz aufheben" ; +//STRIP001 Text [ ENGLISH ] = "Unprotect Table" ; +//STRIP001 Text [ portuguese ] = "Remover protecção da folha" ; +//STRIP001 Text [ english_us ] = "Unprotect sheet" ; +//STRIP001 Text [ portuguese_brazilian ] = "Desproteger planilha" ; +//STRIP001 Text [ swedish ] = "Upphäv tabellskydd" ; +//STRIP001 Text [ danish ] = "Ophæv arkbeskyttelse" ; +//STRIP001 Text [ italian ] = "Disattiva protezione tabella" ; +//STRIP001 Text [ spanish ] = "Desproteger hoja" ; +//STRIP001 Text [ french ] = "Annuler la protection de la feuille" ; +//STRIP001 Text [ dutch ] = "Werkbladbeveiliging opheffen" ; +//STRIP001 Text[ chinese_simplified ] = "å–消工作表ä¿æŠ?"; +//STRIP001 Text[ russian ] = "Ñíÿòü çàùèòó ?ëèñò?"; +//STRIP001 Text[ polish ] = "Usu?ochron?arkusza"; +//STRIP001 Text[ japanese ] = "表ã®ä¿è·ã®è§£é™?"; +//STRIP001 Text[ chinese_traditional ] = "å–消工作表ä¿è?"; +//STRIP001 Text[ arabic ] = "ÅáÛÇ?ÍãÇí?ÇáÌÏæá"; +//STRIP001 Text[ greek ] = "ÊáôÜñãçó?ðñïóôáóßáò ðßíáêá"; +//STRIP001 Text[ korean ] = "시트 보호 í•´ì œ"; +//STRIP001 Text[ turkish ] = "Tablo korumasýn?kaldýr"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Desprotegeix el full"; +//STRIP001 Text[ finnish ] = "Poista taulukon suojaus"; +//STRIP001 Text[ thai ] = "ไม่ป้à¸à¸‡à¸à¸±à¸™à¹à¸œà¹ˆà¸™à¸‡à¸²à¸?"; +//STRIP001 Text[ czech ] = "Odemknout list"; +//STRIP001 Text[ hebrew ] = "‮הסר×?×”×’× ×” מגליוןâ€?"; +//STRIP001 Text[ hindi ] = "शीटॠको रकà¥à¤·à¤?मत करà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_PROTECT_DOC +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Dokument schützen : Dokument sch³tzen */ +//STRIP001 Text = "Dokument schützen" ; +//STRIP001 Text [ ENGLISH ] = "Protect Document" ; +//STRIP001 Text [ portuguese ] = "Proteger documento" ; +//STRIP001 Text [ english_us ] = "Protect document" ; +//STRIP001 Text [ portuguese_brazilian ] = "Proteger documento" ; +//STRIP001 Text [ swedish ] = "Skydda dokument" ; +//STRIP001 Text [ danish ] = "Beskyt dokument" ; +//STRIP001 Text [ italian ] = "Proteggi documento" ; +//STRIP001 Text [ spanish ] = "Proteger documento" ; +//STRIP001 Text [ french ] = "Protéger le document" ; +//STRIP001 Text [ dutch ] = "Document beveiligen" ; +//STRIP001 Text[ chinese_simplified ] = "ä¿æŠ¤æ–‡æ¡£"; +//STRIP001 Text[ russian ] = "ñòàíîâèò?çàùèòó äîêóìåíò?"; +//STRIP001 Text[ polish ] = "Chro?dokument"; +//STRIP001 Text[ japanese ] = "ドã‚ュメントã®ä¿è?"; +//STRIP001 Text[ chinese_traditional ] = "ä¿è·æ–‡ä»¶"; +//STRIP001 Text[ arabic ] = "ÍãÇí?ÇáãÓÊä?"; +//STRIP001 Text[ greek ] = "Ðñïóôáóß?åããñÜöïõ"; +//STRIP001 Text[ korean ] = "문서 보호"; +//STRIP001 Text[ turkish ] = "Belgeyi koru"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Protegeix el document"; +//STRIP001 Text[ finnish ] = "Suojaa asiakirja"; +//STRIP001 Text[ thai ] = "ป้à¸à¸‡à¸à¸±à¸™à¹€à¸à¸à¸ªà¸²à¸?"; +//STRIP001 Text[ czech ] = "Zamknout dokument"; +//STRIP001 Text[ hebrew ] = "Dokument schützen"; +//STRIP001 Text[ hindi ] = "लेखपतà¥à¤?को रकà¥à¤·à¤?करà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_UNPROTECT_DOC +//STRIP001 { +//STRIP001 Text = "Dokumentschutz aufheben" ; +//STRIP001 Text [ ENGLISH ] = "Unprotect Document" ; +//STRIP001 Text [ portuguese ] = "Remover protecção do documento" ; +//STRIP001 Text [ english_us ] = "Unprotect document" ; +//STRIP001 Text [ portuguese_brazilian ] = "Desproteger documento" ; +//STRIP001 Text [ swedish ] = "Upphäv dokumentskydd" ; +//STRIP001 Text [ danish ] = "Ophæv dokumentbeskyttelse" ; +//STRIP001 Text [ italian ] = "Disattiva protezione documentro" ; +//STRIP001 Text [ spanish ] = "Desproteger documento" ; +//STRIP001 Text [ french ] = "Annuler la protection de document" ; +//STRIP001 Text [ dutch ] = "Beveiliging opheffen" ; +//STRIP001 Text[ chinese_simplified ] = "å–消ä¿æŠ¤æ–‡æ¡£"; +//STRIP001 Text[ russian ] = "Ñíÿòü çàùèòó äîêóìåíò?"; +//STRIP001 Text[ polish ] = "Usu?ochron?dokumentu"; +//STRIP001 Text[ japanese ] = "ドã‚ュメントä¿è·ã®è§£é™?"; +//STRIP001 Text[ chinese_traditional ] = "å–消ä¿è·æ–‡ä»¶"; +//STRIP001 Text[ arabic ] = "ÅÒÇá?ÍãÇí?ÇáãÓÊä?"; +//STRIP001 Text[ greek ] = "ÊáôÜñãçó?ðñïóôáóßáò åããñÜöïõ"; +//STRIP001 Text[ korean ] = "문서 보호 í•´ì œ"; +//STRIP001 Text[ turkish ] = "Belge korumasýn?kaldýr"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Desprotegeix el document"; +//STRIP001 Text[ finnish ] = "Poista asiakirjan suojaus"; +//STRIP001 Text[ thai ] = "ไม่ป้à¸à¸‡à¸à¸±à¸™à¹€à¸à¸à¸ªà¸²à¸?"; +//STRIP001 Text[ czech ] = "Odemknout dokument"; +//STRIP001 Text[ hebrew ] = "Dokumentschutz aufheben"; +//STRIP001 Text[ hindi ] = "लेखपतà¥à¤?को रकà¥à¤·à¤?मत करà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_PRINTRANGES +//STRIP001 { +//STRIP001 Text = "Druckbereiche" ; +//STRIP001 Text [ ENGLISH ] = "Print Areas" ; +//STRIP001 Text [ portuguese ] = "Áreas de impressão" ; +//STRIP001 Text [ english_us ] = "Print range" ; +//STRIP001 Text [ portuguese_brazilian ] = "Intervalo de impressão" ; +//STRIP001 Text [ swedish ] = "Utskriftsområden" ; +//STRIP001 Text [ danish ] = "Udskriftsområder" ; +//STRIP001 Text [ italian ] = "Aree di stampa" ; +//STRIP001 Text [ spanish ] = "Áreas de impresión" ; +//STRIP001 Text [ french ] = "Zones d'impression" ; +//STRIP001 Text [ dutch ] = "Afdrukbereiken" ; +//STRIP001 Text[ chinese_simplified ] = "打å°åŒºåŸŸ"; +//STRIP001 Text[ russian ] = "Îáëàñò?ïå÷àòè"; +//STRIP001 Text[ polish ] = "Zakres wydruku"; +//STRIP001 Text[ japanese ] = "å°åˆ·ç¯„囲"; +//STRIP001 Text[ chinese_traditional ] = "列å°ç¯„åœ"; +//STRIP001 Text[ arabic ] = "äØÇÞÇÊ ÇáØÈÇÚ?"; +//STRIP001 Text[ greek ] = "Ðåñéï÷Ýò åêôýðùóç?"; +//STRIP001 Text[ korean ] = "ì¸ì‡„ 범위"; +//STRIP001 Text[ turkish ] = "Yazdýrma aralýð?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Àrea d'impressi?"; +//STRIP001 Text[ finnish ] = "Tulostusalue"; +//STRIP001 Text[ thai ] = "ช่วงà¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œ"; +//STRIP001 Text[ czech ] = "Rozsah tisku"; +//STRIP001 Text[ hebrew ] = "‮טוו×?הדפסהâ€?"; +//STRIP001 Text[ hindi ] = "छपाई फैलाà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_REMOVEBREAKS +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Seitenumbrüche löschen : Seitenumbr³che l÷schen */ +//STRIP001 Text = "Seitenumbrüche löschen" ; +//STRIP001 Text [ ENGLISH ] = "Delete Page Breaks" ; +//STRIP001 Text [ portuguese ] = "Eliminar quebras de página" ; +//STRIP001 Text [ english_us ] = "Delete Page Breaks" ; +//STRIP001 Text [ portuguese_brazilian ] = "Excluir Quebras de Páginas" ; +//STRIP001 Text [ swedish ] = "Radera sidbrytningar" ; +//STRIP001 Text [ danish ] = "Slet sideskift" ; +//STRIP001 Text [ italian ] = "Elimina interruzioni pagina" ; +//STRIP001 Text [ spanish ] = "Borrar saltos de página" ; +//STRIP001 Text [ french ] = "Supprimer les sauts de page" ; +//STRIP001 Text [ dutch ] = "Pagina-einde wissen" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤æ¢é¡µç¬?"; +//STRIP001 Text[ russian ] = "Óäàëèò?ðàçðûâ?ñòðàíè?"; +//STRIP001 Text[ polish ] = "Usu?podzia³y stron"; +//STRIP001 Text[ japanese ] = "改ページを削é™?"; +//STRIP001 Text[ chinese_traditional ] = "刪除æ›é ç¬?"; +//STRIP001 Text[ arabic ] = "ÍÐ?ÝæÇÕ?ÇáÕÝÍÇ?"; +//STRIP001 Text[ greek ] = "ÄéáãñáöÞ áëëáãÞ?óåëßäá?"; +//STRIP001 Text[ korean ] = "페ì´ì§€ 나누ê¸?ì‚ì œ"; +//STRIP001 Text[ turkish ] = "Sayfa sonlarýn?sil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suprimeix els salts de pàgina"; +//STRIP001 Text[ finnish ] = "Poista sivunvaihdot"; +//STRIP001 Text[ thai ] = "ลบตัวà¹à¸šà¹ˆà¸‡à¸«à¸™à¹‰à¸?"; +//STRIP001 Text[ czech ] = "Smazat zalomenà stránek"; +//STRIP001 Text[ hebrew ] = "Seitenumbrüche löschen"; +//STRIP001 Text[ hindi ] = "पृषà¥à¤?खणà¥à¤¡à¤?मिटाà¤?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_PRINTSCALE +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Skalierung ändern : Skalierung õndern */ +//STRIP001 Text = "Skalierung ändern" ; +//STRIP001 Text [ ENGLISH ] = "Change Print Scale" ; +//STRIP001 Text [ portuguese ] = "Alterar escala" ; +//STRIP001 Text [ english_us ] = "Change Scale" ; +//STRIP001 Text [ portuguese_brazilian ] = "Alterar a Escala" ; +//STRIP001 Text [ swedish ] = "Ändra skalning" ; +//STRIP001 Text [ danish ] = "Modificer skalering" ; +//STRIP001 Text [ italian ] = "Modifica scala" ; +//STRIP001 Text [ spanish ] = "Modificar escala" ; +//STRIP001 Text [ french ] = "Changer l'échelle" ; +//STRIP001 Text [ dutch ] = "Schaal wijzigen" ; +//STRIP001 Text[ chinese_simplified ] = "更改显示比例"; +//STRIP001 Text[ russian ] = "Èçìåíèòü ìàñøòà?"; +//STRIP001 Text[ polish ] = "Zmie?skalowanie"; +//STRIP001 Text[ japanese ] = "スケールã®å¤‰æ›?"; +//STRIP001 Text[ chinese_traditional ] = "變更顯示比例"; +//STRIP001 Text[ arabic ] = "ÊÛíí?ÇáãÞíÇ?"; +//STRIP001 Text[ greek ] = "ÁëëáãÞ êëßìáêáò"; +//STRIP001 Text[ korean ] = "배율 ë³€ê²?"; +//STRIP001 Text[ turkish ] = "Ölçeði deðiþtir"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Canvia l'escala"; +//STRIP001 Text[ finnish ] = "Muuta skaalaus"; +//STRIP001 Text[ thai ] = "เปลี่ยนสเà¸à¸¥"; +//STRIP001 Text[ czech ] = "ZmÄ›nit měřÃtko"; +//STRIP001 Text[ hebrew ] = "Skalierung ändern"; +//STRIP001 Text[ hindi ] = "सà¥à¤•à¥‡à¤?बदलो"; +//STRIP001 }; +//STRIP001 String STR_UNDO_DRAG_BREAK +//STRIP001 { +//STRIP001 Text = "Seitenumbruch verschieben" ; +//STRIP001 Text [ ENGLISH ] = "Move Page Break" ; +//STRIP001 Text [ portuguese ] = "Mover quebra de página" ; +//STRIP001 Text [ english_us ] = "Move Page Break" ; +//STRIP001 Text [ portuguese_brazilian ] = "Mover Quebra de Página" ; +//STRIP001 Text [ swedish ] = "Flytta sidbrytning" ; +//STRIP001 Text [ danish ] = "Flyt sideskift" ; +//STRIP001 Text [ italian ] = "Sposta interruzioni pagina" ; +//STRIP001 Text [ spanish ] = "Desplazar salto de página" ; +//STRIP001 Text [ french ] = "Déplacer le saut de page" ; +//STRIP001 Text [ dutch ] = "Pagina-einde verplaatsen" ; +//STRIP001 Text[ chinese_simplified ] = "移动æ¢é¡µç¬?"; +//STRIP001 Text[ russian ] = "Ïåðåíåñò?ðàçðûâ ñòðàíèöû"; +//STRIP001 Text[ polish ] = "Przenie?podzia?strony"; +//STRIP001 Text[ japanese ] = "改ページã®ç§»å‹?"; +//STRIP001 Text[ chinese_traditional ] = "移動æ›é ç¬?"; +//STRIP001 Text[ arabic ] = "ÊÍÑí?ÝÇÕá ÕÝÍÉ"; +//STRIP001 Text[ greek ] = "Ìåôáêßíçóç áëëáãÞ?óåëßäá?"; +//STRIP001 Text[ korean ] = "페ì´ì§€ 나누ê¸?ì´ë™"; +//STRIP001 Text[ turkish ] = "Sayfa sonunu taþý"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Mou el salt de pàgina"; +//STRIP001 Text[ finnish ] = "Siirr?sivunvaihtoa"; +//STRIP001 Text[ thai ] = "ย้ายตัวà¹à¸šà¹ˆà¸‡à¸«à¸™à¹‰à¸?"; +//STRIP001 Text[ czech ] = "PÅ™esunout zalomenà stránky"; +//STRIP001 Text[ hebrew ] = "Seitenumbruch verschieben"; +//STRIP001 Text[ hindi ] = "पृषà¥à¤?खणà¥à¤¡à¤?का सà¥à¤¥à¤¾à¤?परिवरà¥à¤¤à¤¨ करà¥?"; +//STRIP001 }; + String STR_UNDO_RANGENAMES + { + Text [ de ] = "Bereichsnamen bearbeiten" ; + Text [ en-US ] = "Edit range names" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Editar nomes"; + Text[ ru ] = "Изменение имен диапазона"; + Text[ el ] = "ΕπεξεÏγασία ονομάτων πεÏιοχών"; + Text[ nl ] = "Bereiknaam bewerken"; + Text[ fr ] = "Éditer les noms de plage"; + Text[ es ] = "Editar nombres de área"; + Text[ fi ] = "Muuta alueiden nimiä"; + Text[ ca ] = "Edita els noms d'à rea"; + Text[ it ] = "Modifica nomi"; + Text[ da ] = "Rediger omrÃ¥denavne"; + Text[ sv ] = "Redigera omrÃ¥desnamn"; + Text[ pl ] = "Edytuj nazwy zakresów"; + Text[ pt-BR ] = "Editar nomes de intervalo"; + Text[ th ] = "à¹à¸à¹‰à¹„ขชื่à¸à¸Šà¹ˆà¸§à¸‡"; + Text[ ja ] = "範囲åã®ç·¨é›†"; + Text[ ko ] = "범위 ì´ë¦„ 편집"; + Text[ zh-CN ] = "编辑区域å称"; + Text[ zh-TW ] = "編輯å€åŸŸå稱"; + Text[ tr ] = "Aralık adlarını düzenle"; + Text[ hi-IN ] = "फैलाव नामों का संपादन"; + Text[ ar ] = "تØرير أسماء نطاقات"; + Text[ he ] = "Bereichsnamen bearbeiten"; + }; +//STRIP001 String STR_UNDO_TRANSLITERATE +//STRIP001 { +//STRIP001 Text = "Gro?/Kleinschreibung" ; +//STRIP001 Text [ ENGLISH ] = "Change case" ; +//STRIP001 Text[ english_us ] = "Case/Characters"; +//STRIP001 Text[ portuguese ] = "Caixa/Caracteres"; +//STRIP001 Text[ russian ] = "Ðåãèñò?"; +//STRIP001 Text[ greek ] = "Êåöáëáßá/ÐåæÜ"; +//STRIP001 Text[ dutch ] = "Hoofdletters/kleine letters"; +//STRIP001 Text[ french ] = "Casse/Caractères"; +//STRIP001 Text[ spanish ] = "Mayúsculas/minúsculas"; +//STRIP001 Text[ italian ] = "Maiuscole/minuscole"; +//STRIP001 Text[ danish ] = "Store og sm?bogstaver"; +//STRIP001 Text[ swedish ] = "Bokstäver/tecken"; +//STRIP001 Text[ polish ] = "Wielkie i ma³e litery"; +//STRIP001 Text[ portuguese_brazilian ] = "Caixa/Caracteres"; +//STRIP001 Text[ japanese ] = "æ–‡å—種ã®å¤‰æ›"; +//STRIP001 Text[ korean ] = "ë¬¸ìž ë°”ê¾¸ê¸?"; +//STRIP001 Text[ chinese_simplified ] = "å˜åŒ–å—æ¯å’Œå—ä½“æ ¼å¼?"; +//STRIP001 Text[ chinese_traditional ] = "變化å—æ¯å’Œå—åž‹æ ¼å¼?"; +//STRIP001 Text[ turkish ] = "Durum/Karakterler"; +//STRIP001 Text[ arabic ] = "ÇáßÊÇÈ?ÈÃÍÑ?ßÈíÑ?Ãæ ÕÛíÑ?"; +//STRIP001 Text[ language_user1 ] = "nk03.04.01: hier passt Englisch Uebesetzung besser."; +//STRIP001 Text[ catalan ] = "Majúscules i minúscules/Caràcters"; +//STRIP001 Text[ finnish ] = "Muuta kirjainkoko"; +//STRIP001 Text[ thai ] = "à¸à¸£à¸“ี/ตัวà¸à¸±à¸à¸‚รà¸?"; +//STRIP001 Text[ czech ] = "Velikost/znaky"; +//STRIP001 Text[ hebrew ] = "‮סיוו×?×ותיותâ€?"; +//STRIP001 Text[ hindi ] = "केà¤?अकà¥à¤·à¤°à¥‡à¤?"; +//STRIP001 }; + String STR_DB_NONAME + { + Text [ de ] = "unbenannt" ; + Text [ en-US ] = "unnamed" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Sem nome"; + Text[ ru ] = "документ"; + Text[ el ] = "Δίχως όνομα"; + Text[ nl ] = "naamloos"; + Text[ fr ] = "Sans nom"; + Text[ es ] = "Sin nombre"; + Text[ fi ] = "nimetön"; + Text[ ca ] = "sense nom"; + Text[ it ] = "Senza nome"; + Text[ da ] = "ikke-navngivet"; + Text[ sv ] = "namnlös"; + Text[ pl ] = "bez nazwy"; + Text[ pt-BR ] = "sem nome"; + Text[ th ] = "ไม่มีชื่à¸"; + Text[ ja ] = "ç„¡é¡Œ"; + Text[ ko ] = "ì´ë¦„ ì—†ìŒ"; + Text[ zh-CN ] = "未命å"; + Text[ zh-TW ] = "未命å"; + Text[ tr ] = "adsız"; + Text[ hi-IN ] = "नाम रहित"; + Text[ ar ] = "بدون عنوان"; + Text[ he ] = "unbenannt"; + }; + String STR_DBNAME_IMPORT + { + Text [ de ] = "Import" ; + Text [ en-US ] = "Import" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Importar"; + Text[ ru ] = "Импорт"; + Text[ el ] = "Εισαγωγή"; + Text[ nl ] = "Import"; + Text[ fr ] = "Import"; + Text[ es ] = "Importación"; + Text[ fi ] = "Tuo"; + Text[ ca ] = "Importa"; + Text[ it ] = "Importa"; + Text[ da ] = "Import"; + Text[ sv ] = "Import"; + Text[ pl ] = "Importuj"; + Text[ pt-BR ] = "Importar"; + Text[ th ] = "นำเข้า"; + Text[ ja ] = "インãƒãƒ¼ãƒˆ"; + Text[ ko ] = "ê°€ì ¸ì˜¤ê¸°"; + Text[ zh-CN ] = "输入"; + Text[ zh-TW ] = "匯入"; + Text[ tr ] = "İçe aktar"; + Text[ hi-IN ] = "आयात"; + Text[ ar ] = "استيراد"; + Text[ he ] = "Import"; + }; +//STRIP001 String STR_MSSG_DOSUBTOTALS_0 +//STRIP001 { +//STRIP001 Text = "%PRODUCTNAME Calc" ; +//STRIP001 Text [ ENGLISH ] = "StarCalc" ; +//STRIP001 Text [ norwegian ] = "StarCalc" ; +//STRIP001 Text [ italian ] = "%PRODUCTNAME Calc" ; +//STRIP001 Text [ portuguese_brazilian ] = "%PRODUCTNAME Calc" ; +//STRIP001 Text [ portuguese ] = "%PRODUCTNAME Calc" ; +//STRIP001 Text [ finnish ] = "%PRODUCTNAME Calc" ; +//STRIP001 Text [ danish ] = "%PRODUCTNAME Calc" ; +//STRIP001 Text [ french ] = "%PRODUCTNAME Calc" ; +//STRIP001 Text [ swedish ] = "%PRODUCTNAME Calc" ; +//STRIP001 Text [ dutch ] = "%PRODUCTNAME Calc" ; +//STRIP001 Text [ spanish ] = "%PRODUCTNAME Calc" ; +//STRIP001 Text [ english_us ] = "%PRODUCTNAME Calc" ; +//STRIP001 Text[ chinese_simplified ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ russian ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ polish ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ japanese ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ chinese_traditional ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ arabic ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ greek ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ korean ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ turkish ] = "%PRODUCTNAME Hesapla"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ thai ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ czech ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ hebrew ] = "%PRODUCTNAME Calc"; +//STRIP001 Text[ hindi ] = "%PRODUCTNAME गणना"; +//STRIP001 }; +//STRIP001 String STR_MSSG_DOSUBTOTALS_1 +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Daten löschen? : Daten l÷schen? */ +//STRIP001 Text = "Daten löschen?" ; +//STRIP001 Text [ ENGLISH ] = "Delete data?" ; +//STRIP001 Text [ norwegian ] = "Delete data?" ; +//STRIP001 Text [ italian ] = "Elimina dati?" ; +//STRIP001 Text [ portuguese_brazilian ] = "Excluir dados?" ; +//STRIP001 Text [ portuguese ] = "Eliminar dados?" ; +//STRIP001 Text [ finnish ] = "Poistetaanko tiedot?" ; +//STRIP001 Text [ danish ] = "Slette data?" ; +//STRIP001 Text [ french ] = "Supprimer les données ?" ; +//STRIP001 Text [ swedish ] = "Radera data?" ; +//STRIP001 Text [ dutch ] = "Gegevens wissen?" ; +//STRIP001 Text [ spanish ] = "¿Desea borrar los datos?" ; +//STRIP001 Text [ english_us ] = "Delete data?" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤æ•°æ®ï¼?"; +//STRIP001 Text[ russian ] = "Óäàëèò?äàííûå?"; +//STRIP001 Text[ polish ] = "Czy usun¹æ dane?"; +//STRIP001 Text[ japanese ] = "データを削除ã—ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "刪除資料ï¼?"; +//STRIP001 Text[ arabic ] = "åá ÊÑíÏ ÍÐ?ÇáÈíÇäÇÊ?"; +//STRIP001 Text[ greek ] = "ÄéáãñáöÞ äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„°ë¥¼ ì‚ì œí•˜ê² ìŠµë‹ˆê¹?"; +//STRIP001 Text[ turkish ] = "Verileri sil?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Voleu suprimir les dades?"; +//STRIP001 Text[ thai ] = "ลบข้à¸à¸¡à¸¹à¸¥à¸«à¸£à¸·à¸à¹„มà¹?"; +//STRIP001 Text[ czech ] = "Odstranit data?"; +//STRIP001 Text[ hebrew ] = "Daten löschen?"; +//STRIP001 Text[ hindi ] = "ड़ॉटà¤?को मिटाना है?"; +//STRIP001 }; + String STR_MSSG_DOSUBTOTALS_2 + { + /* ### ACHTUNG: Neuer Text in Resource? Kann keine Zeilen einfügen : Kann keine Zeilen einf³gen */ + Text [ de ] = "Kann keine Zeilen einfügen" ; + Text [ en-US ] = "Unable to insert rows" ; + Text [ x-comment ] = " "; + Text[ pt ] = "ImpossÃvel inserir linhas"; + Text[ ru ] = "Ðевозможно вÑтавить Ñтроки"; + Text[ el ] = "Δεν είναι δυνατόν να γίνει Ï€Ïοσθήκη γÏαμμής"; + Text[ nl ] = "Rij invoegen onmogelijk"; + Text[ fr ] = "Insertion de lignes impossible"; + Text[ es ] = "No puede insertar filas"; + Text[ fi ] = "Rivien lisääminen ei onnistu"; + Text[ ca ] = "No es poden inserir files"; + Text[ it ] = "Impossibile inserire riga"; + Text[ da ] = "Kan ikke indsætte rækker"; + Text[ sv ] = "Kan ej infoga rad"; + Text[ pl ] = "Nie można wstawić wierszy"; + Text[ pt-BR ] = "Não é possÃvel inserir linhas"; + Text[ th ] = "ไม่สามารถà¹à¸—รà¸à¹à¸–ว"; + Text[ ja ] = "列ã®æŒ¿å…¥ã¯ã§ãã¾ã›ã‚“。"; + Text[ ko ] = "í–‰ ì‚½ìž…ì´ ë¶ˆê°€ëŠ¥"; + Text[ zh-CN ] = "æ— æ³•æ’入行"; + Text[ zh-TW ] = "無法æ’入欄"; + Text[ tr ] = "Satır eklenemiyor"; + Text[ hi-IN ] = "पंकà¥à¤¤à¤¿à¤¯à¥‹à¤‚ को जोड़ना संà¤à¤µ नहीं है"; + Text[ ar ] = "غير قادر على إدراج صÙÙˆÙ"; + Text[ he ] = "Kann keine Zeilen einfügen"; + }; + String STR_MSSG_REPEATDB_0 + { + /* ### ACHTUNG: Neuer Text in Resource? Keine Operationen auszuführen : Keine Operationen auszuf³hren */ + Text [ de ] = "Keine Operationen auszuführen" ; + Text [ en-US ] = "No operations to execute" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Não tenho operações para executar"; + Text[ ru ] = "Ðет операций Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ"; + Text[ el ] = "Δεν υπάÏχουν εντολÎÏ‚ για εκτÎλεση"; + Text[ nl ] = "Geen bewerking uit te voeren"; + Text[ fr ] = "Aucune opération à exécuter"; + Text[ es ] = "Ninguna operación por hacer"; + Text[ fi ] = "Ei suoritettavia toimintoja"; + Text[ ca ] = "No hi ha cap operació per executar"; + Text[ it ] = "Non c'è niente da fare"; + Text[ da ] = "Ingen operationer til at udføre"; + Text[ sv ] = "Inga operationer att utföra"; + Text[ pl ] = "Brak operacji do wykonania"; + Text[ pt-BR ] = "Nenhuma operação a executar"; + Text[ th ] = "ไม่มีà¸à¸²à¸£à¸›à¸à¸´à¸šà¸±à¸•à¸´à¸à¸²à¸£"; + Text[ ja ] = "実行ã™ã‚‹æ¼”ç®—ã¯ã‚ã‚Šã¾ã›ã‚“。"; + Text[ ko ] = "ì‹¤í–‰í• ìž‘ì—…ì´ ì—†ìŠµë‹ˆë‹¤."; + Text[ zh-CN ] = "ä¸æ‰§è¡Œæ“作"; + Text[ zh-TW ] = "ä¸åŸ·è¡Œå‹•ä½œ"; + Text[ tr ] = "Yürütülecek iÅŸlem yok"; + Text[ hi-IN ] = "चलाने केलिठकोई कारà¥à¤¯ नहीं"; + Text[ ar ] = "لا توجد عمليات للتنÙيذ"; + Text[ he ] = "Keine Operationen auszuführen"; + }; +//STRIP001 String STR_MSSG_MAKEAUTOFILTER_0 +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Der Bereich enthält keine Spaltenköpfe.\nSoll die erste Zeile als Spaltenköpfe verwendet werden? : Der Bereich enthõlt keine Spaltenk÷pfe.\nSoll die erste Zeile als Spaltenk÷pfe verwendet werden? */ +//STRIP001 Text = "Der Bereich enthält keine Spaltenköpfe.\nSoll die erste Zeile als Spaltenköpfe verwendet werden?" ; +//STRIP001 Text [ ENGLISH ] = "This area does not contain column headers.\nUse the first line as column headers?" ; +//STRIP001 Text [ norwegian ] = "This area does not contain column headers.\nUse the first line as column headers?" ; +//STRIP001 Text [ italian ] = "L' area non contiene intestazioni per le colonne.\nUsare la prima riga come intestazione colonna?" ; +//STRIP001 Text [ portuguese_brazilian ] = "Este intervalo não contém os cabeçalhos das colunas.\nDeseja utilizar a primeira linha como cabeçalho da coluna?" ; +//STRIP001 Text [ portuguese ] = "Esta área não contém cabeçalhos de colunas.\nUtilizar a primeira linha como cabeçalho de coluna?" ; +//STRIP001 Text [ finnish ] = "Alue ei sisäll?sarakeotsikoita.\nHaluatko ensimmäist?rivi?käytettävän sarakeotsikkona?" ; +//STRIP001 Text [ danish ] = "Dette område indeholder ikke kolonneoverskrifter.\nSkal den første række bruges som kolonneoverskrift?" ; +//STRIP001 Text [ french ] = "Cette plage ne contient aucun en-tête de colonne.\nVoulez-vous utiliser le contenu de la première ligne en guise d'en-têtes ?" ; +//STRIP001 Text [ swedish ] = "Området innehåller inga kolumnhuvuden.\nSkall första raden användas som kolumnhuvud?" ; +//STRIP001 Text [ dutch ] = "Dit bereik bevat geen kolomkoppen.\nEerste regel als kolomkop gebruiken?" ; +//STRIP001 Text [ spanish ] = "El área no contiene encabezamientos de columnas.\n¿Desea utilizar la primera línea como encabezamiento?" ; +//STRIP001 Text [ english_us ] = "The range does not contain column headers.\nDo you want the first line to be used as column header?" ; +//STRIP001 Text[ chinese_simplified ] = "åŒºåŸŸæ²¡æœ‰åˆ—æ ‡é¢˜ã€‚\n您è¦ä»¥ç¬¬ä¸€è¡Œçš„å†…å®¹å½“ä½œåˆ—æ ‡é¢˜ï¼Ÿ"; +//STRIP001 Text[ russian ] = "Äèàïàçîí íå ñîäåðæèò çàãîëîâêîâ ñòîëáöîâ.\nÈñïîëüçîâàòü ïåðâóþ ñòðîêó ?êà÷åñòâå çàãîëîâê?ñòîëáö?"; +//STRIP001 Text[ polish ] = "Ten zakres nie zawiera nag³ówków kolumn.\nCzy pierwszy wiersz ma zosta?u¿yty jako nag³ówek kolumn?"; +//STRIP001 Text[ japanese ] = "ã“ã®ç¯„囲ã«ã¯åˆ—ã®é …目欄ãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。\n1行目を列ã®é …目欄ã¨ã¿ãªã—ã¦ã‚ˆã‚ã—ã„ã§ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "å€åŸŸæ²’有列標題。\nè¦ç”¨ç¬¬ä¸€åˆ—的內容當作列標題?"; +//STRIP001 Text[ arabic ] = "åÐ?ÇáäØÇÞ áÇ íÍÊæ?Úá?ÑÄæÓ ÃÚãÏ?\nåá ÊÑíÏ ÇÓÊÎÏÇ?ÇáÓØ?ÇáÃæ?ßÑÄæ?ÃÚãÏ?"; +//STRIP001 Text[ greek ] = "?ðåñéï÷?äå?ðåñéÝ÷åé êåöáëßäá óôçëþí.\nÈÝëåôå íá ÷ñçóéìïðïéçèåß ?ðñþô?óôÞë?ùò êåöáëßäá óôçëþí;"; +//STRIP001 Text[ korean ] = "ì?ì˜ì—ì—는 ì—?머리글ì?í¬í•¨ë˜ì–´ 있지 않습니다.\n첫번ì§?ì¤„ì„ ì—?머리글ë¡?ì‚¬ìš©í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"; +//STRIP001 Text[ turkish ] = "Bu aralýk, sütun baþlýklar?içermiyor.\nÝlk satýr sütun baþlýð?olarak kullanýlsýn m?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "L'àrea no cont?les capçaleres de les columnes.\nVoleu utilitzar la primera línia com a capçalera de la columna?"; +//STRIP001 Text[ thai ] = "ช่วงไม่มีส่วนหัวคà¸à¸¥à¸±à¸¡à¸™à¹Œ\nคุณต้à¸à¸‡à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸šà¸£à¸£à¸—ัดà¹à¸£à¸à¹€à¸›à¹‡à¸™à¸ªà¹ˆà¸§à¸™à¸«à¸±à¸§à¸„à¸à¸¥à¸±à¸¡à¸™à¹Œà¸«à¸£à¸·à¸à¹„ม่?"; +//STRIP001 Text[ czech ] = "Oblast neobsahuje popisky sloupců.\nChcete použÃt data v prvnÃm řádku jako popisky sloupců?"; +//STRIP001 Text[ hebrew ] = "Der Bereich enthält keine Spaltenköpfe.\nSoll die erste Zeile als Spaltenköpfe verwendet werden?"; +//STRIP001 Text[ hindi ] = "फैलाà¤?सà¥à¤¤à¤‚à¤?शीरà¥à¤·à¤•à¥‹à¤‚ को समà¥à¤®à¤¿à¤²à¤¿à¤¤ नहीà¤?किया है ।\nआप पहिलà¤?वाकà¥à¤?को सà¥à¤¤à¤‚à¤?शीरà¥à¤·à¤• जैसे उपयोà¤?करना चाहतà¥?है?"; +//STRIP001 }; + String STR_MSSG_IMPORTDATA_0 + { + Text [ de ] = "Fehler beim Importieren!" ; + Text [ en-US ] = "Error while importing data!" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Erro ao importar dados!"; + Text[ ru ] = "Ошибка импорта данных!"; + Text[ el ] = "Σφάλμα κατά την εισαγωγή!"; + Text[ nl ] = "Fout bij importeren!"; + Text[ fr ] = "Erreur lors de l'import des données !"; + Text[ es ] = "¡Error al importar datos!"; + Text[ fi ] = "Virhe tietoja tuotaessa."; + Text[ ca ] = "S'ha produït un error en importar les dades."; + Text[ it ] = "Errore durante l'importazione dei dati!"; + Text[ da ] = "Fejl ved import!"; + Text[ sv ] = "Fel vid import av data!"; + Text[ pl ] = "BÅ‚Ä…d podczas importowania danych!"; + Text[ pt-BR ] = "Erro ao importar dados!"; + Text[ th ] = "เà¸à¸´à¸”ความผิดพลาดขณะนำเข้าข้à¸à¸¡à¸¹à¸¥!"; + Text[ ja ] = "インãƒãƒ¼ãƒˆæ™‚ã®ã‚¨ãƒ©ãƒ¼ã€‚"; + Text[ ko ] = "ë°ì´í„°ë¥¼ ê°€ì ¸ì˜¤ëŠ” ë™ì•ˆ 오류!"; + Text[ zh-CN ] = "输入时å‘生错误ï¼"; + Text[ zh-TW ] = "匯入時發生錯誤ï¼"; + Text[ tr ] = "Veri içe aktarımında hata!"; + Text[ hi-IN ] = "ड़ॉटा को निरà¥à¤¯à¤¾à¤¤ करने के समय गलती!"; + Text[ ar ] = "Øدث خطأ أثناء استيراد البيانات!"; + Text[ he ] = "Fehler beim Importieren"; + }; +//STRIP001 String STR_DATABASE_NOTFOUND +//STRIP001 { +//STRIP001 Text = "Die Datenbank '#' konnte nicht geöffnet werden." ; +//STRIP001 Text [ ENGLISH ] = "The database '#' could not be opened." ; +//STRIP001 Text [ portuguese ] = "Foi impossível abrir a base de dados ''#''." ; +//STRIP001 Text [ english_us ] = "The database '#' could not be opened." ; +//STRIP001 Text [ portuguese_brazilian ] = "Não foi possível abrir o banco de dados '#'." ; +//STRIP001 Text [ swedish ] = "Databasen '#' kunde inte öppnas." ; +//STRIP001 Text [ danish ] = "Det var ikke muligt at åbne databasen ''#''." ; +//STRIP001 Text [ italian ] = "Impossibile aprire il database ''#''." ; +//STRIP001 Text [ spanish ] = "La base de datos '#' no se pudo abrir." ; +//STRIP001 Text [ french ] = "Impossible d'ouvrir la base de données '#'." ; +//STRIP001 Text [ dutch ] = "De database '#' kan niet worden geopend." ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ³•æ‰“å¼€æ•°æ®åº?'#' ã€?"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî îòêðûò?áàçó äàííûõ '#'."; +//STRIP001 Text[ polish ] = "Nie uda³o si?otworzy?bazy danych \"#\"."; +//STRIP001 Text[ japanese ] = "データベースã€?ã€ãŒé–‹ã‘られã¾ã›ã‚“ã§ã—ãŸã€?"; +//STRIP001 Text[ chinese_traditional ] = "無法開啟資料åº?#>ã€?"; +//STRIP001 Text[ arabic ] = "ÊÚÐÑ ÝÊ?ÞÇÚÏ?ÇáÈíÇäÇÊ '#'."; +//STRIP001 Text[ greek ] = "Äå?Þôáí äõíáôü?íá áíïé÷ôåß ?âÜóç äåäïìÝíù?'#'."; +//STRIP001 Text[ korean ] = "'#' ë°ì´í„°ë² ì´ìŠ¤ë¥?열지 못했습니ë‹?"; +//STRIP001 Text[ turkish ] = "'#' veritaban?açýlamad?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'ha pogut obrir la base de dades '#'."; +//STRIP001 Text[ finnish ] = "Tietokantaa '#' ei voitu avata."; +//STRIP001 Text[ thai ] = "ไม่สามารถเปิดà¸à¸²à¸™à¸‚้à¸à¸¡à¸¹à¸¥ '#' ไดà¹?"; +//STRIP001 Text[ czech ] = "Databázi '#' nelze otevÅ™Ãt."; +//STRIP001 Text[ hebrew ] = "Die Datenbank '#' konnte nicht geöffnet werden."; +//STRIP001 Text[ hindi ] = "'#' लेखासंचय को नहीà¤?खोà¤?सकते है à¥?"; +//STRIP001 }; +//STRIP001 String STR_QUERY_NOTFOUND +//STRIP001 { +//STRIP001 Text = "Die Abfrage '#' konnte nicht geöffnet werden." ; +//STRIP001 Text [ ENGLISH ] = "The query '#' could not be opened." ; +//STRIP001 Text [ portuguese ] = "Foi impossível abrir a consulta '#'." ; +//STRIP001 Text [ english_us ] = "The query '#' could not be opened." ; +//STRIP001 Text [ portuguese_brazilian ] = "Não foi possível abrir a consulta '#'." ; +//STRIP001 Text [ swedish ] = "Sökningen '#' kunde inte öppnas." ; +//STRIP001 Text [ danish ] = "Det var ikke muligt at åbne forespørgslen '#'." ; +//STRIP001 Text [ italian ] = "Non ?stato possibile aprire la ricerca '#'." ; +//STRIP001 Text [ spanish ] = "La consulta '#' no se pudo abrir." ; +//STRIP001 Text [ french ] = "La requête '#' n'a pas pu être ouverte." ; +//STRIP001 Text [ dutch ] = "Query '#' kan niet worden geopend." ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ³•æ‰“å¼€è¿™ä¸ªæŸ¥è¯¢ '#' ã€?"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî îòêðûò?çàïðîñ '#'."; +//STRIP001 Text[ polish ] = "Kwerendy '#' nie mo¿na otworzy?"; +//STRIP001 Text[ japanese ] = "クエリーã€?ã€ãŒé–‹ã‘られã¾ã›ã‚“ã§ã—ãŸã€?"; +//STRIP001 Text[ chinese_traditional ] = "無法開啟這個查è©?#>ã€?"; +//STRIP001 Text[ arabic ] = "ÊÚÐÑ ÝÊ?ÇáÇÓÊÝÓÇ?'#'."; +//STRIP001 Text[ greek ] = "Äå?Þôáí äõíáôü?íá áíïé÷èåß ôï åñþôçì?'#'."; +//STRIP001 Text[ korean ] = "쿼리 '#'ì?ë¥? ì—?ìˆ?없습니다."; +//STRIP001 Text[ turkish ] = "'#' sorgusu açýlamad?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'ha pogut obrir la consulta '#'."; +//STRIP001 Text[ finnish ] = "Kysely?'#' ei voitu avata."; +//STRIP001 Text[ thai ] = "ไม่สามารถเปิดà¹à¸šà¸šà¸ªà¸à¸šà¸–าม '#' ไดà¹?"; +//STRIP001 Text[ czech ] = "Dotaz '#' nelze otevÅ™Ãt."; +//STRIP001 Text[ hebrew ] = "Die Abfrage '#' konnte nicht geöffnet werden."; +//STRIP001 Text[ hindi ] = "'#' जानकारी को नहीà¤?खोà¤?सकते है à¥?"; +//STRIP001 }; +//STRIP001 String STR_DATABASE_ABORTED +//STRIP001 { +//STRIP001 Text = "Der Datenbank-Import wurde abgebrochen." ; +//STRIP001 Text [ ENGLISH ] = "Importing was aborted." ; +//STRIP001 Text [ portuguese ] = "A importação da base de dados foi cancelada." ; +//STRIP001 Text [ english_us ] = "Database import terminated." ; +//STRIP001 Text [ portuguese_brazilian ] = "A importação do banco de dados foi terminada." ; +//STRIP001 Text [ swedish ] = "Databasimporten avbröts." ; +//STRIP001 Text [ danish ] = "Database-importen blev afbrudt." ; +//STRIP001 Text [ italian ] = "Importazione database interrotta." ; +//STRIP001 Text [ spanish ] = "La importación de la base de datos se ha cancelado." ; +//STRIP001 Text [ french ] = "L'import de la base de données a ét?annul?" ; +//STRIP001 Text [ dutch ] = "De database-import is afgebroken" ; +//STRIP001 Text[ chinese_simplified ] = "å·²ç»ä¸æ–æ•°æ®åº“输入ã€?"; +//STRIP001 Text[ russian ] = "Èìïîðò áàçû äàííûõ îòìåíå?"; +//STRIP001 Text[ polish ] = "Import bazy danych zosta?zakoñczony."; +//STRIP001 Text[ japanese ] = "データベースã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã¯ä¸æ¢ã•ã‚Œã¾ã—ãŸã€?"; +//STRIP001 Text[ chinese_traditional ] = "已經ä¸æ–·è³‡æ–™åº«åŒ¯å…¥ã€?"; +//STRIP001 Text[ arabic ] = "Êã ÞØ?Úãáí?ÇÓÊíÑÇ?ÞÇÚÏ?ÇáÈíÇäÇÊ."; +//STRIP001 Text[ greek ] = "Äéáêïð?ôç?åéóáãùãÞ?âÜóç?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„°ë² ì´ìŠ¤ ê°€ì ¸ì˜¤ê¸?중단"; +//STRIP001 Text[ turkish ] = "Veritaban?içe aktarým?iptal edildi."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "La importaci?de la base de dades ha finalitzat."; +//STRIP001 Text[ finnish ] = "Tietokannan tuonti on päättynyt."; +//STRIP001 Text[ thai ] = "ยุติà¸à¸²à¸£à¸™à¸³à¹€à¸‚้าà¸à¸²à¸™à¸‚้à¸à¸¡à¸¹à¸¥"; +//STRIP001 Text[ czech ] = "Import databáze zastaven."; +//STRIP001 Text[ hebrew ] = "Der Datenbank-Import wurde abgebrochen."; +//STRIP001 Text[ hindi ] = "लेखासंचय निरà¥à¤¯à¤¾à¤?समापà¥à¤¤ हà¥à¤?à¥?"; +//STRIP001 }; +//STRIP001 String STR_PROGRESS_IMPORT +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? # Datensätze importiert... : # Datensõtze importiert... */ +//STRIP001 Text = "# Datensätze importiert..." ; +//STRIP001 Text [ ENGLISH ] = "# records read..." ; +//STRIP001 Text [ portuguese ] = "# de registos importados..." ; +//STRIP001 Text [ english_us ] = "# records imported..." ; +//STRIP001 Text [ portuguese_brazilian ] = "# registros importados..." ; +//STRIP001 Text [ swedish ] = "# dataposter importerade..." ; +//STRIP001 Text [ danish ] = "# dataposter importeret..." ; +//STRIP001 Text [ italian ] = "# Record di dati importati..." ; +//STRIP001 Text [ spanish ] = "# registros importados..." ; +//STRIP001 Text [ french ] = "# enregistrements importés..." ; +//STRIP001 Text [ dutch ] = "# records geïmporteerd..." ; +//STRIP001 Text[ chinese_simplified ] = "# 输入数æ®..."; +//STRIP001 Text[ russian ] = "# çàïèñå?èìïîðòèðîâàí?"; +//STRIP001 Text[ polish ] = "Zaimportowane rekordy: #"; +//STRIP001 Text[ japanese ] = "# レコードã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ..."; +//STRIP001 Text[ chinese_traditional ] = "# 匯入資料..."; +//STRIP001 Text[ arabic ] = "# ÓÌ?ÓÌáÇ? ãÓÊæÑÏ(?..."; +//STRIP001 Text[ greek ] = "# åããñáöÝò åéóÜ÷èçêáí..."; +//STRIP001 Text[ korean ] = "# ë ˆì½”ë“œë¥¼ ê°€ì ¸ì™”ìŠµë‹ˆë‹?.."; +//STRIP001 Text[ turkish ] = "# kayýtlar içe aktarýld?.."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "S'han importat # registres..."; +//STRIP001 Text[ finnish ] = "# tietuetta tuotu..."; +//STRIP001 Text[ thai ] = "นำเข้าระเบียน# ..."; +//STRIP001 Text[ czech ] = "# záznamů importováno..."; +//STRIP001 Text[ hebrew ] = "# Datensätze importiert..."; +//STRIP001 Text[ hindi ] = "# लेखोà¤?को निरà¥à¤¯à¤¾à¤?किया है..."; +//STRIP001 }; +//STRIP001 String STR_MSSG_MAKEOUTLINE_0 +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Gruppierung nicht möglich : Gruppierung nicht m÷glich */ +//STRIP001 Text = "Gruppierung nicht möglich" ; +//STRIP001 Text [ ENGLISH ] = "Grouping not possible" ; +//STRIP001 Text [ norwegian ] = "Grouping not possible" ; +//STRIP001 Text [ italian ] = "Impossibile raggruppare" ; +//STRIP001 Text [ portuguese_brazilian ] = "Não ?possível agrupar." ; +//STRIP001 Text [ portuguese ] = "Impossível agrupar." ; +//STRIP001 Text [ finnish ] = "Ryhmittely ei onnistu" ; +//STRIP001 Text [ danish ] = "Gruppering er ikke mulig" ; +//STRIP001 Text [ french ] = "Impossible de grouper" ; +//STRIP001 Text [ swedish ] = "Gruppering inte möjlig" ; +//STRIP001 Text [ dutch ] = "Groeperen onmogelijk" ; +//STRIP001 Text [ spanish ] = "No es posible agrupar" ; +//STRIP001 Text [ english_us ] = "Grouping not possible" ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ³•åˆ†ç»„"; +//STRIP001 Text[ russian ] = "Ãðóïïèðîâàòü íåâîçìîæíî"; +//STRIP001 Text[ polish ] = "Nie mo¿na grupowa?"; +//STRIP001 Text[ japanese ] = "グループ化ã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "無法建立群組"; +//STRIP001 Text[ arabic ] = "ÇáÊÌãí?Ûí?ããßä"; +//STRIP001 Text[ greek ] = "Äå?åßíá?äõíáôü?íá ãßíå?ïìáäïðïßçó?"; +//STRIP001 Text[ korean ] = "그룹í™?불가ëŠ?"; +//STRIP001 Text[ turkish ] = "Gruplama yapýlamaz"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No és possible l'agrupament"; +//STRIP001 Text[ thai ] = "จัดà¸à¸¥à¸¸à¹ˆà¸¡à¹„ม่ได้"; +//STRIP001 Text[ czech ] = "Nelze seskupit"; +//STRIP001 Text[ hebrew ] = "Gruppierung nicht möglich"; +//STRIP001 Text[ hindi ] = "à¤à¤•à¤¤à¥à¤°à¤¿à¤?करना असंà¤à¤?है"; +//STRIP001 }; +//STRIP001 String STR_MSSG_REMOVEOUTLINE_0 +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Aufheben nicht möglich : Aufheben nicht m÷glich */ +//STRIP001 Text = "Aufheben nicht möglich" ; +//STRIP001 Text [ ENGLISH ] = "Ungrouping not possible" ; +//STRIP001 Text [ norwegian ] = "Ungrouping not possible" ; +//STRIP001 Text [ italian ] = "Impossibile separare" ; +//STRIP001 Text [ portuguese_brazilian ] = "Não ?possível desagrupar" ; +//STRIP001 Text [ portuguese ] = "Impossível desfazer grupo" ; +//STRIP001 Text [ finnish ] = "Ryhmän purkaminen ei onnistu" ; +//STRIP001 Text [ danish ] = "Det er ikke muligt at ophæve" ; +//STRIP001 Text [ french ] = "Dissociation impossible" ; +//STRIP001 Text [ swedish ] = "Omöjligt att upphäva" ; +//STRIP001 Text [ dutch ] = "Groep opheffen niet mogelijk" ; +//STRIP001 Text [ spanish ] = "No es posible deshacer la agrupación" ; +//STRIP001 Text [ english_us ] = "Ungrouping not possible" ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ³•å–消"; +//STRIP001 Text[ russian ] = "Ðàçãðóïïèðîâàò?íåâîçìîæíî"; +//STRIP001 Text[ polish ] = "Nie mo¿na rozgrupowa?"; +//STRIP001 Text[ japanese ] = "解除ã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "無法å–消"; +//STRIP001 Text[ arabic ] = "ÇáÅÒÇá?Ûí?ããßä?"; +//STRIP001 Text[ greek ] = "Äå?åßíá?äõíáôÞ ?êáôÜñãçó?ôç?ïìáäïðïßçóçò"; +//STRIP001 Text[ korean ] = "그룹 í•´ì œ 불가ëŠ?"; +//STRIP001 Text[ turkish ] = "Grup çözülemiyor"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "El desagrupament no és possible"; +//STRIP001 Text[ thai ] = "ไม่จัดà¸à¸¥à¸¸à¹ˆà¸¡à¹„ม่ไดà¹?"; +//STRIP001 Text[ czech ] = "Nelze zruÅ¡it seskupenÃ"; +//STRIP001 Text[ hebrew ] = "Aufheben nicht möglich"; +//STRIP001 Text[ hindi ] = "अलगाना असंà¤à¤?है"; +//STRIP001 }; +//STRIP001 String STR_MSSG_PASTEFROMCLIP_0 +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Einfügen auf Mehrfachselektion nicht möglich : Einf³gen auf Mehrfachselektion nicht m÷glich */ +//STRIP001 Text = "Einfügen auf Mehrfachselektion nicht möglich" ; +//STRIP001 Text [ ENGLISH ] = "Insert in multi selection not possible" ; +//STRIP001 Text [ norwegian ] = "Insert in multi selection not possible" ; +//STRIP001 Text [ italian ] = "Impossibile inserire da selezione multipla" ; +//STRIP001 Text [ portuguese_brazilian ] = "Não ?possível inserir na seleção múltipla" ; +//STRIP001 Text [ portuguese ] = "Inserção em multiselecção impossível" ; +//STRIP001 Text [ finnish ] = "Lisääminen monivalintaan ei onnistu" ; +//STRIP001 Text [ danish ] = "Det er ikke muligt at indsætte i multimarkeringer" ; +//STRIP001 Text [ french ] = "Insertion impossible dans la sélection multiple" ; +//STRIP001 Text [ swedish ] = "Det är inte möjligt att infoga i multimarkering" ; +//STRIP001 Text [ dutch ] = "Invoegen in meervoudige selectie onmogelijk" ; +//STRIP001 Text [ spanish ] = "La inserción en una selección múltiple no es posible" ; +//STRIP001 Text [ english_us ] = "Insert into multiple selection not possible" ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ³•åœ¨å¤šé‡é€‰æ‹©å†…æ’å…?"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî âñòàâèòü ìíîãîêðàòíîå âûäåëåíè?"; +//STRIP001 Text[ polish ] = "Nie mo¿na wstawia?do wielokrotnego zaznaczenia"; +//STRIP001 Text[ japanese ] = "複数é¸æŠžã¸ã®æŒ¿å…¥ã¯ã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "無法在多é‡é¸å–å…§æ’å…¥"; +//STRIP001 Text[ arabic ] = "ÇáÅÏÑÇ?Ýí ÊÍÏí?ãÊÚÏ?Ûí?ããßä"; +//STRIP001 Text[ greek ] = "Äå?åßíá?äõíáôü?íá ãßíå?åéóáãùãÞ óå ðïëëáðëÞ åðéëïã?"; +//STRIP001 Text[ korean ] = "다중 ì„ íƒì—?ì‚½ìž…ì€ ë¶ˆê°€ëŠ?"; +//STRIP001 Text[ turkish ] = "Çoklu seçime ekleme yapýlamaz"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No és possible inserir en una selecci?múltiple."; +//STRIP001 Text[ thai ] = "à¹à¸—รà¸à¹ƒà¸™à¸à¸²à¸£à¹€à¸¥à¸·à¸à¸à¸«à¸¥à¸²à¸¢à¸ªà¹ˆà¸§à¸™à¹„ม่ได้"; +//STRIP001 Text[ czech ] = "Vkládánà do vÃcenásobného výbÄ›ru nenà možné"; +//STRIP001 Text[ hebrew ] = "Einfügen auf Mehrfachselektion nicht möglich"; +//STRIP001 Text[ hindi ] = "बहà¥à¤®à¥à¤–ी चनाव मेà¤?जोड़ना असंà¤à¤?है"; +//STRIP001 }; +//STRIP001 String STR_MSSG_PASTEFROMCLIP_1 +//STRIP001 { +//STRIP001 Text = "Zusammenfassen nicht verschachteln!" ; +//STRIP001 Text [ ENGLISH ] = "Inserting merged cells into merged cells missmatched!" ; +//STRIP001 Text [ norwegian ] = "Inserting merged cells into merged cells missmatched!" ; +//STRIP001 Text [ italian ] = "Non inserire celle in celle raggruppate!" ; +//STRIP001 Text [ portuguese_brazilian ] = "Não ?possível mesclar células que j?foram mescladas!" ; +//STRIP001 Text [ portuguese ] = "Não ?permitido inserir células em células intercaladas!" ; +//STRIP001 Text [ finnish ] = "Solujen yhdistäminen ei onnistu, jos solut on jo yhdistetty." ; +//STRIP001 Text [ danish ] = "Det er ikke tilladt at overlappe flettede celler!" ; +//STRIP001 Text [ french ] = "Insertion de cellules fusionnées dans d'autres cellules fusionnées : échec !" ; +//STRIP001 Text [ swedish ] = "Inte tillåtet att överlappa sammanfattade celler!" ; +//STRIP001 Text [ dutch ] = "Overlapping van samengevoegde cellen niet geoorloofd!" ; +//STRIP001 Text [ spanish ] = "¡La inserción de celdas fusionadas en otras celdas fusionadas no es posible!" ; +//STRIP001 Text [ english_us ] = "Cell merge not possible if cells already merged!" ; +//STRIP001 Text[ chinese_simplified ] = "ä¸å…许å¤åˆåˆå¹¶ï¼"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî îáúåäèíèòü óæ?îáúåäèíåííûå ÿ÷åéê?"; +//STRIP001 Text[ polish ] = "Nie mo¿na scala?ju?scalonych komórek!"; +//STRIP001 Text[ japanese ] = "セルã®çµåˆã¯é‡è¤‡ã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "ä¸å…許複åˆåˆä½µï¼"; +//STRIP001 Text[ arabic ] = "ããäæ?ÊÑÇß?ÇáÎáÇí?ÇáãÏãÌ?"; +//STRIP001 Text[ greek ] = "Äå?åßíá?äõíáôü?íá ãßíå?óõã÷þíåõóç êåëéþí ôá ïðïß?åßíá?Þä?óõã÷ùíåõìÝíá!"; +//STRIP001 Text[ korean ] = "ì…€ 병합ì?중복í•?ìˆ?없습니다."; +//STRIP001 Text[ turkish ] = "Birleþtirilmi?hücreler birleþtirilemez!"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No és possible fusionar les cel.les si ja estan fusionades."; +//STRIP001 Text[ thai ] = "ผสานเซลล์ไม่ได้ถ้าได้ผสานเซลล์à¹à¸¥à¹‰à¸§!"; +//STRIP001 Text[ czech ] = "SlouÄenà bunÄ›k nenà možné, buňky už jsou slouÄené!"; +//STRIP001 Text[ hebrew ] = "Zusammenfassen nicht verschachteln"; +//STRIP001 Text[ hindi ] = "अगà¤?कोषà¥à¤?को पहिलà¥?से ही मिलाया है, तो कोषà¥à¤?को मिलाना संà¤à¤µ नहीà¤?है!"; +//STRIP001 }; +//STRIP001 String STR_MSSG_MOVEBLOCKTO_0 +//STRIP001 { +//STRIP001 Text = "Zusammenfassen nicht verschachteln!" ; +//STRIP001 Text [ ENGLISH ] = "Inserting merged cells into merged cells missmatched!" ; +//STRIP001 Text [ norwegian ] = "Inserting merged cells into merged cells missmatched!" ; +//STRIP001 Text [ italian ] = "Non inserire celle in celle raggruppate!" ; +//STRIP001 Text [ portuguese_brazilian ] = "Não ?possível mesclar células que j?foram mescladas!" ; +//STRIP001 Text [ portuguese ] = "Não ?permitido inserir células em células intercaladas!" ; +//STRIP001 Text [ finnish ] = "Solujen yhdistäminen ei onnistu, jos solut on jo yhdistetty." ; +//STRIP001 Text [ danish ] = "Det er ikke tilladt at overlappe flettede celler!" ; +//STRIP001 Text [ french ] = "Insertion de cellules fusionnées dans d'autres cellules fusionnées : échec !" ; +//STRIP001 Text [ swedish ] = "Inte tillåtet att överlappa sammanfattade celler!" ; +//STRIP001 Text [ dutch ] = "Overlapping van samengevoegde cellen niet geoorloofd!" ; +//STRIP001 Text [ spanish ] = "¡La inserción de celdas fusionadas en otras celdas fusionadas no es posible!" ; +//STRIP001 Text [ english_us ] = "Cell merge not possible if cells already merged!" ; +//STRIP001 Text[ chinese_simplified ] = "ä¸å…许å¤åˆåˆå¹¶ï¼"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî îáúåäèíèòü óæ?îáúåäèíåííûå ÿ÷åéê?"; +//STRIP001 Text[ polish ] = "Nie mo¿na scala?ju?scalonych komórek!"; +//STRIP001 Text[ japanese ] = "çµ±åˆã—ãŸã‚‚ã®ã¯é‡ãられã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "ä¸å…許複åˆåˆä½µï¼"; +//STRIP001 Text[ arabic ] = "ããäæ?ÊÑÇß?ÇáÎáÇí?ÇáãÏãÌ?"; +//STRIP001 Text[ greek ] = "Äå?åßíá?äõíáôü?íá ãßíå?óõã÷þíåõóç êåëéþí ôá ïðïß?åßíá?Þä?óõã÷ùíåõìÝíá!"; +//STRIP001 Text[ korean ] = "ì…€ 병합ì?중복í•?ìˆ?없습니다."; +//STRIP001 Text[ turkish ] = "Birleþtirilmi?hücreler birleþtirilemez!"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No és possible fusionar les cel.les si ja estan fusionades."; +//STRIP001 Text[ thai ] = "ผสานเซลล์ไม่ได้ถ้าได้ผสานเซลล์à¹à¸¥à¹‰à¸§!"; +//STRIP001 Text[ czech ] = "SlouÄenà bunÄ›k nenà možné, buňky už jsou slouÄené!"; +//STRIP001 Text[ hebrew ] = "Zusammenfassen nicht verschachteln"; +//STRIP001 Text[ hindi ] = "अगà¤?कोषà¥à¤?को पहिलà¥?से ही मिलाया है, तो कोषà¥à¤?को मिलाना संà¤à¤µ नहीà¤?है!"; +//STRIP001 }; +//STRIP001 String STR_MSSG_APPLYPATTLINES_0 +//STRIP001 { +//STRIP001 Text = "Rahmen nicht auf Mehrfachselektion" ; +//STRIP001 Text [ ENGLISH ] = "Border not with multi selection" ; +//STRIP001 Text [ norwegian ] = "Border not with multi selection" ; +//STRIP001 Text [ italian ] = "Bordo non su selezione multipla" ; +//STRIP001 Text [ portuguese_brazilian ] = "Não ?possível aplicar bordas numa seleção múltipla" ; +//STRIP001 Text [ portuguese ] = "Contorno incompatível com a multiselecção." ; +//STRIP001 Text [ finnish ] = "Reunojen lisääminen monivalintaan ei onnistu" ; +//STRIP001 Text [ danish ] = "Ramme ikke p?multimarkering" ; +//STRIP001 Text [ french ] = "Bordure incompatible avec la sélection multiple" ; +//STRIP001 Text [ swedish ] = "Ej multimarkering för kantlinje" ; +//STRIP001 Text [ dutch ] = "Geen kader bij meervoudige selectie" ; +//STRIP001 Text [ spanish ] = "No se pueden aplicar bordes a una selección múltiple" ; +//STRIP001 Text [ english_us ] = "Cannot apply borders to multiple selection" ; +//STRIP001 Text[ chinese_simplified ] = "æ¡†æ— æ³•é€‚ç”¨äºŽå¤šé‡é€‰æ‹©"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî ïðèìåíèò?îáðàìëåíèå ïð?ìíîãîêðàòíîì âûáîðå"; +//STRIP001 Text[ polish ] = "Nie mo¿na zastosowa?krawêdzi, je¿eli zaznaczono wiele elementów"; +//STRIP001 Text[ japanese ] = "æž ã¯è¤‡æ•°é¸æŠžã§ä½¿ãˆã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "框無法用於多é‡é¸å?"; +//STRIP001 Text[ arabic ] = "áÇ íãßä ÇÓÊÎÏÇ?ÇáßÇÏÑ áÚãá ÊÍÏí?ãÊÚÏ?"; +//STRIP001 Text[ greek ] = "Äå?åßíá?äõíáôÞ ?åöáñìïãÞ ðåñéãñáììÜôù?óå ðïëëáðëÞ åðéëïã?"; +//STRIP001 Text[ korean ] = "í…Œë‘리는 다중 ì„ íƒìœ¼ë¡œ 사용í•?ìˆ?없습니다."; +//STRIP001 Text[ turkish ] = "Çoklu hücre seçimi için kenarlýk oluþturulamýyor"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No es poden aplicar vores en una selecci?múltiple"; +//STRIP001 Text[ thai ] = "ไม่สามารถใช้เส้นขà¸à¸šà¹ƒà¸™à¸à¸²à¸£à¹€à¸¥à¸·à¸à¸à¸«à¸¥à¸²à¸¢à¸ªà¹ˆà¸§à¸™à¹„ดà¹?"; +//STRIP001 Text[ czech ] = "Nelze nastavit okraje vÃcenásobnému výbÄ›ru"; +//STRIP001 Text[ hebrew ] = "Rahmen nicht auf Mehrfachselektion"; +//STRIP001 Text[ hindi ] = "बहà¥à¤®à¥à¤–ी चनाव केलिà¤?किनारोà¤?को लागू नहीà¤?कर सकते है"; +//STRIP001 }; + String STR_MSSG_INSERTCELLS_0 + { + /* ### ACHTUNG: Neuer Text in Resource? Kann nicht in zusammengefaßte Bereiche einfügen : Kann nicht in zusammengefa˜te Bereiche einf³gen */ + Text [ de ] = "Kann nicht in zusammengefasste Bereiche einfügen" ; + Text [ en-US ] = "Inserting into merged ranges not possible" ; + Text [ x-comment ] = " "; + Text[ pt ] = "ImpossÃvel inserir em áreas intercaladas."; + Text[ ru ] = "Ðевозможно вÑтавить в объединенные облаÑти"; + Text[ el ] = "Δεν είναι δυνατόν να γίνει Ï€Ïοσθήκη σε συγχωνευμÎνες πεÏιοχÎÏ‚"; + Text[ nl ] = "Invoegen in samengevoegde bereiken onmogelijk!"; + Text[ fr ] = "Insertion impossible dans des plages contant des cellules fusionnées"; + Text[ es ] = "No es posible insertar en áreas fusionadas"; + Text[ fi ] = "Yhdistettyihin alueisiin liittäminen ei ole mahdollista"; + Text[ ca ] = "No és possible inserir en à rees fusionades"; + Text[ it ] = "Impossibile inserire nelle aree unite"; + Text[ da ] = "Kan ikke indsætte i flettede omrÃ¥der"; + Text[ sv ] = "Kan inte infoga i sammanfattade omrÃ¥den"; + Text[ pl ] = "Nie można wstawiać do scalonych zakresów"; + Text[ pt-BR ] = "Não é possÃvel inserir em intervalos mesclados"; + Text[ th ] = "à¹à¸—รà¸à¹ƒà¸™à¸Šà¹ˆà¸§à¸‡à¸—ี่ผสานไม่ได้"; + Text[ ja ] = "çµåˆã—ãŸç¯„囲ã«æŒ¿å…¥ã§ãã¾ã›ã‚“。"; + Text[ ko ] = "ë³‘í•©ëœ ë²”ìœ„ì— ì‚½ìž…í• ìˆ˜ 없습니다."; + Text[ zh-CN ] = "æ— æ³•æ’入到åˆå¹¶çš„区域内"; + Text[ zh-TW ] = "無法在åˆä½µçš„å€åŸŸå…§æ’å…¥"; + Text[ tr ] = "BirleÅŸtirilmiÅŸ aralıklara ekleme yapılamaz"; + Text[ hi-IN ] = "Inserting into merged ranges not possible"; + Text[ ar ] = "لا يستطيع الإدراج ÙÙŠ نطاقات مدمجة"; + Text[ he ] = "Kann nicht in zusammengefasste Bereiche einfügen"; + }; +//STRIP001 String STR_MSSG_DELETECELLS_0 +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Kann nicht aus zusammengefaßten Bereichen löschen : Kann nicht aus zusammengefa˜ten Bereichen l÷schen */ +//STRIP001 Text = "Kann nicht aus zusammengefassten Bereichen löschen" ; +//STRIP001 Text [ ENGLISH ] = "Can not delete in merged ranges" ; +//STRIP001 Text [ norwegian ] = "Can not delete in merged ranges" ; +//STRIP001 Text [ italian ] = "Impossibile cancellare nelle aree unite" ; +//STRIP001 Text [ portuguese_brazilian ] = "Não ?possível excluir em intervalos mesclados" ; +//STRIP001 Text [ portuguese ] = "Impossível eliminar em áreas intercaladas" ; +//STRIP001 Text [ finnish ] = "Yhdistetyist?alueista poistaminen ei ole mahdollista" ; +//STRIP001 Text [ danish ] = "Kan ikke slette i flettede områder" ; +//STRIP001 Text [ french ] = "Suppression impossible dans des plages contant des cellules fusionnées" ; +//STRIP001 Text [ swedish ] = "Kan inte radera från sammanfattade områden" ; +//STRIP001 Text [ dutch ] = "Verwijderen binnen samengevoegde bereiken onmogelijk!" ; +//STRIP001 Text [ spanish ] = "No se puede borrar en áreas fusionadas" ; +//STRIP001 Text [ english_us ] = "Deleting in merged ranges not possible" ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ³•ä»Žåˆå¹¶çš„区域ä¸åˆ é™?"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî óäàëèò?èç îáúåäèíåííûõ îáëàñòåé"; +//STRIP001 Text[ polish ] = "Nie mo¿na usun¹æ ze scalonych zakresów"; +//STRIP001 Text[ japanese ] = "çµåˆã—ãŸç¯„囲ã‹ã‚‰å‰Šé™¤ã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "無法刪除åˆä½µçš„å€åŸ?"; +//STRIP001 Text[ arabic ] = "áÇ íãßä ÇáÍÐ?ãä äØÇÞÇÊ ãÏãÌ?"; +//STRIP001 Text[ greek ] = "Äå?åßíá?äõíáôü?íá ãßíå?äéáãñáöÞ óôéò óõã÷ùíåõìÝíå?ðåñéï÷Ýò"; +//STRIP001 Text[ korean ] = "병합ë?범위ì—ì„œ ì‚ì œí•?ìˆ?없습니다."; +//STRIP001 Text[ turkish ] = "Birleþtirilmi?aralýklarda silme yapýlamaz"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No és possible suprimir en àrees fusionades"; +//STRIP001 Text[ thai ] = "ลบช่วงที่ผสานไม่ไดà¹?"; +//STRIP001 Text[ czech ] = "Mazánà ve slouÄených oblastech nenà možné"; +//STRIP001 Text[ hebrew ] = "Kann nicht aus zusammengefassten Bereichen löschen"; +//STRIP001 Text[ hindi ] = "मिलाया हà¥à¤?फैलाà¤?से मिटाना संà¤à¤µ नहीà¤?है"; +//STRIP001 }; + String STR_MSSG_MERGECELLS_0 + { + Text [ de ] = "Zusammenfassungen nicht verschachteln !" ; + Text [ en-US ] = "Cell merge not possible if cells already merged" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Não é permitido inserir células em células intercaladas!"; + Text[ ru ] = "Ðевозможно объединение уже объединенных Ñчеек!"; + Text[ el ] = "Δεν είναι δυνατόν να γίνει συγχώνευση κελιών τα οποία είναι ήδη συγχωνευμÎνα!"; + Text[ nl ] = "Overlappen van samengevoegde cellen niet geoorloofd!"; + Text[ fr ] = "Insertion de cellules dans des cellules fusionnées : échec !"; + Text[ es ] = "¡La inserción de celdas fusionadas en otras celdas fusionadas no es posible!"; + Text[ fi ] = "Solujen yhdistäminen ei onnistu, jos solut on jo yhdistetty"; + Text[ ca ] = "No és possible fusionar les cel.les si ja estan fusionades"; + Text[ it ] = "Non inserire celle raggruppate in celle raggruppate!"; + Text[ da ] = "Det er ikke tilladt at overlappe flettede celler!"; + Text[ sv ] = "Inte tillÃ¥tet att överlappa sammanfattade celler!"; + Text[ pl ] = "Nie można scalać już scalonych komórek"; + Text[ pt-BR ] = "Não é possÃvel mesclar células que já foram mescladas!"; + Text[ th ] = "ผสานเซลล์ไม่ได้ถ้าได้ผสานเซลล์à¹à¸¥à¹‰à¸§"; + Text[ ja ] = "çµ±åˆã—ãŸã‚‚ã®ã¯é‡ãられã¾ã›ã‚“。"; + Text[ ko ] = "ì…€ ë³‘í•©ì„ ì¤‘ë³µí• ìˆ˜ 없습니다."; + Text[ zh-CN ] = "ä¸å…许å¤åˆåˆå¹¶ï¼"; + Text[ zh-TW ] = "ä¸å…許複åˆåˆä½µï¼"; + Text[ tr ] = "BirleÅŸtirilmiÅŸ hücreler birleÅŸtirilemez!"; + Text[ hi-IN ] = "अगर कोषà¥à¤ को पहिले से ही मिलाया है, तो कोषà¥à¤ को मिलाना संà¤à¤µ नहीं है"; + Text[ ar ] = "ممنوع تراكب الخلايا المدمجة !"; + Text[ he ] = "Zusammenfassungen nicht verschachteln "; + }; + String STR_SORT_ERR_MERGED + { + /* ### ACHTUNG: Neuer Text in Resource? Bereiche mit zusammengefaßten Zellen können nur ohne Formate sortiert werden. : Bereiche mit zusammengefa˜ten Zellen k÷nnen nur ohne Formate sortiert werden. */ + Text [ de ] = "Bereiche mit zusammengefassten Zellen können nur ohne Formate sortiert werden." ; + Text [ en-US ] = "Ranges containing merged cells can only be sorted without formats." ; + Text [ x-comment ] = " "; + Text[ pt ] = "As áreas contendo células unidas só podem ser ordenadas sem formato."; + Text[ ru ] = "Сортировка облаÑтей Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð½Ñ‹Ð¼Ð¸ Ñчейками возможна только без формата."; + Text[ el ] = "Η ταξινόμηση πεÏιοχών, οι οποίες πεÏιÎχουν συγχωνευμÎνα κελιά, είναι δυνατόν να γίνει μόνο χωÏίς τη μοÏφοποίηση."; + Text[ nl ] = "Bereiken met samengevatte cellen kunnen alleen maar zonder opmaak worden gesorteerd."; + Text[ fr ] = "Tri dans des plages contant des cellules fusionnées uniquement possible sans format"; + Text[ es ] = "Las áreas con celdas fusionadas sólo se pueden ordenar sin formato."; + Text[ fi ] = "Yhdistettyjä soluja sisältävät alueet voi järjestää vain ilman muotoja."; + Text[ ca ] = "Les à rees que contenen cel.les fusionades només es poden ordenar sense formats."; + Text[ it ] = "Le aree con celle raggruppate possono essere ordinate solo senza formati."; + Text[ da ] = "OmrÃ¥der med flettede celler kan kun sorteres uden formater."; + Text[ sv ] = "OmrÃ¥den med sammanslagna celler kan bara sorteras utan format."; + Text[ pl ] = "Zakresy zawierajÄ…ce scalone komórki mogÄ… być sortowane tylko bez formató????w."; + Text[ pt-BR ] = "Os intervalos contendo células mescladas só podem ser ordenados sem formato."; + Text[ th ] = "ช่วงมีเซลล์ที่ผสานสามารถเรียงลำดับโดยไม่มีรูปà¹à¸šà¸šà¹€à¸—่านั้น"; + Text[ ja ] = "çµåˆã—ãŸã‚»ãƒ«ã‚’å«ã‚€ç¯„囲ã¯ã€æ›¸å¼ãªã—ã®æ™‚ã®ã¿ä¸¦ã¹æ›¿ãˆã§ãã¾ã™ã€‚"; + Text[ ko ] = "ë³‘í•©ëœ ì…€ì„ í¬í•¨í•˜ê³ 있는 범위는 ì„œì‹ì´ ì—†ì„ ë•Œë§Œ ì •ë ¬ë 수 있습니다."; + Text[ zh-CN ] = "åªæœ‰åœ¨ä¸å¸¦æ ¼å¼çš„æ¡ä»¶ä¸‹æ‰èƒ½æŽ’åºå«æœ‰åˆå¹¶å•å…ƒæ ¼çš„区域。"; + Text[ zh-TW ] = "åªæœ‰åœ¨ä¸å¸¶æ ¼å¼çš„æ¢ä»¶ä¸‹æ‰èƒ½æŽ’åºå«æœ‰åˆä½µçš„儲å˜æ ¼å€åŸŸã€‚"; + Text[ tr ] = "BirleÅŸtirilmiÅŸ hücre içeren aralıklar yalnızca formatsız olarak sıralanabilir."; + Text[ hi-IN ] = "फैलाव में रहनेवाला मिलाया हà¥à¤† कोषà¥à¤ ों को केवल रचना के बिना ही सोरà¥à¤Ÿ कर सकते है ।"; + Text[ ar ] = "لا يمكن Ùرز النطاقات ذات الخلايا المدمجة إلا بدون تنسيقات."; + Text[ he ] = "Bereiche mit zusammengefassten Zellen können nur ohne Formate sortiert werden."; + }; +//STRIP001 String STR_MSSG_SEARCHANDREPLACE_0 +//STRIP001 { +//STRIP001 Text = "Suchbegriff nicht gefunden." ; +//STRIP001 Text [ ENGLISH ] = "Search pattern not found." ; +//STRIP001 Text [ english_us ] = "Search key not found." ; +//STRIP001 Text [ italian ] = "Termine non trovato" ; +//STRIP001 Text [ spanish ] = "No se encontr?la expresión buscada." ; +//STRIP001 Text [ french ] = "Terme recherch?introuvable !" ; +//STRIP001 Text [ dutch ] = "Zoekbegrip niet gevonden." ; +//STRIP001 Text [ swedish ] = "Sökord hittades inte." ; +//STRIP001 Text [ danish ] = "Søgningen gav intet resultat." ; +//STRIP001 Text [ portuguese ] = "Impossível encontrar expressão procurada." ; +//STRIP001 Text [ portuguese_brazilian ] = "A chave da pesquisa não foi encontrada." ; +//STRIP001 Text[ chinese_simplified ] = "没有找到æœå¯»æ¡ç›®ã€?"; +//STRIP001 Text[ russian ] = "Èñêîìî?ïî?òè?íå íàéäåí?"; +//STRIP001 Text[ polish ] = "Nie znaleziono szukanego has³a."; +//STRIP001 Text[ japanese ] = "検索ã‚ーã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "沒有找到æœå°‹é …ç›®ã€?"; +//STRIP001 Text[ arabic ] = "ÊÚÐÑ ÇáÚËæÑ Úá?ÇáÈíÇäÇÊ ÇáÊí ÊÈÍË ÚäåÇ."; +//STRIP001 Text[ greek ] = "Äå?âñÝèçê??üñïò áíáæÞôçóçò."; +//STRIP001 Text[ korean ] = "ê²€ìƒ?키를 찾지 못했습니ë‹?"; +//STRIP001 Text[ turkish ] = "Aranan terim bulunamad?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'ha trobat la clau de cerca."; +//STRIP001 Text[ finnish ] = "Etsittävää ei löytynyt."; +//STRIP001 Text[ thai ] = "ค้นหาคีย์ไม่พบ"; +//STRIP001 Text[ czech ] = "Hledané klÃÄové slovo nenalezeno."; +//STRIP001 Text[ hebrew ] = "Suchbegriff nicht gefunden."; +//STRIP001 Text[ hindi ] = "खोà¤?किया हà¥à¤?चाà¤à¥€ नहीà¤?मिला à¥?"; +//STRIP001 }; +//STRIP001 String STR_MSSG_SOLVE_0 +//STRIP001 { +//STRIP001 Text = "Die Zielwertsuche war erfolgreich.\n" ; +//STRIP001 Text [ ENGLISH ] = "Goal Seek successfull.\n" ; +//STRIP001 Text [ norwegian ] = "Goal Seek successfull.\n" ; +//STRIP001 Text [ italian ] = "Ricerca del valore di destinazione riuscita.\n" ; +//STRIP001 Text [ portuguese_brazilian ] = "A Busca da Meta foi bem sucedida.\n" ; +//STRIP001 Text [ portuguese ] = "Procura do valor de destino bem sucedida.\n" ; +//STRIP001 Text [ finnish ] = "Tavoitteen haku onnistui.\n" ; +//STRIP001 Text [ danish ] = "Målsøgningen lykkedes.\n" ; +//STRIP001 Text [ french ] = "Recherche de valeur cible réussie.\n" ; +//STRIP001 Text [ swedish ] = "Målsökning lyckades.\n" ; +//STRIP001 Text [ dutch ] = "Zoeken van doelwaarde uitgevoerd.\n" ; +//STRIP001 Text [ spanish ] = "La búsqueda del valor pretendido ha finalizado con éxito.\n" ; +//STRIP001 Text [ english_us ] = "Goal Seek successful.\n" ; +//STRIP001 Text[ chinese_simplified ] = "å·²ç»å®Œæˆå•å˜é‡æ±‚解。\n"; +//STRIP001 Text[ russian ] = "Óñïåøíûé ïîèñ?öåëè.\n"; +//STRIP001 Text[ polish ] = "Szukanie wyniku zakoñczy³o si?powodzeniem.\n"; +//STRIP001 Text[ japanese ] = "ゴールシークã®å®Œäº†ã€‚\n"; +//STRIP001 Text[ chinese_traditional ] = "已經完æˆç›®æ¨™æœå°‹ã€‚\n"; +//STRIP001 Text[ arabic ] = "Êã?Úãáí?ÇáÈÍ?Úä ÇáÞíãÉ ÇáåÏ?ÈäÌÇ?\n"; +//STRIP001 Text[ greek ] = "?áíáæÞôçó?óôü÷ïõ ðÝôõ÷å.\n"; +//STRIP001 Text[ korean ] = "목표ê°?찾기가 성공ì 으ë¡?수행ë˜ì—ˆìŠµë‹ˆë‹?\n"; +//STRIP001 Text[ turkish ] = "Hedef deðer arama baþarýl?oldu.\n"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Cerca de l'objectiu amb èxit.\n"; +//STRIP001 Text[ thai ] = "ค้นหาค่าเป้าหมายสำเร็จ\n"; +//STRIP001 Text[ czech ] = "Vyhledánà cÃle úspěšné.\n"; +//STRIP001 Text[ hebrew ] = "Die Zielwertsuche war erfolgreich.\n"; +//STRIP001 Text[ hindi ] = "गोलसीà¤?सफà¤?हà¥à¤?।\n"; +//STRIP001 }; +//STRIP001 String STR_MSSG_SOLVE_1 +//STRIP001 { +//STRIP001 Text = "Soll das Ergebnis (" ; +//STRIP001 Text [ ENGLISH ] = "Insert result (" ; +//STRIP001 Text [ norwegian ] = "Insert result (" ; +//STRIP001 Text [ italian ] = "Inserire il risultato (" ; +//STRIP001 Text [ portuguese_brazilian ] = "Inserir resultado (" ; +//STRIP001 Text [ portuguese ] = "Inserir resultado (" ; +//STRIP001 Text [ finnish ] = "Lisätäänk?tulos (" ; +//STRIP001 Text [ danish ] = "Skal resultatet (" ; +//STRIP001 Text [ french ] = "Insérer le résultat (" ; +//STRIP001 Text [ swedish ] = "Ska resultatet (" ; +//STRIP001 Text [ dutch ] = "Uitkomst (" ; +//STRIP001 Text [ spanish ] = "¿Desea insertar el resultado (" ; +//STRIP001 Text [ english_us ] = "Insert result (" ; +//STRIP001 Text[ chinese_simplified ] = "这个结果("; +//STRIP001 Text[ russian ] = "Âñòàâèòü ðåçóëüòà?("; +//STRIP001 Text[ polish ] = "Wstaw wynik ("; +//STRIP001 Text[ japanese ] = "ã“ã®çµæžœ("; +//STRIP001 Text[ chinese_traditional ] = "這個çµæž?"; +//STRIP001 Text[ arabic ] = "åá ÊÑíÏ ÅÏÑÇ?ÇáäÊíÌ?("; +//STRIP001 Text[ greek ] = "ÈÝëåôå ôï áðïôÝëåóìá ("; +//STRIP001 Text[ korean ] = "ê²°ê³¼ 삽입 ("; +//STRIP001 Text[ turkish ] = "Sonucu gir ("; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Voleu inserir un resultat ("; +//STRIP001 Text[ thai ] = "à¹à¸—รà¸à¸œà¸¥à¸¥à¸±à¸žà¸˜à¹?("; +//STRIP001 Text[ czech ] = "Vložte výsledek ("; +//STRIP001 Text[ hebrew ] = "Soll das Ergebnis ("; +//STRIP001 Text[ hindi ] = "नतीजा जोड़à¥?("; +//STRIP001 }; +//STRIP001 String STR_MSSG_SOLVE_2 +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? ) in die aktuelle Zelle übernommen werden? : ) in die aktuelle Zelle ³bernommen werden? */ +//STRIP001 Text = ") in die aktuelle Zelle übernommen werden?" ; +//STRIP001 Text [ ENGLISH ] = ") in current cell?" ; +//STRIP001 Text [ norwegian ] = ") in current cell?" ; +//STRIP001 Text [ italian ] = ") nella cella corrente?" ; +//STRIP001 Text [ portuguese_brazilian ] = ") na célula atual?" ; +//STRIP001 Text [ portuguese ] = ") na célula activa?" ; +//STRIP001 Text [ finnish ] = ") nykyiseen soluun?" ; +//STRIP001 Text [ danish ] = ") indsættes i den aktuelle celle?" ; +//STRIP001 Text [ french ] = ") dans la cellule courante ?" ; +//STRIP001 Text [ swedish ] = ") överföras till den aktuella cellen?" ; +//STRIP001 Text [ dutch ] = ") in actieve cel invoegen?" ; +//STRIP001 Text [ spanish ] = ") en la celda actual?" ; +//STRIP001 Text [ english_us ] = ") into current cell?" ; +//STRIP001 Text[ chinese_simplified ] = ")è¦åŠ 入当å‰çš„å•å…ƒæ ¼å†…å—?"; +//STRIP001 Text[ russian ] = ") ?òåêóùó?ÿ÷åéê?"; +//STRIP001 Text[ polish ] = ") do bie¿¹cej komórki?"; +//STRIP001 Text[ japanese ] = ")ã‚’ç¾åœ¨ã®ã‚»ãƒ«ã«é©ç”¨ã—ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = ")è¦åŠ 入目å‰çš„儲å˜æ ¼å…§ï¼?"; +//STRIP001 Text[ arabic ] = ") Ýí ÇáÎáíÉ ÇáÍÇáíÉ¿"; +//STRIP001 Text[ greek ] = ") íá åöáñìïóôåß óô?ôñÝ÷ïí êåëß;"; +//STRIP001 Text[ korean ] = ")현재ì?ì…€ë¡?"; +//STRIP001 Text[ turkish ] = ") seçili hücreye eklensin mi?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = ") a la cel.la actual?"; +//STRIP001 Text[ thai ] = ") ในเซลล์ปัจจุบัน?"; +//STRIP001 Text[ czech ] = ") do souÄasné buňky?"; +//STRIP001 Text[ hebrew ] = ") in die aktuelle Zelle übernommen werden?"; +//STRIP001 Text[ hindi ] = ") वरà¥à¤¤à¤®à¤¾à¤?कोषà¥à¤?मेà¤??"; +//STRIP001 }; +//STRIP001 String STR_MSSG_SOLVE_3 +//STRIP001 { +//STRIP001 Text = "Die Zielwertsuche war erfolglos.\n" ; +//STRIP001 Text [ ENGLISH ] = "Goal Seek not successfull.\n" ; +//STRIP001 Text [ norwegian ] = "Goal Seek not successfull.\n" ; +//STRIP001 Text [ italian ] = "Ricerca del valore di destinazione senza esito.\n" ; +//STRIP001 Text [ portuguese_brazilian ] = "A Busca da Meta não foi bem sucedida.\n" ; +//STRIP001 Text [ portuguese ] = "Procura do valor de destino sem êxito.\n" ; +//STRIP001 Text [ finnish ] = "Tavoitteen haku ei onnistunut.\n" ; +//STRIP001 Text [ danish ] = "Målsøgning lykkedes ikke.\n" ; +//STRIP001 Text [ french ] = "Échec de la recherche de valeur cible.\n" ; +//STRIP001 Text [ swedish ] = "Målsökning lyckades inte.\n" ; +//STRIP001 Text [ dutch ] = "Zoeken naar doelwaarde zonder resultaat.\n" ; +//STRIP001 Text [ spanish ] = "No se pudo encontrar el valor pretendido.\n" ; +//STRIP001 Text [ english_us ] = "Goal Seek not successful.\n" ; +//STRIP001 Text[ chinese_simplified ] = "å•å˜é‡æ±‚解失败。\n"; +//STRIP001 Text[ russian ] = "Ïîèñ?öåëè áû?íåóäà÷íû?\n"; +//STRIP001 Text[ polish ] = "Szukanie wyniku zakoñczy³o si?niepowodzeniem.\n"; +//STRIP001 Text[ japanese ] = "ゴールシークä¸æˆåŠŸã€‚\n"; +//STRIP001 Text[ chinese_traditional ] = "目標æœå°‹æ²’有æˆåŠŸã€‚\n"; +//STRIP001 Text[ arabic ] = "áã ÊäÌÍ Úãáí?ÇáÈÍ?Úä ÇáÞíãÉ ÇáåÏ?\n"; +//STRIP001 Text[ greek ] = "?áíáæÞôçó?óôü÷ïõ äå?ðÝôõ÷å.\n"; +//STRIP001 Text[ korean ] = "목표ê°?찾기가 성공ì 으ë¡?수행ë˜ì§€ 않았습니ë‹?\n"; +//STRIP001 Text[ turkish ] = "Hedef deðer arama baþarýsýz oldu.\n"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Cerca de l'objectiu sense èxit.\n"; +//STRIP001 Text[ thai ] = "ค้นหาค่าเป้าหมายไม่สำเร็จ\n"; +//STRIP001 Text[ czech ] = "Vyhledánà cÃle neúspěšné.\n"; +//STRIP001 Text[ hebrew ] = "Die Zielwertsuche war erfolglos.\n"; +//STRIP001 Text[ hindi ] = "गोलसीà¤?असफल हà¥à¤†\n"; +//STRIP001 }; +//STRIP001 String STR_MSSG_SOLVE_4 +//STRIP001 { +//STRIP001 Text = "Es konnte kein exakter Wert gefunden werden.\n" ; +//STRIP001 Text [ ENGLISH ] = "No exact value matched." ; +//STRIP001 Text [ norwegian ] = "No exact value matched." ; +//STRIP001 Text [ italian ] = "Non ?stato trovato alcun valore esatto.\n" ; +//STRIP001 Text [ portuguese_brazilian ] = "Nenhum valor exato foi encontrado.\n " ; +//STRIP001 Text [ portuguese ] = "Impossível encontrar valor exacto.\n" ; +//STRIP001 Text [ finnish ] = "Tarkkaa arvoa ei löytynyt. \n" ; +//STRIP001 Text [ danish ] = "Det var ikke muligt at finde en eksakt værdi.\n" ; +//STRIP001 Text [ french ] = "Impossible de trouver une valeur exacte.\n" ; +//STRIP001 Text [ swedish ] = "Inget exakt värde har hittats.\n" ; +//STRIP001 Text [ dutch ] = "Geen exacte waarde gevonden.\n." ; +//STRIP001 Text [ spanish ] = "No se pudo encontrar ningún valor exacto.\n" ; +//STRIP001 Text [ english_us ] = "No exact value found. \n" ; +//STRIP001 Text[ chinese_simplified ] = "没有找到精确的数值。\n"; +//STRIP001 Text[ russian ] = "Íå íàéäåí?òî÷íîå çíà÷åíèå.\n"; +//STRIP001 Text[ polish ] = "Nie znaleziono dok³adnej wartoœci.\n"; +//STRIP001 Text[ japanese ] = "完全ã«ä¸€è‡´ã™ã‚‹å€¤ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚\n"; +//STRIP001 Text[ chinese_traditional ] = "沒有找到精確的數值。\n"; +//STRIP001 Text[ arabic ] = "ÊÚÐÑ ÇáÚËæÑ Úá?ÞíãÉ ãÖÈæØÉ ÊãÇãÇð.\n"; +//STRIP001 Text[ greek ] = "Äå?Þôáí äõíáôü?íá âñåèåß áêñéâÞ?ôéìÞ \n"; +//STRIP001 Text[ korean ] = "ì •í™•í•?ê°’ì„ ì°¾ì§€ 못했습니ë‹?\n"; +//STRIP001 Text[ turkish ] = "Kesin bir deðer bulunamad?\n"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'ha trobat cap valor exacte.\n"; +//STRIP001 Text[ thai ] = "ไม่พบค่าที่à¹à¸™à¹ˆà¸™à¸à¸?\n"; +//STRIP001 Text[ czech ] = "OdpovÃdajÃcà hodnota nenalezena. \n"; +//STRIP001 Text[ hebrew ] = "Es konnte kein exakter Wert gefunden werden.\n"; +//STRIP001 Text[ hindi ] = "यथारà¥à¤¥ मूलà¥à¤?नहीà¤?मिला à¥?\n"; +//STRIP001 }; +//STRIP001 String STR_MSSG_SOLVE_5 +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Soll die beste Näherung ( : Soll die beste Nõherung ( */ +//STRIP001 Text = "Soll die beste Näherung (" ; +//STRIP001 Text [ ENGLISH ] = "Insert closest value (" ; +//STRIP001 Text [ norwegian ] = "Insert closest value (" ; +//STRIP001 Text [ italian ] = "Digitate il valore pi?vicino (" ; +//STRIP001 Text [ portuguese_brazilian ] = "Inserir o valor mais próximo (" ; +//STRIP001 Text [ portuguese ] = "Introduzir valor mais próximo (" ; +//STRIP001 Text [ finnish ] = "Lisätäänk?lähin arvo (" ; +//STRIP001 Text [ danish ] = "Skal den nærmeste værdi (" ; +//STRIP001 Text [ french ] = "Appliquer (" ; +//STRIP001 Text [ swedish ] = "Ska närmaste värdet (" ; +//STRIP001 Text [ dutch ] = "Dichtstbijzijnde waarde (" ; +//STRIP001 Text [ spanish ] = "¿Desea insertar el valor más cercano (" ; +//STRIP001 Text [ english_us ] = "Insert closest value (" ; +//STRIP001 Text[ chinese_simplified ] = "您è¦ä½¿ç”¨è¿™ä¸ªæœ€è¿‘似的数å€?"; +//STRIP001 Text[ russian ] = "Âñòàâèòü íàèáîëåå áëèçêî?çíà÷åíèå ("; +//STRIP001 Text[ polish ] = "Wstaw najbli¿sz?wartoœæ"; +//STRIP001 Text[ japanese ] = "最もãã‚Œã«è¿‘ã„å€?"; +//STRIP001 Text[ chinese_traditional ] = "è¦ä½¿ç”¨é€™å€‹æœ€è¿‘似的數å€?"; +//STRIP001 Text[ arabic ] = "åá ÊÑíÏ ÅÏÑÇ?ÃÞÑÈ ÞíãÉ ("; +//STRIP001 Text[ greek ] = "ÈÝëåôå ?ðëçóéÝóôåñ?ôéìÞ ("; +//STRIP001 Text[ korean ] = "근사ê°?"; +//STRIP001 Text[ turkish ] = "En yakýn deðeri gir ("; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Voleu inserir el valor més proper ("; +//STRIP001 Text[ thai ] = "à¹à¸—รà¸à¸„่าที่ใà¸à¸¥à¹‰à¹€à¸„ียงที่สุด ("; +//STRIP001 Text[ czech ] = "Vložte nejbližšà hodnotu ("; +//STRIP001 Text[ hebrew ] = "Soll die beste Näherung ("; +//STRIP001 Text[ hindi ] = "अतà¤?समीà¤?का मूलà¥à¤?जोड़à¥?("; +//STRIP001 }; +//STRIP001 String STR_MSSG_SOLVE_6 +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? ) übernommen werden? : ) ³bernommen werden? */ +//STRIP001 Text = ") übernommen werden?" ; +//STRIP001 Text [ ENGLISH ] = ")?" ; +//STRIP001 Text [ norwegian ] = ")?" ; +//STRIP001 Text [ italian ] = ") accettato?" ; +//STRIP001 Text [ portuguese_brazilian ] = ")?" ; +//STRIP001 Text [ portuguese ] = ")?" ; +//STRIP001 Text [ finnish ] = ")?" ; +//STRIP001 Text [ danish ] = ") overtages?" ; +//STRIP001 Text [ french ] = ") la valeur la plus proche ?" ; +//STRIP001 Text [ swedish ] = ") övertas?" ; +//STRIP001 Text [ dutch ] = ") overnemen?" ; +//STRIP001 Text [ spanish ] = ")?" ; +//STRIP001 Text [ english_us ] = ")?" ; +//STRIP001 Text[ chinese_simplified ] = ")å—?"; +//STRIP001 Text[ russian ] = ")?"; +//STRIP001 Text[ polish ] = ") ma zosta?zaakceptowana?"; +//STRIP001 Text[ japanese ] = ")ã‚’é©ç”¨ã—ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = ")ï¼?"; +//STRIP001 Text[ arabic ] = ")?"; +//STRIP001 Text[ greek ] = ") íá åöáñìïóôåß;"; +//STRIP001 Text[ korean ] = ")ì?ë¥? ì ìš©í•˜ê² ìŠµë‹ˆê¹?"; +//STRIP001 Text[ turkish ] = ")?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = ")?"; +//STRIP001 Text[ thai ] = ")?"; +//STRIP001 Text[ czech ] = ")?"; +//STRIP001 Text[ hebrew ] = ") übernommen werden?"; +//STRIP001 Text[ hindi ] = ")?"; +//STRIP001 }; +//STRIP001 String STR_TABLE_GESAMTERGEBNIS +//STRIP001 { +//STRIP001 Text = "Gesamtergebnis" ; +//STRIP001 Text [ ENGLISH ] = "Total" ; +//STRIP001 Text [ norwegian ] = "Total" ; +//STRIP001 Text [ italian ] = "Totale" ; +//STRIP001 Text [ portuguese_brazilian ] = "Total Geral" ; +//STRIP001 Text [ portuguese ] = "Soma total" ; +//STRIP001 Text [ finnish ] = "Yhteens?" ; +//STRIP001 Text [ danish ] = "Total" ; +//STRIP001 Text [ french ] = "Total" ; +//STRIP001 Text [ swedish ] = "Totalt" ; +//STRIP001 Text [ dutch ] = "Totaal" ; +//STRIP001 Text [ spanish ] = "Total" ; +//STRIP001 Text [ english_us ] = "Grand Total" ; +//STRIP001 Text[ chinese_simplified ] = "总结æž?"; +//STRIP001 Text[ russian ] = "Îáùè?èòîã"; +//STRIP001 Text[ polish ] = "Suma ca³kowita"; +//STRIP001 Text[ japanese ] = "ç·è¨ˆ"; +//STRIP001 Text[ chinese_traditional ] = "總çµæž?"; +//STRIP001 Text[ arabic ] = "ÇáãÌãæ?"; +//STRIP001 Text[ greek ] = "Óõíïëéêü Üèñïéóìá"; +//STRIP001 Text[ korean ] = "ì´í•©ê³?"; +//STRIP001 Text[ turkish ] = "Genel toplam"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suma total"; +//STRIP001 Text[ thai ] = "ผลรวมทั้งหมด"; +//STRIP001 Text[ czech ] = "Celkem"; +//STRIP001 Text[ hebrew ] = "Gesamtergebnis"; +//STRIP001 Text[ hindi ] = "कà¥à¤?जोड़"; +//STRIP001 }; + String STR_TABLE_ERGEBNIS + { + Text [ de ] = "Ergebnis" ; + Text [ en-US ] = "Result" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Resultado"; + Text[ ru ] = "Результат"; + Text[ el ] = "ΑποτÎλεσμα"; + Text[ nl ] = "Resultaat"; + Text[ fr ] = "Résultat"; + Text[ es ] = "Resultado"; + Text[ fi ] = "Tulos"; + Text[ ca ] = "Resultat"; + Text[ it ] = "Risultato"; + Text[ da ] = "Resultat"; + Text[ sv ] = "Resultat"; + Text[ pl ] = "Wynik"; + Text[ pt-BR ] = "Resultado"; + Text[ th ] = "ผลลัพธ์"; + Text[ ja ] = "çµæžœ"; + Text[ ko ] = "ê²°ê³¼"; + Text[ zh-CN ] = "结果"; + Text[ zh-TW ] = "çµæžœ"; + Text[ tr ] = "Sonuç"; + Text[ hi-IN ] = "नतीजा"; + Text[ ar ] = "النتيجة"; + Text[ he ] = "Ergebnis"; + }; +//STRIP001 String STR_UNDO_SPELLING +//STRIP001 { +//STRIP001 Text = "Rechtschreibung" ; +//STRIP001 Text [ ENGLISH ] = "Spelling" ; +//STRIP001 Text [ english_us ] = "Spellcheck" ; +//STRIP001 Text [ italian ] = "Controllo ortografico" ; +//STRIP001 Text [ spanish ] = "Ortografía" ; +//STRIP001 Text [ french ] = "Orthographe" ; +//STRIP001 Text [ dutch ] = "Spellingcontrole" ; +//STRIP001 Text [ swedish ] = "Rättstavning" ; +//STRIP001 Text [ danish ] = "Stavekontrol" ; +//STRIP001 Text [ portuguese ] = "Ortografia" ; +//STRIP001 Text [ portuguese_brazilian ] = "Verificação Ortográfica" ; +//STRIP001 Text[ chinese_simplified ] = "拼写检æŸ?"; +//STRIP001 Text[ russian ] = "Ïðîâåðêà îðôîãðàôèè"; +//STRIP001 Text[ polish ] = "Sprawdzanie pisowni"; +//STRIP001 Text[ japanese ] = "スペルãƒã‚§ãƒƒã‚?"; +//STRIP001 Text[ chinese_traditional ] = "拼寫檢查"; +//STRIP001 Text[ arabic ] = "ÇáÊÏÞí?ÇáÅãáÇÆí"; +//STRIP001 Text[ greek ] = "Ïñèïãñáößá"; +//STRIP001 Text[ korean ] = "맞춤ë²?"; +//STRIP001 Text[ turkish ] = "Yazým denetimi"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Verificaci?ortogràfica"; +//STRIP001 Text[ finnish ] = "Oikeinkirjoituksen tarkistus"; +//STRIP001 Text[ thai ] = "ตรวจสà¸à¸šà¸à¸²à¸£à¸ªà¸°à¸à¸”"; +//STRIP001 Text[ czech ] = "Kontrola pravopisu"; +//STRIP001 Text[ hebrew ] = "‮בדיק×?×יותâ€?"; +//STRIP001 Text[ hindi ] = "अकà¥à¤·à¤?की जाà¤à¤š"; +//STRIP001 }; +//STRIP001 String STR_TABLE_UND +//STRIP001 { +//STRIP001 Text = "UND" ; +//STRIP001 Text [ ENGLISH ] = "AND" ; +//STRIP001 Text [ norwegian ] = "OG" ; +//STRIP001 Text [ italian ] = "E" ; +//STRIP001 Text [ portuguese_brazilian ] = "E" ; +//STRIP001 Text [ portuguese ] = "E" ; +//STRIP001 Text [ finnish ] = "JA" ; +//STRIP001 Text [ danish ] = "OG" ; +//STRIP001 Text [ french ] = "ET" ; +//STRIP001 Text [ swedish ] = "OCH" ; +//STRIP001 Text [ dutch ] = "EN" ; +//STRIP001 Text [ spanish ] = "Y" ; +//STRIP001 Text [ english_us ] = "AND" ; +//STRIP001 Text[ chinese_simplified ] = "å’?"; +//STRIP001 Text[ russian ] = "?"; +//STRIP001 Text[ polish ] = "I"; +//STRIP001 Text[ japanese ] = "AND"; +//STRIP001 Text[ chinese_traditional ] = "å’?"; +//STRIP001 Text[ arabic ] = "AND"; +//STRIP001 Text[ greek ] = "KAI"; +//STRIP001 Text[ korean ] = "AND"; +//STRIP001 Text[ turkish ] = "VE"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "AND"; +//STRIP001 Text[ thai ] = "à¹à¸¥à¸?"; +//STRIP001 Text[ czech ] = "AND"; +//STRIP001 Text[ hebrew ] = "UND"; +//STRIP001 Text[ hindi ] = "AND"; +//STRIP001 }; +//STRIP001 String STR_TABLE_ODER +//STRIP001 { +//STRIP001 Text = "ODER" ; +//STRIP001 Text [ ENGLISH ] = "OR" ; +//STRIP001 Text [ norwegian ] = "ELLER" ; +//STRIP001 Text [ italian ] = "O" ; +//STRIP001 Text [ portuguese_brazilian ] = "OU" ; +//STRIP001 Text [ portuguese ] = "OU" ; +//STRIP001 Text [ finnish ] = "TAI" ; +//STRIP001 Text [ danish ] = "ELLER" ; +//STRIP001 Text [ french ] = "OU" ; +//STRIP001 Text [ swedish ] = "ELLER" ; +//STRIP001 Text [ dutch ] = "OF" ; +//STRIP001 Text [ spanish ] = "O" ; +//STRIP001 Text [ english_us ] = "OR" ; +//STRIP001 Text[ chinese_simplified ] = "æˆ?"; +//STRIP001 Text[ russian ] = "ÈË?"; +//STRIP001 Text[ polish ] = "LUB"; +//STRIP001 Text[ japanese ] = "OR"; +//STRIP001 Text[ chinese_traditional ] = "æˆ?"; +//STRIP001 Text[ arabic ] = "Ãæ"; +//STRIP001 Text[ greek ] = "?"; +//STRIP001 Text[ korean ] = "ë˜ëŠ”"; +//STRIP001 Text[ turkish ] = "VEYA"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "OR"; +//STRIP001 Text[ thai ] = "หรืà¸"; +//STRIP001 Text[ czech ] = "OR"; +//STRIP001 Text[ hebrew ] = "ODER"; +//STRIP001 Text[ hindi ] = "OR"; +//STRIP001 }; + String STR_TABLE_DEF + { + Text [ de ] = "Tabelle" ; + Text [ en-US ] = "Sheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Folha"; + Text[ ru ] = "ЛиÑÑ‚"; + Text[ el ] = "ΦÏλλο"; + Text[ nl ] = "Werkblad"; + Text[ fr ] = "Feuille"; + Text[ es ] = "Hoja"; + Text[ fi ] = "Taulukko"; + Text[ ca ] = "Full"; + Text[ it ] = "Tabella"; + Text[ da ] = "Ark"; + Text[ sv ] = "Tabell"; + Text[ pl ] = "Arkusz"; + Text[ pt-BR ] = "Planilha"; + Text[ th ] = "à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表"; + Text[ ko ] = "시트"; + Text[ zh-CN ] = "工作表"; + Text[ zh-TW ] = "工作表"; + Text[ tr ] = "Tablo"; + Text[ hi-IN ] = "शीटà¥"; + Text[ ar ] = "الجدول"; + Text[ he ] = "Tabelle"; + }; +//STRIP001 String STR_MOVE_TO_END +//STRIP001 { +//STRIP001 Text = "- ans Ende stellen -" ; +//STRIP001 Text [ ENGLISH ] = "- move to last position -" ; +//STRIP001 Text [ norwegian ] = "- move to last position -" ; +//STRIP001 Text [ italian ] = "- sposta all'ultima posizione -" ; +//STRIP001 Text [ portuguese_brazilian ] = "- mover para a posição final -" ; +//STRIP001 Text [ portuguese ] = "- mover para última posição -" ; +//STRIP001 Text [ finnish ] = "- siirr?loppusijaintiin -" ; +//STRIP001 Text [ danish ] = "- flyt til slutningen -" ; +//STRIP001 Text [ french ] = "- placer en dernière position -" ; +//STRIP001 Text [ swedish ] = "- flytta till slutet -" ; +//STRIP001 Text [ dutch ] = "- naar laatste positie verplaatsen -" ; +//STRIP001 Text [ spanish ] = "- desplazar a la última posición -" ; +//STRIP001 Text [ english_us ] = "- move to end position -" ; +//STRIP001 Text[ chinese_simplified ] = "- 置于结æŸä½ç½® -"; +//STRIP001 Text[ russian ] = "- ïåðåìåñòèò?? êîíå?-"; +//STRIP001 Text[ polish ] = "- przenie?na koñcow?pozycj?-"; +//STRIP001 Text[ japanese ] = "- 末尾ã«æŒ¿å…?-"; +//STRIP001 Text[ chinese_traditional ] = "- 移動到çµæŸä½ç½?-"; +//STRIP001 Text[ arabic ] = "- ÊÍÑí?Åá?ÇáäåÇí?-"; +//STRIP001 Text[ greek ] = "- ìåôáêßíçóç ðñïò ôï ôÝëï?-"; +//STRIP001 Text[ korean ] = "- 마지ë§?지ì 으ë¡?ì´ë™ -"; +//STRIP001 Text[ turkish ] = "- sona taþý -"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "- mou a la posici?final -"; +//STRIP001 Text[ thai ] = "- ย้ายไปยังตำà¹à¸«à¸™à¹ˆà¸‡à¸ªà¸¸à¸”ท้าà¸?-"; +//STRIP001 Text[ czech ] = "- pÅ™esunout na konec -"; +//STRIP001 Text[ hebrew ] = "- ans Ende stellen -"; +//STRIP001 Text[ hindi ] = "- अंतिà¤?सà¥à¤¥à¤¾à¤?मेà¤?सà¥à¤¥à¤¾à¤?परिवरà¥à¤¤à¤¨ करà¥?-"; +//STRIP001 }; +//STRIP001 String STR_BOX_YNI +//STRIP001 { +//STRIP001 Text = "Nicht implementiert in diesem Build" ; +//STRIP001 Text [ ENGLISH ] = "Not implemented in this build!" ; +//STRIP001 Text [ norwegian ] = "Not implemented in this build!" ; +//STRIP001 Text [ italian ] = "Non implementato in questa build!" ; +//STRIP001 Text [ portuguese_brazilian ] = "Não est?implementado nesta compilação." ; +//STRIP001 Text [ portuguese ] = "Não implementado nesta estrutura!" ; +//STRIP001 Text [ finnish ] = "Ei käytöss?täss?koontiversiossa." ; +//STRIP001 Text [ danish ] = "Ikke implementeret i denne version." ; +//STRIP001 Text [ french ] = "Pas disponible dans cette version !" ; +//STRIP001 Text [ swedish ] = "Inte implementerad i denna Build!" ; +//STRIP001 Text [ dutch ] = "Niet in deze versie beschikbaar!" ; +//STRIP001 Text [ spanish ] = "No implementado en esta versión" ; +//STRIP001 Text [ english_us ] = "Not implemented in this build." ; +//STRIP001 Text[ chinese_simplified ] = "éžå¸¸æŠ±æ‰ï¼Œæˆ‘们还没有在这个编译版本åºå·å†…实现这个功能ã€?"; +//STRIP001 Text[ russian ] = "Íå ðåàëèçîâàí??ýòîé âåðñèè"; +//STRIP001 Text[ polish ] = "Niezaimplementowane w tej wersji"; +//STRIP001 Text[ japanese ] = "ã“ã® Build ã«ã¯å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "éžå¸¸æŠ±æ‰ï¼Œé‚„沒有在這個編è¯ç‰ˆæœ¬åºè™Ÿå…§å¯¦ç¾é€™å€‹åŠŸèƒ½ã€?"; +//STRIP001 Text[ arabic ] = "áã íÊ?ÅÖÇÝÊå Åá?åÐ?ÇáÅÕÏÇ?"; +//STRIP001 Text[ greek ] = "Äå?Ý÷åé õëïðïéçèåß óå áõôÞ ôç äïìÞ."; +//STRIP001 Text[ korean ] = "구현ë˜ì§€ 않았습니ë‹?"; +//STRIP001 Text[ turkish ] = "Bu derlemede gerçekleþtirilmedi."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'ha implementat en aquest muntatge."; +//STRIP001 Text[ thai ] = "ไม่สนับสนุนà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸™à¸µà¹‰"; +//STRIP001 Text[ czech ] = "V této verzi nenà implementováno."; +//STRIP001 Text[ hebrew ] = "Nicht implementiert in diesem Build"; +//STRIP001 Text[ hindi ] = "इस बिलà¥à¤?मेà¤?कारà¥à¤¯à¤¾à¤¨à¥à¤µà¤¿à¤?नहीà¤?किया है à¥?"; +//STRIP001 }; + String STR_NO_REF_TABLE + { + Text [ de ] = "#REF!" ; + Text [ en-US ] = "#REF!" ; + Text [ x-comment ] = " "; + Text[ pt ] = "#REF!"; + Text[ ru ] = "#ССЫЛ!"; + Text[ el ] = "#REF!"; + Text[ nl ] = "#REF!"; + Text[ fr ] = "#REF !"; + Text[ es ] = "#REF!"; + Text[ fi ] = "#VIITTAUS!"; + Text[ ca ] = "#REF!"; + Text[ it ] = "#RIF!"; + Text[ da ] = "#REF!"; + Text[ sv ] = "#REF!"; + Text[ pl ] = "#ODWOÅANIE!"; + Text[ pt-BR ] = "#REF!"; + Text[ th ] = "#REF!"; + Text[ ja ] = "#REF!"; + Text[ ko ] = "#REF!"; + Text[ zh-CN ] = "#REF!"; + Text[ zh-TW ] = "#REF!"; + Text[ tr ] = "#REF!"; + Text[ hi-IN ] = "#REF!"; + Text[ ar ] = "#REF!"; + Text[ he ] = "#REF!"; + }; +//STRIP001 String STR_PIVOT_INVALID_DBAREA +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Der Datenbereich mu?mindestens eine Daten-Zeile enthalten. : Der Datenbereich mu?mindestens eine Daten-Zeile enthalten. */ +//STRIP001 Text = "Der Datenbereich muss mindestens eine Daten-Zeile enthalten." ; +//STRIP001 Text [ ENGLISH ] = "Invalid data area (at least one data row required)." ; +//STRIP001 Text [ norwegian ] = "Invalid data area (at least one data row required)." ; +//STRIP001 Text [ italian ] = "L'area dati deve contenere almeno una fila di dati." ; +//STRIP001 Text [ portuguese_brazilian ] = "O intervalo de dados deve conter no mínimo uma linha." ; +//STRIP001 Text [ portuguese ] = "O intervalo de dados deve ter pelo menos uma linha de dados." ; +//STRIP001 Text [ finnish ] = "Tietoalueella on oltava vähintään yksi rivi." ; +//STRIP001 Text [ danish ] = "Dataområdet skal mindst indeholde en datarække." ; +//STRIP001 Text [ french ] = "Toute plage de données doit contenir au moins une ligne !" ; +//STRIP001 Text [ swedish ] = "Dataområdet måste innehålla minst en datarad." ; +//STRIP001 Text [ dutch ] = "Gegevensbereik moet minstens één regel bevatten." ; +//STRIP001 Text [ spanish ] = "El área de datos tiene que tener al menos una fila de datos." ; +//STRIP001 Text [ english_us ] = "The data range must contain at least one row." ; +//STRIP001 Text[ chinese_simplified ] = "æ•°æ®åŒºåŸŸå¿…须至少å«æœ‰ä¸€è¡Œæ•°æ®ã€?"; +//STRIP001 Text[ russian ] = "Ñâîäíàÿ òàáëèö?äîëæíà ñîäåðæàò?õî? áû îäíó ñòðîêó."; +//STRIP001 Text[ polish ] = "Zakres danych musi zawiera?co najmniej jeden wiersz."; +//STRIP001 Text[ japanese ] = "データ範囲ã«ã¯æœ€ä½?1 データ行ã¯å¿…è¦ã§ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "資料å€åŸŸå¿…é ˆè‡³å°‘å«æœ‰ä¸€æ¬„數據ã€?"; +//STRIP001 Text[ arabic ] = "íÌ?Ãä íÍÊæ?äØÇÞ ÇáÈíÇäÇÊ Úá?ÕÝ ÈíÇäÇÊ æÇÍÏ Úá?ÇáÃÞ?"; +//STRIP001 Text[ greek ] = "?ðåñéï÷?äåäïìÝíù?ðñÝðåé íá ðåñéÝ÷åé ôïõëÜ÷éóôï?ìé?ãñáììÞ äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?범위ì—는 최소í•?í•?ì¤„ì˜ í–‰ì´ ìžˆì–´ì•?합니ë‹?"; +//STRIP001 Text[ turkish ] = "Veri aralýðýnda en az bir satýr bulunmalýdýr."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "L'àrea de dades ha de contenir almenys una fila."; +//STRIP001 Text[ thai ] = "ช่วงข้à¸à¸¡à¸¹à¸¥à¸•à¹‰à¸à¸‡à¸¡à¸µà¸à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸à¸¢à¸—ี่สุดหนึ่งà¹à¸–à¸?"; +//STRIP001 Text[ czech ] = "Oblast dat musà obsahovat alespoň jeden řádek."; +//STRIP001 Text[ hebrew ] = "Der Datenbereich muss mindestens eine Daten-Zeile enthalten."; +//STRIP001 Text[ hindi ] = "ड़ॉटà¤?फैलाà¤?मेà¤?कम से कम à¤à¤• पंकà¥à¤¤à¤¿ का रहना ज़रूरी है à¥?"; +//STRIP001 }; +//STRIP001 String STR_PIVOT_NODATA +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Die Datenpilot-Tabelle mu?mindestens einen Eintrag enthalten. : Die Datenpilot-Tabelle mu?mindestens einen Eintrag enthalten. */ +//STRIP001 Text = "Die Datenpilot-Tabelle muss mindestens einen Eintrag enthalten." ; +//STRIP001 Text [ ENGLISH ] = "The Data Pilot Table must contain at least one entry." ; +//STRIP001 Text [ norwegian ] = "The Data Pilot Table must contain at least one entry." ; +//STRIP001 Text [ italian ] = "La tabella DataPilot deve contenere almeno una voce" ; +//STRIP001 Text [ portuguese_brazilian ] = "A Tabela Dinâmica deve conter no mínimo uma entrada." ; +//STRIP001 Text [ portuguese ] = "O Piloto de Dados deve ter pelo menos uma entrada." ; +//STRIP001 Text [ finnish ] = "Tietojen ohjauksen taulukossa on oltava vähintään yksi merkint?" ; +//STRIP001 Text [ danish ] = "DataPilot-tabellen skal mindst indeholde et element." ; +//STRIP001 Text [ french ] = "La table du pilote de données doit contenir au moins une entrée !" ; +//STRIP001 Text [ swedish ] = "Datapilot-tabellen måste innehålla minst en post." ; +//STRIP001 Text [ dutch ] = "DataPiloot-tabel moet minstens één item bevatten." ; +//STRIP001 Text [ spanish ] = "La tabla del Piloto de Datos debe contener al menos una entrada." ; +//STRIP001 Text [ english_us ] = "The DataPilot table must contain at least one entry." ; +//STRIP001 Text[ chinese_simplified ] = "æ•°æ®åŠ©ç†å·¥ä½œè¡¨å¿…须至少å«æœ‰ä¸€ä¸ªæ¡ç›®ã€?"; +//STRIP001 Text[ russian ] = "Ñâîäíàÿ òàáëèö?äîëæíà ñîäåðæàò?õî? áû îäíó çàïèñü."; +//STRIP001 Text[ polish ] = "Tabela Pilota danych musi zawiera?co najmniej jeden wpis."; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã®è¡¨ã«ã¯é …ç›®ãŒæœ€ä½Žï¼‘ã¤ã¯å¿…è¦ã§ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "資料助ç†å·¥ä½œè¡¨å¿…é ˆè‡³å°‘å«æœ‰ä¸€å€‹æ¢ç›®ã€?"; +//STRIP001 Text[ arabic ] = "íÌ?Ãä íÍÊæ?ÌÏæá ãÑÔÏ ÇáÈíÇäÇÊ Úá?ÅÏÎÇ?æÇÍÏ Úá?ÇáÃÞ?"; +//STRIP001 Text[ greek ] = "?ðßíáêá?ôï?ðéëüôï?äåäïìÝíù?ðñÝðåé íá ðåñéÝ÷åé ôïõëÜ÷éóôï?ìß?êáôá÷þñéóç."; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?í‘œì— ìµœì†Œí•?하나ì?í•ëª©ì?들어 있어ì•?합니ë‹?"; +//STRIP001 Text[ turkish ] = "Veri pilotu tablosu en az bir giri?içermelidir."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "La taula del DataPilot ha de contenir almenys una entrada."; +//STRIP001 Text[ thai ] = "ตารางข้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸‡à¸•à¹‰à¸à¸‡à¸¡à¸µà¸à¸¢à¹ˆà¸²à¸‡à¸™à¹‰à¸à¸¢à¸—ี่สุดหนึ่งรายà¸à¸²à¸?"; +//STRIP001 Text[ czech ] = "KontingeÄnà tabulka musà obsahovat alespoň jednu položku."; +//STRIP001 Text[ hebrew ] = "Die Datenpilot-Tabelle muss mindestens einen Eintrag enthalten."; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠसारणी मेà¤?कम से कम à¤à¤• पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤?का रहना ज़रूरी है à¥?"; +//STRIP001 }; +//STRIP001 String STR_PIVOT_MOVENOTALLOWED +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Der Datenbereich kann nicht gelöscht werden. : Der Datenbereich kann nicht gel÷scht werden. */ +//STRIP001 Text = "Der Datenbereich kann nicht gelöscht werden." ; +//STRIP001 Text [ ENGLISH ] = "The data area cannot be deleted." ; +//STRIP001 Text [ norwegian ] = "The data area cannot be deleted." ; +//STRIP001 Text [ italian ] = "Impossibile eliminare quest'area dati." ; +//STRIP001 Text [ portuguese_brazilian ] = "O intervalo de dados não pode ser excluído." ; +//STRIP001 Text [ portuguese ] = "A área de dados não pode ser apagada." ; +//STRIP001 Text [ finnish ] = "Tietoaluetta ei voi poistaa." ; +//STRIP001 Text [ danish ] = "Det er ikke muligt at slette dataområdet." ; +//STRIP001 Text [ french ] = "Impossible de supprimer cette plage de données." ; +//STRIP001 Text [ swedish ] = "Dataområdet kan inte raderas." ; +//STRIP001 Text [ dutch ] = "Gegevensbereik wissen onmogelijk." ; +//STRIP001 Text [ spanish ] = "No se puede borrar el área de datos." ; +//STRIP001 Text [ english_us ] = "The data range can not be deleted." ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ³•åˆ é™¤æ•°æ®åº“区域ã€?"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî óäàëèò?îáëàñò?äàííûõ."; +//STRIP001 Text[ polish ] = "Zakres danych nie mo¿e by?usuniêty."; +//STRIP001 Text[ japanese ] = "データ範囲ã¯å‰Šé™¤ã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "無法刪除資料å€åŸŸã€?"; +//STRIP001 Text[ arabic ] = "áÇ íãßä ÍÐ?äØÇÞ ÇáÈíÇäÇÊ."; +//STRIP001 Text[ greek ] = "?ðåñéï÷?äåäïìÝíù?äå?åßíá?äõíáôü?íá äéáãñáöå?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?범위ëŠ?ì‚ì œí•?ìˆ?없습니다."; +//STRIP001 Text[ turkish ] = "Veri aralýð?silinemez."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No es pot suprimir l'àrea de dades."; +//STRIP001 Text[ thai ] = "ไม่สามารถลบช่วงข้à¸à¸¡à¸¹à¸?"; +//STRIP001 Text[ czech ] = "Oblast dat nelze smazat."; +//STRIP001 Text[ hebrew ] = "Der Datenbereich kann nicht gelöscht werden."; +//STRIP001 Text[ hindi ] = "ड़ॉटà¤?फैलाà¤?को नहीà¤?मिटा सकते है à¥?"; +//STRIP001 }; +//STRIP001 String STR_PIVOT_ERROR +//STRIP001 { +//STRIP001 Text = "Fehler beim Erstellen der Datenpilot-Tabelle." ; +//STRIP001 Text [ ENGLISH ] = "Error creating the Data Pilot Table." ; +//STRIP001 Text [ dutch ] = "Fout bij het maken van DataPiloot-tabel" ; +//STRIP001 Text [ english_us ] = "Error creating the Data Pilot Table." ; +//STRIP001 Text [ italian ] = "Erore nella creazione della tabella DataPilot" ; +//STRIP001 Text [ spanish ] = "Error al crear la tabla del Piloto de Datos." ; +//STRIP001 Text [ french ] = "Erreur lors de la création de la table du pilote de données" ; +//STRIP001 Text [ swedish ] = "Fel när Datapilot-tabell skapades." ; +//STRIP001 Text [ danish ] = "Fejl ved oprettelse af DataPilot-tabellen." ; +//STRIP001 Text [ portuguese ] = "Erro ao criar a tabela do Piloto de Dados." ; +//STRIP001 Text [ portuguese_brazilian ] = "Ocorreu um erro ao criar a Tabela Dinâmica." ; +//STRIP001 Text[ chinese_simplified ] = "在建立数æ®åŠ©ç?工作表时å‘生错误ã€?"; +//STRIP001 Text[ russian ] = "Îøèáêà ñîçäàí? ñâîäíî?òàáëèö?"; +//STRIP001 Text[ polish ] = "B³¹d tworzenia tabeli Pilota danych."; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆè¡¨ã‚’作æˆã™ã‚‹éš›ã®ã‚¨ãƒ©ãƒ¼ã€?"; +//STRIP001 Text[ chinese_traditional ] = "在建立資料助ç†å·¥ä½œè¡¨æ™‚發生錯誤ã€?"; +//STRIP001 Text[ arabic ] = "ÍÏ?ÎØ?ÃËäÇ?ÅäÔÇ?ÌÏæá ãÑÔÏ ÇáÈíÇäÇÊ."; +//STRIP001 Text[ greek ] = "ÓöÜëìá êáôÜ ôç?äçìéïõñãßá ôï?ðßíáêá ôï?ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?í‘?만드ëŠ?ì¤?오류"; +//STRIP001 Text[ turkish ] = "Veri pilotu tablosu oluþturma hatas?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "S'ha produït un error en crear la taula del DataPilot."; +//STRIP001 Text[ finnish ] = "Virhe luotaessa tietojen ohjaustaulukkoa."; +//STRIP001 Text[ thai ] = "เà¸à¸´à¸”ความผิดพลาดในà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸•à¸²à¸£à¸²à¸‡à¸‚้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸?"; +//STRIP001 Text[ czech ] = "Chyba pÅ™i vytvářenà tabulky Průvodce daty."; +//STRIP001 Text[ hebrew ] = "Fehler beim Erstellen der Datenpilot-Tabelle."; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠसारणी को उतà¥à¤ªà¤¨à¥à¤?करने के समà¤?गलती à¥?"; +//STRIP001 }; +//STRIP001 String STR_PIVOT_OVERLAP +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Datenpilot-Tabellen dürfen sich nicht überlappen. : Datenpilot-Tabellen d³rfen sich nicht ³berlappen. */ +//STRIP001 Text = "Datenpilot-Tabellen dürfen sich nicht überlappen." ; +//STRIP001 Text [ ENGLISH ] = "Data Pilot Tables cannot overlap." ; +//STRIP001 Text [ portuguese ] = "Não ?possível sobrepor tabelas do Piloto de Dados " ; +//STRIP001 Text [ english_us ] = "DataPilot tables can not overlap." ; +//STRIP001 Text [ portuguese_brazilian ] = "As Tabelas Dinâmicas não podem ser sobrepostas." ; +//STRIP001 Text [ swedish ] = "Datapilottabellerna får inte överlappa varandra." ; +//STRIP001 Text [ danish ] = "DataPilot-tabeller m?ikke overlappe." ; +//STRIP001 Text [ italian ] = "Le tabelle del DataPilot non devono sovrapporsi." ; +//STRIP001 Text [ spanish ] = "Las tablas del Piloto de Datos no se deben sobreponer." ; +//STRIP001 Text [ french ] = "Les tables du pilote de données ne peuvent pas se recouper." ; +//STRIP001 Text [ dutch ] = "Datapiloottabellen mogen elkaar niet overlappen" ; +//STRIP001 Text[ chinese_simplified ] = "æ•°æ®åŠ©ç†å·¥ä½œè¡¨ä¸å¯ä»¥ç›¸äº’é‡å ã€?"; +//STRIP001 Text[ russian ] = "Ñâîäíû?òàáëèö?íå äîëæíû ïåðåêðûâàòüñÿ."; +//STRIP001 Text[ polish ] = "Tabele Pilota danych nie mog?si?nak³ada?"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã®è¡¨ã¯é‡ãã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "資料助ç†å·¥ä½œè¡¨ä¸å¯ä»¥ç›¸äº’é‡ç–Šã€?"; +//STRIP001 Text[ arabic ] = "áÇ íãßä ÊÑÇß?ÌÏÇæ?ãÑÔÏ ÇáÈíÇäÇÊ."; +//STRIP001 Text[ greek ] = "Äå?åðéôñÝðåôá??åðéêÜëõø?ôù?ðéíÜêù?DataPilot."; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?표가 ê²¹ì³ì ¸ì„œëŠ?안ë©ë‹ˆë‹¤."; +//STRIP001 Text[ turkish ] = "Veri pilotu tablolar?basamaklanamaz."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Les taules del DataPilot no es poden superposar."; +//STRIP001 Text[ finnish ] = "Tietojen ohjaustaulukot eivät voi olla päällekkäin."; +//STRIP001 Text[ thai ] = "ตารางข้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸‡à¹„ม่สามารถซ้à¸à¸™à¸—ับได้"; +//STRIP001 Text[ czech ] = "KontingenÄnà tabulky se nemohou pÅ™ekrývat."; +//STRIP001 Text[ hebrew ] = "Datenpilot-Tabellen dürfen sich nicht überlappen."; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠसारणी ओवरलॉप नहीà¤?हो सकता है à¥?"; +//STRIP001 }; +//STRIP001 String STR_PIVOT_NOTEMPTY +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Der Zielbereich ist nicht leer. Soll er überschrieben werden? : Der Zielbereich ist nicht leer. Soll er ³berschrieben werden? */ +//STRIP001 Text = "Der Zielbereich ist nicht leer. Soll er überschrieben werden?" ; +//STRIP001 Text [ ENGLISH ] = "The destination area is not empty. Replace contents?" ; +//STRIP001 Text [ portuguese ] = "A área de destino não est?vazia. Sobregravar?" ; +//STRIP001 Text [ english_us ] = "The destination range is not empty. Overwrite existing contents?" ; +//STRIP001 Text [ portuguese_brazilian ] = "O intervalo de destino não est?vazio. Sobrescrever o conteúdo existente?" ; +//STRIP001 Text [ swedish ] = "Målområdet är inte tomt. Skall det skrivas över?" ; +//STRIP001 Text [ danish ] = "Målområdet er ikke tomt. Skal det overskrives?" ; +//STRIP001 Text [ italian ] = "L'area di destinazione non ?vuota. Volete sovrascriverla?" ; +//STRIP001 Text [ spanish ] = "El área destino no est?vacía. ¿Desea sobrescribirla?" ; +//STRIP001 Text [ french ] = "La plage cible n'est pas vide. Voulez-vous remplacer son contenu ?" ; +//STRIP001 Text [ dutch ] = "Het doelbereik is niet leeg. Overschrijven?" ; +//STRIP001 Text[ chinese_simplified ] = "è¿™ä¸ªç›®æ ‡åŒºåŸŸä¸æ˜¯ç©ºç™½çš„。还是è¦åˆ 除它?"; +//STRIP001 Text[ russian ] = "Îáëàñò?íàçíà÷åí? íå ïóñò? Ïåðåçàïèñàòü ñîäåðæèìîå?"; +//STRIP001 Text[ polish ] = "Zakres docelowy nie jest pusty. Czy zast¹pi?istniej¹c?zawartoœæ?"; +//STRIP001 Text[ japanese ] = "貼り付ã‘å…ˆãŒç©ºç™½ã§ã¯ã‚ã‚Šã¾ã›ã‚“。上書ãã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "這個目標å€åŸŸä¸æ˜¯ç©ºç™½çš„。還是è¦åˆªé™¤ï¼?"; +//STRIP001 Text[ arabic ] = "ÇáäØÇÞ ÇáåÏ?Ûí?ÝÇÑÛ. åá ÊÑíÏ ÇáßÊÇÈ?Ýæ?ãÍÊæíÇÊå?"; +//STRIP001 Text[ greek ] = "?ðåñéï÷?ðñïïñéóìïý äå?åßíá?êåíÞ. ÈÝëåôå íá áíôéêáôáóôáèåß;"; +//STRIP001 Text[ korean ] = "대ìƒ?범위가 비어있지 않습니다. 기존ì?ë‚´ìš©ì—?ë®ì–´ì“°ì‹œê² 습니까?"; +//STRIP001 Text[ turkish ] = "Hedef aralýð?bo?deðil. Mevcut içeriðin üzerine yazýlsýn m?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "L'àrea de destinaci?no és buida. Voleu sobreescriure el contingut existent?"; +//STRIP001 Text[ finnish ] = "Kohdealue ei ole tyhj? Korvataanko nykyinen sisält?"; +//STRIP001 Text[ thai ] = "ช่วงเป้าหมายไม่ว่าง เขียนทับเนื้à¸à¸«à¸²à¸—ี่มีà¸à¸¢à¸¹à¹ˆà¸«à¸£à¸·à¸à¹„ม่?"; +//STRIP001 Text[ czech ] = "CÃlová oblast nenà prázdná. Má se pÅ™epsat nynÄ›jÅ¡Ã obsah?"; +//STRIP001 Text[ hebrew ] = "Der Zielbereich ist nicht leer. Soll er überschrieben werden?"; +//STRIP001 Text[ hindi ] = "नियत सà¥à¤¥à¤¾à¤?फैलाà¤?खाली नहीà¤?है à¥?असà¥à¤¤à¤¿à¤¤à¥à¤µ मेà¤?रहनेवाला विषयों को ओवररइटà¥?करना है?"; +//STRIP001 }; +//STRIP001 String STR_DATAPILOT_SUBTOTAL +//STRIP001 { +//STRIP001 Text = "Der Quellbereich enthält Teilergebnisse, die das Ergebnis verfälschen können. Soll er trotzdem verwendet werden?"; +//STRIP001 Text [ ENGLISH ] = "The source range contains subtotals which may distort the results. Use it anyway?"; +//STRIP001 Text[ english_us ] = "The source range contains subtotals which may distort the results. Use it anyway?"; +//STRIP001 Text[ portuguese ] = "O intervalo fonte contém subtotais que poderão falsificar o resultado. Mesmo assim, utiliz?lo?"; +//STRIP001 Text[ russian ] = "Èñõîäíûé äèàïàçîí ñîäåðæèò ïðîìåæóòî÷íû?èòîã? êîòîðû?ìîãó?èñêàçèòü ðåçóëüòà? Èñïîëüçîâàòü åã? íåñìîò? íà ýò?"; +//STRIP001 Text[ greek ] = "?ðåñéï÷?ðñïÝëåõóçò ðåñéÝ÷åé ìåñéêÜ áèñïßóìáôá ôá ïðïß?ìðïñåß íá ïäçãÞóïõ?óå ëÜèï?áðïôåëÝóìáôá. ÈÝëåôå íá ÷ñçóéìïðïéçèåß;"; +//STRIP001 Text[ dutch ] = "Het bronbereik bevat subtotalen die kunnen leiden tot een foutief eindresultaat. Wilt u deze toch gebruiken?"; +//STRIP001 Text[ french ] = "La plage source contient des sous-totaux qui pourraient fausser le résultat. L'utiliser quand même ?"; +//STRIP001 Text[ spanish ] = "El área fuente contiene resultados parciales que pueden falsificar los resultados. ¿Desea utilizarla de todas formas?"; +//STRIP001 Text[ italian ] = "L'area sorgente contiene risultati parziali che possono falsificare il risultato. Volete usarla comunque?"; +//STRIP001 Text[ danish ] = "Kildeområdet indeholder delresultater, som kan forfalske resultatet. Skal det anvendes alligevel?"; +//STRIP001 Text[ swedish ] = "Källområdet innehåller delresultat som kan förvanska resultatet. Ska det änd?användas?"; +//STRIP001 Text[ polish ] = "Zakres Ÿród³owy zawiera sumy czêœciowe, które mog?sfa³szowa?wynik. Czy pomimo to u¿y?tego zakresu?"; +//STRIP001 Text[ portuguese_brazilian ] = "O intervalo de origem contém sub-totais que podem distorcer o resultado. Usar mesmo assim?"; +//STRIP001 Text[ japanese ] = "ã“ã®ã‚½ãƒ¼ã‚¹ç¯„囲ã«ã¯å°è¨ˆãŒå«ã¾ã‚Œã¦ãŠã‚Šã€æ£ã—ããªã„çµæžœãŒå‡ºã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚使用ã—ã¾ã™ã‹ã€?"; +//STRIP001 Text[ korean ] = "ì›ë³¸ 범위ì—?잘못ë?ê²°ê³¼ë¥?초래í•?ìˆ?있는 부분합ì?í¬í•¨ë˜ì–´ 있습니다. 그래ë?ì‚¬ìš©í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"; +//STRIP001 Text[ chinese_simplified ] = "这个æºåŒºåŸŸå«æœ‰ä¸€äº›å¯èƒ½ä¼šå½±å“到计算结果的自动求和公å¼ã€‚还是è¦ä½¿ç”¨å®ƒï¼Ÿ"; +//STRIP001 Text[ chinese_traditional ] = "這個æºå€åŸŸå«æœ‰ä¸€äº›å¯èƒ½æœƒå½±éŸ¿åˆ°è¨ˆç®—çµæžœçš„å°è¨ˆå…¬å¼ã€‚還是è¦ä½¿ç”¨å®ƒï¼Ÿ"; +//STRIP001 Text[ turkish ] = "Kaynak aralýð?sonuçlar?bozacak aratoplamlar içeriyor. Yine de kullanýlsýn m?"; +//STRIP001 Text[ arabic ] = "íÍÊæ?ÇáäØÇÞ ÇáãÕÏÑ?Úá?ãÌÇãíÚ ÝÑÚí?ÞÏ ÊÍÑÝ ÇáäÊíÌ? åá ÊÑíÏ ÇÓÊÎÏÇãå Úá?ÇáÑÛ?ãä Ðáß¿"; +//STRIP001 Text[ catalan ] = "L'àrea d'origen cont?subtotals que poden distorsionar els resultats. Voleu utilitzar-la igualment?"; +//STRIP001 Text[ finnish ] = "Lähdealue sisältää välisummia, jotka saattavat vääristää tulokset. Käytetäänk?lähdealuetta siit?huolimatta?"; +//STRIP001 Text[ thai ] = "à¹à¸«à¸¥à¹ˆà¸‡à¸Šà¹ˆà¸§à¸‡à¸¡à¸µà¸œà¸¥à¸£à¸§à¸¡à¸¢à¹ˆà¸à¸¢à¸—ี่จะบิดเบืà¸à¸™à¸œà¸¥à¸¥à¸±à¸žà¸˜à¹? จะใช้มันหรืà¸à¹„มà¹?"; +//STRIP001 Text[ czech ] = "Zdrojová oblast obsahuje mezisouÄty, které mohou zkreslit výsledek. Má se pÅ™esto použÃt?"; +//STRIP001 Text[ hebrew ] = "Der Quellbereich enthält Teilergebnisse, die das Ergebnis verfälschen können. Soll er trotzdem verwendet werden?"; +//STRIP001 Text[ hindi ] = "मूà¤?फैलाà¤?मेà¤?रहनेवाला आधà¤?जोड़, नतीजोà¤?का रूà¤?बिगाड़ सकता है à¥?किसी तरà¤?उपयोà¤?करना है?"; +//STRIP001 }; +//STRIP001 String STR_PIVOT_PROGRESS +//STRIP001 { +//STRIP001 Text = "Datenpilot-Tabelle erstellen" ; +//STRIP001 Text [ ENGLISH ] = "creating Data Pilot Table" ; +//STRIP001 Text [ english_us ] = "Create DataPilot Table" ; +//STRIP001 Text [ italian ] = "Crea tabella di DataPilot" ; +//STRIP001 Text [ spanish ] = "Crear tabla del Piloto de Datos" ; +//STRIP001 Text [ french ] = "Créer une table du pilote de données" ; +//STRIP001 Text [ dutch ] = "DataPiloot-tabel maken" ; +//STRIP001 Text [ swedish ] = "Skapa Datapilottabell" ; +//STRIP001 Text [ danish ] = "Opret DataPilot-tabel" ; +//STRIP001 Text [ portuguese ] = "Criar tabela do Piloto de Dados" ; +//STRIP001 Text [ portuguese_brazilian ] = "Criar Tabela Dinâmica" ; +//STRIP001 Text[ chinese_simplified ] = "建立数æ®åŠ©ç†å·¥ä½œè¡?"; +//STRIP001 Text[ russian ] = "Ñîçäàò?ñâîäíó?òàáëèö?"; +//STRIP001 Text[ polish ] = "Utwórz tabel?Pilota danych"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã§è¡¨ã‚’作æˆ?"; +//STRIP001 Text[ chinese_traditional ] = "建立資料助ç†å·¥ä½œè¡?"; +//STRIP001 Text[ arabic ] = "ÅäÔÇ?ÌÏæá ãÑÔÏ ÈíÇäÇÊ"; +//STRIP001 Text[ greek ] = "Äçìéïõñãßá ðßíáêá ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?í‘?만들ê¸?"; +//STRIP001 Text[ turkish ] = "Veri pilotu tablosu oluþtur"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Crea una taula del DataPilot"; +//STRIP001 Text[ finnish ] = "Luo tietojen ohjaustaulukko"; +//STRIP001 Text[ thai ] = "สร้างตารางข้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸‡"; +//STRIP001 Text[ czech ] = "VytvoÅ™it KontingenÄnà tabulku"; +//STRIP001 Text[ hebrew ] = "Datenpilot-Tabelle erstellen"; +//STRIP001 Text[ hindi ] = "ड़ॉटà¤?पैलटà¥?सारणी को उतà¥à¤ªà¤¨à¥à¤?करà¥?"; +//STRIP001 }; + String STR_PIVOT_TOTAL + { + Text [ de ] = "Gesamt" ; + Text [ en-US ] = "Total" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Total"; + Text[ ru ] = "Итог"; + Text[ el ] = "ΣÏνολο"; + Text[ nl ] = "Totaal"; + Text[ fr ] = "Total"; + Text[ es ] = "Total"; + Text[ fi ] = "Yhteensä"; + Text[ ca ] = "Total"; + Text[ it ] = "Totale"; + Text[ da ] = "Total"; + Text[ sv ] = "Totalt"; + Text[ pl ] = "Suma"; + Text[ pt-BR ] = "Total"; + Text[ th ] = "ผลรวม"; + Text[ ja ] = "åˆè¨ˆ"; + Text[ ko ] = "ì´"; + Text[ zh-CN ] = "总共"; + Text[ zh-TW ] = "總計"; + Text[ tr ] = "Toplam"; + Text[ hi-IN ] = "कà¥à¤²à¤œà¥‹à¤¡à¤¼"; + Text[ ar ] = "إجمالي"; + Text[ he ] = "Gesamt"; + }; + String STR_PIVOT_DATA + { + Text [ de ] = "Daten" ; + Text [ en-US ] = "Data" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Dados"; + Text[ ru ] = "Данные"; + Text[ el ] = "ΔεδομÎνα"; + Text[ nl ] = "Gegevens"; + Text[ fr ] = "Données"; + Text[ es ] = "Datos"; + Text[ fi ] = "Tiedot"; + Text[ ca ] = "Dades"; + Text[ it ] = "Dati"; + Text[ da ] = "Data"; + Text[ sv ] = "Data"; + Text[ pl ] = "Dane"; + Text[ pt-BR ] = "Dados"; + Text[ th ] = "ข้à¸à¸¡à¸¹à¸¥"; + Text[ ja ] = "データ"; + Text[ ko ] = "ë°ì´í„°"; + Text[ zh-CN ] = "æ•°æ®"; + Text[ zh-TW ] = "資料"; + Text[ tr ] = "Veri"; + Text[ hi-IN ] = "डॉटा"; + Text[ ar ] = "البيانات"; + Text[ he ] = "Daten"; + }; + String STR_PIVOTFUNC_SUM + { + Text [ de ] = "SUMME" ; + Text [ en-US ] = "SUM" ; + Text [ x-comment ] = " "; + Text[ pt ] = "SOMA"; + Text[ ru ] = "СУММÐ"; + Text[ el ] = "SUM"; + Text[ nl ] = "SOM"; + Text[ fr ] = "SOMME"; + Text[ es ] = "SUMA"; + Text[ fi ] = "SUMMA"; + Text[ ca ] = "SUM"; + Text[ it ] = "SOMMA"; + Text[ da ] = "SUM"; + Text[ sv ] = "SUMMA"; + Text[ pl ] = "SUM"; + Text[ pt-BR ] = "SOMA"; + Text[ th ] = "ผลรวม"; + Text[ ja ] = "SUM"; + Text[ ko ] = "합계"; + Text[ zh-CN ] = "总计"; + Text[ zh-TW ] = "å°è¨ˆ"; + Text[ tr ] = "TOPLAM"; + Text[ hi-IN ] = "SUM"; + Text[ ar ] = "المجموع"; + Text[ he ] = "SUMME"; + }; + String STR_PIVOTFUNC_COUNT + { + Text [ de ] = "ANZAHL" ; + Text [ en-US ] = "COUNT" ; + Text [ x-comment ] = " "; + Text[ pt ] = "CONTAR.NÚMEROS"; + Text[ ru ] = "КОЛИЧЕСТВО"; + Text[ el ] = "ΠΛΗΘΟΣ"; + Text[ nl ] = "AANTAL"; + Text[ fr ] = "NB"; + Text[ es ] = "CANTIDAD"; + Text[ fi ] = "LASKE"; + Text[ ca ] = "COUNT"; + Text[ it ] = "CONTA.NUMERI"; + Text[ da ] = "TÆL"; + Text[ sv ] = "ANTAL"; + Text[ pl ] = "COUNT"; + Text[ pt-BR ] = "CONT.NÚM"; + Text[ th ] = "นับ"; + Text[ ja ] = "COUNT"; + Text[ ko ] = "ê°’"; + Text[ zh-CN ] = "æ•°ç›®"; + Text[ zh-TW ] = "數目"; + Text[ tr ] = "SAY"; + Text[ hi-IN ] = "COUNT"; + Text[ ar ] = "العدد"; + Text[ he ] = "ANZAHL"; + }; + String STR_PIVOTFUNC_AVG + { + Text [ de ] = "MITTELWERT" ; + Text [ en-US ] = "AVERAGE" ; + Text [ x-comment ] = " "; + Text[ pt ] = "MÉDIA"; + Text[ ru ] = "СРЗÐÐЧ"; + Text[ el ] = "AVERAGE"; + Text[ nl ] = "GEMIDDELDE"; + Text[ fr ] = "MOYENNE"; + Text[ es ] = "PROMEDIO"; + Text[ fi ] = "KESKIARVO"; + Text[ ca ] = "AVERAGE"; + Text[ it ] = "MEDIA"; + Text[ da ] = "MIDDEL"; + Text[ sv ] = "MEDEL"; + Text[ pl ] = "AVERAGE"; + Text[ pt-BR ] = "MÉDIA"; + Text[ th ] = "เฉลี่ย"; + Text[ ja ] = "AVERAGE"; + Text[ ko ] = "AVERAGE"; + Text[ zh-CN ] = "å¹³å‡å€¼"; + Text[ zh-TW ] = "å¹³å‡å€¼"; + Text[ tr ] = "ORTALAMA "; + Text[ hi-IN ] = "AVERAGE"; + Text[ ar ] = "AVERAGE"; + Text[ he ] = "MITTELWERT"; + }; + String STR_PIVOTFUNC_MAX + { + Text [ de ] = "MAX" ; + Text [ en-US ] = "MAX" ; + Text [ x-comment ] = " "; + Text[ pt ] = "MÃX"; + Text[ ru ] = "ÐœÐКС"; + Text[ el ] = "MAX"; + Text[ nl ] = "MAX"; + Text[ fr ] = "MAX"; + Text[ es ] = "MAX"; + Text[ fi ] = "MAKS"; + Text[ ca ] = "MAX"; + Text[ it ] = "MAX"; + Text[ da ] = "MAKS"; + Text[ sv ] = "MAX"; + Text[ pl ] = "MAX"; + Text[ pt-BR ] = "MÃXIMO"; + Text[ th ] = "มาà¸à¸—ี่สุด"; + Text[ ja ] = "MAX"; + Text[ ko ] = "최대"; + Text[ zh-CN ] = "最大"; + Text[ zh-TW ] = "最大"; + Text[ tr ] = "MAX"; + Text[ hi-IN ] = "MAX"; + Text[ ar ] = "MAX"; + Text[ he ] = "MAX"; + }; + String STR_PIVOTFUNC_MIN + { + Text [ de ] = "MIN" ; + Text [ en-US ] = "MIN" ; + Text [ x-comment ] = " "; + Text[ pt ] = "MÃN"; + Text[ ru ] = "МИÐ"; + Text[ el ] = "MIN"; + Text[ nl ] = "MIN"; + Text[ fr ] = "MIN"; + Text[ es ] = "MIN"; + Text[ fi ] = "MIN"; + Text[ ca ] = "MIN"; + Text[ it ] = "MIN"; + Text[ da ] = "MIN"; + Text[ sv ] = "MIN"; + Text[ pl ] = "MIN"; + Text[ pt-BR ] = "MÃNIMO"; + Text[ th ] = "น้à¸à¸¢à¸—ี่สุด"; + Text[ ja ] = "MIN"; + Text[ ko ] = "최소"; + Text[ zh-CN ] = "最å°"; + Text[ zh-TW ] = "最å°"; + Text[ tr ] = "MÄ°N"; + Text[ hi-IN ] = "MIN"; + Text[ ar ] = "أدنى"; + Text[ he ] = "MIN"; + }; + String STR_PIVOTFUNC_PROD + { + Text [ de ] = "PRODUKT" ; + Text [ en-US ] = "PRODUCT" ; + Text [ x-comment ] = " "; + Text[ pt ] = "PRODUTO"; + Text[ ru ] = "ПРОИЗВЕДЕÐИЕ"; + Text[ el ] = "ΓΙÎΟΜΕÎΟ"; + Text[ nl ] = "PRODUCT"; + Text[ fr ] = "PRODUIT"; + Text[ es ] = "PRODUCTO"; + Text[ fi ] = "TULO"; + Text[ ca ] = "PRODUCT"; + Text[ it ] = "PRODOTTO"; + Text[ da ] = "PRODUKT"; + Text[ sv ] = "PRODUKT"; + Text[ pl ] = "PRODUCT"; + Text[ pt-BR ] = "MULT"; + Text[ th ] = "ผลิตภัณฑ์"; + Text[ ja ] = "PRODUCT"; + Text[ ko ] = "PRODUCT"; + Text[ zh-CN ] = "乘积"; + Text[ zh-TW ] = "乘ç©"; + Text[ tr ] = "ÇARPIM"; + Text[ hi-IN ] = "PRODUCT"; + Text[ ar ] = "المÙنْتَج"; + Text[ he ] = "PRODUKT"; + }; + String STR_PIVOTFUNC_COUNT2 + { + Text [ de ] = "ANZAHL2" ; + Text [ en-US ] = "COUNTA" ; + Text [ x-comment ] = " "; + Text[ pt ] = "CONTAR.VAL"; + Text[ ru ] = "КОЛИЧЕСТВОA"; + Text[ el ] = "ΚΑΤΑΜΕΤΡΗΣΗ2"; + Text[ nl ] = "AANTAL2"; + Text[ fr ] = "NBVAL"; + Text[ es ] = "CONTARA"; + Text[ fi ] = "LASKE_A"; + Text[ ca ] = "COUNTA"; + Text[ it ] = "CONTA.VALORI"; + Text[ da ] = "TÆLV"; + Text[ sv ] = "ANTALV"; + Text[ pl ] = "COUNTA"; + Text[ pt-BR ] = "CONT.VALORES"; + Text[ th ] = "นับA"; + Text[ ja ] = "COUNTA"; + Text[ ko ] = "카운트2"; + Text[ zh-CN ] = "æ•°ç›® 2"; + Text[ zh-TW ] = "數目 2"; + Text[ tr ] = "SAYA"; + Text[ hi-IN ] = "COUNTA"; + Text[ ar ] = "العدد2"; + Text[ he ] = "ANZAHL2"; + }; + String STR_PIVOTFUNC_STDDEV + { + Text [ de ] = "STABW" ; + Text [ en-US ] = "STDEV" ; + Text [ x-comment ] = " "; + Text[ pt ] = "DESVPAD"; + Text[ ru ] = "СТÐÐДОТКЛОÐ"; + Text[ el ] = "STDEV"; + Text[ nl ] = "STDAFW"; + Text[ fr ] = "ECARTYPE"; + Text[ es ] = "DevNorm"; + Text[ fi ] = "KESKIHAJONTA"; + Text[ ca ] = "STDEV"; + Text[ it ] = "DEV.ST"; + Text[ da ] = "STDAFV"; + Text[ sv ] = "STDAV"; + Text[ pl ] = "STDEV"; + Text[ pt-BR ] = "DESVPAD"; + Text[ th ] = "STDEV"; + Text[ ja ] = "STDEV"; + Text[ ko ] = "STDEV"; + Text[ zh-CN ] = "æ ‡å‡†åå·®(æŠ½æ ·)"; + Text[ zh-TW ] = "標準åå·®(抽樣)"; + Text[ tr ] = "STSAPMA"; + Text[ hi-IN ] = "STDEV"; + Text[ ar ] = "STDEV"; + Text[ he ] = "STABW"; + }; + String STR_PIVOTFUNC_STDDEV2 + { + Text [ de ] = "STABWN" ; + Text [ en-US ] = "STDEVP" ; + Text [ x-comment ] = " "; + Text[ pt ] = "DESVPADP"; + Text[ ru ] = "СТÐÐДОТКЛОÐП"; + Text[ el ] = "STDEVP"; + Text[ nl ] = "STDAFWP"; + Text[ fr ] = "ECARTYPEP"; + Text[ es ] = "DESVESTP"; + Text[ fi ] = "KESKIHAJONTAP"; + Text[ ca ] = "STDEVP"; + Text[ it ] = "DEV.ST.POP"; + Text[ da ] = "STDAFVP"; + Text[ sv ] = "STDAVP"; + Text[ pl ] = "STDEVP"; + Text[ pt-BR ] = "DESVPADP"; + Text[ th ] = "STDEVP"; + Text[ ja ] = "STDEVP"; + Text[ ko ] = "STDEVP"; + Text[ zh-CN ] = "æ ‡å‡†åå·®(全部基数)"; + Text[ zh-TW ] = "標準åå·®(全部基數)"; + Text[ tr ] = "STSAPMAP"; + Text[ hi-IN ] = "STDEVP"; + Text[ ar ] = "STDEVP"; + Text[ he ] = "STABWN"; + }; + String STR_PIVOTFUNC_VAR + { + Text [ de ] = "VARIANZ" ; + Text [ en-US ] = "VAR" ; + Text [ x-comment ] = " "; + Text[ pt ] = "VARIÂNCIA"; + Text[ ru ] = "ДИСП"; + Text[ el ] = "VAR"; + Text[ nl ] = "VAR"; + Text[ fr ] = "VAR"; + Text[ es ] = "VAR"; + Text[ fi ] = "VAR"; + Text[ ca ] = "VAR"; + Text[ it ] = "VAR"; + Text[ da ] = "VARIANS"; + Text[ sv ] = "VARIANS"; + Text[ pl ] = "VAR"; + Text[ pt-BR ] = "VAR"; + Text[ th ] = "VAR"; + Text[ ja ] = "VAR"; + Text[ ko ] = "분산"; + Text[ zh-CN ] = "方差"; + Text[ zh-TW ] = "方差"; + Text[ tr ] = "DEĞİŞKEN"; + Text[ hi-IN ] = "VAR"; + Text[ ar ] = "VAR"; + Text[ he ] = "VARIANZ"; + }; + String STR_PIVOTFUNC_VAR2 + { + Text [ de ] = "VARIANZEN" ; + Text [ en-US ] = "VARP" ; + Text [ x-comment ] = " "; + Text[ pt ] = "VARIÂNCIAS"; + Text[ ru ] = "ДИСПР"; + Text[ el ] = "VARP"; + Text[ nl ] = "VARP"; + Text[ fr ] = "VAR.P"; + Text[ es ] = "VARP"; + Text[ fi ] = "VARP"; + Text[ ca ] = "VARP"; + Text[ it ] = "VAR.POP"; + Text[ da ] = "VARIANSP"; + Text[ sv ] = "VARIANSER"; + Text[ pl ] = "VARP"; + Text[ pt-BR ] = "VARP"; + Text[ th ] = "VARP"; + Text[ ja ] = "VARP"; + Text[ ko ] = "VARP"; + Text[ zh-CN ] = "方差(全部基数)"; + Text[ zh-TW ] = "方差(全部基數)"; + Text[ tr ] = "DEĞİŞKENP"; + Text[ hi-IN ] = "VARP"; + Text[ ar ] = "VARP"; + Text[ he ] = "VARIANZEN"; + }; + String STR_TABLE + { + Text [ de ] = "Tabelle" ; + Text [ en-US ] = "Sheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Folha"; + Text[ ru ] = "ЛиÑÑ‚"; + Text[ el ] = "ΦÏλλο"; + Text[ nl ] = "Werkblad"; + Text[ fr ] = "Feuille"; + Text[ es ] = "Hoja"; + Text[ fi ] = "Taulukko"; + Text[ ca ] = "Full"; + Text[ it ] = "Tabella"; + Text[ da ] = "Ark"; + Text[ sv ] = "Tabell"; + Text[ pl ] = "Arkusz"; + Text[ pt-BR ] = "Planilha"; + Text[ th ] = "à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表"; + Text[ ko ] = "시트"; + Text[ zh-CN ] = "工作表"; + Text[ zh-TW ] = "工作表"; + Text[ tr ] = "Tablo"; + Text[ hi-IN ] = "शीटà¥"; + Text[ ar ] = "الجدول"; + Text[ he ] = "Tabelle"; + }; + String STR_COLUMN + { + Text [ de ] = "Spalte" ; + Text [ en-US ] = "Column" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Coluna"; + Text[ ru ] = "Столбец"; + Text[ el ] = "Στήλη"; + Text[ nl ] = "Kolom"; + Text[ fr ] = "Colonne"; + Text[ es ] = "Columna"; + Text[ fi ] = "Sarake"; + Text[ ca ] = "Columna"; + Text[ it ] = "Colonna"; + Text[ da ] = "Kolonne"; + Text[ sv ] = "Kolumn"; + Text[ pl ] = "Kolumna"; + Text[ pt-BR ] = "Coluna"; + Text[ th ] = "คà¸à¸¥à¸±à¸¡à¸™à¹Œ"; + Text[ ja ] = "列"; + Text[ ko ] = "단"; + Text[ zh-CN ] = "列"; + Text[ zh-TW ] = "欄"; + Text[ tr ] = "Sütun"; + Text[ hi-IN ] = "सà¥à¤¤à¤‚à¤"; + Text[ ar ] = "العمود"; + Text[ he ] = "Spalte"; + }; + String STR_ROW + { + Text [ de ] = "Zeile" ; + Text [ en-US ] = "Row" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Linha"; + Text[ ru ] = "Строка"; + Text[ el ] = "ΓÏαμμή"; + Text[ nl ] = "Rij"; + Text[ fr ] = "Ligne"; + Text[ es ] = "Fila"; + Text[ fi ] = "Rivi"; + Text[ ca ] = "fila"; + Text[ it ] = "Riga"; + Text[ da ] = "Række"; + Text[ sv ] = "Rad"; + Text[ pl ] = "Wiersz"; + Text[ pt-BR ] = "Linha"; + Text[ th ] = "à¹à¸–ว"; + Text[ ja ] = "è¡Œ"; + Text[ ko ] = "í–‰"; + Text[ zh-CN ] = "è¡Œ"; + Text[ zh-TW ] = "列"; + Text[ tr ] = "Satır"; + Text[ hi-IN ] = "पंकà¥à¤¤à¤¿"; + Text[ ar ] = "الصÙ"; + Text[ he ] = "Zeile"; + }; + String STR_PAGE + { + Text [ de ] = "Seite" ; + Text [ en-US ] = "Page" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Página"; + Text[ ru ] = "Страница"; + Text[ el ] = "Σελίδα"; + Text[ nl ] = "Pagina"; + Text[ fr ] = "Page"; + Text[ es ] = "Página"; + Text[ fi ] = "Sivu"; + Text[ ca ] = "Pà gina"; + Text[ it ] = "Pagina"; + Text[ da ] = "Side"; + Text[ sv ] = "Sida"; + Text[ pl ] = "Strona"; + Text[ pt-BR ] = "Página"; + Text[ th ] = "หน้า"; + Text[ ja ] = "ページ"; + Text[ ko ] = "페ì´ì§€"; + Text[ zh-CN ] = "页"; + Text[ zh-TW ] = "é "; + Text[ tr ] = "Sayfa"; + Text[ hi-IN ] = "पृषà¥à¤ "; + Text[ ar ] = "صÙØØ©"; + Text[ he ] = "‮דף‬"; + }; + String STR_LOAD_DOC + { + Text [ de ] = "Dokument laden" ; + Text [ en-US ] = "Load document" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Carregar documento"; + Text[ ru ] = "Загрузка документа"; + Text[ el ] = "ΦόÏτωση εγγÏάφου"; + Text[ nl ] = "Document laden"; + Text[ fr ] = "Charger un document"; + Text[ es ] = "Cargar documento"; + Text[ fi ] = "Lataa asiakirja"; + Text[ ca ] = "Carrega el document"; + Text[ it ] = "Carica documento"; + Text[ da ] = "Indlæs dokument"; + Text[ sv ] = "Ladda dokument"; + Text[ pl ] = "Åaduj dokument"; + Text[ pt-BR ] = "Carregar documento"; + Text[ th ] = "บรรจุเà¸à¸à¸ªà¸²à¸£"; + Text[ ja ] = "ドã‚ュメントã®èªã¿è¾¼ã¿"; + Text[ ko ] = "문서 로드"; + Text[ zh-CN ] = "装入文档"; + Text[ zh-TW ] = "載入文件"; + Text[ tr ] = "Belgeyi yükle"; + Text[ hi-IN ] = "लेखपतà¥à¤° लोड़ करो"; + Text[ ar ] = "تØميل ملÙ"; + Text[ he ] = "â€®×˜×¢×™× ×ª מסמך‬"; + }; + String STR_SAVE_DOC + { + Text [ de ] = "Dokument speichern" ; + Text [ en-US ] = "Save document" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Guardar documento"; + Text[ ru ] = "Сохранить документ"; + Text[ el ] = "Αποθήκευση εγγÏάφου"; + Text[ nl ] = "Document opslaan"; + Text[ fr ] = "Enregistrer le document"; + Text[ es ] = "Guardar documento"; + Text[ fi ] = "Tallenna asiakirja"; + Text[ ca ] = "Desa el document"; + Text[ it ] = "Salva documento"; + Text[ da ] = "Gem dokument"; + Text[ sv ] = "Spara dokument"; + Text[ pl ] = "Zapisz dokument"; + Text[ pt-BR ] = "Salvar documento"; + Text[ th ] = "บันทึà¸à¹€à¸à¸à¸ªà¸²à¸£"; + Text[ ja ] = "ドã‚ュメントã®ä¿å˜"; + Text[ ko ] = "문서 ì €ìž¥"; + Text[ zh-CN ] = "å˜ç›˜æ–‡æ¡£"; + Text[ zh-TW ] = "儲å˜æ–‡ä»¶"; + Text[ tr ] = "Belgeyi kaydet"; + Text[ hi-IN ] = "लेखपतà¥à¤° संचित करो"; + Text[ ar ] = "ØÙظ المستند"; + Text[ he ] = "Dokument speichern"; + }; + String STR_UNKNOWN_FILTER + { + Text [ de ] = "Unbekannter Filter: " ; + Text [ en-US ] = "Unknown filter: " ; + Text [ x-comment ] = " "; + Text[ pt ] = "Filtro desconhecido: "; + Text[ ru ] = "ÐеизвеÑтный фильтр: "; + Text[ el ] = "Άγνωστο φίλτÏο: "; + Text[ nl ] = "Onbekende filter:"; + Text[ fr ] = "Filtre inconnu : "; + Text[ es ] = "Filtro desconocido: "; + Text[ fi ] = "Tuntematon suodatin: "; + Text[ ca ] = "Filtre desconegut: "; + Text[ it ] = "Filtro sconosciuto: "; + Text[ da ] = "Ukendt filter: "; + Text[ sv ] = "Okänt filter: "; + Text[ pl ] = "Nieznany filtr: "; + Text[ pt-BR ] = "Filtro desconhecido: "; + Text[ th ] = "ไม่รู้จัà¸à¸•à¸±à¸§à¸à¸£à¸à¸‡: "; + Text[ ja ] = "ä¸æ˜Žãªãƒ•ã‚£ãƒ«ã‚¿: "; + Text[ ko ] = "ì•Œ 수 없는 í•„í„°: "; + Text[ zh-CN ] = "ä¸æ˜Žçš„ç›é€‰ï¼š "; + Text[ zh-TW ] = "ä¸æ˜Žçš„篩é¸ï¼š "; + Text[ tr ] = "Bilinmeyen filtre: "; + Text[ hi-IN ] = "अजà¥à¤žà¤¾à¤¤ फिलà¥à¤Ÿà¤°: "; + Text[ ar ] = "Ùلتر غير معروÙ: "; + Text[ he ] = "Unbekannter Filter:"; + }; +//STRIP001 String STR_ERR_INVALID_TABREF +//STRIP001 { +//STRIP001 Text = "<unbekannte Tabellenreferenz>" ; +//STRIP001 Text [ ENGLISH ] = "<unknown table reference>" ; +//STRIP001 Text [ norwegian ] = "<unknown table reference>" ; +//STRIP001 Text [ italian ] = "<riferimento tabella sconosciuto>" ; +//STRIP001 Text [ portuguese_brazilian ] = "<referência de tabela desconhecida>" ; +//STRIP001 Text [ portuguese ] = "<referência de tabela desconhecida>" ; +//STRIP001 Text [ finnish ] = "<tuntematon taulukkoviite>" ; +//STRIP001 Text [ danish ] = "<ukendt tabelreference>" ; +//STRIP001 Text [ french ] = "<référence de feuille de calcul inconnue>" ; +//STRIP001 Text [ swedish ] = "<okänd tabellreferens>" ; +//STRIP001 Text [ dutch ] = "<onbekende tabelverwijzing>" ; +//STRIP001 Text [ spanish ] = "<referencia desconocida a tabla>" ; +//STRIP001 Text [ english_us ] = "<unknown table reference>" ; +//STRIP001 Text[ chinese_simplified ] = "<ä¸æ˜Žçš„工作表引用>"; +//STRIP001 Text[ russian ] = "<íåèçâåñòíàÿ ññûëêà òàáëèö?"; +//STRIP001 Text[ polish ] = "<odwo³anie do nieznanej tabeli>"; +//STRIP001 Text[ japanese ] = "<ä¸æ˜Žãªè¡¨ã®å‚ç…?"; +//STRIP001 Text[ chinese_traditional ] = "<ä¸æ˜Žçš„工作表引用>"; +//STRIP001 Text[ arabic ] = "<ãÑÌÚ ÌÏæá Ûí?ãÚÑæ?"; +//STRIP001 Text[ greek ] = "<Üãíùóô?áíáöïñ?ðßíáêá>"; +//STRIP001 Text[ korean ] = "<ì•?ìˆ?없는 í‘?참조>"; +//STRIP001 Text[ turkish ] = "<bilinmeyen tablo referans?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "<referència desconeguda de la taula>"; +//STRIP001 Text[ thai ] = "<ไม่รู้จัà¸à¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¸•à¸²à¸£à¸²à¸‡>"; +//STRIP001 Text[ czech ] = "<odkaz na neznámou tabulku>"; +//STRIP001 Text[ hebrew ] = "<unbekannte Tabellenreferenz>"; +//STRIP001 Text[ hindi ] = "<अजà¥à¤žà¤¾à¤¤ सारणी रेफरेनà¥à¤¸>"; +//STRIP001 }; +//STRIP001 String STR_AREA_ALREADY_INSERTED +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Dieser Bereich wurde bereits eingefügt. : Dieser Bereich wurde bereits eingef³gt. */ +//STRIP001 Text = "Dieser Bereich wurde bereits eingefügt." ; +//STRIP001 Text [ ENGLISH ] = "This area already has been inserted." ; +//STRIP001 Text [ norwegian ] = "This area already has been inserted." ; +//STRIP001 Text [ italian ] = "Ques'area ?gi?stata inserita." ; +//STRIP001 Text [ portuguese_brazilian ] = "Este intervalo j?foi inserido." ; +//STRIP001 Text [ portuguese ] = "Esta área j?foi inserida." ; +//STRIP001 Text [ finnish ] = "Täm?alue on jo lisätty." ; +//STRIP001 Text [ danish ] = "Dette område er allerede blevet indsat." ; +//STRIP001 Text [ french ] = "Cette plage a déj?ét?insérée." ; +//STRIP001 Text [ swedish ] = "Området har redan infogats." ; +//STRIP001 Text [ dutch ] = "Dit bereik is reeds ingevoegd." ; +//STRIP001 Text [ spanish ] = "Esta área ya se ha insertado." ; +//STRIP001 Text [ english_us ] = "This range has already been inserted." ; +//STRIP001 Text[ chinese_simplified ] = "å·²ç»åŠ 入了这个区域ã€?"; +//STRIP001 Text[ russian ] = "Ýò?îáëàñò?óæ?âñòàâëåí?"; +//STRIP001 Text[ polish ] = "Ten zakres ju?zosta?wstawiony."; +//STRIP001 Text[ japanese ] = "ã“ã®ç¯„囲ã¯ã™ã§ã«æŒ¿å…¥ã•ã‚Œã¦ã„ã¾ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "å·²ç¶“åŠ å…¥äº†é€™å€‹å€åŸŸã€?"; +//STRIP001 Text[ arabic ] = "Êã ÅÏÑÇ?åÐ?ÇáäØÇÞ ãÓÈÞÇð."; +//STRIP001 Text[ greek ] = "?ðåñéï÷?ðñïóôÝèçêå Þä?"; +//STRIP001 Text[ korean ] = "ì?범위ëŠ?ì´ë¯¸ 삽입ë˜ì–´ 있습니다."; +//STRIP001 Text[ turkish ] = "Bu aralýk daha önce eklendi."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Aquesta àrea ja s'ha inserit."; +//STRIP001 Text[ thai ] = "à¹à¸—รà¸à¸Šà¹ˆà¸§à¸‡à¸™à¸µà¹‰à¹à¸¥à¹‰à¸?"; +//STRIP001 Text[ czech ] = "Tato oblast už byla vložena."; +//STRIP001 Text[ hebrew ] = "Dieser Bereich wurde bereits eingefügt."; +//STRIP001 Text[ hindi ] = "इस फैलाà¤?को पहिलà¥?से ही जोड़à¤?है à¥?"; +//STRIP001 }; +//STRIP001 String STR_INVALID_TABREF +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Ungültiger Tabellenbezug. : Ung³ltiger Tabellenbezug. */ +//STRIP001 Text = "Ungültiger Tabellenbezug." ; +//STRIP001 Text [ ENGLISH ] = "Invalid table reference." ; +//STRIP001 Text [ norwegian ] = "Invalid table reference." ; +//STRIP001 Text [ italian ] = "Riferimento tabella non valido." ; +//STRIP001 Text [ portuguese_brazilian ] = "Referência de planilha inválida." ; +//STRIP001 Text [ portuguese ] = "Referência de folha incorrecta." ; +//STRIP001 Text [ finnish ] = "Virheellinen taulukkoviittaus." ; +//STRIP001 Text [ danish ] = "Ugyldig arkreference." ; +//STRIP001 Text [ french ] = "Référence de feuille incorrecte." ; +//STRIP001 Text [ swedish ] = "Ogiltig tabellreferens." ; +//STRIP001 Text [ dutch ] = "Ongeldige werkbladverwijzing." ; +//STRIP001 Text [ spanish ] = "Referencia a hoja no válida." ; +//STRIP001 Text [ english_us ] = "Invalid sheet reference." ; +//STRIP001 Text[ chinese_simplified ] = "å·¥ä½œè¡¨å¼•ç”¨æ— æ•ˆã€?"; +//STRIP001 Text[ russian ] = "Íåäîïóñòèì? ññûëêà íà ëèñò."; +//STRIP001 Text[ polish ] = "Nieprawid³owe odwo³anie do arkusza."; +//STRIP001 Text[ japanese ] = "貼り付ã‘å…ˆãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "工作表引用無效ã€?"; +//STRIP001 Text[ arabic ] = "ãÑÌÚ ÇáÌÏæá Ûí?ÕÇáÍ."; +//STRIP001 Text[ greek ] = "Ìç Ýãêõñç áíáöïñ?ðßíáêá"; +//STRIP001 Text[ korean ] = "잘못ë?시트 참조."; +//STRIP001 Text[ turkish ] = "Geçersiz tablo referans?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "La referència del full no és vàlida."; +//STRIP001 Text[ thai ] = "à¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™à¹„ม่ถูà¸à¸•à¹‰à¸à¸?"; +//STRIP001 Text[ czech ] = "Neplatný odkaz na list.."; +//STRIP001 Text[ hebrew ] = "Ungültiger Tabellenbezug."; +//STRIP001 Text[ hindi ] = "शीटॠरेफरेनà¥à¤¸ अमानà¥à¤¯ है à¥?"; +//STRIP001 }; +//STRIP001 String STR_INVALID_QUERYAREA +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Dieser Bereich enthält keine gültige Abfrage. : Dieser Bereich enthõlt keine g³ltige Abfrage. */ +//STRIP001 Text = "Dieser Bereich enthält keine gültige Abfrage." ; +//STRIP001 Text [ ENGLISH ] = "No valid query found in this area." ; +//STRIP001 Text [ norwegian ] = "No valid query found in this area." ; +//STRIP001 Text [ italian ] = "Ricerca non valida trovata in quest'area." ; +//STRIP001 Text [ portuguese_brazilian ] = "Este intervalo não contém uma consulta válida." ; +//STRIP001 Text [ portuguese ] = "Esta área não contém nenhuma consulta válida." ; +//STRIP001 Text [ finnish ] = "Täm?alue ei sisäll?kelvollista kysely?" ; +//STRIP001 Text [ danish ] = "Dette område indeholder ingen gyldig forespørgsel." ; +//STRIP001 Text [ french ] = "Aucune requête correcte n'a pu être détectée dans cette section." ; +//STRIP001 Text [ swedish ] = "Detta område innehåller ingen giltig sökning." ; +//STRIP001 Text [ dutch ] = "Geen geldige query in dit bereik gevonden." ; +//STRIP001 Text [ spanish ] = "Este área no contiene ninguna consulta válida." ; +//STRIP001 Text [ english_us ] = "This range does not contain a valid query." ; +//STRIP001 Text[ chinese_simplified ] = "这个区域没有有效的查询ã€?"; +//STRIP001 Text[ russian ] = "Îáëàñò?ñîäåðæèò íå äîïóñòèìûé çàïðîñ."; +//STRIP001 Text[ polish ] = "Ten zakres nie zawiera prawid³owej kwerendy."; +//STRIP001 Text[ japanese ] = "ã“ã®ç¯„囲ã¯æœ‰åŠ¹ãªã‚¯ã‚¨ãƒªãƒ¼ã‚’å«ã‚“ã§ã„ã¾ã›ã‚“。        "; +//STRIP001 Text[ chinese_traditional ] = "這個å€åŸŸæ²’有有效的查詢ã€?"; +//STRIP001 Text[ arabic ] = "áÇ íÍÊæ?åÐ?ÇáäØÇÞ Úá?ÇÓÊÝÓÇ?ÕÇáÍ."; +//STRIP001 Text[ greek ] = "?ðåñéï÷?äå?ðåñéÝ÷åé Ýãêõñï åñþôçì?"; +//STRIP001 Text[ korean ] = "ì?범위ì—는 ìœ íš¨í•?쿼리가 í¬í•¨ë˜ì–´ 있지 않습니다."; +//STRIP001 Text[ turkish ] = "Bu aralýk geçerli bir sorgu içermiyor."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Aquesta àrea no cont?cap consulta vàlida."; +//STRIP001 Text[ thai ] = "ช่วงนี้ไม่มีà¹à¸šà¸šà¸ªà¸à¸šà¸–ามที่ใช้ได้"; +//STRIP001 Text[ czech ] = "Tato oblast neobsahuje platný dotaz."; +//STRIP001 Text[ hebrew ] = "Dieser Bereich enthält keine gültige Abfrage."; +//STRIP001 Text[ hindi ] = "इस फैलाà¤?मेà¤?मानà¥à¤?जानकारी नहीà¤?है à¥?"; +//STRIP001 }; +//STRIP001 String STR_REIMPORT_EMPTY +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Dieser Bereich enthält keine importierten Daten. : Dieser Bereich enthõlt keine importierten Daten. */ +//STRIP001 Text = "Dieser Bereich enthält keine importierten Daten." ; +//STRIP001 Text [ ENGLISH ] = "No imported data found in this area." ; +//STRIP001 Text [ norwegian ] = "No imported data found in this area." ; +//STRIP001 Text [ italian ] = "Quest'area non contiene dati importati." ; +//STRIP001 Text [ portuguese_brazilian ] = "Este intervalo não contém dados importados." ; +//STRIP001 Text [ portuguese ] = "Esta área não contém dados importados." ; +//STRIP001 Text [ finnish ] = "Täm?alue ei sisäll?tuotuja tietoja." ; +//STRIP001 Text [ danish ] = "Dette område indeholder ingen importerede data." ; +//STRIP001 Text [ french ] = "Aucune donnée importée dans cette plage." ; +//STRIP001 Text [ swedish ] = "Det här området innehåller inga importerade data." ; +//STRIP001 Text [ dutch ] = "Geen geïmporteerde gegevens in dit bereik gevonden." ; +//STRIP001 Text [ spanish ] = "Esta área no contiene datos importados." ; +//STRIP001 Text [ english_us ] = "This range does not contain imported data." ; +//STRIP001 Text[ chinese_simplified ] = "这个区域没有å«æœ‰ä»»ä½•è¾“入的数æ®ã€?"; +//STRIP001 Text[ russian ] = "Îáëàñò?íå ñîäåðæèò èìïîðòèðîâàííû?äàííûõ."; +//STRIP001 Text[ polish ] = "Ten zakres nie zawiera importowanych danych."; +//STRIP001 Text[ japanese ] = "ã“ã®ç¯„囲ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•ã‚ŒãŸãƒ‡ãƒ¼ã‚¿ã¯ã‚ã‚Šã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "這個å€åŸŸæ²’有å«æœ‰ä»»ä½•åŒ¯å…¥çš„資料ã€?"; +//STRIP001 Text[ arabic ] = "áÇ íÍÊæ?åÐ?ÇáäØÇÞ Úá?ÈíÇäÇÊ ãÓÊæÑÏ?"; +//STRIP001 Text[ greek ] = "ÁõôÞ ?ðåñéï÷?äå?ðåñéÝ÷åé åéóáãüìåíá äåäïìÝíá."; +//STRIP001 Text[ korean ] = "ì?범위ì—는 ê°€ì ¸ì˜¨ ë°ì´í„°ê°€ í¬í•¨ë˜ì–´ 있지 않습니다."; +//STRIP001 Text[ turkish ] = "Bu bölüm içe aktarýlmýþ veri içermiyor."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Aquesta àrea no cont?dades importades."; +//STRIP001 Text[ thai ] = "ช่วงนี้ไม่มีข้à¸à¸¡à¸¹à¸¥à¸—ี่นำเข้à¸?"; +//STRIP001 Text[ czech ] = "Tato oblast neobsahuje importovaná data."; +//STRIP001 Text[ hebrew ] = "Dieser Bereich enthält keine importierten Daten."; +//STRIP001 Text[ hindi ] = "इस फैलाà¤?मेà¤?निरà¥à¤¯à¤¾à¤?किया हà¥à¤?ड़ॉटà¤?नहीà¤?है à¥?"; +//STRIP001 }; +//STRIP001 String STR_NOMULTISELECT +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Diese Funktion läßt sich nicht auf Mehrfachselektionen anwenden. : Diese Funktion lõ˜t sich nicht auf Mehrfachselektionen anwenden. */ +//STRIP001 Text = "Diese Funktion lässt sich nicht auf Mehrfachselektionen anwenden." ; +//STRIP001 Text [ ENGLISH ] = "This function does not work with multiple selections." ; +//STRIP001 Text [ norwegian ] = "This function does not work with multiple selections." ; +//STRIP001 Text [ italian ] = "Questa funzione non funziona con selezioni multiple." ; +//STRIP001 Text [ portuguese_brazilian ] = "Esta função não pode ser usada com seleções múltiplas." ; +//STRIP001 Text [ portuguese ] = "Esta função não pode ser usada com selecções múltiplas." ; +//STRIP001 Text [ finnish ] = "Tät?toimintoa ei voi käyttää useita osia sisältäviin valintoihin." ; +//STRIP001 Text [ danish ] = "Det er ikke muligt at anvende denne funktion p?multimarkeringer." ; +//STRIP001 Text [ french ] = "Cette fonction est incompatible avec la sélection multiple" ; +//STRIP001 Text [ swedish ] = "Denna funktion fungerar inte med multimarkeringar." ; +//STRIP001 Text [ dutch ] = "Deze functie werkt niet bij meervoudige selecties." ; +//STRIP001 Text [ spanish ] = "Esta función no se puede aplicar con selecciones múltiples." ; +//STRIP001 Text [ english_us ] = "This function cannot be used with multiple selections." ; +//STRIP001 Text[ chinese_simplified ] = "è¿™ä¸ªåŠŸèƒ½æ— æ³•è¿ç”¨äºŽå¤šé‡é€‰æ‹©ã€?"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî ïðèìåíèò?ýò?ôóíêöè??ìíîæåñòâåííîìó âûáîðó."; +//STRIP001 Text[ polish ] = "Tej funkcji nie mo¿na u¿y?z wieloma zaznaczeniami."; +//STRIP001 Text[ japanese ] = "ã“ã®æ©Ÿèƒ½ã¯è¤‡æ•°é¸æŠžã§ã¯ä½¿ãˆã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "這個功能無法應用於多é‡é¸å–ã€?"; +//STRIP001 Text[ arabic ] = "áÇ íãßä ÊØÈí?åÐ?ÇáÏÇáÉ Úá?ÊÍÏíÏÇ?ãÊÚÏÏÉ."; +//STRIP001 Text[ greek ] = "?óõíÜñôçó?áõôÞ äå?åßíá?äõíáôü?íá åöáñìïóôåß ìå ðïëëáðëÝ?åðéëïãÝò."; +//STRIP001 Text[ korean ] = "ì?ê¸°ëŠ¥ì€ ë‹¤ì¤‘ ì„ íƒìœ¼ë¡œ 사용ë?ìˆ?없습니다."; +//STRIP001 Text[ turkish ] = "Bu fonksiyon, çoklu seçimlerle kullanýlamaz."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No es pot utilitzar aquesta funci?amb seleccions múltiples."; +//STRIP001 Text[ thai ] = "ไม่สามารถใช้ฟังà¸à¹Œà¸Šà¸±à¹ˆà¸™à¸™à¸µà¹‰à¸à¸±à¸šà¸à¸²à¸£à¹€à¸¥à¸·à¸à¸à¸«à¸¥à¸²à¸¢à¸ªà¹ˆà¸§à¸™à¹„ดà¹?"; +//STRIP001 Text[ czech ] = "Tuto funkci nelze použÃt s vÃcenásobnými výbÄ›ry."; +//STRIP001 Text[ hebrew ] = "Diese Funktion lässt sich nicht auf Mehrfachselektionen anwenden."; +//STRIP001 Text[ hindi ] = "इस फंकà¥à¤¶à¤¨à¥?को बहà¥à¤®à¥à¤–ी चà¥à¤¨à¤¾à¤?सहित उपयोà¤?नहीà¤?कर सकते है à¥?"; +//STRIP001 }; +//STRIP001 String STR_FILL_SERIES_PROGRESS +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Reihe Auffüllen... : Reihe Auff³llen... */ +//STRIP001 Text = "Reihe Auffüllen..." ; +//STRIP001 Text [ ENGLISH ] = "Fill Series..." ; +//STRIP001 Text [ norwegian ] = "Fill Series..." ; +//STRIP001 Text [ italian ] = "Riempire serie..." ; +//STRIP001 Text [ portuguese_brazilian ] = "Preencher Linha..." ; +//STRIP001 Text [ portuguese ] = "Preencher série..." ; +//STRIP001 Text [ finnish ] = "Täyt?rivi..." ; +//STRIP001 Text [ danish ] = "Fyld serie..." ; +//STRIP001 Text [ french ] = "Remplissage de série..." ; +//STRIP001 Text [ swedish ] = "Fyll serie..." ; +//STRIP001 Text [ dutch ] = "Reeksen invullen..." ; +//STRIP001 Text [ spanish ] = "Rellenar fila..." ; +//STRIP001 Text [ english_us ] = "Fill Row..." ; +//STRIP001 Text[ chinese_simplified ] = "充填系列..."; +//STRIP001 Text[ russian ] = "Çàëèâê?ñòðî?.."; +//STRIP001 Text[ polish ] = "Wype³nij wiersz..."; +//STRIP001 Text[ japanese ] = "連続デーã‚?.."; +//STRIP001 Text[ chinese_traditional ] = "å¡«å……åºåˆ—..."; +//STRIP001 Text[ arabic ] = "ÊÚÈÆ?ÓáÓá?.."; +//STRIP001 Text[ greek ] = "ÓõìðëÞñùóç óåéñÜò..."; +//STRIP001 Text[ korean ] = "í–?채우ê¸?.."; +//STRIP001 Text[ turkish ] = "Satýr?doldur..."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Emplena la fila..."; +//STRIP001 Text[ thai ] = "เติมà¹à¸–ว..."; +//STRIP001 Text[ czech ] = "Vyplnit řádek..."; +//STRIP001 Text[ hebrew ] = "Reihe Auffüllen..."; +//STRIP001 Text[ hindi ] = "पंकà¥à¤¤à¤¿ à¤à¤°à¥?.."; +//STRIP001 }; + String STR_NO_NAME_REF + { + Text [ de ] = "#NAME?" ; + Text [ en-US ] = "#NAME?" ; + Text [ x-comment ] = " "; + Text[ pt ] = "#NOME?"; + Text[ ru ] = "#ИМЯ?"; + Text[ el ] = "#NAME?"; + Text[ nl ] = "#NAAM?"; + Text[ fr ] = "#NOM ?"; + Text[ es ] = "#NOMBRE?"; + Text[ fi ] = "#NIMI?"; + Text[ ca ] = "#NAME?"; + Text[ it ] = "#NOME?"; + Text[ da ] = "#NAVN?"; + Text[ sv ] = "#NAMN?"; + Text[ pl ] = "#NAZWA?"; + Text[ pt-BR ] = "#NOME?"; + Text[ th ] = "#ชื่à¸?"; + Text[ ja ] = "#NAME?"; + Text[ ko ] = "#ì´ë¦„?"; + Text[ zh-CN ] = "#NAME?"; + Text[ zh-TW ] = "#NAME?"; + Text[ tr ] = "#AD?"; + Text[ hi-IN ] = "#NAME?"; + Text[ ar ] = "#NAME?"; + Text[ he ] = "#NAME?"; + }; + String STR_NO_ADDIN + { + Text [ de ] = "#ADDIN?" ; + Text [ en-US ] = "#ADDIN?" ; + Text [ x-comment ] = " "; + Text[ pt ] = "#ADDIN?"; + Text[ ru ] = "#ADDIN?"; + Text[ el ] = "#ADDIN?"; + Text[ nl ] = "#ADDIN?"; + Text[ fr ] = "#ADDIN?"; + Text[ es ] = "#ADDIN?"; + Text[ fi ] = "#LISÄOSA?"; + Text[ ca ] = "#ADDIN?"; + Text[ it ] = "#ADDIN?"; + Text[ da ] = "#ADDIN?"; + Text[ sv ] = "#ADDIN?"; + Text[ pl ] = "#DODATEK?"; + Text[ pt-BR ] = "#ADDIN?"; + Text[ th ] = "#ADDIN?"; + Text[ ja ] = "#ADDIN?"; + Text[ ko ] = "#ADDIN?"; + Text[ zh-CN ] = "#ADDIN?"; + Text[ zh-TW ] = "#ADDIN?"; + Text[ tr ] = "#ADDIN?"; + Text[ hi-IN ] = "#ADDIN?"; + Text[ ar ] = "#ADDIN?"; + Text[ he ] = "#ADDIN?"; + }; + String STR_NO_MACRO + { + Text [ de ] = "#MAKRO?" ; + Text [ en-US ] = "#MACRO?" ; + Text [ x-comment ] = " "; + Text[ pt ] = "#MACRO?"; + Text[ ru ] = "#ÐœÐКРОС?"; + Text[ el ] = "#MACRO?"; + Text[ nl ] = "#MACRO?"; + Text[ fr ] = "#MACRO?"; + Text[ es ] = "#MACRO?"; + Text[ fi ] = "#MAKRO?"; + Text[ ca ] = "#MACRO?"; + Text[ it ] = "#MACRO?"; + Text[ da ] = "#MAKRO?"; + Text[ sv ] = "#MAKRO?"; + Text[ pl ] = "#MAKRO?"; + Text[ pt-BR ] = "#MACRO?"; + Text[ th ] = "#MACRO?"; + Text[ ja ] = "#MACRO?"; + Text[ ko ] = "#MACRO?"; + Text[ zh-CN ] = "#å®ï¼Ÿ"; + Text[ zh-TW ] = "#巨集?"; + Text[ tr ] = "#MAKRO?"; + Text[ hi-IN ] = "#MACRO?"; + Text[ ar ] = "#MACRO?"; + Text[ he ] = "#MAKRO?"; + }; +//STRIP001 String STR_UNDO_THESAURUS +//STRIP001 { +//STRIP001 Text = "Thesaurus" ; +//STRIP001 Text [ ENGLISH ] = "Thesaurus" ; +//STRIP001 Text [ english_us ] = "Thesaurus" ; +//STRIP001 Text [ italian ] = "Sinonimi" ; +//STRIP001 Text [ spanish ] = "Diccionario de sinónimos" ; +//STRIP001 Text [ french ] = "Dictionnaire des synonymes" ; +//STRIP001 Text [ dutch ] = "Thesaurus" ; +//STRIP001 Text [ swedish ] = "Synonymordlista" ; +//STRIP001 Text [ danish ] = "Synonymordbog" ; +//STRIP001 Text [ portuguese ] = "Sinónimos" ; +//STRIP001 Text [ portuguese_brazilian ] = "Dicionário de Sinônimos" ; +//STRIP001 Text[ chinese_simplified ] = "åŒä¹‰è¯è¯å…?"; +//STRIP001 Text[ russian ] = "Òåçàóðóñ"; +//STRIP001 Text[ polish ] = "Tezaurus"; +//STRIP001 Text[ japanese ] = "類義語辞å…?"; +//STRIP001 Text[ chinese_traditional ] = "åŒç¾©è©žè©žå…?"; +//STRIP001 Text[ arabic ] = "ÞÇãæ?ÇáãÑÇÏÝÇ?"; +//STRIP001 Text[ greek ] = "Èçóáõñüò ëÝîåùí"; +//STRIP001 Text[ korean ] = "ë™ì˜ì–?ì‚¬ì „"; +//STRIP001 Text[ turkish ] = "Eþanlamlýlar sözlüð?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Tesaurus"; +//STRIP001 Text[ finnish ] = "Synonyymisanasto"; +//STRIP001 Text[ thai ] = "à¸à¸£à¸£à¸–าภิธาน"; +//STRIP001 Text[ czech ] = "SlovnÃk synonym"; +//STRIP001 Text[ hebrew ] = "‮מלי×?× ×¨×“×¤×•×ªâ€?"; +//STRIP001 Text[ hindi ] = "शबà¥à¤¦à¤•à¥‹à¤?"; +//STRIP001 }; +//STRIP001 String STR_FILL_TAB +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Tabellen füllen : Tabellen f³llen */ +//STRIP001 Text = "Tabellen füllen" ; +//STRIP001 Text [ ENGLISH ] = "Fill Tables" ; +//STRIP001 Text [ norwegian ] = "Fill Tables" ; +//STRIP001 Text [ italian ] = "Riempi tabella" ; +//STRIP001 Text [ portuguese_brazilian ] = "Preencher Planilhas" ; +//STRIP001 Text [ portuguese ] = "Preencher folhas" ; +//STRIP001 Text [ finnish ] = "Täyt?taulukot" ; +//STRIP001 Text [ danish ] = "Fyld ark" ; +//STRIP001 Text [ french ] = "Remplissage des feuilles" ; +//STRIP001 Text [ swedish ] = "Fyll tabeller" ; +//STRIP001 Text [ dutch ] = "Werkbladen vullen" ; +//STRIP001 Text [ spanish ] = "Rellenar hojas" ; +//STRIP001 Text [ english_us ] = "Fill Sheets" ; +//STRIP001 Text[ chinese_simplified ] = "充填工作è¡?"; +//STRIP001 Text[ russian ] = "Çàëèâê?ëèñòîâ"; +//STRIP001 Text[ polish ] = "Wype³nij arkusz"; +//STRIP001 Text[ japanese ] = "表ã«é€£ç¶šãƒ‡ãƒ¼ã‚¿ã‚’コピãƒ?"; +//STRIP001 Text[ chinese_traditional ] = "填充工作è¡?"; +//STRIP001 Text[ arabic ] = "ÊÚÈÆ?ÌÏÇæ?"; +//STRIP001 Text[ greek ] = "ÃÝìéóì?ðßíáêá"; +//STRIP001 Text[ korean ] = "시트 채우ê¸?"; +//STRIP001 Text[ turkish ] = "Tablolar?doldur"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Emplena els fulls"; +//STRIP001 Text[ thai ] = "เติมà¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; +//STRIP001 Text[ czech ] = "Vyplnit listy"; +//STRIP001 Text[ hebrew ] = "Tabellen füllen"; +//STRIP001 Text[ hindi ] = "शीटोà¤?को à¤à¤°à¥?"; +//STRIP001 }; + String STR_NO_VALUE + { + Text [ de ] = "#WERT!" ; + Text [ en-US ] = "#VALUE!" ; + Text [ x-comment ] = " "; + Text[ pt ] = "#VALOR!"; + Text[ ru ] = "#ЗÐÐЧЕÐ!"; + Text[ el ] = "#VALUE!"; + Text[ nl ] = "#WAARDE!"; + Text[ fr ] = "#VALEUR !"; + Text[ es ] = "#VALOR!"; + Text[ fi ] = "#ARVO!"; + Text[ ca ] = "#VALUE!"; + Text[ it ] = "#VALORE!"; + Text[ da ] = "#VÆRDI!"; + Text[ sv ] = "#VÄRDE!"; + Text[ pl ] = "#WARTOŚĆ!"; + Text[ pt-BR ] = "#VALOR!"; + Text[ th ] = "#ค่า!"; + Text[ ja ] = "#VALUE!"; + Text[ ko ] = "#VALUE!"; + Text[ zh-CN ] = "#VALUE!"; + Text[ zh-TW ] = "#VALUE!"; + Text[ tr ] = "#DEÄžER!"; + Text[ hi-IN ] = "#VALUE!"; + Text[ ar ] = "#VALUE!"; + Text[ he ] = "#WERT"; + }; +//STRIP001 String STR_UPDATE_SCENARIO +//STRIP001 { +//STRIP001 Text = "Szenario um die markierten Bereiche erweitern?" ; +//STRIP001 Text [ ENGLISH ] = "Add selected areas to current scenario?" ; +//STRIP001 Text [ norwegian ] = "Add selected areas to current scenario?" ; +//STRIP001 Text [ italian ] = "Aggiungere aree selezionate allo scenario?" ; +//STRIP001 Text [ portuguese_brazilian ] = "Adicionar os intervalos selecionados no cenário atual?" ; +//STRIP001 Text [ portuguese ] = "Adicionar áreas seleccionadas ao cenário activo?" ; +//STRIP001 Text [ finnish ] = "Lisätäänk?valinnat nykyiseen skenaarioon?" ; +//STRIP001 Text [ danish ] = "Tilføje markerede områder til scenariet?" ; +//STRIP001 Text [ french ] = "Ajouter les plages sélectionnées au scénario ?" ; +//STRIP001 Text [ swedish ] = "Utöka scenario med de markerade områdena?" ; +//STRIP001 Text [ dutch ] = "Geselecteerde bereiken aan huidig scenario toevoegen?" ; +//STRIP001 Text [ spanish ] = "¿Desea añadir las áreas seleccionadas al escenario actual?" ; +//STRIP001 Text [ english_us ] = "Add selected ranges to current scenario?" ; +//STRIP001 Text[ chinese_simplified ] = "è¦å°†é€‰ä¸çš„åŒºåŸŸåŠ å…¥æ–¹æ¡ˆï¼Ÿ"; +//STRIP001 Text[ russian ] = "Äîáàâèòü âûáðàííû?äèàïàçîí??òåêóùè?ñöåíàðèé?"; +//STRIP001 Text[ polish ] = "Czy doda?zaznaczone zakresy do bie¿¹cego scenariusza?"; +//STRIP001 Text[ japanese ] = "シナリオã«é¸æŠžã—ãŸç¯„å›²ã‚’è¿½åŠ ã—ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "è¦å°‡é¸å–çš„å€åŸŸåŠ 入分æžè—本?"; +//STRIP001 Text[ arabic ] = "åá ÊÑíÏ ÅÖÇÝ?ÇáäØÇÞÇÊ ÇáãÍÏÏ?Åá?ÇáÓíäÇÑíæ¿"; +//STRIP001 Text[ greek ] = "ÅðÝêôáóç óåíáñßïõ êáôÜ ôé?åðéëåãìÝíå?ðåñéï÷Ýò;"; +//STRIP001 Text[ korean ] = "시나리오ë¥?ì„ íƒë?ë²”ìœ„ë§Œí¼ í™•ìž¥í•˜ê² ìŠµë‹ˆê¹?"; +//STRIP001 Text[ turkish ] = "Seçili aralýklar senaryoya eklensin mi?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Voleu afegir les àrees seleccionades a l'escenari actual?"; +//STRIP001 Text[ thai ] = "เพิ่มช่วงที่เลืà¸à¸à¹ƒà¸™à¸ªà¸–านà¸à¸²à¸£à¸“์สมมติปัจจุบันหรืà¸à¹„มà¹?"; +//STRIP001 Text[ czech ] = "PÅ™idat vybrané oblasti k aktuálnÃmu scénáři?"; +//STRIP001 Text[ hebrew ] = "Szenario um die markierten Bereiche erweitern?"; +//STRIP001 Text[ hindi ] = "वरà¥à¤¤à¤®à¤¾à¤?विवरà¤?मेà¤?चà¥à¤¨à¥‡ हà¥à¤?फैलाà¤?को जोड़à¥?"; +//STRIP001 }; +//STRIP001 String STR_ERR_NEWSCENARIO +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Zum Anlegen eines Szenarios müssen die Szenariobereiche markiert werden. : Zum Anlegen eines Szenarios m³ssen die Szenariobereiche markiert werden. */ +//STRIP001 Text = "Zum Anlegen eines Szenarios müssen die Szenariobereiche markiert werden." ; +//STRIP001 Text [ ENGLISH ] = "To create a new scenario you'll have to select the desired scenario areas" ; +//STRIP001 Text [ norwegian ] = "To create a new scenario you'll have to select the desired scenario areas" ; +//STRIP001 Text [ italian ] = "Per creare un nuovo scenario si dovranno selezionare le aree di scenario desiderate." ; +//STRIP001 Text [ portuguese_brazilian ] = "Os intervalos do cenário devem ser selecionados de forma a permitir criar um novo cenário." ; +//STRIP001 Text [ portuguese ] = "Para criar um cenário ?necessário seleccionar as áreas de cenário desejadas." ; +//STRIP001 Text [ finnish ] = "Skenaarioalueet on valittava, jotta voitaisiin luoda uusi skenaario." ; +//STRIP001 Text [ danish ] = "For at oprette et nyt scenario skal du markere scenarieområderne." ; +//STRIP001 Text [ french ] = "Pour créer un nouveau scénario, vous devez sélectionner les plages du scénario." ; +//STRIP001 Text [ swedish ] = "Om du vill skapa ett nytt scenario måste du markera scenarioområdena." ; +//STRIP001 Text [ dutch ] = "Om een nieuw scenario te maken, moet u de gewenste scenariobereiken selecteren." ; +//STRIP001 Text [ spanish ] = "Para crear un escenario hay que seleccionar las áreas de escenario." ; +//STRIP001 Text [ english_us ] = "The scenario ranges must be selected in order to be able to create a new scenario." ; +//STRIP001 Text[ chinese_simplified ] = "è¦å»ºç«‹ä¸€ä¸ªæ–¹æ¡ˆå°±å¿…须先设定一个方案区域ã€?"; +//STRIP001 Text[ russian ] = "Äëÿ ñîçäàí? ñöåíàð? íåîáõîäèìî âûäåëèòü äèàïàçîí?ñöåíàð?."; +//STRIP001 Text[ polish ] = "Aby utworzy?nowy scenariusz, nale¿y wybra?zakresy scenariusza."; +//STRIP001 Text[ japanese ] = "シナリオを作æˆã™ã‚‹ã«ã¯ã€ã‚·ãƒŠãƒªã‚ªç¯„囲を必ãšé¸æŠžã—ã¾ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "è¦å»ºç«‹ä¸€å€‹åˆ†æžè—æœ¬å°±å¿…é ˆå…ˆè¨å®šä¸€å€‹åˆ†æžè—本的å€åŸŸã€?"; +//STRIP001 Text[ arabic ] = "áÅäÔÇÁ ÓíäÇÑí?íÌ?Ãä íÊ?ÊÍÏí?äØÇÞÇÊ ÇáÓíäÇÑí?"; +//STRIP001 Text[ greek ] = "Ãé?ôç äçìéïõñãßá åíüò óåíáñßïõ ðñÝðåé íá åðéëå÷èïýí ïé ðåñéï÷Ýò ôï?"; +//STRIP001 Text[ korean ] = "새로ìš?시나리오ë¥?만들ìˆ?있ë„ë¡?í•˜ë ¤ë©?시나리오 범위가 ì„ íƒë˜ì–´ì•?합니ë‹?"; +//STRIP001 Text[ turkish ] = "Yeni senaryonun oluþturulabilmesi için senaryo aralýklar?iþaretlenmelidir."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Cal seleccionar les àrees de l'escenari per poder crear-ne un de nou."; +//STRIP001 Text[ thai ] = "ต้à¸à¸‡à¹€à¸¥à¸·à¸à¸à¸Šà¹ˆà¸§à¸‡à¸ªà¸–านà¸à¸²à¸£à¸“์สมมติเพื่à¸à¸—ี่จะสามารถสร้างสถานà¸à¸²à¸£à¸“์สมมติใหม่"; +//STRIP001 Text[ czech ] = "MusÃte vybrat oblasti scénáře, aby bylo možné vytvoÅ™it nový scénář."; +//STRIP001 Text[ hebrew ] = "Zum Anlegen eines Szenarios müssen die Szenariobereiche markiert werden."; +//STRIP001 Text[ hindi ] = "नयà¤?विवरà¤?को उतà¥à¤ªà¤¨à¥à¤?करने के पà¥à¤°à¤•à¤¾à¤° से विवरà¤?फैलाà¤?को चà¥à¤¨à¤¨à¤?चाहिà¤?à¥?"; +//STRIP001 }; +//STRIP001 String STR_NOAREASELECTED +//STRIP001 { +//STRIP001 Text = "Kein Bereich markiert." ; +//STRIP001 Text [ ENGLISH ] = "No areas selected." ; +//STRIP001 Text [ norwegian ] = "No areas selected." ; +//STRIP001 Text [ italian ] = "Nessun'area selezionata." ; +//STRIP001 Text [ portuguese_brazilian ] = "Nenhum intervalo foi selecionado." ; +//STRIP001 Text [ portuguese ] = "Nenhuma área seleccionada." ; +//STRIP001 Text [ finnish ] = "Aluetta ei ole valittu." ; +//STRIP001 Text [ danish ] = "Ingen områder er markeret." ; +//STRIP001 Text [ french ] = "Aucune plage n'a ét?sélectionnée." ; +//STRIP001 Text [ swedish ] = "Inget område markerat." ; +//STRIP001 Text [ dutch ] = "Geen bereik geselecteerd." ; +//STRIP001 Text [ spanish ] = "Ninguna área seleccionada." ; +//STRIP001 Text [ english_us ] = "A range has not been selected." ; +//STRIP001 Text[ chinese_simplified ] = "æ²¡æœ‰æ ‡è®°ä»»ä½•åŒºåŸŸã€?"; +//STRIP001 Text[ russian ] = "Íå âûäåëå?äèàïàçîí."; +//STRIP001 Text[ polish ] = "Nie zaznaczono zakresu."; +//STRIP001 Text[ japanese ] = "何もé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "沒有標記任何å€åŸŸã€?"; +//STRIP001 Text[ arabic ] = "áã íÊ?ÊÍÏí?äØÇÞ."; +//STRIP001 Text[ greek ] = "Äå?åðéëÝ÷èçêå ðåñéï÷?"; +//STRIP001 Text[ korean ] = "범위가 ì„ íƒë˜ì§€ 않았습니ë‹?"; +//STRIP001 Text[ turkish ] = "Aralýk seçilmedi."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'ha seleccionat cap àrea."; +//STRIP001 Text[ thai ] = "ยังไม่ได้เลืà¸à¸à¸Šà¹ˆà¸§à¸‡"; +//STRIP001 Text[ czech ] = "Nebyla vybrána oblast."; +//STRIP001 Text[ hebrew ] = "Kein Bereich markiert."; +//STRIP001 Text[ hindi ] = "फैलाà¤?को नहीà¤?चà¥à¤¨à¤¾ है à¥?"; +//STRIP001 }; +//STRIP001 String STR_NEWTABNAMENOTUNIQUE +//STRIP001 { +//STRIP001 Text = "Dieser Tabellenname wurde bereits vergeben." ; +//STRIP001 Text [ ENGLISH ] = "Table name already exists." ; +//STRIP001 Text [ norwegian ] = "Table name already exists." ; +//STRIP001 Text [ italian ] = "Nome tabella gi?esistente." ; +//STRIP001 Text [ portuguese_brazilian ] = "Este nome j?existe." ; +//STRIP001 Text [ portuguese ] = "Este nome j?existe." ; +//STRIP001 Text [ finnish ] = "Täm?nimi on jo käytöss?" ; +//STRIP001 Text [ danish ] = "Dette arknavn eksisterer allerede." ; +//STRIP001 Text [ french ] = "Ce nom existe déj?" ; +//STRIP001 Text [ swedish ] = "Det här tabellnamnet finns redan." ; +//STRIP001 Text [ dutch ] = "Deze naam bestaat reeds." ; +//STRIP001 Text [ spanish ] = "Este nombre ya existe." ; +//STRIP001 Text [ english_us ] = "This name already exists." ; +//STRIP001 Text[ chinese_simplified ] = "这个工作表å称已ç»è¢«åˆ†æ´¾ã€?"; +//STRIP001 Text[ russian ] = "Òàêî?èìÿ óæ?ñóùåñòâóåò."; +//STRIP001 Text[ polish ] = "Ta nazwa tabeli ju?istnieje."; +//STRIP001 Text[ japanese ] = "ã“ã®åå‰ã¯ã™ã§ã«ä½¿ã‚ã‚Œã¦ã„ã¾ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "這個工作表å稱已經被分派ã€?"; +//STRIP001 Text[ arabic ] = "ÇÓ?ÇáÌÏæá åÐ?ãæÌæ?ãÓÈÞÇð."; +//STRIP001 Text[ greek ] = "Áõôü ôï üíïì?ðßíáêá õðÜñ÷å?Þä?"; +//STRIP001 Text[ korean ] = "ê·?ì´ë¦„ì€ ì´ë¯¸ 존재합니ë‹?."; +//STRIP001 Text[ turkish ] = "Bu ad þu an kullanýlýyor."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Aquest nom ja existeix."; +//STRIP001 Text[ thai ] = "ชื่à¸à¸™à¸µà¹‰à¸¡à¸µà¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸?"; +//STRIP001 Text[ czech ] = "Tento název již existuje."; +//STRIP001 Text[ hebrew ] = "Dieser Tabellenname wurde bereits vergeben."; +//STRIP001 Text[ hindi ] = "इस नाà¤?पहिलà¥?से ही असà¥à¤¤à¤¿à¤¤à¥à¤µ मेà¤?है à¥?"; +//STRIP001 }; +//STRIP001 String STR_INVALIDTABNAME +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Ungültiger Tabellenname. : Ung³ltiger Tabellenname. */ +//STRIP001 Text = "Ungültiger Tabellenname." ; +//STRIP001 Text [ ENGLISH ] = "Invalid table name." ; +//STRIP001 Text [ norwegian ] = "Invalid table name." ; +//STRIP001 Text [ italian ] = "Nome tabella non valido." ; +//STRIP001 Text [ portuguese_brazilian ] = "Nome de planilha inválido." ; +//STRIP001 Text [ portuguese ] = "Nome da folha incorrecto." ; +//STRIP001 Text [ finnish ] = "Virheellinen taulukon nimi." ; +//STRIP001 Text [ danish ] = "Ugyldigt arknavn." ; +//STRIP001 Text [ french ] = "Nom de feuille incorrect." ; +//STRIP001 Text [ swedish ] = "Ogiltigt tabellnamn." ; +//STRIP001 Text [ dutch ] = "Ongeldige werkbladnaam." ; +//STRIP001 Text [ spanish ] = "Nombre de la hoja no válido." ; +//STRIP001 Text [ english_us ] = "Invalid sheet name." ; +//STRIP001 Text[ chinese_simplified ] = "工作表åç§°æ— æ•ˆã€‚è¯·ç”¨æ•°å—或å—æ¯ä»£æ›¿ã€?"; +//STRIP001 Text[ russian ] = "Íåäîïóñòèìîå èìÿ ëèñò?"; +//STRIP001 Text[ polish ] = "Nieprawid³owa nazwa arkusza."; +//STRIP001 Text[ japanese ] = "表åã®è¡¨è¨˜ã«å•é¡ŒãŒã‚ã‚Šã¾ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "工作表å稱無效。請用數å—或å—æ¯ä»£æ›¿ã€?"; +//STRIP001 Text[ arabic ] = "ÇÓ?ÌÏæá Ûí?ÕÇáÍ."; +//STRIP001 Text[ greek ] = "¢êõñ?üíïì?ðßíáêá."; +//STRIP001 Text[ korean ] = "잘못ë?시트 ì´ë¦„"; +//STRIP001 Text[ turkish ] = "Geçersiz tablo ad?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "El nom del full no és vàlid."; +//STRIP001 Text[ thai ] = "ชื่à¸à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™à¹„ม่ถูà¸à¸•à¹‰à¸à¸?"; +//STRIP001 Text[ czech ] = "Neplatný název listu."; +//STRIP001 Text[ hebrew ] = "Ungültiger Tabellenname."; +//STRIP001 Text[ hindi ] = "शीटॠका नाà¤?अमानà¥à¤¯ है à¥?"; +//STRIP001 }; + String STR_SCENARIO + { + Text [ de ] = "Szenario" ; + Text [ en-US ] = "Scenario" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Cenário"; + Text[ ru ] = "Сценарий"; + Text[ el ] = "ΣενάÏιο"; + Text[ nl ] = "Scenario"; + Text[ fr ] = "Scénario"; + Text[ es ] = "Escenario"; + Text[ fi ] = "Skenaario"; + Text[ ca ] = "Escenari"; + Text[ it ] = "Scenario"; + Text[ da ] = "Scenario"; + Text[ sv ] = "Scenario"; + Text[ pl ] = "Scenariusz"; + Text[ pt-BR ] = "Cenário"; + Text[ th ] = "สถานà¸à¸²à¸£à¸“์สมมติ"; + Text[ ja ] = "シナリオ"; + Text[ ko ] = "시나리오"; + Text[ zh-CN ] = "方案"; + Text[ zh-TW ] = "分æžè—本"; + Text[ tr ] = "Senaryo"; + Text[ hi-IN ] = "विवरण"; + Text[ ar ] = "السيناريو"; + Text[ he ] = "Szenario"; + }; +//STRIP001 String STR_PIVOT_TABLE +//STRIP001 { +//STRIP001 Text = "Datenpilot" ; +//STRIP001 Text [ ENGLISH ] = "Data Pilot" ; +//STRIP001 Text [ norwegian ] = "Data Pilot" ; +//STRIP001 Text [ italian ] = "DataPilot" ; +//STRIP001 Text [ portuguese_brazilian ] = "Tabela Dinâmica" ; +//STRIP001 Text [ portuguese ] = "Piloto de Dados" ; +//STRIP001 Text [ finnish ] = "Tietojen ohjaus" ; +//STRIP001 Text [ danish ] = "DataPilot" ; +//STRIP001 Text [ french ] = "Pilote de données" ; +//STRIP001 Text [ swedish ] = "Datapilot" ; +//STRIP001 Text [ dutch ] = "DataPiloot" ; +//STRIP001 Text [ spanish ] = "Piloto de datos" ; +//STRIP001 Text [ english_us ] = "DataPilot" ; +//STRIP001 Text[ chinese_simplified ] = "æ•°æ®åŠ©ç†"; +//STRIP001 Text[ russian ] = "Ñâîäíàÿ òàáëèö?"; +//STRIP001 Text[ polish ] = "Pilot danych"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆ"; +//STRIP001 Text[ chinese_traditional ] = "資料助ç†"; +//STRIP001 Text[ arabic ] = "ãÑÔÏ ÇáÈíÇäÇÊ"; +//STRIP001 Text[ greek ] = "Ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?"; +//STRIP001 Text[ turkish ] = "Veri pilotu"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "DataPilot"; +//STRIP001 Text[ thai ] = "ข้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸‡"; +//STRIP001 Text[ czech ] = "KontingenÄnà tabulka"; +//STRIP001 Text[ hebrew ] = "Datenpilot"; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटà¥"; +//STRIP001 }; + // Texte fuer Ueberschriften bei Teilergebnis etc. + String STR_FUN_TEXT_SUM + { + Text [ de ] = "Summe" ; + Text [ en-US ] = "Sum" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Soma"; + Text[ ru ] = "Сумма"; + Text[ el ] = "ΆθÏοισμα"; + Text[ nl ] = "Som"; + Text[ fr ] = "Somme"; + Text[ es ] = "Suma"; + Text[ fi ] = "Summa"; + Text[ ca ] = "Suma"; + Text[ it ] = "Somma"; + Text[ da ] = "Sum"; + Text[ sv ] = "Summa"; + Text[ pl ] = "Suma"; + Text[ pt-BR ] = "Soma"; + Text[ th ] = "ผลรวม"; + Text[ ja ] = "åˆè¨ˆ"; + Text[ ko ] = "합계"; + Text[ zh-CN ] = "总计"; + Text[ zh-TW ] = "å°è¨ˆ"; + Text[ tr ] = "Toplam"; + Text[ hi-IN ] = "जोड़"; + Text[ ar ] = "مجموع"; + Text[ he ] = "‮סכו×‬"; + }; + String STR_FUN_TEXT_COUNT + { + Text [ de ] = "Anzahl" ; + Text [ en-US ] = "Count" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Contar números"; + Text[ ru ] = "КоличеÑтво"; + Text[ el ] = "Πλήθος"; + Text[ nl ] = "Aantal"; + Text[ fr ] = "Nombre"; + Text[ es ] = "Cantidad"; + Text[ fi ] = "LASKE"; + Text[ ca ] = "Compta"; + Text[ it ] = "ContaNumeri"; + Text[ da ] = "Tæl"; + Text[ sv ] = "Antal"; + Text[ pl ] = "Liczba"; + Text[ pt-BR ] = "Contagem"; + Text[ th ] = "นับ"; + Text[ ja ] = "ç·æ•°"; + Text[ ko ] = "ê°’"; + Text[ zh-CN ] = "æ•°ç›®"; + Text[ zh-TW ] = "數目"; + Text[ tr ] = "Say"; + Text[ hi-IN ] = "गिनती"; + Text[ ar ] = "عدد"; + Text[ he ] = "Anzahl"; + }; + String STR_FUN_TEXT_COUNT2 + { + Text [ de ] = "Anzahl2" ; + Text [ en-US ] = "CountA" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Contar valores"; + Text[ ru ] = "КоличеÑтво2"; + Text[ el ] = "Πλήθος2"; + Text[ nl ] = "Aantal2"; + Text[ fr ] = "Nombre2"; + Text[ es ] = "Cantidad2"; + Text[ fi ] = "LaskeA"; + Text[ ca ] = "CountA"; + Text[ it ] = "ContaValori"; + Text[ da ] = "Tælv"; + Text[ sv ] = "Antalv"; + Text[ pl ] = "Liczba2"; + Text[ pt-BR ] = "Cont.Valores"; + Text[ th ] = "นับA"; + Text[ ja ] = "ç·æ•°2"; + Text[ ko ] = "카운트2"; + Text[ zh-CN ] = "æ•°ç›®2"; + Text[ zh-TW ] = "數目 2"; + Text[ tr ] = "SayA"; + Text[ hi-IN ] = "गिनती à¤"; + Text[ ar ] = "عدد الأرقام"; + Text[ he ] = "Anzahl2"; + }; + String STR_FUN_TEXT_AVG + { + Text [ de ] = "Mittelwert" ; + Text [ en-US ] = "Average" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Média"; + Text[ ru ] = "Среднее значение"; + Text[ el ] = "ÎœÎση τιμή"; + Text[ nl ] = "Gemiddelde"; + Text[ fr ] = "Moyenne"; + Text[ es ] = "Promedio"; + Text[ fi ] = "Keskiarvo"; + Text[ ca ] = "Mitjana"; + Text[ it ] = "Media"; + Text[ da ] = "Middel"; + Text[ sv ] = "Medel"; + Text[ pl ] = "Åšrednia"; + Text[ pt-BR ] = "Média"; + Text[ th ] = "เฉลี่ย"; + Text[ ja ] = "å¹³å‡å€¤"; + Text[ ko ] = "í‰ê· ê°’"; + Text[ zh-CN ] = "å¹³å‡å€¼"; + Text[ zh-TW ] = "å¹³å‡å€¼"; + Text[ tr ] = "Ortalama "; + Text[ hi-IN ] = "माधà¥à¤¯"; + Text[ ar ] = "المعدل"; + Text[ he ] = "Mittelwert"; + }; + String STR_FUN_TEXT_MAX + { + Text [ de ] = "Max" ; + Text [ en-US ] = "Max" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Máx."; + Text[ ru ] = "МакÑимум"; + Text[ el ] = "Μεγ"; + Text[ nl ] = "Max"; + Text[ fr ] = "Max"; + Text[ es ] = "Máx"; + Text[ fi ] = "MAKS"; + Text[ ca ] = "Mà x"; + Text[ it ] = "Max"; + Text[ da ] = "Maks"; + Text[ sv ] = "Max"; + Text[ pl ] = "Maks"; + Text[ pt-BR ] = "Máx"; + Text[ th ] = "มาà¸à¸—ี่สุด"; + Text[ ja ] = "最大"; + Text[ ko ] = "최대"; + Text[ zh-CN ] = "最大"; + Text[ zh-TW ] = "最大"; + Text[ tr ] = "Max"; + Text[ hi-IN ] = "अधिकतम"; + Text[ ar ] = "أقصى"; + Text[ he ] = "Max"; + }; + String STR_FUN_TEXT_MIN + { + Text [ de ] = "Min" ; + Text [ en-US ] = "Min" ; + Text [ x-comment ] = " "; + Text[ pt ] = "MÃn."; + Text[ ru ] = "Минимум"; + Text[ el ] = "Ελαχ"; + Text[ nl ] = "Min"; + Text[ fr ] = "Min"; + Text[ es ] = "MÃn"; + Text[ fi ] = "MIN"; + Text[ ca ] = "MÃn"; + Text[ it ] = "Min"; + Text[ da ] = "Min"; + Text[ sv ] = "Min"; + Text[ pl ] = "Min"; + Text[ pt-BR ] = "MÃn"; + Text[ th ] = "น้à¸à¸¢à¸—ี่สุด"; + Text[ ja ] = "最å°"; + Text[ ko ] = "최소"; + Text[ zh-CN ] = "最å°"; + Text[ zh-TW ] = "最å°"; + Text[ tr ] = "Min"; + Text[ hi-IN ] = "नà¥à¤¯à¥‚नतम"; + Text[ ar ] = "أدنى"; + Text[ he ] = "Min"; + }; + String STR_FUN_TEXT_PRODUCT + { + Text [ de ] = "Produkt" ; + Text [ en-US ] = "Product" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Produto"; + Text[ ru ] = "Произведение"; + Text[ el ] = "Γινόμενο"; + Text[ nl ] = "Product"; + Text[ fr ] = "Produit"; + Text[ es ] = "Producto"; + Text[ fi ] = "Tulo"; + Text[ ca ] = "Producte"; + Text[ it ] = "Prodotto"; + Text[ da ] = "Produkt"; + Text[ sv ] = "Produkt"; + Text[ pl ] = "Iloczyn"; + Text[ pt-BR ] = "Produto"; + Text[ th ] = "ผลิตภัณฑ์"; + Text[ ja ] = "ç©"; + Text[ ko ] = "ê³±"; + Text[ zh-CN ] = "乘积"; + Text[ zh-TW ] = "乘ç©"; + Text[ tr ] = "Çarpım"; + Text[ hi-IN ] = "Product"; + Text[ ar ] = "Øاصل الضرب"; + Text[ he ] = "Produkt"; + }; + String STR_FUN_TEXT_STDDEV + { + Text [ de ] = "StAbw" ; + Text [ en-US ] = "StDev" ; + Text [ x-comment ] = " "; + Text[ pt ] = "DesvP"; + Text[ ru ] = "Смещенное отклонение"; + Text[ el ] = "StDev"; + Text[ nl ] = "StAfw"; + Text[ fr ] = "Ecartype"; + Text[ es ] = "DevNorm"; + Text[ fi ] = "KESKIHAJONTA"; + Text[ ca ] = "StDev"; + Text[ it ] = "Dev.St"; + Text[ da ] = "Stdafv"; + Text[ sv ] = "StdAv"; + Text[ pl ] = "OdchStd"; + Text[ pt-BR ] = "DesvPad"; + Text[ th ] = "StDev"; + Text[ ja ] = "標準åå·®(標本)"; + Text[ ko ] = "StDev"; + Text[ zh-CN ] = "æ ‡å‡†åå·®(æŠ½æ ·)"; + Text[ zh-TW ] = "標準åå·®(抽樣)"; + Text[ tr ] = "StSapma"; + Text[ hi-IN ] = "StDev"; + Text[ ar ] = "StDev"; + Text[ he ] = "StAbw"; + }; + String STR_FUN_TEXT_VAR + { + Text [ de ] = "Varianz" ; + Text [ en-US ] = "Var" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Variância"; + Text[ ru ] = "Ð¡Ð¼ÐµÑ‰ÐµÐ½Ð½Ð°Ñ Ð´Ð¸ÑперÑиÑ"; + Text[ el ] = "Var"; + Text[ nl ] = "Variantie"; + Text[ fr ] = "Var"; + Text[ es ] = "VAR"; + Text[ fi ] = "Var"; + Text[ ca ] = "Var"; + Text[ it ] = "Varianza"; + Text[ da ] = "Varians"; + Text[ sv ] = "Varians"; + Text[ pl ] = "Wariancja"; + Text[ pt-BR ] = "Var"; + Text[ th ] = "Var"; + Text[ ja ] = "分散"; + Text[ ko ] = "분산"; + Text[ zh-CN ] = "方差"; + Text[ zh-TW ] = "方差"; + Text[ tr ] = "DeÄŸiÅŸken"; + Text[ hi-IN ] = "Var"; + Text[ ar ] = "Var"; + Text[ he ] = "Varianz"; + }; + /* String STR_GOALSEEK + { + Text [ de ] = "ZIELWERTSUCHE"; + Text [ en-US ] = "GOAL SEEK"; + }; +*/ + String STR_NOCHARTATCURSOR + { + Text [ de ] = "Kein Diagramm an dieser Position gefunden." ; + Text [ en-US ] = "No chart found at this position." ; + Text [ x-comment ] = " "; + Text[ pt ] = "Nenhum gráfico encontrado nesta posição."; + Text[ ru ] = "Диаграмма в Ñтой позиции не найдена."; + Text[ el ] = "Δεν βÏÎθηκε διάγÏαμμα σε αυτή τη θÎση."; + Text[ nl ] = "Geen diagram op deze positie gevonden."; + Text[ fr ] = "Aucun diagramme trouvé à cet emplacement"; + Text[ es ] = "No se ha encontrado ningún diagrama en esta posición."; + Text[ fi ] = "Tästä sijainnista ei löytynyt kaaviota."; + Text[ ca ] = "No s'ha trobat cap diagrama en aquesta posició."; + Text[ it ] = "Non è stato trovato nessun diagramma in questa posizione."; + Text[ da ] = "Der blev ikke fundet et diagram pÃ¥ denne position.."; + Text[ sv ] = "Inget diagram i denna position."; + Text[ pl ] = "W tym miejscu nie znaleziono żadnego wykresu."; + Text[ pt-BR ] = "Não há gráfico nesta posição."; + Text[ th ] = "ไม่พบà¹à¸œà¸™à¸ ูมิที่ตำà¹à¸«à¸™à¹ˆà¸‡à¸™à¸µà¹‰"; + Text[ ja ] = "ã“ã®ä½ç½®ã«ã‚°ãƒ©ãƒ•ã¯ã‚ã‚Šã¾ã›ã‚“。"; + Text[ ko ] = "ì´ ìœ„ì¹˜ì—ì„œ 차트를 찾지 못했습니다."; + Text[ zh-CN ] = "在这个ä½ç½®æ²¡æœ‰æ‰¾åˆ°å›¾è¡¨ã€‚"; + Text[ zh-TW ] = "在這個ä½ç½®æ²’有找到圖表。"; + Text[ tr ] = "Bu konumda bir ÅŸema bulunamadı."; + Text[ hi-IN ] = "इस सà¥à¤¥à¤¾à¤¨ में कोई चारà¥à¤Ÿ पà¥à¤°à¤¾à¤ªà¥à¤¤ नहीं हà¥à¤† ।"; + Text[ ar ] = "تعذر العثور على رسم بياني ÙÙŠ هذا الموضع."; + Text[ he ] = "Kein Diagramm an dieser Position gefunden."; + }; +//STRIP001 String STR_PIVOT_NOTFOUND +//STRIP001 { +//STRIP001 Text = "Keine Datenpilot-Tabelle an dieser Position gefunden." ; +//STRIP001 Text [ ENGLISH ] = "No Data Pilot Table at this position." ; +//STRIP001 Text [ norwegian ] = "No Data Pilot Table at this position." ; +//STRIP001 Text [ italian ] = "In questa punto non ?stata trovata una tabella DataPilot" ; +//STRIP001 Text [ portuguese_brazilian ] = "Não h?Tabela Dinâmica nesta posição." ; +//STRIP001 Text [ portuguese ] = "Não existe Piloto de Dados nesta posição." ; +//STRIP001 Text [ finnish ] = "Täst?sijainnista ei löytynyt tietojen ohjaustaulukkoa." ; +//STRIP001 Text [ danish ] = "Der blev ikke fundet en DataPilot-tabel p?denne position." ; +//STRIP001 Text [ french ] = "Aucune table du pilote de données n'a ét?trouvée ?cet emplacement." ; +//STRIP001 Text [ swedish ] = "Ingen Datapilot-tabell hittades vid denna position." ; +//STRIP001 Text [ dutch ] = "Geen DataPiloot-tabel op deze positie gevonden." ; +//STRIP001 Text [ spanish ] = "No se ha encontrado ninguna tabla del Piloto de Datos en esta posición." ; +//STRIP001 Text [ english_us ] = "No DataPilot table found at this position." ; +//STRIP001 Text[ chinese_simplified ] = "在这个ä½ç½®æ²¡æœ‰æ‰¾åˆ°æ•°æ®åŠ©ç†å·¥ä½œè¡¨ã€?"; +//STRIP001 Text[ russian ] = "Ñâîäíàÿ òàáëèö??ýòîé ïîçèöè?íå íàéäåí?"; +//STRIP001 Text[ polish ] = "W tym miejscu nie znaleziono tabeli Pilota danych."; +//STRIP001 Text[ japanese ] = "ã“ã®ä½ç½®ã«ãƒ‡ãƒ¼ã‚¿ãƒ‘イãƒãƒƒãƒˆã®è¡¨ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "在這個ä½ç½®æ²’有找到資料助ç†å·¥ä½œè¡¨ã€?"; +//STRIP001 Text[ arabic ] = "ÊÚÐÑ ÇáÚËæÑ Úá?ÌÏæá ãÑÔÏ ÇáÈíÇäÇÊ Ýí åÐ?ÇáãæÖÚ."; +//STRIP001 Text[ greek ] = "Äå?âñÝèçê?ðßíáêá?ðéëüôï?äåäïìÝíù?óå áõôÞ ôç èÝóç."; +//STRIP001 Text[ korean ] = "ì?위치ì—ì„œ ë°ì´í„?파ì¼ëŸ?표를 찾지 못했습니ë‹?"; +//STRIP001 Text[ turkish ] = "Bu konumda bir Veri pilotu tablosu bulunamad?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'ha trobat cap taula del DataPilot en aquesta posici?"; +//STRIP001 Text[ thai ] = "ไม่พบตารางข้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸‡à¸—ี่ตำà¹à¸«à¸™à¹ˆà¸‡à¸™à¸µà¹?"; +//STRIP001 Text[ czech ] = "Na této pozici nebyla nalezena žádná KontingenÄnà tabulka"; +//STRIP001 Text[ hebrew ] = "Keine Datenpilot-Tabelle an dieser Position gefunden."; +//STRIP001 Text[ hindi ] = "इस सà¥à¤¥à¤¾à¤?मेà¤?कोà¤?ड़ॉटà¤?पैलटà¥?सारणी पà¥à¤°à¤¾à¤ªà¥à¤?नहीà¤?हà¥à¤?à¥?"; +//STRIP001 }; + String STR_ERROR_STR + { + Text [ de ] = "Err:" ; + Text [ en-US ] = "Err:" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Err:"; + Text[ ru ] = "Ошибка:"; + Text[ el ] = "Σφάλμα:"; + Text[ nl ] = "Err:"; + Text[ fr ] = "Err :"; + Text[ es ] = "Err:"; + Text[ fi ] = "Virhe:"; + Text[ ca ] = "Err:"; + Text[ it ] = "Err:"; + Text[ da ] = "Err:"; + Text[ sv ] = "Err:"; + Text[ pl ] = "BÅ‚Ä…d:"; + Text[ pt-BR ] = "Err:"; + Text[ th ] = "Err:"; + Text[ ja ] = "エラー:"; + Text[ ko ] = "오류:"; + Text[ zh-CN ] = "错误:"; + Text[ zh-TW ] = "錯誤:"; + Text[ tr ] = "Hata:"; + Text[ hi-IN ] = "गलती:"; + Text[ ar ] = "خطأ:"; + Text[ he ] = "Err:"; + }; + String STR_NV_STR + { + Text [ de ] = "#NV" ; + // Text[danish_wrong] = "#IKKE TILGÆNGELIG"; /* zu lang, muss in eine Zelle passen */ + Text [ en-US ] = "#N/A" ; + Text [ x-comment ] = " "; + Text[ pt ] = "#ND"; + Text[ ru ] = "#Ð/Д"; + Text[ el ] = "#N/A"; + Text[ nl ] = "#NB"; + Text[ fr ] = "#NA"; + Text[ es ] = "#N/A"; + Text[ fi ] = "#N/A"; + Text[ ca ] = "#N/A"; + Text[ it ] = "#N/D"; + Text[ da ] = "#IKKE.TILGÆNGELIG"; + Text[ sv ] = "#Saknas"; + Text[ pl ] = "#NIE DOTYCZY"; + Text[ pt-BR ] = "#N/D"; + Text[ th ] = "#N/A"; + Text[ ja ] = "#N/A"; + Text[ ko ] = "#N/A"; + Text[ zh-CN ] = "#N/V"; + Text[ zh-TW ] = "#N/V"; + Text[ tr ] = "#YOK"; + Text[ hi-IN ] = "#N/A"; + Text[ ar ] = "#N/A"; + Text[ he ] = "#NV"; + }; + String STR_NOREF_STR + { + Text [ de ] = "#BEZUG!" ; + // Text[danish_wrong] = "#IKKE TILGÆNGELIG"; /* zu lang, muss in eine Zelle passen */ + Text [ en-US ] = "#REF!" ; + Text [ x-comment ] = " "; + Text[ pt ] = "#REF!"; + Text[ ru ] = "#ССЫЛ!"; + Text[ el ] = "#REF!"; + Text[ nl ] = "#VERW!"; + Text[ fr ] = "#REF!"; + Text[ es ] = "#REF!"; + Text[ fi ] = "#VIITTAUS!"; + Text[ ca ] = "#REF!"; + Text[ it ] = "#RIF!"; + Text[ da ] = "#REF!"; + Text[ sv ] = "#REF!"; + Text[ pl ] = "#ODWOÅANIE!"; + Text[ pt-BR ] = "#REF!"; + Text[ th ] = "#REF!"; + Text[ ja ] = "#REF!"; + Text[ ko ] = "#REF!"; + Text[ zh-CN ] = "#REF!"; + Text[ zh-TW ] = "#REF!"; + Text[ tr ] = "#REF!"; + Text[ hi-IN ] = "#REF!"; + Text[ ar ] = "#REF!"; + Text[ he ] = "#BEZUG"; + }; +//STRIP001 String STR_EMPTYDATA +//STRIP001 { +//STRIP001 Text = "(leer)" ; +//STRIP001 Text [ ENGLISH ] = "(empty)" ; +//STRIP001 Text [ norwegian ] = "(empty)" ; +//STRIP001 Text [ italian ] = "(vuoto)" ; +//STRIP001 Text [ portuguese_brazilian ] = "(vazio)" ; +//STRIP001 Text [ portuguese ] = "(vazio)" ; +//STRIP001 Text [ finnish ] = "(tyhj?" ; +//STRIP001 Text [ danish ] = "(tom)" ; +//STRIP001 Text [ french ] = "(vide)" ; +//STRIP001 Text [ swedish ] = "(tom)" ; +//STRIP001 Text [ dutch ] = "(leeg)" ; +//STRIP001 Text [ spanish ] = "(vacío)" ; +//STRIP001 Text [ english_us ] = "(empty)" ; +//STRIP001 Text[ chinese_simplified ] = "(空缺)"; +//STRIP001 Text[ russian ] = "(ïóñò?"; +//STRIP001 Text[ polish ] = "(pusty)"; +//STRIP001 Text[ japanese ] = "(空白)"; +//STRIP001 Text[ chinese_traditional ] = "(空缺)"; +//STRIP001 Text[ arabic ] = "(ÝÇÑÛ)"; +//STRIP001 Text[ greek ] = "(êåíü)"; +//STRIP001 Text[ korean ] = "(ë¹?"; +//STRIP001 Text[ turkish ] = "(bo?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "(buit)"; +//STRIP001 Text[ thai ] = "(ว่าง)"; +//STRIP001 Text[ czech ] = "(prázdné)"; +//STRIP001 Text[ hebrew ] = "(leer)"; +//STRIP001 Text[ hindi ] = "(खाली)"; +//STRIP001 }; +//STRIP001 String STR_PRINT_INVALID_AREA +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Ungültiger Druckbereich : Ung³ltiger Druckbereich */ +//STRIP001 Text = "Ungültiger Druckbereich" ; +//STRIP001 Text [ ENGLISH ] = "Invalid print area" ; +//STRIP001 Text [ norwegian ] = "Invalid print area" ; +//STRIP001 Text [ italian ] = "Area di stampa non valida" ; +//STRIP001 Text [ portuguese_brazilian ] = "Intervalo de impressão inválido" ; +//STRIP001 Text [ portuguese ] = "Área de impressão não válida" ; +//STRIP001 Text [ finnish ] = "Virheellinen tulostusalue" ; +//STRIP001 Text [ danish ] = "Ugyldigt udskriftsområde" ; +//STRIP001 Text [ french ] = "Zone d'impression non valide" ; +//STRIP001 Text [ swedish ] = "Ogiltigt utskriftsområde" ; +//STRIP001 Text [ dutch ] = "Ongeldig afdrukbereik" ; +//STRIP001 Text [ spanish ] = "Área de impresión no válida" ; +//STRIP001 Text [ english_us ] = "Invalid print range" ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ•ˆçš„æ‰“å°åŒºåŸ?"; +//STRIP001 Text[ russian ] = "Íåäîïóñòèì? îáëàñò?ïå÷àòè"; +//STRIP001 Text[ polish ] = "Nieprawid³owy zakres wydruku"; +//STRIP001 Text[ japanese ] = "å°åˆ·ç¯„囲ãŒæ£ã—ãã‚ã‚Šã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "無效的列å°å€åŸ?"; +//STRIP001 Text[ arabic ] = "äØÇÞ ØÈÇÚ?Ûí?ÕÇáÍ"; +//STRIP001 Text[ greek ] = "¢êõñ?ðåñéï÷?åêôýðùóç?"; +//STRIP001 Text[ korean ] = "잘못ë?ì¸ì‡„ 범위"; +//STRIP001 Text[ turkish ] = "Geçersiz yazdýrma aralýð?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "L'àrea d'impressi?no és vàlida"; +//STRIP001 Text[ thai ] = "ช่วงà¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œà¹„ม่ถูà¸à¸•à¹‰à¸à¸‡"; +//STRIP001 Text[ czech ] = "Neplatný rozsah tisku"; +//STRIP001 Text[ hebrew ] = "Ungültiger Druckbereich"; +//STRIP001 Text[ hindi ] = "अमानà¥à¤¯ छपाई फैलाà¤?"; +//STRIP001 }; +//STRIP001 String STR_PAGESTYLE +//STRIP001 { +//STRIP001 Text = "Seitenvorlage" ; +//STRIP001 Text [ ENGLISH ] = "Page Style" ; +//STRIP001 Text [ norwegian ] = "Page Style" ; +//STRIP001 Text [ italian ] = "Modello di pagina" ; +//STRIP001 Text [ portuguese_brazilian ] = "Estilo da Página" ; +//STRIP001 Text [ portuguese ] = "Estilo de página" ; +//STRIP001 Text [ finnish ] = "Sivun tyyli" ; +//STRIP001 Text [ danish ] = "Sidetypografi" ; +//STRIP001 Text [ french ] = "Style de page" ; +//STRIP001 Text [ swedish ] = "Sidformatmall" ; +//STRIP001 Text [ dutch ] = "Pagina-opmaakprofiel" ; +//STRIP001 Text [ spanish ] = "Estilo de página" ; +//STRIP001 Text [ english_us ] = "Page Style" ; +//STRIP001 Text[ chinese_simplified ] = "页é¢æ ·å¼"; +//STRIP001 Text[ russian ] = "Ñòèë?ñòðàíèöû"; +//STRIP001 Text[ polish ] = "Styl strony"; +//STRIP001 Text[ japanese ] = "ページスタイãƒ?"; +//STRIP001 Text[ chinese_traditional ] = "é é¢æ¨£å¼"; +//STRIP001 Text[ arabic ] = "äã?ÕÝÍÉ"; +//STRIP001 Text[ greek ] = "Ðñüôõð?óåëßäá?"; +//STRIP001 Text[ korean ] = "페ì´ì§€ 스타ì?"; +//STRIP001 Text[ turkish ] = "Sayfa biçimi"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Estil de la pàgina"; +//STRIP001 Text[ thai ] = "ลัà¸à¸©à¸“ะหน้า"; +//STRIP001 Text[ czech ] = "Styl stránky"; +//STRIP001 Text[ hebrew ] = "â€®×¡×’× ×•×Ÿâ€?"; +//STRIP001 Text[ hindi ] = "पृषà¥à¤?शैली"; +//STRIP001 }; +//STRIP001 String STR_HEADER +//STRIP001 { +//STRIP001 Text = "Kopfzeile" ; +//STRIP001 Text [ ENGLISH ] = "Header" ; +//STRIP001 Text [ norwegian ] = "Header" ; +//STRIP001 Text [ italian ] = "Riga d'intestazione" ; +//STRIP001 Text [ portuguese_brazilian ] = "Cabeçalho" ; +//STRIP001 Text [ portuguese ] = "Cabeçalho" ; +//STRIP001 Text [ finnish ] = "Ylätunniste" ; +//STRIP001 Text [ danish ] = "Sidehoved" ; +//STRIP001 Text [ french ] = "En-tête" ; +//STRIP001 Text [ swedish ] = "Sidhuvud" ; +//STRIP001 Text [ dutch ] = "Koptekst" ; +//STRIP001 Text [ spanish ] = "Encabezamiento" ; +//STRIP001 Text [ english_us ] = "Header" ; +//STRIP001 Text[ chinese_simplified ] = "页眉"; +//STRIP001 Text[ russian ] = "Âåðõíè?êîëîíòèòóë"; +//STRIP001 Text[ polish ] = "Nag³ówek"; +//STRIP001 Text[ japanese ] = "ヘッダ"; +//STRIP001 Text[ chinese_traditional ] = "é 首"; +//STRIP001 Text[ arabic ] = "ÑÃ?ÇáÕÝÍÉ"; +//STRIP001 Text[ greek ] = "Êåöáëßäá"; +//STRIP001 Text[ korean ] = "머리글"; +//STRIP001 Text[ turkish ] = "Üstbilgi"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Capçalera"; +//STRIP001 Text[ thai ] = "หัวà¸à¸£à¸°à¸”าà¸?"; +//STRIP001 Text[ czech ] = "ZáhlavÃ"; +//STRIP001 Text[ hebrew ] = "‮כותר×?×¢×œ×™×•× ×”â€?"; +//STRIP001 Text[ hindi ] = "पृषà¥à¤?के ऊपà¤?की टीका"; +//STRIP001 }; +//STRIP001 String STR_FOOTER +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Fußzeile : Fu˜zeile */ +//STRIP001 Text = "Fußzeile" ; +//STRIP001 Text [ ENGLISH ] = "Footer" ; +//STRIP001 Text [ norwegian ] = "Footer" ; +//STRIP001 Text [ italian ] = "Pi?di pagina" ; +//STRIP001 Text [ portuguese_brazilian ] = "Rodap?" ; +//STRIP001 Text [ portuguese ] = "Rodap?" ; +//STRIP001 Text [ finnish ] = "Alatunniste" ; +//STRIP001 Text [ danish ] = "Sidefod" ; +//STRIP001 Text [ french ] = "Pied de page" ; +//STRIP001 Text [ swedish ] = "Sidfot" ; +//STRIP001 Text [ dutch ] = "Voettekst" ; +//STRIP001 Text [ spanish ] = "Pie de página" ; +//STRIP001 Text [ english_us ] = "Footer" ; +//STRIP001 Text[ chinese_simplified ] = "页脚"; +//STRIP001 Text[ russian ] = "Íèæíèé êîëîíòèòóë"; +//STRIP001 Text[ polish ] = "Stopka"; +//STRIP001 Text[ japanese ] = "フッã‚?"; +//STRIP001 Text[ chinese_traditional ] = "é å°¾"; +//STRIP001 Text[ arabic ] = "ÊÐíí?ÇáÕÝÍÉ"; +//STRIP001 Text[ greek ] = "ÕðïóÝëéä?"; +//STRIP001 Text[ korean ] = "바닥글"; +//STRIP001 Text[ turkish ] = "Altbilgi"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Peu de pàgina"; +//STRIP001 Text[ thai ] = "ท้ายà¸à¸£à¸°à¸”าษ"; +//STRIP001 Text[ czech ] = "ZápatÃ"; +//STRIP001 Text[ hebrew ] = "‮כותר×?×ª×—×ª×•× ×”â€?"; +//STRIP001 Text[ hindi ] = "पृषà¥à¤?के अधोà¤à¤¾à¤— की टीका"; +//STRIP001 }; +//STRIP001 String STR_TEXTATTRS +//STRIP001 { +//STRIP001 Text = "Textattribute" ; +//STRIP001 Text [ ENGLISH ] = "Text Attributes" ; +//STRIP001 Text [ norwegian ] = "Text Attributes" ; +//STRIP001 Text [ italian ] = "Attributi di testo" ; +//STRIP001 Text [ portuguese_brazilian ] = "Atributos de Texto" ; +//STRIP001 Text [ portuguese ] = "Atributos de texto" ; +//STRIP001 Text [ finnish ] = "Tekstin ominaisuudet" ; +//STRIP001 Text [ danish ] = "Tekstattributter" ; +//STRIP001 Text [ french ] = "Attributs de texte" ; +//STRIP001 Text [ swedish ] = "Textattribut" ; +//STRIP001 Text [ dutch ] = "Tekstattributen" ; +//STRIP001 Text [ spanish ] = "Atributos de texto" ; +//STRIP001 Text [ english_us ] = "Text Attributes" ; +//STRIP001 Text[ chinese_simplified ] = "æ–‡å—属æ€?"; +//STRIP001 Text[ russian ] = "Àòðèáóòû òåêñòà"; +//STRIP001 Text[ polish ] = "Atrybuty tekstu"; +//STRIP001 Text[ japanese ] = "テã‚ストã®å±žæ€?"; +//STRIP001 Text[ chinese_traditional ] = "æ–‡å—屬æ€?"; +//STRIP001 Text[ arabic ] = "ÓãÇÊ ÇáäÕ"; +//STRIP001 Text[ greek ] = "Éäéüôçôå?êåéìÝíïõ"; +//STRIP001 Text[ korean ] = "í…스íŠ?ì†ì„±"; +//STRIP001 Text[ turkish ] = "Metin öznitelikleri"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Atributs del text"; +//STRIP001 Text[ thai ] = "คุณลัà¸à¸©à¸“ะข้à¸à¸„วาม"; +//STRIP001 Text[ czech ] = "Atributy textu"; +//STRIP001 Text[ hebrew ] = "Textattribute"; +//STRIP001 Text[ hindi ] = "टेकà¥à¤¸à¥à¤Ÿà¥ à¤à¤Ÿà¥à¤°à¤¿à¤¬à¥à¤¯à¥‚टà¥à¤¸"; +//STRIP001 }; + String STR_HFCMD_DELIMITER + { + Text [ de ] = "\\" ; + Text [ en-US ] = "\\" ; + Text [ x-comment ] = " "; + Text[ pt ] = "\\"; + Text[ ru ] = "\\"; + Text[ el ] = "\\"; + Text[ nl ] = "\\"; + Text[ fr ] = "\\"; + Text[ es ] = "\\"; + Text[ fi ] = "\\"; + Text[ ca ] = "\\"; + Text[ it ] = "\\"; + Text[ da ] = "\\"; + Text[ sv ] = "\\"; + Text[ pl ] = "\\"; + Text[ pt-BR ] = "\\\\ "; + Text[ th ] = "\\"; + Text[ ja ] = "\\"; + Text[ ko ] = "\\"; + Text[ zh-CN ] = "\\"; + Text[ zh-TW ] = "\\"; + Text[ tr ] = "\\"; + Text[ hi-IN ] = "\\"; + Text[ ar ] = "\\"; + Text[ he ] = "\\"; + }; + String STR_HFCMD_PAGE + { + Text [ de ] = "SEITE" ; + Text [ en-US ] = "PAGE" ; + Text [ x-comment ] = " "; + Text[ pt ] = "PÃGINA"; + Text[ ru ] = "СТРÐÐИЦÐ"; + Text[ el ] = "ΣΕΛΙΔΑ"; + Text[ nl ] = "PAGINA"; + Text[ fr ] = "PAGE"; + Text[ es ] = "PÃGINA"; + Text[ fi ] = "SIVU"; + Text[ ca ] = "PAGE"; + Text[ it ] = "Pagina"; + Text[ da ] = "SIDE"; + Text[ sv ] = "SIDA"; + Text[ pl ] = "STRONA"; + Text[ pt-BR ] = "PÃGINA"; + Text[ th ] = "หน้า"; + Text[ ja ] = "ページ"; + Text[ ko ] = "페ì´ì§€"; + Text[ zh-CN ] = "页"; + Text[ zh-TW ] = "é "; + Text[ tr ] = "SAYFA"; + Text[ hi-IN ] = "PAGE"; + Text[ ar ] = "صÙØØ©"; + Text[ he ] = "SEITE"; + }; + String STR_HFCMD_PAGES + { + Text [ de ] = "SEITEN" ; + Text [ en-US ] = "PAGES" ; + Text [ x-comment ] = " "; + Text[ pt ] = "PÃGINAS"; + Text[ ru ] = "СТРÐÐИЦЫ"; + Text[ el ] = "PAGES"; + Text[ nl ] = "PAGINA'S"; + Text[ fr ] = "PAGES"; + Text[ es ] = "PÃGINAS"; + Text[ fi ] = "SIVUT"; + Text[ ca ] = "PAGES"; + Text[ it ] = "PAGINE"; + Text[ da ] = "SIDER"; + Text[ sv ] = "SIDOR"; + Text[ pl ] = "STRONY"; + Text[ pt-BR ] = "PÃGINAS"; + Text[ th ] = "หน้า"; + Text[ ja ] = "ページ"; + Text[ ko ] = "페ì´ì§€"; + Text[ zh-CN ] = "页"; + Text[ zh-TW ] = "é "; + Text[ tr ] = "SAYFALAR"; + Text[ hi-IN ] = "PAGES"; + Text[ ar ] = "صÙØات"; + Text[ he ] = "SEITEN"; + }; + String STR_HFCMD_DATE + { + Text [ de ] = "DATUM" ; + Text [ en-US ] = "DATE" ; + Text [ x-comment ] = " "; + Text[ pt ] = "DATA"; + Text[ ru ] = "ДÐТÐ"; + Text[ el ] = "ΗΜΕΡΟΜΗÎΙΑ"; + Text[ nl ] = "DATUM"; + Text[ fr ] = "DATE"; + Text[ es ] = "FECHA"; + Text[ fi ] = "PÄIVÄYS"; + Text[ ca ] = "DATE"; + Text[ it ] = "DATA"; + Text[ da ] = "DATO"; + Text[ sv ] = "DATUM"; + Text[ pl ] = "DATA"; + Text[ pt-BR ] = "DATA"; + Text[ th ] = "วันที่"; + Text[ ja ] = "日付"; + Text[ ko ] = "DATE"; + Text[ zh-CN ] = "日期"; + Text[ zh-TW ] = "日期"; + Text[ tr ] = "DATE"; + Text[ hi-IN ] = "DATE"; + Text[ ar ] = "التاريخ"; + Text[ he ] = "‮ת×ריך‬"; + }; + String STR_HFCMD_TIME + { + Text [ de ] = "ZEIT" ; + Text [ en-US ] = "TIME" ; + Text [ x-comment ] = " "; + Text[ pt ] = "HORA"; + Text[ ru ] = "ВРЕМЯ"; + Text[ el ] = "ΩΡΑ"; + Text[ nl ] = "TIJD"; + Text[ fr ] = "TEMPS"; + Text[ es ] = "HORA"; + Text[ fi ] = "AIKA"; + Text[ ca ] = "TIME"; + Text[ it ] = "ORARIO"; + Text[ da ] = "TID"; + Text[ sv ] = "KLOCKSLAG"; + Text[ pl ] = "CZAS"; + Text[ pt-BR ] = "TEMPO"; + Text[ th ] = "เวลา"; + Text[ ja ] = "時間"; + Text[ ko ] = "시간"; + Text[ zh-CN ] = "时间"; + Text[ zh-TW ] = "時間"; + Text[ tr ] = "SAAT"; + Text[ hi-IN ] = "TIME"; + Text[ ar ] = "الوقت"; + Text[ he ] = "ZEIT"; + }; + String STR_HFCMD_FILE + { + Text [ de ] = "DATEI" ; + Text [ en-US ] = "FILE" ; + Text [ x-comment ] = " "; + Text[ pt ] = "FICHEIRO"; + Text[ ru ] = "ФÐЙЛ"; + Text[ el ] = "ΑΡΧΕΙΟ"; + Text[ nl ] = "BESTAND"; + Text[ fr ] = "FICHIER"; + Text[ es ] = "ARCHIVO"; + Text[ fi ] = "TIEDOSTO"; + Text[ ca ] = "FILE"; + Text[ it ] = "FILE"; + Text[ da ] = "FIL"; + Text[ sv ] = "FIL"; + Text[ pl ] = "PLIK"; + Text[ pt-BR ] = "ARQUIVO"; + Text[ th ] = "à¹à¸Ÿà¹‰à¸¡"; + Text[ ja ] = "ファイル"; + Text[ ko ] = "파ì¼"; + Text[ zh-CN ] = "文件"; + Text[ zh-TW ] = "檔案"; + Text[ tr ] = "DOSYA"; + Text[ hi-IN ] = "FILE"; + Text[ ar ] = "الملÙ"; + Text[ he ] = "DATEI"; + }; + String STR_HFCMD_TABLE + { + Text [ de ] = "TABELLE" ; + Text [ en-US ] = "SHEET" ; + Text [ x-comment ] = " "; + Text[ pt ] = "FOLHA"; + Text[ ru ] = "ЛИСТ"; + Text[ el ] = "ΦΥΛΛΟ"; + Text[ nl ] = "WERKBLAD"; + Text[ fr ] = "FEUILLE"; + Text[ es ] = "HOJA"; + Text[ fi ] = "TAULUKKO"; + Text[ ca ] = "SHEET"; + Text[ it ] = "TABELLA"; + Text[ da ] = "TABEL"; + Text[ sv ] = "TABELL"; + Text[ pl ] = "ARKUSZ"; + Text[ pt-BR ] = "PLANILHA"; + Text[ th ] = "à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表"; + Text[ ko ] = "시트"; + Text[ zh-CN ] = "工作表"; + Text[ zh-TW ] = "工作表"; + Text[ tr ] = "TABLO"; + Text[ hi-IN ] = "SHEET"; + Text[ ar ] = "الجدول"; + Text[ he ] = "TABELLE"; + }; + String STR_PROTECTIONERR + { + /* ### ACHTUNG: Neuer Text in Resource? Gesperrte Zellen können nicht geändert werden. : Gesperrte Zellen k÷nnen nicht geõndert werden. */ + Text [ de ] = "Gesperrte Zellen können nicht geändert werden." ; + Text [ en-US ] = "Protected cells can not be modified." ; + Text [ x-comment ] = " "; + Text[ pt ] = "Células protegidas não podem ser modificadas."; + Text[ ru ] = "Ðевозможно изменить защищенные Ñчейки."; + Text[ el ] = "Δεν είναι δυνατόν να Ï„ÏοποποιηθοÏν Ï€Ïοστατευόμενα κελιά."; + Text[ nl ] = "Beveiligde cellen kunnen niet worden gewijzigd."; + Text[ fr ] = "Impossible de modifier les cellules protégées"; + Text[ es ] = "Las celdas protegidas no se pueden modificar."; + Text[ fi ] = "Suojattuja soluja ei voi muokata."; + Text[ ca ] = "Les cel.les protegides no es poden modificar."; + Text[ it ] = "Impossibile modificare le celle protette."; + Text[ da ] = "LÃ¥ste celler kan ikke ændres."; + Text[ sv ] = "Skyddade celler kan inte ändras."; + Text[ pl ] = "Chronionych komórek nie można modyfikować."; + Text[ pt-BR ] = "Células protegidas não podem ser modificadas."; + Text[ th ] = "ไม่สามารถดัดà¹à¸›à¸¥à¸‡à¹€à¸‹à¸¥à¸¥à¹Œà¸—ี่ป้à¸à¸‡à¸à¸±à¸™"; + Text[ ja ] = "ä¿è·ã•ã‚ŒãŸã‚»ãƒ«ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。"; + Text[ ko ] = "ìž ê²¨ìžˆëŠ” ì…€ì€ ë³€ê²½í• ìˆ˜ 없습니다."; + Text[ zh-CN ] = "æ— æ³•æ›´æ”¹é”定的å•å…ƒæ ¼ã€‚"; + Text[ zh-TW ] = "無法變更鎖定的儲å˜æ ¼ã€‚"; + Text[ tr ] = "Korumalı hücreler deÄŸiÅŸtirilemez."; + Text[ hi-IN ] = "रकà¥à¤·à¤¿à¤¤ कोषà¥à¤ ों को नहीं सà¥à¤§à¤¾à¤° सकते है ।"; + Text[ ar ] = "لا يمكن تعديل الخلايا المØمية."; + Text[ he ] = "Gesperrte Zellen können nicht geändert werden."; + }; +//STRIP001 String STR_READONLYERR +//STRIP001 { +//STRIP001 Text = "Dokument ist nur zum Lesen geöffnet." ; +//STRIP001 Text [ ENGLISH ] = "Document is readonly." ; +//STRIP001 Text[ italian ] = "Il documento ?aperto a sola lettura."; +//STRIP001 Text[ portuguese_brazilian ] = "Documento aberto em modo somente-leitura."; +//STRIP001 Text[ portuguese ] = "Documento aberto no modo s?leitura"; +//STRIP001 Text[ danish ] = "Dokument er åbnet i en skrivebeskyttet tilstand."; +//STRIP001 Text[ french ] = "Document ouvert en lecture seule."; +//STRIP001 Text[ swedish ] = "Dokumentet är bara öppet för läsning."; +//STRIP001 Text[ dutch ] = "Document is alleen geopend om te lezen"; +//STRIP001 Text[ spanish ] = "El archivo abierto es sólo de lectura."; +//STRIP001 Text[ english_us ] = "Document opened in read-only mode."; +//STRIP001 Text[ chinese_simplified ] = "打开文档仅是用于阅读的ã€?"; +//STRIP001 Text[ russian ] = "Äîêóìåíò îòêðûò òîëüêî äëÿ ÷òåí?."; +//STRIP001 Text[ polish ] = "Dokument otwarty w trybie tylko do odczytu."; +//STRIP001 Text[ japanese ] = "ã“ã®ãƒ‰ã‚ュメントã¯èªã¿å–り専用ã§é–‹ã„ã¦ã„ã¾ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "開啟文件僅是用於閱讀的ã€?"; +//STRIP001 Text[ arabic ] = "ÇáãÓÊä?ãÝÊæ?ááÞÑÇÁ?ÝÞ?"; +//STRIP001 Text[ greek ] = "¢íïéãì?åããñÜöïõ ìüíï ãé?áíÜãíùóç."; +//STRIP001 Text[ korean ] = "문서ëŠ?ì½ê¸°ì „ìš© 모드ë¡?ì—´ë ¸ìŠµë‹ˆë‹?"; +//STRIP001 Text[ turkish ] = "Belge salt okunur kipte açýld?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "El document s'ha obert en mode només de lectura."; +//STRIP001 Text[ finnish ] = "Asiakirja avattu vain luku -tilassa."; +//STRIP001 Text[ thai ] = "เปิดเà¸à¸à¸ªà¸²à¸£à¹ƒà¸™à¹‚หมดà¸à¹ˆà¸²à¸™à¸à¸¢à¹ˆà¸²à¸‡à¹€à¸”ียว"; +//STRIP001 Text[ czech ] = "Dokument je otevÅ™en v režimu pouze pro ÄtenÃ."; +//STRIP001 Text[ hebrew ] = "Dokument ist nur zum Lesen geöffnet."; +//STRIP001 Text[ hindi ] = "लेखपतà¥à¤?को केवल पढ़नà¥?के पà¥à¤°à¤•à¤¾à¤° मेà¤?खोला है à¥?"; +//STRIP001 }; + String STR_MATRIXFRAGMENTERR + { + /* ### ACHTUNG: Neuer Text in Resource? Teil einer Matrix kann nicht geändert werden. : Teil einer Matrix kann nicht geõndert werden. */ + Text [ de ] = "Sie können nicht nur einen Teil einer Matrix ändern." ; + // Text[norwegian] = "Protected cells cannot be modified."; + // Text[italian] = "Impossibile modificare le celle protette."; + // Text[portuguese_brazilian] = "Células protegidas não podem ser modificadas."; + // Text[portuguese] = "Células protegidas não podem ser modificadas."; + // Text[finnish] = "Suojattuja soluja ei voi muokata."; + // Text[danish] = "Beskyttede celler kan ikke ændres."; + // Text[french] = "Les cellules protégées ne peuvent pas être modifiées"; + // Text[swedish] = "Skyddade celler kan inte ändras."; + // Text[dutch] = "Beschermde cellen kunnen niet worden gewijzigd."; + // Text[spanish] = "Las celdas protegidas no pueden modificarse."; + Text [ en-US ] = "You cannot change only part of an array." ; + Text [ x-comment ] = "EM Dec 2002: In other words, you can only change the whole thing."; + Text[ pt ] = "ImpossÃvel alterar uma parte da matriz."; + Text[ ru ] = "Ðевозможно изменить чаÑÑ‚ÑŒ маÑÑива."; + Text[ el ] = "Δεν είναι δυνατόν να Ï„Ïοποποιηθεί τμήμα μιας μήτÏας."; + Text[ nl ] = "Een deel van een matrix kan niet worden gewijzigd."; + Text[ fr ] = "Il n'est pas possible de ne modifier qu'une partie d'une matrice."; + Text[ es ] = "No se puede modificar sólo una parte de la matriz."; + Text[ fi ] = "Osaa taulukosta ei voi muokata."; + Text[ ca ] = "No es pot modificar una part d'una matriu."; + Text[ it ] = "Non è possibile modificare solo una parte della matrice."; + Text[ da ] = "Det er ikke muligt at ændre en del af en matrix."; + Text[ sv ] = "Du kan inte ändra bara en del av en matris."; + Text[ pl ] = "Część macierzy nie może być zmodyfikowana."; + Text[ pt-BR ] = "Parte de uma matriz não pode ser modificada."; + Text[ th ] = "ไม่สามารถดัดà¹à¸›à¸¥à¸‡à¸ªà¹ˆà¸§à¸™à¸‚à¸à¸‡à¹à¸–วลำดับ"; + Text[ ja ] = "行列ã¯éƒ¨åˆ†å¤‰æ›´ã§ãã¾ã›ã‚“。"; + Text[ ko ] = "í–‰ë ¬ì˜ ì¼ë¶€ ë§Œì„ ë³€ê²½í• ìˆ˜ 없습니다."; + Text[ zh-CN ] = "æ‚¨æ— æ³•åªæ›´æ”¹çŸ©é˜µçš„一部分。"; + Text[ zh-TW ] = "無法僅變更陣列的一部份。"; + Text[ tr ] = "Bir döngünün sadece belirli bölümünü deÄŸiÅŸtiremezsiniz."; + Text[ hi-IN ] = "शà¥à¤°à¥‡à¤£à¥€ का केवल à¤à¤• à¤à¤¾à¤— को नहीं सà¥à¤§à¤¾à¤° सकते है ।"; + Text[ ar ] = "لا يمكن تعديل جزء من صÙÙŠÙ."; + Text[ he ] = "Sie können nicht nur einen Teil einer Matrix ändern."; + }; +//STRIP001 String STR_PAGEHEADER +//STRIP001 { +//STRIP001 Text = "Kopfzeile" ; +//STRIP001 Text [ ENGLISH ] = "Page Header" ; +//STRIP001 Text [ norwegian ] = "Page Header" ; +//STRIP001 Text [ italian ] = "Riga d'intestazione" ; +//STRIP001 Text [ portuguese_brazilian ] = "Cabeçalho" ; +//STRIP001 Text [ portuguese ] = "Cabeçalho" ; +//STRIP001 Text [ finnish ] = "Ylätunniste" ; +//STRIP001 Text [ danish ] = "Sidehoved" ; +//STRIP001 Text [ french ] = "En-tête" ; +//STRIP001 Text [ swedish ] = "Sidhuvud" ; +//STRIP001 Text [ dutch ] = "Koptekst" ; +//STRIP001 Text [ spanish ] = "Encabezamiento" ; +//STRIP001 Text [ english_us ] = "Header" ; +//STRIP001 Text[ chinese_simplified ] = "页眉"; +//STRIP001 Text[ russian ] = "Âåðõíè?êîëîíòèòóë"; +//STRIP001 Text[ polish ] = "Nag³ówek"; +//STRIP001 Text[ japanese ] = "ヘッダ"; +//STRIP001 Text[ chinese_traditional ] = "é 首"; +//STRIP001 Text[ arabic ] = "ÑÃ?ÇáÕÝÍÉ"; +//STRIP001 Text[ greek ] = "Êåöáëßäá"; +//STRIP001 Text[ korean ] = "머리글"; +//STRIP001 Text[ turkish ] = "Üstbilgi"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Capçalera"; +//STRIP001 Text[ thai ] = "หัวà¸à¸£à¸°à¸”าà¸?"; +//STRIP001 Text[ czech ] = "ZáhlavÃ"; +//STRIP001 Text[ hebrew ] = "‮כותר×?×¢×œ×™×•× ×”â€?"; +//STRIP001 Text[ hindi ] = "पृषà¥à¤?के ऊपà¤?की टीका"; +//STRIP001 }; +//STRIP001 String STR_PAGEFOOTER +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Fußzeile : Fu˜zeile */ +//STRIP001 Text = "Fußzeile" ; +//STRIP001 Text [ ENGLISH ] = "Page Footer" ; +//STRIP001 Text [ norwegian ] = "Page Footer" ; +//STRIP001 Text [ italian ] = "Pi?di pagina" ; +//STRIP001 Text [ portuguese_brazilian ] = "Rodap?" ; +//STRIP001 Text [ portuguese ] = "Linha de rodap?" ; +//STRIP001 Text [ finnish ] = "Alatunniste" ; +//STRIP001 Text [ danish ] = "Sidefod" ; +//STRIP001 Text [ french ] = "Pied de page" ; +//STRIP001 Text [ swedish ] = "Sidfot" ; +//STRIP001 Text [ dutch ] = "Voettekst" ; +//STRIP001 Text [ spanish ] = "Pie de página" ; +//STRIP001 Text [ english_us ] = "Footer" ; +//STRIP001 Text[ chinese_simplified ] = "页脚"; +//STRIP001 Text[ russian ] = "Íèæíèé êîëîíòèòóë"; +//STRIP001 Text[ polish ] = "Stopka"; +//STRIP001 Text[ japanese ] = "フッã‚?"; +//STRIP001 Text[ chinese_traditional ] = "é å°¾"; +//STRIP001 Text[ arabic ] = "ÊÐíí?ÇáÕÝÍÉ"; +//STRIP001 Text[ greek ] = "ÕðïóÝëéä?"; +//STRIP001 Text[ korean ] = "바닥글"; +//STRIP001 Text[ turkish ] = "Altbilgi"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Peu de pàgina"; +//STRIP001 Text[ thai ] = "ท้ายà¸à¸£à¸°à¸”าษ"; +//STRIP001 Text[ czech ] = "ZápatÃ"; +//STRIP001 Text[ hebrew ] = "‮כותר×?×ª×—×ª×•× ×”â€?"; +//STRIP001 Text[ hindi ] = "पृषà¥à¤?के अधोà¤à¤¾à¤— की टीका"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_ILL_ARG +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Fehler: Ungültiges Argument : Fehler: Ung³ltiges Argument */ +//STRIP001 Text = "Fehler: Ungültiges Argument" ; +//STRIP001 Text [ ENGLISH ] = "Error: Illegal Argument" ; +//STRIP001 Text [ norwegian ] = "Error: Illegal Argument" ; +//STRIP001 Text [ italian ] = "Errore: argomento non ammesso" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Argumento Inválido" ; +//STRIP001 Text [ portuguese ] = "Erro: argumento não válido" ; +//STRIP001 Text [ finnish ] = "Virhe: virheellinen argumentti" ; +//STRIP001 Text [ danish ] = "Fejl: ugyldigt argument" ; +//STRIP001 Text [ french ] = "Erreur : argument non valable" ; +//STRIP001 Text [ swedish ] = "Fel: ogiltigt argument" ; +//STRIP001 Text [ dutch ] = "Fout: ongeldig argument" ; +//STRIP001 Text [ spanish ] = "Error: Argumento no válido" ; +//STRIP001 Text [ english_us ] = "Error: Invalid argument" ; +//STRIP001 Text[ chinese_simplified ] = "é”™è¯¯ï¼šæ— æ•ˆçš„è‡ªå˜é‡?"; +//STRIP001 Text[ russian ] = "Îøèáêà: íåäîïóñòèìûé àðãóìåíò"; +//STRIP001 Text[ polish ] = "B³¹d: Nieprawid³owy argument"; +//STRIP001 Text[ japanese ] = "エラãƒ? 無効ãªå¼•æ•°ãŒä½¿ã‚ã‚Œã¦ã„ã¾ã?"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:無效的自變é‡?"; +//STRIP001 Text[ arabic ] = "ÎØ? æÓíØ?Ûí?ÕÇáÍ?"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Ìç Ýãêõñï üñéóìá"; +//STRIP001 Text[ korean ] = "오류: 잘못ë?ë…립 ë³€ìˆ?"; +//STRIP001 Text[ turkish ] = "Hata: Geçersiz deðiþken"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: argument no vàlid"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: à¸à¸²à¸£à¹Œà¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œà¹„ม่ถูà¸à¸•à¹‰à¸à¸‡"; +//STRIP001 Text[ czech ] = "Chyba: Neplatný argument"; +//STRIP001 Text[ hebrew ] = "Fehler: Ungültiges Argument"; +//STRIP001 Text[ hindi ] = "गलती: अमानà¥à¤¯ आरà¥à¤—à¥à¤®à¥‡à¤¨à¥à¤Ÿà¥?"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_ILL_PAR +//STRIP001 { +//STRIP001 Text = "Fehler in der Parameterliste" ; +//STRIP001 Text [ ENGLISH ] = "Error in parameterlist" ; +//STRIP001 Text [ norwegian ] = "Error in parameterlist" ; +//STRIP001 Text [ italian ] = "Errore nell'elenco parametri" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro na lista de parâmetros" ; +//STRIP001 Text [ portuguese ] = "Erro na lista de parâmetros" ; +//STRIP001 Text [ finnish ] = "Virhe parametriluettelossa" ; +//STRIP001 Text [ danish ] = "Fejl i parameterlisten" ; +//STRIP001 Text [ french ] = "Erreur dans la liste des paramètres" ; +//STRIP001 Text [ swedish ] = "Fel i parameterlistan" ; +//STRIP001 Text [ dutch ] = "Fout in parameterlijst" ; +//STRIP001 Text [ spanish ] = "Error en la lista de parámetros" ; +//STRIP001 Text [ english_us ] = "Error in parameter list" ; +//STRIP001 Text[ chinese_simplified ] = "å‚数列表内有错误"; +//STRIP001 Text[ russian ] = "Îøèáêà ?ñïèñêå ïàðàìåòðîâ"; +//STRIP001 Text[ polish ] = "B³¹d w liœcie parametrów"; +//STRIP001 Text[ japanese ] = "パラメータリストã«ã‚¨ãƒ©ãƒ¼"; +//STRIP001 Text[ chinese_traditional ] = "åƒæ•¸æ¸…單有錯èª?"; +//STRIP001 Text[ arabic ] = "ÍÏ?ÎØ?Ýí ÞÇÆã?ÇáãÚáãÇÊ"; +//STRIP001 Text[ greek ] = "ÓöÜëìá óô?ëßóô?ðáñáìÝôñùí"; +//STRIP001 Text[ korean ] = "매개 ë³€ìˆ?목ë¡ì?오류"; +//STRIP001 Text[ turkish ] = "Parametre listesinde hata"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "S'ha produït un error a la llista de paràmetres"; +//STRIP001 Text[ thai ] = "เà¸à¸´à¸”ความผิดพลาดในรายà¸à¸²à¸£à¸žà¸²à¸£à¸²à¸¡à¸´à¹€à¸•à¸à¸£à¹Œ"; +//STRIP001 Text[ czech ] = "Chyba v seznamu parametrů"; +//STRIP001 Text[ hebrew ] = "Fehler in der Parameterliste"; +//STRIP001 Text[ hindi ] = "पैरामीटर सूची मेà¤?गलती"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_ILL_FPO +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Fehler: Ungültige Gleitkommaoperation : Fehler: Ung³ltige Gleitkommaoperation */ +//STRIP001 Text = "Fehler: Ungültige Gleitkommaoperation" ; +//STRIP001 Text [ ENGLISH ] = "Error: Illegal floating point operation" ; +//STRIP001 Text [ norwegian ] = "Error: Illegal floating point operation" ; +//STRIP001 Text [ italian ] = "Errore: operazione a virgola mobile non ammessa" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Operação de ponto flutuante inválida" ; +//STRIP001 Text [ portuguese ] = "Erro: operação da vírgula flutuante incorrecta" ; +//STRIP001 Text [ finnish ] = "Virhe: virheellinen irrallisen pisteen toiminto" ; +//STRIP001 Text [ danish ] = "Fejl: ugyldig flydende kommaoperation" ; +//STRIP001 Text [ french ] = "Erreur : opération ?virgule flottante non valide" ; +//STRIP001 Text [ swedish ] = "Fel: ogiltig flyttalsoperation" ; +//STRIP001 Text [ dutch ] = "Fout: ongeldige glijdende-kommabewerking" ; +//STRIP001 Text [ spanish ] = "Error: Operación en punto flotante no válida" ; +//STRIP001 Text [ english_us ] = "Error: Invalid floating point operation" ; +//STRIP001 Text[ chinese_simplified ] = "é”™è¯¯ï¼šæ— æ•ˆçš„æµ®ç‚¹è¿ç®—"; +//STRIP001 Text[ russian ] = "Îøèáêà: íåäîïóñòèì? îïåðàö? ?ïëàâàþùå?çà?òî?"; +//STRIP001 Text[ polish ] = "B³¹d: Nieprawid³owa operacja zmiennoprzecinkowa"; +//STRIP001 Text[ japanese ] = "エラãƒ? 無効ãªæµ®å‹•å°æ•°ç‚¹æ¼”ç®—ã§ã™"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:無效的浮點é‹ç®—"; +//STRIP001 Text[ arabic ] = "ÎØ? Úãáí?ÝÇÕá?ÚÇÆã?Ûí?ÕÇáÍ?"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Ìç Ýãêõñç ëåéôïõñãßá êéíçôÞ?õðïäéáóôïëÞò"; +//STRIP001 Text[ korean ] = "오류: 잘못ë?부ë?소수ì ?ìž‘ë™"; +//STRIP001 Text[ turkish ] = "Hata: Geçersiz kayan nokta iþlemi"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: l'operaci?de coma flotant no és vàlida"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: ปà¸à¸´à¸šà¸±à¸•à¸´à¸à¸²à¸£ floating point ไม่ถูà¸à¸•à¹‰à¸à¸‡"; +//STRIP001 Text[ czech ] = "Chyba: Neplatná operace s plovoucà desetinnou Äárkou"; +//STRIP001 Text[ hebrew ] = "Fehler: Ungültige Gleitkommaoperation"; +//STRIP001 Text[ hindi ] = "Error: Invalid floating point operation"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_ILL_CHAR +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Fehler: Ungültiges Zeichen : Fehler: Ung³ltiges Zeichen */ +//STRIP001 Text = "Fehler: Ungültiges Zeichen" ; +//STRIP001 Text [ ENGLISH ] = "Error: Illegal character" ; +//STRIP001 Text [ norwegian ] = "Error: Illegal character" ; +//STRIP001 Text [ italian ] = "Errore: carattere non ammesso" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Caracter inválido" ; +//STRIP001 Text [ portuguese ] = "Erro: carácter não válido" ; +//STRIP001 Text [ finnish ] = "Virhe: virheellinen merkki" ; +//STRIP001 Text [ danish ] = "Fejl: ugyldigt tegn" ; +//STRIP001 Text [ french ] = "Erreur : caractère non valable" ; +//STRIP001 Text [ swedish ] = "Fel: ogiltigt tecken" ; +//STRIP001 Text [ dutch ] = "Fout: ongeldig teken" ; +//STRIP001 Text [ spanish ] = "Error: Carácter no válido" ; +//STRIP001 Text [ english_us ] = "Error: Invalid character" ; +//STRIP001 Text[ chinese_simplified ] = "é”™è¯¯ï¼šæ— æ•ˆçš„å—符"; +//STRIP001 Text[ russian ] = "Îøèáêà: íåäîïóñòèìûé ñèìâîë"; +//STRIP001 Text[ polish ] = "B³¹d: Nieprawid³owy znak"; +//STRIP001 Text[ japanese ] = "エラãƒ? 無効ãªæ–‡å—ãŒä½¿ã‚ã‚Œã¦ã„ã¾ã?"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:無效的å—å…ƒ"; +//STRIP001 Text[ arabic ] = "ÎØ? ÍÑ?Ûí?ÕÇáÍ"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Ìç Ýãêõñï?÷áñáêôÞñáò"; +//STRIP001 Text[ korean ] = "오류: 잘못ë?문ìž"; +//STRIP001 Text[ turkish ] = "Hata: Geçersiz karakter"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: caràcter no vàlid"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: ตัวà¸à¸±à¸à¸‚ระไม่ถูà¸à¸•à¹‰à¸à¸?"; +//STRIP001 Text[ czech ] = "Chyba: Neplatný znak"; +//STRIP001 Text[ hebrew ] = "Fehler: Ungültiges Zeichen"; +//STRIP001 Text[ hindi ] = "गलती: अमानà¥à¤¯ अकà¥à¤·à¤?"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_ILL_SEP +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Fehler: ungültiges Semikolon : Fehler: ung³ltiges Semikolon */ +//STRIP001 Text = "Fehler: ungültiges Semikolon" ; +//STRIP001 Text [ ENGLISH ] = "Error: Illegal semicolon" ; +//STRIP001 Text [ norwegian ] = "Error: Illegal semicolon" ; +//STRIP001 Text [ italian ] = "Errore: punto e virgola non ammesso" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Ponto e vírgula inválido" ; +//STRIP001 Text [ portuguese ] = "Erro: ponto e vírgula incorrectos" ; +//STRIP001 Text [ finnish ] = "Virhe: virheellinen puolipiste" ; +//STRIP001 Text [ danish ] = "Fejl: ugyldigt semikolon" ; +//STRIP001 Text [ french ] = "Erreur : point virgule non valide" ; +//STRIP001 Text [ swedish ] = "Fel: ogiltigt semikolon" ; +//STRIP001 Text [ dutch ] = "Fout: ongeldige puntkomma" ; +//STRIP001 Text [ spanish ] = "Error: Punto y coma no válido" ; +//STRIP001 Text [ english_us ] = "Error: Invalid semicolon" ; +//STRIP001 Text[ chinese_simplified ] = "é”™è¯¯ï¼šæ— æ•ˆçš„åˆ†å·"; +//STRIP001 Text[ russian ] = "Îøèáêà: íåäîïóñòèì? òî÷ê??çà?òî?"; +//STRIP001 Text[ polish ] = "B³¹d: Nieprawid³owy œrednik"; +//STRIP001 Text[ japanese ] = "エラãƒ? 無効ãªã‚»ãƒŸã‚³ãƒãƒ³ãŒä½¿ã‚ã‚Œã¦ã„ã¾ã™"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:無效的分號"; +//STRIP001 Text[ arabic ] = "ÎØ? ÝÇÕá?ãäÞæØÉ Ûí?ÕÇáÍ?"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Ìç Ýãêõñï semicolon ( ; )"; +//STRIP001 Text[ korean ] = "오류: 잘못ë?ì„¸ë¯¸ì½œë¡ "; +//STRIP001 Text[ turkish ] = "Hata: Geçersiz noktal?virgül"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: punt i coma no vàlid"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: à¸à¸±à¸’ภาคไม่ถูà¸à¸•à¹‰à¸à¸‡"; +//STRIP001 Text[ czech ] = "Chyba: Neplatný stÅ™ednÃk"; +//STRIP001 Text[ hebrew ] = "Fehler: ungültiges Semikolon"; +//STRIP001 Text[ hindi ] = "गलती: अमानà¥à¤¯ अरà¥à¤§ विराà¤?का चिहà¥à¤?"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_PAIR +//STRIP001 { +//STRIP001 Text = "Fehler in der Klammerung" ; +//STRIP001 Text [ ENGLISH ] = "Error: Pair missing" ; +//STRIP001 Text [ norwegian ] = "Error: Pair missing" ; +//STRIP001 Text [ italian ] = "Errore: parentesi mancante" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: nos parênteses" ; +//STRIP001 Text [ portuguese ] = "Erro nos parênteses" ; +//STRIP001 Text [ finnish ] = "Virhe: sulkeissa" ; +//STRIP001 Text [ danish ] = "Fejl i parantesen" ; +//STRIP001 Text [ french ] = "Erreur : paire manquante" ; +//STRIP001 Text [ swedish ] = "Fel: par fattas" ; +//STRIP001 Text [ dutch ] = "Fout: haakjes ontbreken of verkeerd geplaatst" ; +//STRIP001 Text [ spanish ] = "Error: Error de paréntesis" ; +//STRIP001 Text [ english_us ] = "Error: in bracketing" ; +//STRIP001 Text[ chinese_simplified ] = "括å·é”™è¯¯"; +//STRIP001 Text[ russian ] = "Îøèáêà èñïîëüçîâàíèÿ ñêîáîê"; +//STRIP001 Text[ polish ] = "B³¹d ustawienia nawiasów"; +//STRIP001 Text[ japanese ] = "ã‹ã£ã“内ã®ã‚¨ãƒ©ãƒ¼"; +//STRIP001 Text[ chinese_traditional ] = "括號錯誤"; +//STRIP001 Text[ arabic ] = "ÍÏ?ÎØ?Ýí æÖ?ÇáÃÞæÇ?"; +//STRIP001 Text[ greek ] = "ËÜèï?óô?÷ñÞó?ðáñåíèÝóåù?"; +//STRIP001 Text[ korean ] = "오류: 괄호"; +//STRIP001 Text[ turkish ] = "Birleþtirmede hata"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: en la col.locaci?de parèntesis"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: ในวงเล็à¸?"; +//STRIP001 Text[ czech ] = "Chyba v poÄtu nebo umÃstÄ›nà závorek"; +//STRIP001 Text[ hebrew ] = "Fehler in der Klammerung"; +//STRIP001 Text[ hindi ] = "गलती: कोषà¥à¤ क ढालनà¥?मेà¤?"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_OP_EXP +//STRIP001 { +//STRIP001 Text = "Fehler: Fehlender Operator" ; +//STRIP001 Text [ ENGLISH ] = "Error: Operator expected" ; +//STRIP001 Text [ norwegian ] = "Error: Operator expected" ; +//STRIP001 Text [ italian ] = "Errore: manca l'operatore" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Falta o operador" ; +//STRIP001 Text [ portuguese ] = "Erro: falta operador" ; +//STRIP001 Text [ finnish ] = "Virhe: puuttuva operaattori" ; +//STRIP001 Text [ danish ] = "Fejl: manglende operator" ; +//STRIP001 Text [ french ] = "Erreur : opérateur manquant" ; +//STRIP001 Text [ swedish ] = "Fel: operator saknas" ; +//STRIP001 Text [ dutch ] = "Fout: operator ontbreekt" ; +//STRIP001 Text [ spanish ] = "Error: Falta un operador" ; +//STRIP001 Text [ english_us ] = "Error: Operator missing" ; +//STRIP001 Text[ chinese_simplified ] = "错误:缺少è¿ç®—符"; +//STRIP001 Text[ russian ] = "Îøèáêà: îïåðàòîð îòñóòñòâóå?"; +//STRIP001 Text[ polish ] = "B³¹d: Brak operatora"; +//STRIP001 Text[ japanese ] = "エラãƒ? 演算åãŒè¶³ã‚Šã¾ã›ã‚?"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:缺少é‹ç®—符"; +//STRIP001 Text[ arabic ] = "ÎØ? ÚÇãá ÇáÊÔÛí?äÇÞÕ"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Ëåßðåé ?ôåëåóôÞò"; +//STRIP001 Text[ korean ] = "오류: ì—°ì‚°ìžê°€ ë¹ ì¡ŒìŠµë‹ˆë‹?"; +//STRIP001 Text[ turkish ] = "Hata: Eksik iþle?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: falta un operador"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: ตัวปà¸à¸´à¸šà¸±à¸•à¸´à¸à¸²à¸£à¸‚าดหายไà¸?"; +//STRIP001 Text[ czech ] = "Chyba: Chybà operátor"; +//STRIP001 Text[ hebrew ] = "Fehler: Fehlender Operator"; +//STRIP001 Text[ hindi ] = "गलती: अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤?पà¥à¤°à¤µà¤°à¥à¤¤à¤•"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_VAR_EXP +//STRIP001 { +//STRIP001 Text = "Fehler: Fehlende Variable" ; +//STRIP001 Text [ ENGLISH ] = "Error: Variable expected" ; +//STRIP001 Text [ norwegian ] = "Error: Variable expected" ; +//STRIP001 Text [ italian ] = "Errore: manca la variabile" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Falta a variável" ; +//STRIP001 Text [ portuguese ] = "Erro: falta variável" ; +//STRIP001 Text [ finnish ] = "Virhe: puuttuva muuttuja" ; +//STRIP001 Text [ danish ] = "Fejl: manglende variabel" ; +//STRIP001 Text [ french ] = "Erreur : variable manquante" ; +//STRIP001 Text [ swedish ] = "Fel: variabel saknas" ; +//STRIP001 Text [ dutch ] = "Fout: variabele ontbreekt" ; +//STRIP001 Text [ spanish ] = "Error: Falta una variable" ; +//STRIP001 Text [ english_us ] = "Error: Variable missing" ; +//STRIP001 Text[ chinese_simplified ] = "错误:缺少å˜é‡?"; +//STRIP001 Text[ russian ] = "Îøèáêà: ïåðåìåíí? îòñóòñòâóå?"; +//STRIP001 Text[ polish ] = "B³¹d: Brak zmiennej"; +//STRIP001 Text[ japanese ] = "エラãƒ? 変数ãŒè¶³ã‚Šã¾ã›ã‚“"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:缺少變é‡?"; +//STRIP001 Text[ arabic ] = "ÎØ? ÇáãÊÛíÑÉ Ûí?ãæÌæÏÉ"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Áðïõóß?ìåôáâëçôÞò"; +//STRIP001 Text[ korean ] = "오류: 변수가 없습니다."; +//STRIP001 Text[ turkish ] = "Hata: Eksik deðiþken"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: falta una variable"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: ตัวà¹à¸›à¸£à¸‚าดหายไป"; +//STRIP001 Text[ czech ] = "Chyba: Chybà promÄ›nná"; +//STRIP001 Text[ hebrew ] = "Fehler: Fehlende Variable"; +//STRIP001 Text[ hindi ] = "गलती: अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤?वेरिà¤à¤¬à¤?"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_CODE_OVF +//STRIP001 { +//STRIP001 Text = "Fehler: Formel zu lang" ; +//STRIP001 Text [ ENGLISH ] = "Error: Formula overflow" ; +//STRIP001 Text [ norwegian ] = "Error: Formula overflow" ; +//STRIP001 Text [ italian ] = "Errore: formula troppo lunga" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Transbordo da fórmula" ; +//STRIP001 Text [ portuguese ] = "Erro: fórmula grande demais" ; +//STRIP001 Text [ finnish ] = "Virhe: liian pitk?kaava" ; +//STRIP001 Text [ danish ] = "Fejl: for lang formel" ; +//STRIP001 Text [ french ] = "Erreur : formule trop longue" ; +//STRIP001 Text [ swedish ] = "Fel: formel för lång" ; +//STRIP001 Text [ dutch ] = "Fout: formule te lang" ; +//STRIP001 Text [ spanish ] = "Error: Fórmula demasiado larga" ; +//STRIP001 Text [ english_us ] = "Error: Formula overflow" ; +//STRIP001 Text[ chinese_simplified ] = "错误:公å¼å¤ªé•?"; +//STRIP001 Text[ russian ] = "Îøèáêà: ñëèøêî?äëèííàÿ ôîðìóë?"; +//STRIP001 Text[ polish ] = "B³¹d: za d³uga formu³a"; +//STRIP001 Text[ japanese ] = "エラãƒ? æ•°å¼ãŒé•·ã™ãŽã¾ã™"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:公å¼å¤ªé•?"; +//STRIP001 Text[ arabic ] = "ÎØ? ÇáÕíÛÉ ÃØæá ãä ÇáÍÏ ÇáÃÞÕì"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Õðåñâïëéêü ìÞêï?ôýðï?"; +//STRIP001 Text[ korean ] = "오류: 수ì‹ì?너무 ê¹ë‹ˆë‹?"; +//STRIP001 Text[ turkish ] = "Hata: Formül çok uzun"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: sobreeiximent de la fórmula"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: สูตรล้à¸?"; +//STRIP001 Text[ czech ] = "Chyba: PÅ™eteÄenà vzorce"; +//STRIP001 Text[ hebrew ] = "Fehler: Formel zu lang"; +//STRIP001 Text[ hindi ] = "गलती: सूतà¥à¤?अधिकता"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_STR_OVF +//STRIP001 { +//STRIP001 Text = "Fehler: Zeichenkette zu lang" ; +//STRIP001 Text [ ENGLISH ] = "Error: String overflow" ; +//STRIP001 Text [ norwegian ] = "Error: String overflow" ; +//STRIP001 Text [ italian ] = "Errore: stringa troppo lunga" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Transbordo do string" ; +//STRIP001 Text [ portuguese ] = "Erro: cadeia de caracteres demasiado extensa" ; +//STRIP001 Text [ finnish ] = "Virhe: merkkijonon ylivuoto" ; +//STRIP001 Text [ danish ] = "Fejl: streng er for lang" ; +//STRIP001 Text [ french ] = "Erreur : chaîne de caractères trop longue" ; +//STRIP001 Text [ swedish ] = "Fel: sträng är för lång" ; +//STRIP001 Text [ dutch ] = "Fout: tekenreeks te lang" ; +//STRIP001 Text [ spanish ] = "Error: Cadena de caracteres demasiado larga" ; +//STRIP001 Text [ english_us ] = "Error: String overflow" ; +//STRIP001 Text[ chinese_simplified ] = "错误:å—串太é•?"; +//STRIP001 Text[ russian ] = "Îøèáêà: ñòðîêà ñèìâîëîâ ñëèøêî?äëèííàÿ"; +//STRIP001 Text[ polish ] = "B³¹d: Za d³ugi ci¹g znaków"; +//STRIP001 Text[ japanese ] = "エラãƒ? æ–‡å—列ãŒé•·ã™ãŽã¾ã?"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:å—串太é•?"; +//STRIP001 Text[ arabic ] = "ÎØ? ÓáÓá?ÇáÃÍÑÝ ÃØæá ãä ÇáÍÏ ÇáÃÞÕì"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: ÕðåñâïëéêÜ ìåãÜëï ìÞêï?áêïëïõèßáò ÷áñáêôÞñùí"; +//STRIP001 Text[ korean ] = "오류: 문ìžì—´ì´ 너무 ê¹ë‹ˆë‹?"; +//STRIP001 Text[ turkish ] = "Hata: Karakter zinciri çok uzun"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: sobreeiximent de la cadena"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: สายà¸à¸±à¸à¸‚ระล้น"; +//STRIP001 Text[ czech ] = "Chyba: PÅ™eteÄenà řetÄ›zce"; +//STRIP001 Text[ hebrew ] = "Fehler: Zeichenkette zu lang"; +//STRIP001 Text[ hindi ] = "गलती: सà¥à¤Ÿà¥à¤°à¤¿à¤‚ग अधिकता"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_STACK_OVF +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Fehler: Interner Überlauf : Fehler: Interner šberlauf */ +//STRIP001 Text = "Fehler: Interner Überlauf" ; +//STRIP001 Text [ ENGLISH ] = "Error: Internal overflow" ; +//STRIP001 Text [ norwegian ] = "Error: Internal overflow" ; +//STRIP001 Text [ italian ] = "Errore: overflow interno" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Transbordo interno" ; +//STRIP001 Text [ portuguese ] = "Erro: excesso de capacidade interna" ; +//STRIP001 Text [ finnish ] = "Virhe: sisäinen ylivuoto" ; +//STRIP001 Text [ danish ] = "Fejl: internt overløb" ; +//STRIP001 Text [ french ] = "Erreur : dépassement des capacités internes" ; +//STRIP001 Text [ swedish ] = "Fel: internt spill" ; +//STRIP001 Text [ dutch ] = "Fout: interne overloop" ; +//STRIP001 Text [ spanish ] = "Error: Desbordamiento interno" ; +//STRIP001 Text [ english_us ] = "Error: Internal overflow" ; +//STRIP001 Text[ chinese_simplified ] = "错误:内部溢å€?"; +//STRIP001 Text[ russian ] = "Îøèáêà: âíóòðåííåå ïåðåïîëíåíèå"; +//STRIP001 Text[ polish ] = "B³¹d: Wewnêtrzne przepe³nienie"; +//STRIP001 Text[ japanese ] = "エラãƒ? 内部ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ•ãƒãƒ¼"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:內部溢å€?"; +//STRIP001 Text[ arabic ] = "ÎØ? ÝÇÆÖ ÏÇÎá?"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Åóùôåñéê?ðñüâëçìá õðåñ÷åßëéóçò"; +//STRIP001 Text[ korean ] = "오류: 내부 오버플로ìš?"; +//STRIP001 Text[ turkish ] = "Hata: Ýç taþýma çok uzun"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: sobreeiximent intern"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: ส่วนล้นภายใน"; +//STRIP001 Text[ czech ] = "Chyba: VnitÅ™nà pÅ™eteÄenÃ"; +//STRIP001 Text[ hebrew ] = "Fehler: Interner Ãœberlauf"; +//STRIP001 Text[ hindi ] = "गलती: à¤à¥€à¤¤à¤°à¥€ अधिकता"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_SYNTAX +//STRIP001 { +//STRIP001 Text = "Interner Syntaxfehler" ; +//STRIP001 Text [ ENGLISH ] = "internal syntactical error" ; +//STRIP001 Text [ norwegian ] = "internal syntactical error" ; +//STRIP001 Text [ italian ] = "errore di sintassi interno" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro de sintaxe interno" ; +//STRIP001 Text [ portuguese ] = "Erro de sintaxe interno" ; +//STRIP001 Text [ finnish ] = "Sisäinen syntaksivirhe" ; +//STRIP001 Text [ danish ] = "Intern syntaksfejl" ; +//STRIP001 Text [ french ] = "Erreur de syntaxe interne" ; +//STRIP001 Text [ swedish ] = "Internt syntaxfel" ; +//STRIP001 Text [ dutch ] = "Interne syntaxisfout" ; +//STRIP001 Text [ spanish ] = "Error interno de sintaxis" ; +//STRIP001 Text [ english_us ] = "Internal syntactical error" ; +//STRIP001 Text[ chinese_simplified ] = "内部è¯æ³•é”™è¯¯"; +//STRIP001 Text[ russian ] = "Âíóòðåííÿÿ ñèíòàêñè÷åñê? îøèáêà"; +//STRIP001 Text[ polish ] = "Wewnêtrzny b³¹d sk³adni"; +//STRIP001 Text[ japanese ] = "内部ã®ã‚·ãƒ³ã‚¿ãƒƒã‚¯ã‚¹ã‚¨ãƒ©ãƒ¼"; +//STRIP001 Text[ chinese_traditional ] = "內部語法錯誤"; +//STRIP001 Text[ arabic ] = "ÎØ? ÏÇÎá?Ýí ÈäÇÁ ÇáÌãáÉ"; +//STRIP001 Text[ greek ] = "Åóùôåñéê?óöÜëìá óýíôáîçò"; +//STRIP001 Text[ korean ] = "내부ì ?구문 오류"; +//STRIP001 Text[ turkish ] = "Ýç söz dizimi hatas?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error sintàctic intern"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาดทางไวยà¸à¸£à¸“์ภายใà¸?"; +//STRIP001 Text[ czech ] = "Internà syntaktická chyba"; +//STRIP001 Text[ hebrew ] = "Interner Syntaxfehler"; +//STRIP001 Text[ hindi ] = "à¤à¥€à¤¤à¤°à¥€ सिनà¥à¤Ÿà¤¾à¤•à¥à¤Ÿà¤¿à¤•à¤² गलती"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_CIRC_REF +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Fehler: Zirkuläre Referenz : Fehler: Zirkulõre Referenz */ +//STRIP001 Text = "Fehler: Zirkuläre Referenz" ; +//STRIP001 Text [ ENGLISH ] = "Error: Circular reference" ; +//STRIP001 Text [ norwegian ] = "Error: Circular reference" ; +//STRIP001 Text [ italian ] = "Errore: riferimento circolare" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Referência circular" ; +//STRIP001 Text [ portuguese ] = "Erro: referência circular" ; +//STRIP001 Text [ finnish ] = "Virhe: kehäviittaus" ; +//STRIP001 Text [ danish ] = "Fejl: circulær reference" ; +//STRIP001 Text [ french ] = "Erreur : référence circulaire" ; +//STRIP001 Text [ swedish ] = "Fel: cirkulär referens" ; +//STRIP001 Text [ dutch ] = "Fout: kringverwijzing" ; +//STRIP001 Text [ spanish ] = "Error: Referencia circular" ; +//STRIP001 Text [ english_us ] = "Error: Circular reference" ; +//STRIP001 Text[ chinese_simplified ] = "错误:循环å¼å¼•ç”¨"; +//STRIP001 Text[ russian ] = "Îøèáêà: èòåðàöèîíí? ññûëêà"; +//STRIP001 Text[ polish ] = "B³¹d: Odwo³anie cykliczne"; +//STRIP001 Text[ japanese ] = "エラãƒ? 循環å‚ç…§"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:循環å¼åƒç…§"; +//STRIP001 Text[ arabic ] = "ÎØ? ãÑÌÚ ãÊßÑ?"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Êõêëéê?áíáöïñ?"; +//STRIP001 Text[ korean ] = "오류: 순환 참조"; +//STRIP001 Text[ turkish ] = "Hata: Döngüsel referans"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: referència circular"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: à¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¹à¸šà¸šà¸§à¸‡à¸à¸¥à¸¡"; +//STRIP001 Text[ czech ] = "Chyba: Cyklický odkaz"; +//STRIP001 Text[ hebrew ] = "Fehler: Zirkuläre Referenz"; +//STRIP001 Text[ hindi ] = "गलती: चकà¥à¤°à¤¾à¤•à¤¾à¤° रेफरेनà¥à¤¸"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_NO_NAME +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Fehler: Ungültiger Name : Fehler: Ung³ltiger Name */ +//STRIP001 Text = "Fehler: Ungültiger Name" ; +//STRIP001 Text [ ENGLISH ] = "Error: Illegal Name" ; +//STRIP001 Text [ norwegian ] = "Error: Illegal Name" ; +//STRIP001 Text [ italian ] = "Errore: nome non ammesso" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Nome inválido" ; +//STRIP001 Text [ portuguese ] = "Erro: nome incorrecto" ; +//STRIP001 Text [ finnish ] = "Virhe: virheellinen nimi" ; +//STRIP001 Text [ danish ] = "Fejl: ugyldigt navn" ; +//STRIP001 Text [ french ] = "Erreur : nom incorrect" ; +//STRIP001 Text [ swedish ] = "Fel: ogiltigt namn" ; +//STRIP001 Text [ dutch ] = "Fout: ongeldige naam" ; +//STRIP001 Text [ spanish ] = "Error: Nombre no válido" ; +//STRIP001 Text [ english_us ] = "Error: Invalid name" ; +//STRIP001 Text[ chinese_simplified ] = "é”™è¯¯ï¼šæ— æ•ˆçš„å称"; +//STRIP001 Text[ russian ] = "Îøèáêà: íåäîïóñòèìîå èìÿ"; +//STRIP001 Text[ polish ] = "B³¹d: Nieprawid³owa nazwa"; +//STRIP001 Text[ japanese ] = "エラãƒ? 無効ãªåå‰ãŒä½¿ã‚ã‚Œã¦ã„ã¾ã?"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:無效的å稱"; +//STRIP001 Text[ arabic ] = "ÎØ? ÇÓ?Ûí?ÕÇáÍ"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Ìç áðïäåêôü üíïì?"; +//STRIP001 Text[ korean ] = "오류: 잘못ë?ì´ë¦„"; +//STRIP001 Text[ turkish ] = "Hata: Geçersiz ad"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: nom no vàlid"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: ชื่à¸à¹„ม่ถูà¸à¸•à¹‰à¸à¸‡"; +//STRIP001 Text[ czech ] = "Chyba: Neplatný název"; +//STRIP001 Text[ hebrew ] = "Fehler: Ungültiger Name"; +//STRIP001 Text[ hindi ] = "गलती: अमानà¥à¤¯ नाà¤?"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_NO_ADDIN +//STRIP001 { +//STRIP001 Text = "Fehler: AddIn nicht gefunden" ; +//STRIP001 Text [ ENGLISH ] = "Error: AddIn not found" ; +//STRIP001 Text [ norwegian ] = "Error: AddIn not found" ; +//STRIP001 Text [ italian ] = "Errore: AddIn non trovato" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Aditivo não encontrado" ; +//STRIP001 Text [ portuguese ] = "Erro: Add-in não encontrado" ; +//STRIP001 Text [ finnish ] = "Virhe: lisäosaa ei löydy" ; +//STRIP001 Text [ danish ] = "Fejl: Add-In blev ikke fundet" ; +//STRIP001 Text [ french ] = "Erreur : Add-in non détect?" ; +//STRIP001 Text [ swedish ] = "Fel: add-in hittades inte" ; +//STRIP001 Text [ dutch ] = "Fout: add in niet gevonden" ; +//STRIP001 Text [ spanish ] = "Error: Add-in no detectado" ; +//STRIP001 Text [ english_us ] = "Error: Add-in not found" ; +//STRIP001 Text[ chinese_simplified ] = "错误:沒有找åˆ?AddIn"; +//STRIP001 Text[ russian ] = "Îøèáêà: íå íàéäåí?ïîäêëþ÷àåìûå ìîäóëè"; +//STRIP001 Text[ polish ] = "B³¹d: nie znaleziono dodatku add-in"; +//STRIP001 Text[ japanese ] = "エラãƒ? アドインãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:沒有找åˆ?Add-In"; +//STRIP001 Text[ arabic ] = "Error: AddIn not found"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Äå?âñÝèçê?ôï AddIn"; +//STRIP001 Text[ korean ] = "오류: Add-inì?찾지 못했습니ë‹?"; +//STRIP001 Text[ turkish ] = "Hata:"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: no s'ha trobat AddIn"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: ไม่พบที่เพิ่มเข้าไà¸?"; +//STRIP001 Text[ czech ] = "Chyba: Modul nenalezen"; +//STRIP001 Text[ hebrew ] = "Fehler: AddIn nicht gefunden"; +//STRIP001 Text[ hindi ] = "गलती: जोड़à¥?इन नहीà¤?मिला"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_NO_MACRO +//STRIP001 { +//STRIP001 Text = "Fehler: Makro nicht gefunden" ; +//STRIP001 Text [ ENGLISH ] = "Error: Macro not found" ; +//STRIP001 Text [ norwegian ] = "Error: Macro not found" ; +//STRIP001 Text [ italian ] = "Errore: macro non trovata" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Macro não encontrada" ; +//STRIP001 Text [ portuguese ] = "Erro: Macro não encontrada" ; +//STRIP001 Text [ finnish ] = "Virhe: makroa ei löydy" ; +//STRIP001 Text [ danish ] = "Fejl: Makro blev ikke fundet" ; +//STRIP001 Text [ french ] = "Erreur : Macro non détectée" ; +//STRIP001 Text [ swedish ] = "Fel: makro hittades inte" ; +//STRIP001 Text [ dutch ] = "Fout: Macro niet gevonden" ; +//STRIP001 Text [ spanish ] = "Error: No se ha encontrado la macro" ; +//STRIP001 Text [ english_us ] = "Error: Macro not found" ; +//STRIP001 Text[ chinese_simplified ] = "错误:没有找到å®"; +//STRIP001 Text[ russian ] = "Îøèáêà: ìàêðîñ íå íàéäåí"; +//STRIP001 Text[ polish ] = "B³¹d: nie znaleziono makra"; +//STRIP001 Text[ japanese ] = "エラãƒ? マクãƒãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚?"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:沒有找到巨é›?"; +//STRIP001 Text[ arabic ] = "Error: Macro not found"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Äå?âñÝèçê??ìáêñïåíôïë?"; +//STRIP001 Text[ korean ] = "오류: 매í¬ë¡œë¥¼ 찾지 못했습니ë‹?"; +//STRIP001 Text[ turkish ] = "Hata: Makro bulunamad?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: no s'ha trobat la macro"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: ไม่พบมาโคร"; +//STRIP001 Text[ czech ] = "Chyba: Makro nenalezeno"; +//STRIP001 Text[ hebrew ] = "Fehler: Makro nicht gefunden"; +//STRIP001 Text[ hindi ] = "गलती: मॉकà¥à¤°à¥‹ नहीà¤?मिला"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_NO_REF +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Fehler: Ungültiger Bezug : Fehler: Ung³ltiger Bezug */ +//STRIP001 Text = "Fehler: Ungültiger Bezug" ; +//STRIP001 Text [ ENGLISH ] = "Error: Not a valid reference" ; +//STRIP001 /* +//STRIP001 Text[norwegian] = "Error: Not a valid tablename"; +//STRIP001 Text[italian] = "Errore: Nome tabella non valido"; +//STRIP001 Text[portuguese_brazilian] = "Erro: não ?um nome de tabela válido"; +//STRIP001 Text[portuguese] = "Erro: Não ?nome de tabela válido"; +//STRIP001 Text[finnish] = "Virhe: Virheellinen taulukon nimi"; +//STRIP001 Text[danish] = "Fejl: Ikke et gyldigt tabelnavn"; +//STRIP001 Text[french] = "Erreur : nom de table incorrect"; +//STRIP001 Text[swedish] = "Fel: Inte ett giltigt tabellnamn"; +//STRIP001 Text[dutch] = "Fout: Ongeldige tabelnaam"; +//STRIP001 Text[spanish] = "Error: No es un nombre de tanla válido"; +//STRIP001 */ +//STRIP001 Text [ english_us ] = "Error: Not a valid reference" ; +//STRIP001 Text [ italian ] = "Errore: riferimento non ammesso" ; +//STRIP001 Text [ spanish ] = "Error: Referencia no válida" ; +//STRIP001 Text [ french ] = "Erreur : référence incorrecte" ; +//STRIP001 Text [ dutch ] = "Fout: ongeldige verwijzing" ; +//STRIP001 Text [ swedish ] = "Fel: ogiltig referens" ; +//STRIP001 Text [ danish ] = "Fejl: ugyldig reference" ; +//STRIP001 Text [ portuguese ] = "Erro: referência incorrecta" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Referência inválida" ; +//STRIP001 Text[ chinese_simplified ] = "é”™è¯¯ï¼šæ— æ•ˆçš„å¼•ç”¨"; +//STRIP001 Text[ russian ] = "Îøèáêà: íåäîïóñòèì? ññûëêà"; +//STRIP001 Text[ polish ] = "B³¹d: Nieprawid³owa odwo³anie"; +//STRIP001 Text[ japanese ] = "エラãƒ? 無効ãªå‚ç…§ã§ã?"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:無效的引用"; +//STRIP001 Text[ arabic ] = "ÎØ? ãÑÌÚ Ûí?ÕÇáÍ"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Ìç Ýãêõñç áíáöïñ?"; +//STRIP001 Text[ korean ] = "오류: ìœ íš¨í•˜ì§€ ì•Šì€ ì°¸ì¡°"; +//STRIP001 Text[ turkish ] = "Hata: Geçersiz referans"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: la referència no és vàlida"; +//STRIP001 Text[ finnish ] = "Virhe: ei kelvollinen viite"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: à¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¹„ม่ถูà¸à¸•à¹‰à¸à¸‡"; +//STRIP001 Text[ czech ] = "Chyba: Neplatný odkaz"; +//STRIP001 Text[ hebrew ] = "Fehler: Ungültiger Bezug"; +//STRIP001 Text[ hindi ] = "गलती: मानà¥à¤?रेफरेनà¥à¤¸ नहीà¤?है"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_NO_CONV +//STRIP001 { +//STRIP001 Text = "Fehler: Rechenverfahren konvergiert nicht" ; +//STRIP001 Text [ ENGLISH ] = "Error: Computation does not converge" ; +//STRIP001 Text [ norwegian ] = "Error: Computation does not converge" ; +//STRIP001 Text [ italian ] = "Errore: il calcolo non converge" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: O processo de cálculo não converge" ; +//STRIP001 Text [ portuguese ] = "Erro: o processo de cálculo não converge" ; +//STRIP001 Text [ finnish ] = "Virhe: lasku ei suppene" ; +//STRIP001 Text [ danish ] = "Fejl: beregningen konvergerer ikke" ; +//STRIP001 Text [ french ] = "Erreur : le calcul ne converge pas" ; +//STRIP001 Text [ swedish ] = "Fel: beräkningen konvergerar inte" ; +//STRIP001 Text [ dutch ] = "Fout: berekening convergeert niet" ; +//STRIP001 Text [ spanish ] = "Error: El proceso de cálculo no converge" ; +//STRIP001 Text [ english_us ] = "Error: Calculation does not converge" ; +//STRIP001 Text[ chinese_simplified ] = "错误: è¿ç®—过程ä¸æ”¶æ•?"; +//STRIP001 Text[ russian ] = "Îøèáêà: âû÷èñëåí? íå ñõîäÿòñÿ"; +//STRIP001 Text[ polish ] = "B³¹d: Proces obliczeniowy nie jest zbie¿ny"; +//STRIP001 Text[ japanese ] = "エラãƒ? 計算プãƒã‚»ã‚¹ãŒåŽæŸã—ã¾ã›ã‚?"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:é‹ç®—éŽç¨‹ä¸æ”¶æ–‚"; +//STRIP001 Text[ arabic ] = "ÎØ? ÇáÚãáí?ÇáÍÓÇÈíÉ áÇ ÊÞÑÈ"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: ?äéáäéêáóßá õðïëïãéóìï?äå?óõãêëßíå?"; +//STRIP001 Text[ korean ] = "오류:ê³„ì‚°ë²•ì„ ìˆ˜ë ´í•˜ì§€ 않습니다."; +//STRIP001 Text[ turkish ] = "Hata: Hesaplama iþlemi yakýnsamýyor"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: el càlcul no coincideix"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: à¸à¸²à¸£à¸„ำนวณไม่ครà¸à¸šà¸„ลุà¸?"; +//STRIP001 Text[ czech ] = "Chyba: VýpoÄet nekonverguje"; +//STRIP001 Text[ hebrew ] = "Fehler: Rechenverfahren konvergiert nicht"; +//STRIP001 Text[ hindi ] = "गलती: गणना à¤à¤•à¤¤à¥à¤?नहीà¤?हà¥à¤?"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_NO_VALUE +//STRIP001 { +//STRIP001 Text = "Fehler: kein Ergebnis" ; +//STRIP001 Text [ ENGLISH ] = "Error: No Result" ; +//STRIP001 Text [ norwegian ] = "Error: No Result" ; +//STRIP001 Text [ italian ] = "Errore: senza risultato" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Nenhum resultado" ; +//STRIP001 Text [ portuguese ] = "Erro: sem resultado" ; +//STRIP001 Text [ finnish ] = "Virhe: ei tulosta" ; +//STRIP001 Text [ danish ] = "Fejl: intet resultat" ; +//STRIP001 Text [ french ] = "Erreur : sans résultat" ; +//STRIP001 Text [ swedish ] = "Fel: inget resultat" ; +//STRIP001 Text [ dutch ] = "Fout: geen resultaat" ; +//STRIP001 Text [ spanish ] = "Error: Sin resultado" ; +//STRIP001 Text [ english_us ] = "Error: No result" ; +//STRIP001 Text[ chinese_simplified ] = "é”™è¯¯ï¼šæ— ç»“æžœ"; +//STRIP001 Text[ russian ] = "Îøèáêà: íå?ðåçóëüòàòà"; +//STRIP001 Text[ polish ] = "B³¹d: Brak wyniku"; +//STRIP001 Text[ japanese ] = "エラãƒ? çµæžœã¯ã‚ã‚Šã¾ã›ã‚“"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:無çµæžœ"; +//STRIP001 Text[ arabic ] = "ÎØ? áÇ ÊæÌÏ äÊíÌ?"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: êáíÝíá áðïôÝëåóìá"; +//STRIP001 Text[ korean ] = "오류:결과가 없습니다."; +//STRIP001 Text[ turkish ] = "Hata: Sonu?yok"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: cap resultat"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: ไม่มีผลลัพธ์"; +//STRIP001 Text[ czech ] = "Chyba: Nenà výsledek"; +//STRIP001 Text[ hebrew ] = "Fehler: kein Ergebnis"; +//STRIP001 Text[ hindi ] = "गलती: कोà¤?नतीजा नहीà¤?"; +//STRIP001 }; +//STRIP001 String STR_LONG_ERR_NV +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Fehler: Wert nicht verfügbar : Fehler: Wert nicht verf³gbar */ +//STRIP001 Text = "Fehler: Wert nicht verfügbar" ; +//STRIP001 Text [ ENGLISH ] = "Error: Value not available" ; +//STRIP001 Text [ norwegian ] = "Error: Value not available" ; +//STRIP001 Text [ italian ] = "Errore: valore non disponibile" ; +//STRIP001 Text [ portuguese_brazilian ] = "Erro: Valor não disponível" ; +//STRIP001 Text [ portuguese ] = "Erro: valor não disponível" ; +//STRIP001 Text [ finnish ] = "Virhe: arvo ei ole käytettäviss?" ; +//STRIP001 Text [ danish ] = "Fejl: værdi er ikke tilgængelig" ; +//STRIP001 Text [ french ] = "Erreur : valeur non disponible" ; +//STRIP001 Text [ swedish ] = "Fel: värde ej tillgängligt" ; +//STRIP001 Text [ dutch ] = "Fout: waarde niet beschikbaar" ; +//STRIP001 Text [ spanish ] = "Error: Valor no disponible" ; +//STRIP001 Text [ english_us ] = "Error: Value not available" ; +//STRIP001 Text[ chinese_simplified ] = "错误:数值ä¸å˜åœ¨"; +//STRIP001 Text[ russian ] = "Îøèáêà: çíà÷åíèå íåäîñòóïíî"; +//STRIP001 Text[ polish ] = "B³¹d: Wartoœæ niedostêpna"; +//STRIP001 Text[ japanese ] = "エラãƒ? 使用ã§ãる値ãŒã‚ã‚Šã¾ã›ã‚?"; +//STRIP001 Text[ chinese_traditional ] = "錯誤:數值ä¸å˜åœ¨"; +//STRIP001 Text[ arabic ] = "ÎØ? ÇáÞíãÉ Ûí?ãÊæÝÑÉ"; +//STRIP001 Text[ greek ] = "ÓöÜëìá: Ìç äéáèÝóéì?ìåôáâëçô?"; +//STRIP001 Text[ korean ] = "오류: 사용í•?ìˆ?있는 ê°’ì´ ì—†ìŠµë‹ˆë‹¤."; +//STRIP001 Text[ turkish ] = "Hata: Deðer mevcut deðil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Error: valor no disponible"; +//STRIP001 Text[ thai ] = "ข้à¸à¸œà¸´à¸”พลาด: ค่าใช้ไม่ได้"; +//STRIP001 Text[ czech ] = "Chyba: Hodnota nenà dostupná"; +//STRIP001 Text[ hebrew ] = "Fehler: Wert nicht verfügbar"; +//STRIP001 Text[ hindi ] = "Error: Value not available"; +//STRIP001 }; +//STRIP001 String STR_ODER_SO +//STRIP001 { +//STRIP001 Text = "%s oder so" ; +//STRIP001 Text [ ENGLISH ] = "Something like %s" ; +//STRIP001 Text [ norwegian ] = "Noe som %s" ; +//STRIP001 Text [ italian ] = "%s o simile..." ; +//STRIP001 Text [ portuguese_brazilian ] = "%s ou similar" ; +//STRIP001 Text [ portuguese ] = "%s ou semelhante" ; +//STRIP001 Text [ finnish ] = "%s tai vastaava" ; +//STRIP001 Text [ danish ] = "%s eller lignende" ; +//STRIP001 Text [ french ] = "%s ou similaire" ; +//STRIP001 Text [ swedish ] = "%s eller liknande" ; +//STRIP001 Text [ dutch ] = "%s of iets dergelijks" ; +//STRIP001 Text [ spanish ] = "%s o similar" ; +//STRIP001 Text [ english_us ] = "%s or similar" ; +//STRIP001 Text[ chinese_simplified ] = "%s 或è€?"; +//STRIP001 Text[ russian ] = "%s èë?ïîõîæå?"; +//STRIP001 Text[ polish ] = "%s lub podobnie"; +//STRIP001 Text[ japanese ] = "%s ã¾ãŸã¯ãã‚Œã«é¡žä¼¼ã—ãŸã‚‚ã®"; +//STRIP001 Text[ chinese_traditional ] = "%s 或è€?"; +//STRIP001 Text[ arabic ] = "%s Ãæ ãÇ ÔÇÈå Ðá?"; +//STRIP001 Text[ greek ] = "%s ?ïìïßùò"; +//STRIP001 Text[ korean ] = "%s ë˜ëŠ” ìœ ì‚¬"; +//STRIP001 Text[ turkish ] = "%s ya da benzer"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "%s o similar"; +//STRIP001 Text[ thai ] = "%s หรืà¸à¸„ล้ายคลึà¸?"; +//STRIP001 Text[ czech ] = "%s nebo podobné"; +//STRIP001 Text[ hebrew ] = "%s oder so"; +//STRIP001 Text[ hindi ] = "%s अथवा सदृश"; +//STRIP001 }; + String STR_GRIDCOLOR + { + Text [ de ] = "Gitterfarbe" ; + Text [ en-US ] = "Grid color" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Cor da grelha"; + Text[ ru ] = "Цвет Ñетки"; + Text[ el ] = "ΧÏώμα πλÎγματος"; + Text[ nl ] = "Rasterkleur"; + Text[ fr ] = "Couleur de la grille"; + Text[ es ] = "Color de la cuadrÃcula"; + Text[ fi ] = "Ruudukon väri"; + Text[ ca ] = "Color de la graella"; + Text[ it ] = "Colore griglia"; + Text[ da ] = "Gitterfarve"; + Text[ sv ] = "Gitterfärg"; + Text[ pl ] = "Kolor siatki"; + Text[ pt-BR ] = "Cor da grade"; + Text[ th ] = "สีเส้นตาราง"; + Text[ ja ] = "グリッド線ã®è‰²"; + Text[ ko ] = "ëˆˆê¸ˆì„ ìƒ‰ìƒ"; + Text[ zh-CN ] = "ç½‘æ ¼çº¿é¢œè‰²"; + Text[ zh-TW ] = "ç¶²æ ¼ç·šé¡è‰²"; + Text[ tr ] = "Kılavuz çizgi rengi"; + Text[ hi-IN ] = "जाल का रंग"; + Text[ ar ] = "لون الشبكة"; + Text[ he ] = "Gitterfarbe"; + }; +//STRIP001 String STR_MERGE_NOTEMPTY +//STRIP001 { +//STRIP001 Text = "Soll der Inhalt der verdeckten Zellen in die erste Zelle verschoben werden?" ; +//STRIP001 Text [ ENGLISH ] = "Move the contents of the hidden cells into the first cell?" ; +//STRIP001 Text [ norwegian ] = "Move the contents of the hidden cells into the first cell?" ; +//STRIP001 Text [ italian ] = "Spostare il contenuto delle celle nascoste nella prima cella?" ; +//STRIP001 Text [ portuguese_brazilian ] = "O conteúdo das células ocultas devem ser movidas para o primeira célula?" ; +//STRIP001 Text [ portuguese ] = "Deseja mover o conteúdo das células ocultas para a primeira célula?" ; +//STRIP001 Text [ finnish ] = "Siirretäänk?piilotettujen solujen sisält?ensimmäiseen soluun?" ; +//STRIP001 Text [ danish ] = "Skal den skjulte celles indhold flyttes til den første celle?" ; +//STRIP001 Text [ french ] = "Déplacer le contenu des cellules cachées dans la première cellule ?" ; +//STRIP001 Text [ swedish ] = "Skall de dolda cellernas innehåll flyttas till den första cellen?" ; +//STRIP001 Text [ dutch ] = "De inhoud van de verborgen cellen naar de eerste cel verplaatsen?" ; +//STRIP001 Text [ spanish ] = "¿Desea desplazar el contenido de las filas ocultas a la primera fila?" ; +//STRIP001 Text [ english_us ] = "Should the contents of the hidden cells be moved into the first cell?" ; +//STRIP001 Text[ chinese_simplified ] = "您è¦å°†æ ‡è®°çš„å•å…ƒæ ¼å†…容移入到第一个å•å…ƒæ ¼å†…å—ï¼?"; +//STRIP001 Text[ russian ] = "Ïåðåìåñòèò?ñîäåðæèìîå ñï?òàííûõ ÿ÷ååê ?ïåðâóþ ÿ÷åéê?"; +//STRIP001 Text[ polish ] = "Czy do pierwszej komórki ma by?przeniesiona zawartoœæ ukrytych komórek?"; +//STRIP001 Text[ japanese ] = "é¸æŠžç¯„囲ã®ã‚»ãƒ«ã®å†…容ã™ã¹ã¦ã‚’çµåˆå¾Œã®ã‚»ãƒ«ã«è¡¨ç¤ºã—ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "您è¦å°‡éš±å…¥çš„儲å˜æ ¼å…§å®¹ç§»å…¥ç¬¬ä¸€å€‹å„²å˜æ ¼å…§ï¼Ÿ"; +//STRIP001 Text[ arabic ] = "åá ÊÑíÏ ÊÍÑí?ãÍÊæíÇ?ÇáÎáÇí?ÇáãÎÝí?Åá?ÇáÎáíÉ ÇáÃæáì?"; +//STRIP001 Text[ greek ] = "Íá ìåôáêéíçèå?ôï ðåñéå÷üìåí?ôù?êñõöþí êåëéþí ðñïò ôï ðñþô?êåëß;"; +//STRIP001 Text[ korean ] = "숨겨ì§?ì…€ì?ë‚´ìš©ì?ì²?번째 ì…€ë¡?ì´ë™ë˜ì–´ì•?합니ê¹?"; +//STRIP001 Text[ turkish ] = "Gizli hücrelerin içeriði birinci hücreye taþýnsýn m?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "S'ha de moure el contingut de les cel.les ocultes a la primera cel.la?"; +//STRIP001 Text[ thai ] = "ควรย้ายเนื้à¸à¸«à¸²à¸‚à¸à¸‡à¹€à¸‹à¸¥à¸¥à¹Œà¸—ี่ซ่à¸à¸™à¹„ปยังเซลล์à¹à¸£à¸à¸«à¸£à¸·à¸à¹„ม่?"; +//STRIP001 Text[ czech ] = "Má se pÅ™esunout obsah skrytých bunÄ›k do prvnà buňky?"; +//STRIP001 Text[ hebrew ] = "Soll der Inhalt der verdeckten Zellen in die erste Zelle verschoben werden?"; +//STRIP001 Text[ hindi ] = "छिपाया हà¥à¤?कोषà¥à¤ ोà¤?का विषयों को पहिलà¤?कोषà¥à¤?मेà¤?सà¥à¤¥à¤¾à¤?परिवरà¥à¤¤à¤¨ करना है?"; +//STRIP001 }; +//STRIP001 String STR_CELL_FILTER +//STRIP001 { +//STRIP001 Text = "Filter" ; +//STRIP001 Text [ ENGLISH ] = "Filter" ; +//STRIP001 Text [ norwegian ] = "Filter" ; +//STRIP001 Text [ italian ] = "Filtro" ; +//STRIP001 Text [ portuguese_brazilian ] = "Filtro" ; +//STRIP001 Text [ portuguese ] = "Filtro" ; +//STRIP001 Text [ finnish ] = "Suodatus" ; +//STRIP001 Text [ danish ] = "Filter" ; +//STRIP001 Text [ french ] = "Filtre" ; +//STRIP001 Text [ swedish ] = "Filter" ; +//STRIP001 Text [ dutch ] = "Filter" ; +//STRIP001 Text [ spanish ] = "Filtro" ; +//STRIP001 Text [ english_us ] = "Filter" ; +//STRIP001 Text[ chinese_simplified ] = "ç›é€?"; +//STRIP001 Text[ russian ] = "Ôèëüòð"; +//STRIP001 Text[ polish ] = "Filtr"; +//STRIP001 Text[ japanese ] = "フィルタ"; +//STRIP001 Text[ chinese_traditional ] = "篩é¸"; +//STRIP001 Text[ arabic ] = "ÝáÊÑ"; +//STRIP001 Text[ greek ] = "Ößëôñï"; +//STRIP001 Text[ korean ] = "í•„í„°"; +//STRIP001 Text[ turkish ] = "Filtre"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Filtre"; +//STRIP001 Text[ thai ] = "ตัวà¸à¸£à¸à¸?"; +//STRIP001 Text[ czech ] = "Filtr"; +//STRIP001 Text[ hebrew ] = "â€®×¡×™× ×•×Ÿâ€?"; +//STRIP001 Text[ hindi ] = "फिलà¥à¤Ÿà¤°"; +//STRIP001 }; + String STR_TARGETNOTFOUND + { + Text [ de ] = "Der Zieldatenbankbereich existiert nicht." ; + Text [ en-US ] = "The target database range does not exist." ; + Text [ x-comment ] = " "; + Text[ pt ] = "A área da base de dados de destino não existe."; + Text[ ru ] = "Ðе ÑущеÑтвует диапазон базы данных назначениÑ."; + Text[ el ] = "Δεν υπάÏχει πεÏιοχή βάσης δεδομÎνων Ï€ÏοοÏισμοÏ."; + Text[ nl ] = "Het doeldatabasebereik bestaat niet."; + Text[ fr ] = "La plage cible de la base de données n'existe pas."; + Text[ es ] = "El área de la base de datos destino no existe."; + Text[ fi ] = "Kohdetietokanta-aluetta ei ole."; + Text[ ca ] = "L'à rea de la base de dades de destinació no existeix."; + Text[ it ] = "L'area dati di destinazione non esiste."; + Text[ da ] = "MÃ¥ldatabaseomrÃ¥det eksisterer ikke."; + Text[ sv ] = "MÃ¥ldatabasomrÃ¥det existerar inte."; + Text[ pl ] = "Docelowy zakres w bazie danych nie istnieje."; + Text[ pt-BR ] = "O intervalo de destino do banco de dados não existe."; + Text[ th ] = "ไม่มีช่วงà¸à¸²à¸™à¸‚้à¸à¸¡à¸¹à¸¥à¹€à¸›à¹‰à¸²à¸«à¸¡à¸²à¸¢à¸à¸¢à¸¹à¹ˆ"; + Text[ ja ] = "ターゲットデータベースãŒã‚ã‚Šã¾ã›ã‚“。"; + Text[ ko ] = "ëŒ€ìƒ ë°ì´í„°ë² ì´ìŠ¤ 범위가 없습니다."; + Text[ zh-CN ] = "è¿™ä¸ªç›®æ ‡æ•°æ®åŒºåŸŸå·²ç»å˜åœ¨ã€‚"; + Text[ zh-TW ] = "這個目標資料庫å€åŸŸå·²ç¶“å˜åœ¨ã€‚"; + Text[ tr ] = "Hedef veritabanı aralığı mevcut deÄŸil."; + Text[ hi-IN ] = "लकà¥à¤· का लेखासंचय फैलाव असà¥à¤¤à¤¿à¤¤à¥à¤µ में नहीं है ।"; + Text[ ar ] = "نطاق قاعدة البيانات الهد٠غير موجود."; + Text[ he ] = "Der Zieldatenbankbereich existiert nicht."; + }; + String STR_TABLE_OP + { + Text [ de ] = "MEHRFACHOPERATION" ; + Text [ en-US ] = "MULTIPLE.OPERATIONS" ; + Text [ x-comment ] = " "; + Text[ pt ] = "OPERAÇÃO.MÚLTIPLA"; + Text[ ru ] = "СОВМЕЩ.ОПЕРÐЦИИ"; + Text[ el ] = "ΠΟΛΛΑΠΛΕΣ.ΠΡΑΞΕΙΣ"; + Text[ nl ] = "MEERVOUD.OPERATIE"; + Text[ fr ] = "OPERATION.MULTIPLE"; + Text[ es ] = "OPERACIÓN.MÚLTIPLE"; + Text[ fi ] = "MULTIPLE_OPERATIONS"; + Text[ ca ] = "MULTIPLE.OPERATIONS"; + Text[ it ] = "OPERAZIONE.MULTIPLA"; + Text[ da ] = "MULTIOPERATION"; + Text[ sv ] = "MULTIPEL.OPERATION"; + Text[ pl ] = "OPERACJE.WIELOKROTNE"; + Text[ pt-BR ] = "OPERAÇÕES.MÚLTIPLAS"; + Text[ th ] = "หลาย.ปà¸à¸´à¸šà¸±à¸•à¸´à¸à¸²à¸£"; + Text[ ja ] = "複数演算"; + Text[ ko ] = "다중 ì—°ì‚°"; + Text[ zh-CN ] = "多é‡è®¡ç®—"; + Text[ zh-TW ] = "樞ç´åˆ†æžè¡¨"; + Text[ tr ] = "ÇOKLU.Ä°ÅžLEMLER"; + Text[ hi-IN ] = "MULTIPLE.OPERATIONS"; + Text[ ar ] = "عمليات متعددة"; + Text[ he ] = "MEHRFACHOPERATION"; + }; +//STRIP001 String STR_INVALID_EPS +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Ungültige Schrittweite : Ung³ltige Schrittweite */ +//STRIP001 Text = "Ungültige Schrittweite" ; +//STRIP001 Text [ ENGLISH ] = "Invalid increment" ; +//STRIP001 Text [ norwegian ] = "Invalid increment" ; +//STRIP001 Text [ italian ] = "Incremento non valido" ; +//STRIP001 Text [ portuguese_brazilian ] = "Incremento inválido" ; +//STRIP001 Text [ portuguese ] = "Incremento não válido" ; +//STRIP001 Text [ finnish ] = "Virheellinen lisäys" ; +//STRIP001 Text [ danish ] = "Ugyldig trinvidde" ; +//STRIP001 Text [ french ] = "Précision incorrecte" ; +//STRIP001 Text [ swedish ] = "Ogiltig steglängd" ; +//STRIP001 Text [ dutch ] = "Ongeldige stapgrootte" ; +//STRIP001 Text [ spanish ] = "Incremento no válido" ; +//STRIP001 Text [ english_us ] = "Invalid increment" ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ•ˆçš„é€’å¢ž"; +//STRIP001 Text[ russian ] = "Íåïðàâèëüíûé øà?"; +//STRIP001 Text[ polish ] = "Nieprawid³owy przyrost"; +//STRIP001 Text[ japanese ] = "増分値ãŒæ£ã—ãã‚ã‚Šã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "無效的éžå¢?"; +//STRIP001 Text[ arabic ] = "ÒíÇÏ?Ûí?ÕÇáÍ?"; +//STRIP001 Text[ greek ] = "Ìç Ýãêõñï âÞìá"; +//STRIP001 Text[ korean ] = "잘못ë?ì¦ê°€"; +//STRIP001 Text[ turkish ] = "Geçersiz aþama"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "L'increment no és vàlid"; +//STRIP001 Text[ thai ] = "ส่วนเพิ่มไม่ถูà¸à¸•à¹‰à¸à¸‡"; +//STRIP001 Text[ czech ] = "Neplatný pÅ™Ãrůstek"; +//STRIP001 Text[ hebrew ] = "Ungültige Schrittweite"; +//STRIP001 Text[ hindi ] = "अमानà¥à¤¯ बढती"; +//STRIP001 }; +//STRIP001 String STR_UNDO_TABOP +//STRIP001 { +//STRIP001 Text = "Mehrfachoperation" ; +//STRIP001 Text [ ENGLISH ] = "Tableoperation" ; +//STRIP001 Text [ norwegian ] = "Tableoperation" ; +//STRIP001 Text [ italian ] = "Operazione multipla" ; +//STRIP001 Text [ portuguese_brazilian ] = "Operações múltiplas" ; +//STRIP001 Text [ portuguese ] = "Operação múltipla" ; +//STRIP001 Text [ finnish ] = "Useita toimintoja" ; +//STRIP001 Text [ danish ] = "Multioperation" ; +//STRIP001 Text [ french ] = "Opération multiple" ; +//STRIP001 Text [ swedish ] = "Multipel räkneoperation" ; +//STRIP001 Text [ dutch ] = "Meervoudige operatie" ; +//STRIP001 Text [ spanish ] = "Operación múltiple" ; +//STRIP001 Text [ english_us ] = "Multiple operations" ; +//STRIP001 Text[ chinese_simplified ] = "多é‡è¿ç®—"; +//STRIP001 Text[ russian ] = "Ñîâìåùåííû?îïåðàöèè"; +//STRIP001 Text[ polish ] = "Operacje wielokrotne"; +//STRIP001 Text[ japanese ] = "複数演算"; +//STRIP001 Text[ chinese_traditional ] = "樞ç´åˆ†æžè¡?"; +//STRIP001 Text[ arabic ] = "ÚãáíÇÊ ãÊÚÏÏÉ"; +//STRIP001 Text[ greek ] = "ÐïëëáðëÝ?ðñÜîåé?"; +//STRIP001 Text[ korean ] = "다중 ì—°ì‚°"; +//STRIP001 Text[ turkish ] = "Çoklu iþlemler"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Operacions múltiples"; +//STRIP001 Text[ thai ] = "หลายปà¸à¸´à¸šà¸±à¸•à¸´à¸à¸²à¸£"; +//STRIP001 Text[ czech ] = "VÃcenásobné operace"; +//STRIP001 Text[ hebrew ] = "Mehrfachoperation"; +//STRIP001 Text[ hindi ] = "बहà¥à¤®à¥à¤–ी कारà¥à¤?"; +//STRIP001 }; +//STRIP001 String STR_INVALID_AFNAME +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Sie haben einen ungültigen Namen angegeben.\nDas AutoFormat konnte nicht angelegt werden.\nWählen Sie einen anderen Namen. : Sie haben einen ungültigen Namen angegeben.\nDas Autoformat konnte nicht angelegt werden.\nWählen Sie einen anderen Namen. */ +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Sie haben einen ungültigen Namen angegeben.\nDas AutoFormat konnte nicht angelegt werden.\nWählen Sie einen anderen Namen. : Sie haben einen ungültigen Namen angegeben.\nDas Autoformat konnte nicht angelegt werden.\nWählen Sie einen anderen Namen. */ +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Sie haben einen ungültigen Namen angegeben.\nDas AutoFormat konnte nicht angelegt werden.\nWählen Sie einen anderen Namen. : Sie haben einen ung³ltigen Namen angegeben.\nDas AutoFormat konnte nicht angelegt werden.\nWõhlen Sie einen anderen Namen. */ +//STRIP001 Text = "Sie haben einen ungültigen Namen angegeben.\nDas AutoFormat konnte nicht angelegt werden.\nWählen Sie einen anderen Namen." ; +//STRIP001 Text [ ENGLISH ] = "You entered an invalid name.\nThe desired AutoFormat could not be createdTry again using a different name." ; +//STRIP001 Text [ norwegian ] = "You entered an invalid name.\nThe desired AutoFormat could not be createdTry again using a different name." ; +//STRIP001 Text [ italian ] = "Nome immesso non valido.\nImpossibile creare la formattazione automatica desiderata.\nScegliete un nome diverso." ; +//STRIP001 Text [ portuguese_brazilian ] = "Foi digitado um nome inválido.\nA AutoFormatação não pôde ser criada. \nTente novamente usando um nome diferente." ; +//STRIP001 Text [ portuguese ] = "O nome fornecido não ?válido.\nImpossível criar o AutoFormato.\nEscolha outro nome." ; +//STRIP001 Text [ finnish ] = "Olet syöttänyt virheellisen nimen.\nAutomaattista muotoilua ei voitu luoda. \nYrit?uudelleen käyttämäll?eri nime?" ; +//STRIP001 Text [ danish ] = "Du har angivet et ugyldigt navn.\nDet var ikke muligt at oprette det ønskede AutoFormat\nVælg et andet navn." ; +//STRIP001 Text [ french ] = "Vous avez indiqu?un nom incorrect.\nImpossible de créer l'AutoFormat.\nChoisissez un autre nom." ; +//STRIP001 Text [ swedish ] = "Du har angett ett ogiltigt namn.\nDet gick inte att skapa autoformatet.\nVälj ett annat namn." ; +//STRIP001 Text [ dutch ] = "U gebruikte een ongeldige naam.\nDe gewenste AutoOpmaak kan niet worden uitgevoerd.\nKies een andere naam." ; +//STRIP001 Text [ spanish ] = "Ha indicado un nombre no válido.\nEl Formateado automático no se ha podido efectuar.\nSeleccione otro nombre." ; +//STRIP001 Text [ ENGLISH_US ] = "You have entered an invalid name.\nAutoFormat could not be created. \nTry again using a different name." ; +//STRIP001 Text[ chinese_simplified ] = "æ‚¨è¾“å…¥äº†ä¸€ä¸ªæ— æ•ˆçš„å称。\næ— æ³•å»ºç«‹è‡ªåŠ¨æ ¼å¼ã€‚\n请您输入一个有效的å称ã€?"; +//STRIP001 Text[ russian ] = "Âû ââåë?íåäîïóñòèìîå èìÿ.\nÍåâîçìîæíî ñîçäàò?Àâòîôîðìàò.\nÂûáåðèòå äðóãîå èìÿ."; +//STRIP001 Text[ polish ] = "Wpisano nieprawid³ow?nazw?\nUtworzenie Autoformatowania nie by³o mo¿liwe.\nWybierz inn?nazw?"; +//STRIP001 Text[ japanese ] = "入力ã—ãŸåå‰ã¯ç„¡åŠ¹ã§ã™ã€‚\nオートフォーマットã¯ä½œæˆã§ãã¾ã›ã‚“。\nã»ã‹ã®åå‰ã‚’é¸æŠžã—ã¦ãã ã•ã„ã€?"; +//STRIP001 Text[ chinese_traditional ] = "您輸入了一個無效的å稱。\nç„¡æ³•å»ºç«‹è‡ªå‹•æ ¼å¼ã€‚\n請您輸入一個有效的å稱ã€?"; +//STRIP001 Text[ arabic ] = "áÞ?Þã?ÈÅÏÎÇá ÇÓ?Ûí?ÕÇáÍ.\nÊÚÐÑ ÅäÔÇ?ÇáÊäÓí?ÇáÊáÞÇÆí.\nÇáÑÌÇÁ ÇÎÊíÇÑ ÇÓ?ÂÎ?"; +//STRIP001 Text[ greek ] = "¸÷åô?åéóÜãå?Ýí?ìç Ýãêõñï üíïì? ?\nÁõôïÌïñö?äå?Þôáí äõíáôü?íá äçìéïõñãçèåß.\nÅðéëÝîôå Üëëï üíïì?"; +//STRIP001 Text[ korean ] = "잘못ë?ì´ë¦„ì?ìž…ë ¥í•˜ì…¨ìŠµë‹ˆë‹?.\\요구ë˜ëŠ” ìžë™ ì„œì‹ì?만들 ìˆ?없습니다. \n다른 ì´ë¦„ì?ì„ íƒí•˜ì‹ì‹œì˜¤."; +//STRIP001 Text[ turkish ] = "Girilen ad geçersiz.\nOtomatik formatlama yapýlamad?\nBaþka bir ad ile yeniden deneyin."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Heu introduït un nom no vàlid.\nNo s'ha pogut crear el formatatge automàtic. \nTorneu-ho a intentar amb un altre nom."; +//STRIP001 Text[ thai ] = "คุณใส่ชื่à¸à¹„ม่ถูà¸à¸•à¹‰à¸à¸‡.\nไม่สามารถสร้างรูปà¹à¸šà¸šà¸à¸±à¸•à¹‚นมัติได้ \nลà¸à¸‡à¹ƒà¸Šà¹‰à¸Šà¸·à¹ˆà¸à¸—ี่ต่างà¸à¸±à¸™à¸à¸µà¸à¸„รั้ง"; +//STRIP001 Text[ czech ] = "Zadali jste neplatný název.\nAutomatický formát nebyl vytvoÅ™en.\nZkuste zadat jiné jméno."; +//STRIP001 Text[ hebrew ] = "Sie haben einen ungültigen Namen angegeben.\nDas AutoFormat konnte nicht angelegt werden.\nWählen Sie einen anderen Namen."; +//STRIP001 Text[ hindi ] = "आपका पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ की हà¥à¤¯à¥€ नाà¤?अमानà¥à¤¯ है ।\nसà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रचना को उतà¥à¤ªà¤¨à¥à¤?नहीà¤?कर सकते है ।\nà¤à¤¿à¤¨à¥à¤?नाà¤?के साà¤?फिà¤?से पà¥à¤°à¤¯à¤¤à¥à¤?कीजिà¤?à¥?"; +//STRIP001 }; + String STR_AREA + { + Text [ de ] = "Bereich" ; + Text [ en-US ] = "Range" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Ãrea"; + Text[ ru ] = "Диапазон"; + Text[ el ] = "ΠεÏιοχή"; + Text[ nl ] = "Bereik"; + Text[ fr ] = "Plage"; + Text[ es ] = "Ãrea"; + Text[ fi ] = "Alue"; + Text[ ca ] = "à rea"; + Text[ it ] = "Area"; + Text[ da ] = "OmrÃ¥de"; + Text[ sv ] = "OmrÃ¥de"; + Text[ pl ] = "Zakres"; + Text[ pt-BR ] = "Intervalo"; + Text[ th ] = "ช่วง"; + Text[ ja ] = "範囲"; + Text[ ko ] = "범위"; + Text[ zh-CN ] = "区域"; + Text[ zh-TW ] = "å€åŸŸ"; + Text[ tr ] = "Aralık"; + Text[ hi-IN ] = "फैलाव"; + Text[ ar ] = "النطاق"; + Text[ he ] = "Bereich"; + }; +//STRIP001 String STR_YES +//STRIP001 { +//STRIP001 Text = "Ja" ; +//STRIP001 Text [ ENGLISH ] = "Yes" ; +//STRIP001 Text [ norwegian ] = "Ja" ; +//STRIP001 Text [ italian ] = "S?" ; +//STRIP001 Text [ portuguese_brazilian ] = "Sim" ; +//STRIP001 Text [ portuguese ] = "Sim" ; +//STRIP001 Text [ french ] = "Oui" ; +//STRIP001 Text [ dutch ] = "Ja" ; +//STRIP001 Text [ spanish ] = "S?" ; +//STRIP001 Text [ danish ] = "Ja" ; +//STRIP001 Text [ swedish ] = "Ja" ; +//STRIP001 Text [ finnish ] = "Kyll?" ; +//STRIP001 Text [ english_us ] = "Yes" ; +//STRIP001 Text[ chinese_simplified ] = "æ˜?"; +//STRIP001 Text[ russian ] = "Äà"; +//STRIP001 Text[ polish ] = "Tak"; +//STRIP001 Text[ japanese ] = "ã¯ã„"; +//STRIP001 Text[ chinese_traditional ] = "æ˜?"; +//STRIP001 Text[ arabic ] = "äÚ?"; +//STRIP001 Text[ greek ] = "Íá?"; +//STRIP001 Text[ korean ] = "ì˜?"; +//STRIP001 Text[ turkish ] = "Evet"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "S?"; +//STRIP001 Text[ thai ] = "ใชà¹?"; +//STRIP001 Text[ czech ] = "Ano"; +//STRIP001 Text[ hebrew ] = "‮כןâ€?"; +//STRIP001 Text[ hindi ] = "हाà¤?"; +//STRIP001 }; + String STR_NO + { + Text [ de ] = "Nein" ; + Text [ en-US ] = "No" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Não"; + Text[ ru ] = "Ðет"; + Text[ el ] = "Όχι"; + Text[ nl ] = "Nee"; + Text[ fr ] = "Non"; + Text[ es ] = "No"; + Text[ fi ] = "Ei"; + Text[ ca ] = "No"; + Text[ it ] = "No"; + Text[ da ] = "Nej"; + Text[ sv ] = "Nej"; + Text[ pl ] = "Nie"; + Text[ pt-BR ] = "Não"; + Text[ th ] = "ไม่ใช่"; + Text[ ja ] = "ã„ã„ãˆ"; + Text[ ko ] = "아니오"; + Text[ zh-CN ] = "å¦"; + Text[ zh-TW ] = "å¦"; + Text[ tr ] = "Hayır"; + Text[ hi-IN ] = "नहीं"; + Text[ ar ] = "لا"; + Text[ he ] = "‮ל×‬"; + }; + String STR_PROTECTION + { + Text [ de ] = "Schutz" ; + Text [ en-US ] = "Protection" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Protecção"; + Text[ ru ] = "Защита"; + Text[ el ] = "Î Ïοστασία"; + Text[ nl ] = "Beveiliging"; + Text[ fr ] = "Protection"; + Text[ es ] = "Protección"; + Text[ fi ] = "Suojaus"; + Text[ ca ] = "Protecció"; + Text[ it ] = "Protezione"; + Text[ da ] = "Beskyttelse"; + Text[ sv ] = "Skydd"; + Text[ pl ] = "Ochrona"; + Text[ pt-BR ] = "Proteção"; + Text[ th ] = "à¸à¸²à¸£à¸›à¹‰à¸à¸‡à¸à¸±à¸™"; + Text[ ja ] = "ä¿è·"; + Text[ ko ] = "보호"; + Text[ zh-CN ] = "ä¿æŠ¤"; + Text[ zh-TW ] = "ä¿è·"; + Text[ tr ] = "Koruma"; + Text[ hi-IN ] = "रकà¥à¤·à¤¾"; + Text[ ar ] = "الØماية"; + Text[ he ] = "Schutz"; + }; +//STRIP001 String STR_FORMULAS +//STRIP001 { +//STRIP001 Text = "Formeln" ; +//STRIP001 Text [ ENGLISH ] = "Formulas" ; +//STRIP001 Text [ norwegian ] = "Formulas" ; +//STRIP001 Text [ italian ] = "Formule" ; +//STRIP001 Text [ portuguese_brazilian ] = "Fórmulas" ; +//STRIP001 Text [ portuguese ] = "Fórmulas" ; +//STRIP001 Text [ french ] = "Formules" ; +//STRIP001 Text [ dutch ] = "Formules" ; +//STRIP001 Text [ spanish ] = "Fórmulas" ; +//STRIP001 Text [ danish ] = "Formler" ; +//STRIP001 Text [ swedish ] = "Formler" ; +//STRIP001 Text [ finnish ] = "Kaavat" ; +//STRIP001 Text [ english_us ] = "Formulas" ; +//STRIP001 Text[ chinese_simplified ] = "å…¬å¼"; +//STRIP001 Text[ russian ] = "Ôîðìóë?"; +//STRIP001 Text[ polish ] = "Formu³y"; +//STRIP001 Text[ japanese ] = "æ•°å¼"; +//STRIP001 Text[ chinese_traditional ] = "å…¬å¼"; +//STRIP001 Text[ arabic ] = "ÇáÕí?"; +//STRIP001 Text[ greek ] = "Ôýðï?"; +//STRIP001 Text[ korean ] = "수ì‹"; +//STRIP001 Text[ turkish ] = "Formüller"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Fórmules"; +//STRIP001 Text[ thai ] = "สูตร"; +//STRIP001 Text[ czech ] = "Vzorce"; +//STRIP001 Text[ hebrew ] = "Formeln"; +//STRIP001 Text[ hindi ] = "Formulas"; +//STRIP001 }; +//STRIP001 String STR_HIDE +//STRIP001 { +//STRIP001 Text = "Ausblenden" ; +//STRIP001 Text [ ENGLISH ] = "Hide" ; +//STRIP001 Text [ norwegian ] = "Hide" ; +//STRIP001 Text [ italian ] = "Nascondi" ; +//STRIP001 Text [ portuguese_brazilian ] = "Ocultar" ; +//STRIP001 Text [ portuguese ] = "Ocultar" ; +//STRIP001 Text [ french ] = "Masquer" ; +//STRIP001 Text [ dutch ] = "Verbergen" ; +//STRIP001 Text [ spanish ] = "Ocultar" ; +//STRIP001 Text [ danish ] = "Skjul" ; +//STRIP001 Text [ swedish ] = "Dölj" ; +//STRIP001 Text [ finnish ] = "Piilota" ; +//STRIP001 Text [ english_us ] = "Hide" ; +//STRIP001 Text[ chinese_simplified ] = "éšå…¥"; +//STRIP001 Text[ russian ] = "Ñêðûòü"; +//STRIP001 Text[ polish ] = "Ukryj"; +//STRIP001 Text[ japanese ] = "éžè¡¨ç¤?"; +//STRIP001 Text[ chinese_traditional ] = "隱入"; +//STRIP001 Text[ arabic ] = "ÅÎÝÇ?"; +//STRIP001 Text[ greek ] = "Áðüêñõøç"; +//STRIP001 Text[ korean ] = "숨기ê¸?"; +//STRIP001 Text[ turkish ] = "Gizle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Oculta"; +//STRIP001 Text[ thai ] = "ซ่à¸à¸™"; +//STRIP001 Text[ czech ] = "Skrýt"; +//STRIP001 Text[ hebrew ] = "Ausblenden"; +//STRIP001 Text[ hindi ] = "छिपाà¤?"; +//STRIP001 }; + String STR_PRINT + { + Text [ de ] = "Drucken" ; + Text [ en-US ] = "Print" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Imprimir"; + Text[ ru ] = "Печать"; + Text[ el ] = "ΕκτÏπωση"; + Text[ nl ] = "Afdrukken"; + Text[ fr ] = "Imprimer"; + Text[ es ] = "Imprimir"; + Text[ fi ] = "Tulosta"; + Text[ ca ] = "Imprimeix"; + Text[ it ] = "Stampa"; + Text[ da ] = "Udskriv"; + Text[ sv ] = "Skriv ut"; + Text[ pl ] = "Drukuj"; + Text[ pt-BR ] = "Imprimir"; + Text[ th ] = "พิมพ์"; + Text[ ja ] = "å°åˆ·"; + Text[ ko ] = "ì¸ì‡„"; + Text[ zh-CN ] = "打å°"; + Text[ zh-TW ] = "列å°"; + Text[ tr ] = "Yazdır"; + Text[ hi-IN ] = "छपाई"; + Text[ ar ] = "طباعة"; + Text[ he ] = "‮הדפסה‬"; + }; + String STR_CASCADE + { + Text [ de ] = " (verschachtelt)" ; + Text [ en-US ] = "(nested)" ; + Text [ x-comment ] = " "; + Text[ pt ] = "(em cascata)"; + Text[ ru ] = "(вложенный)"; + Text[ el ] = "(Αλλεπάλληλη σÏνδεση)"; + Text[ nl ] = "(grijpen in elkaar)"; + Text[ fr ] = "(en cascade)"; + Text[ es ] = "(en cascada)"; + Text[ fi ] = "(sisäkkäin)"; + Text[ ca ] = "(imbricat)"; + Text[ it ] = "(a cascata)"; + Text[ da ] = "(indskudt)"; + Text[ sv ] = "(sammanflätad)"; + Text[ pl ] = "(zagnieżdżone)"; + Text[ pt-BR ] = "(aninhadas)"; + Text[ th ] = "(ซ้à¸à¸™à¸à¸±à¸™)"; + Text[ ja ] = "(é‡ãªã‚Šåˆã£ãŸ)"; + Text[ ko ] = "(찬합ì‹)"; + Text[ zh-CN ] = "(å¤åˆçš„)"; + Text[ zh-TW ] = "(複åˆçš„)"; + Text[ tr ] = "(yuvalanmış)"; + Text[ hi-IN ] = "(नेसà¥à¤Ÿà¥‡à¤¡à¥)"; + Text[ ar ] = "(تراكب)"; + Text[ he ] = " (verschachtelt)"; + }; +//STRIP001 String STR_INVALID_AFAREA +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Um das AutoFormat anwenden zu können,\nmu?ein Tabellenbereich von mindestens\n3x3 Zellen markiert sein. : Um das Autoformat anwenden zu können,\nmu?ein Tabellenbereich von mindestens\n3x3 Zellen markiert sein. */ +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Um das AutoFormat anwenden zu können,\nmu?ein Tabellenbereich von mindestens\n3x3 Zellen markiert sein. : Um das Autoformat anwenden zu können,\nmu?ein Tabellenbereich von mindestens\n3x3 Zellen markiert sein. */ +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Um das AutoFormat anwenden zu können,\nmu?ein Tabellenbereich von mindestens\n3x3 Zellen markiert sein. : Um das AutoFormat anwenden zu k÷nnen,\nmu?ein Tabellenbereich von mindestens\n3x3 Zellen markiert sein. */ +//STRIP001 Text = "Um das AutoFormat anwenden zu können,\nmu?ein Tabellenbereich von mindestens\n3x3 Zellen markiert sein." ; +//STRIP001 Text [ ENGLISH ] = "You have to select an table area of at least\n3x3 cells, to apply an AutoFormat" ; +//STRIP001 Text [ norwegian ] = "You have to select an table area of at least\n3x3 cells, to apply an AutoFormat" ; +//STRIP001 Text [ italian ] = "Per poter utilizzare la formattazione automatica ?necessario selezionare\nun'area di almeno 3x3 celle." ; +//STRIP001 Text [ portuguese_brazilian ] = "Para aplicar uma AutoFormatação,\num intervalo de tabela de no mínimo\n3x3 células deve ser selecionado." ; +//STRIP001 Text [ portuguese ] = "Para aplicar o AutoFormato, dever?seleccionar uma\nárea da tabela de pelo menos 3 x 3 células." ; +//STRIP001 Text [ french ] = "Une plage de feuille nécessite\nau moins 3x3 cellules sélectionnées\npour appliquer l'AutoFormat." ; +//STRIP001 Text [ dutch ] = "Om AutoOpmaak te kunnen uitvoeren,\nmoet er een tabelbereik van tenminste\n3x3 cellen gemarkeerd zijn." ; +//STRIP001 Text [ spanish ] = "Para poder aplicar el Formateado automático\nes necesario seleccionar un área\nde por lo menos 3x3 celdas." ; +//STRIP001 Text [ danish ] = "For at kunne anvende AutoFormat,\nskal et tabelområde p?mindst\n3x3 celler være markeret." ; +//STRIP001 Text [ swedish ] = "För att du ska kunna använda autoformatet\nmåste ett tabellområde p?minst\n3x3 celler vara markerat." ; +//STRIP001 Text [ finnish ] = "Jotta automaattista muotoilua voi käyttää,\non valittava vähintään 3x3 solun\nkokoinen taulukkoalue." ; +//STRIP001 Text [ english_us ] = "To apply an AutoFormat,\na table range of at least\n3x3 cells must be selected." ; +//STRIP001 Text[ chinese_simplified ] = "ä¸ºäº†ä½¿ç”¨è‡ªåŠ¨æ ¼å¼ï¼Œ\n您必须至少选ä¸äº†\n3x3 工作表区域ã€?"; +//STRIP001 Text[ russian ] = "Äëÿ âîçìîæíîñò?ïðèìåíåí? àâòîôîðìàòà\níåîáõîäèìî âûäåëèòü îáëàñò?òàáëèö?ðàçìåðîì\níå ìåíå?3x3 ÿ÷ååê."; +//STRIP001 Text[ polish ] = "Aby zastosowa?Autoformatowanie,\nnale¿y zaznaczy?zakres tabeli o wymiarach co najmniej\n3x3 komórki."; +//STRIP001 Text[ japanese ] = "オートフォーマットを使用ã™ã‚‹ã«ã¯ã€\n最ä½?3x3 セルã®è¡¨ç¯„囲をé¸æŠžã—ã¦ãŠãå¿…è¦ãŒã‚ã‚Šã¾ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "ç‚ºäº†ä½¿ç”¨è‡ªå‹•æ ¼å¼ï¼Œ\næ‚¨å¿…é ˆè‡³å°‘é¸å–了\n3x3 工作表å€åŸŸã€?"; +//STRIP001 Text[ arabic ] = "áß?ÊÓÊÎÏã ÇáÊäÓí?ÇáÊáÞÇÆí¡\níÌ?Ãä ÊÍÏÏ äØÇÞ Ýí ÇáÌÏæá áÇ íÞ?Úä\n3x3 ÎáÇí?"; +//STRIP001 Text[ greek ] = "Ãé?íá åöáñìïóôåß ?ÁõôïÌïñö?\nðñÝðåé íá Ý÷åé åðéëåãåß ìé?ðåñéï÷?åíüò ðßíáêá ìå êåëéÜ\näéáóôÜóåùí ôïõëÜ÷éóôï?3?."; +//STRIP001 Text[ korean ] = "ìžë™ ì„œì‹ì?ì 용하기 위해서는 최소한\n3x3ì…€ì?í‘?범위가 ì„ íƒë˜ì–´ 있어ì•?합니ë‹?"; +//STRIP001 Text[ turkish ] = "otomatik formatlamay?kullanabilmek için\n en az 3x3 hücre büyüklüðünde bir tablo aralýð?seçilmi?olmalýdýr."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Per aplicar un formatatge automàtic,\n cal seleccionar una àrea de taula de com a mínim \n3x3 cel.les."; +//STRIP001 Text[ thai ] = "ใช้รูปà¹à¸šà¸šà¸à¸±à¸•à¹‚นมัติ,\nช่วงขà¸à¸‡à¸•à¸²à¸£à¸²à¸‡à¸—ี่น้à¸à¸¢à¸—ี่สุด\nต้à¸à¸‡à¹€à¸¥à¸·à¸à¸à¹€à¸‹à¸¥à¸¥à¹Œ 3x3 "; +//STRIP001 Text[ czech ] = "Pro použità Automatického formátu,\nmusà být vybrána\nalespoň oblast 3x3 buňky."; +//STRIP001 Text[ hebrew ] = "Um das AutoFormat anwenden zu können,\nmuß ein Tabellenbereich von mindestens\n3x3 Zellen markiert sein."; +//STRIP001 Text[ hindi ] = "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रचना को लागू करने केलिà¤?\nकम से कम 3x3 कोषà¥à¤ ोà¤?का\nसारणी फैलाà¤?को चà¥à¤¨à¤¨à¤?ज़रूरी है à¥?"; +//STRIP001 }; +//STRIP001 String STR_OPTIONAL +//STRIP001 { +//STRIP001 Text = " (optional)" ; +//STRIP001 Text [ ENGLISH ] = " (optional)" ; +//STRIP001 Text [ norwegian ] = " (optional)" ; +//STRIP001 Text [ italian ] = "(opzionale)" ; +//STRIP001 Text [ portuguese_brazilian ] = "(opcional)" ; +//STRIP001 Text [ portuguese ] = "(opcional)" ; +//STRIP001 Text [ finnish ] = "(valinnainen)" ; +//STRIP001 Text [ danish ] = "(valgfri)" ; +//STRIP001 Text [ french ] = "(facultatif)" ; +//STRIP001 Text [ swedish ] = "(valfritt)" ; +//STRIP001 Text [ dutch ] = "(optioneel)" ; +//STRIP001 Text [ spanish ] = "(opcional)" ; +//STRIP001 Text [ english_us ] = "(optional)" ; +//STRIP001 Text[ chinese_simplified ] = "(å¯é€‰æ‹©çš?"; +//STRIP001 Text[ russian ] = "(íåîáÿçàòåëüíû?"; +//STRIP001 Text[ polish ] = "(opcjonalny)"; +//STRIP001 Text[ japanese ] = "(オプショãƒ?"; +//STRIP001 Text[ chinese_traditional ] = "(å¯é¸æ“‡çš„)"; +//STRIP001 Text[ arabic ] = "(ÇÎÊíÇÑ?"; +//STRIP001 Text[ greek ] = "(ðñïáéñåôéê?"; +//STRIP001 Text[ korean ] = "(옵션)"; +//STRIP001 Text[ turkish ] = "(isteðe baðl?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "(opcional)"; +//STRIP001 Text[ thai ] = "(ทางเลืà¸à¸)"; +//STRIP001 Text[ czech ] = "(volitelné)"; +//STRIP001 Text[ hebrew ] = " (optional)"; +//STRIP001 Text[ hindi ] = "(वैकलà¥à¤ªà¤¿à¤•)"; +//STRIP001 }; +//STRIP001 String STR_REQUIRED +//STRIP001 { +//STRIP001 Text = " (erforderlich)" ; +//STRIP001 Text [ ENGLISH ] = " (required)" ; +//STRIP001 Text [ norwegian ] = " (required)" ; +//STRIP001 Text [ italian ] = "(richiesto)" ; +//STRIP001 Text [ portuguese_brazilian ] = "(requerido)" ; +//STRIP001 Text [ portuguese ] = "(necessário)" ; +//STRIP001 Text [ finnish ] = "(vaaditaan)" ; +//STRIP001 Text [ danish ] = "(obligatorisk)" ; +//STRIP001 Text [ french ] = "(requis)" ; +//STRIP001 Text [ swedish ] = "(obligatoriskt)" ; +//STRIP001 Text [ dutch ] = "(vereist)" ; +//STRIP001 Text [ spanish ] = "(necesario)" ; +//STRIP001 Text [ english_us ] = "(required)" ; +//STRIP001 Text[ chinese_simplified ] = "(需è¦è¾“å…?"; +//STRIP001 Text[ russian ] = "(îáÿçàòåëüíû?"; +//STRIP001 Text[ polish ] = "(wymagany)"; +//STRIP001 Text[ japanese ] = "(å¿…é ˆ)"; +//STRIP001 Text[ chinese_traditional ] = "(需è¦è¼¸å…?"; +//STRIP001 Text[ arabic ] = "(ÖÑæÑ?"; +//STRIP001 Text[ greek ] = " (áðáéôåßôáé)"; +//STRIP001 Text[ korean ] = "(ìš”ì²ë?"; +//STRIP001 Text[ turkish ] = "(isteniyor)"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "(necessari)"; +//STRIP001 Text[ thai ] = "(ต้à¸à¸‡à¸à¸²à¸?"; +//STRIP001 Text[ czech ] = "(vyžadováno)"; +//STRIP001 Text[ hebrew ] = " (erforderlich)"; +//STRIP001 Text[ hindi ] = "(आवशà¥à¤¯à¤•)"; +//STRIP001 }; + String STR_INVALID + { + /* ### ACHTUNG: Neuer Text in Resource? ungültig : ung³ltig */ + Text [ de ] = "ungültig" ; + Text [ en-US ] = "invalid" ; + Text [ x-comment ] = " "; + Text[ pt ] = "incorrecto"; + Text[ ru ] = "недейÑтвительный"; + Text[ el ] = "μη ÎγκυÏο"; + Text[ nl ] = "ongeldig"; + Text[ fr ] = "incorrect"; + Text[ es ] = "incorrecto"; + Text[ fi ] = "virheellinen"; + Text[ ca ] = "no và lid"; + Text[ it ] = "non valido"; + Text[ da ] = "ugyldig"; + Text[ sv ] = "ogiltig"; + Text[ pl ] = "nieprawidÅ‚owy"; + Text[ pt-BR ] = "inválido"; + Text[ th ] = "ไม่ถูà¸à¸•à¹‰à¸à¸‡"; + Text[ ja ] = "無効"; + Text[ ko ] = "잘못ë¨"; + Text[ zh-CN ] = "æ— æ•ˆ"; + Text[ zh-TW ] = "無效"; + Text[ tr ] = "geçersiz"; + Text[ hi-IN ] = "अमानà¥à¤¯"; + Text[ ar ] = "غير صالØ"; + Text[ he ] = "ungültig"; + }; + String STR_EDITFUNCTION + { + Text [ de ] = "Funktion bearbeiten" ; + Text [ en-US ] = "Edit Function" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Editar função"; + Text[ ru ] = "Правка функции"; + Text[ el ] = "ΕπεξεÏγασία συνάÏτησης"; + Text[ nl ] = "Functie bewerken"; + Text[ fr ] = "Éditer une fonction"; + Text[ es ] = "Editar función"; + Text[ fi ] = "Muuta funktiota"; + Text[ ca ] = "Edita la funció"; + Text[ it ] = "Modifica funzione"; + Text[ da ] = "Rediger funktion"; + Text[ sv ] = "Redigera funktion"; + Text[ pl ] = "Edytuj funkcjÄ™"; + Text[ pt-BR ] = "Editar Função"; + Text[ th ] = "à¹à¸à¹‰à¹„ขฟังà¸à¹Œà¸Šà¸±à¹ˆà¸™"; + Text[ ja ] = "関数ã®ç·¨é›†"; + Text[ ko ] = "함수 편집"; + Text[ zh-CN ] = "编辑函数"; + Text[ zh-TW ] = "編輯函數"; + Text[ tr ] = "Fonksiyonu düzenle"; + Text[ hi-IN ] = "फंकà¥à¤¶à¤¨ का संपादन"; + Text[ ar ] = "تØرير دالة"; + Text[ he ] = "Funktion bearbeiten"; + }; + String STR_NOTES + { + Text [ de ] = "Notizen" ; + Text [ en-US ] = "Notes" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Anotações"; + Text[ ru ] = "ПримечаниÑ"; + Text[ el ] = "Σημειώσεις"; + Text[ nl ] = "Aantekeningen"; + Text[ fr ] = "Notes"; + Text[ es ] = "Notas"; + Text[ fi ] = "Huomautukset"; + Text[ ca ] = "Notes"; + Text[ it ] = "Note"; + Text[ da ] = "Noter"; + Text[ sv ] = "Anteckningar"; + Text[ pl ] = "Notatki"; + Text[ pt-BR ] = "Anotações"; + Text[ th ] = "บันทึà¸à¸¢à¹ˆà¸"; + Text[ ja ] = "コメント"; + Text[ ko ] = "메모"; + Text[ zh-CN ] = "备注"; + Text[ zh-TW ] = "備註"; + Text[ tr ] = "Notlar"; + Text[ hi-IN ] = "टिपà¥à¤ªà¤£à¥€"; + Text[ ar ] = "ملاØظات"; + Text[ he ] = "‮הערות‬"; + }; +//STRIP001 String STR_QUERY_DELTAB +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Wollen Sie die aktuelle Tabelle(n) löschen? : Wollen Sie die aktuelle Tabelle endg³ltig l÷schen? */ +//STRIP001 Text = "Wollen Sie die ausgewählten Tabellen löschen?" ; +//STRIP001 Text [ ENGLISH ] = "Are you sure you want to delete the selected sheets?" ; +//STRIP001 Text [ english_us ] = "Are you sure you want to permanently delete the current sheet(s)?" ; +//STRIP001 Text [ italian ] = "Si vuole eliminare definitivamente la tabella?" ; +//STRIP001 Text [ spanish ] = "¿Desea borrar las hojas seleccionadas?" ; +//STRIP001 Text [ french ] = "Voulez-vous supprimer les feuilles sélectionnées ?" ; +//STRIP001 Text [ dutch ] = "Wilt u het huidige werkblad werkelijk wissen?" ; +//STRIP001 Text [ swedish ] = "Vill du radera de markerade tabellerna?" ; +//STRIP001 Text [ danish ] = "Vil du slette de markerede ark?" ; +//STRIP001 Text [ portuguese ] = "Deseja eliminar as folhas seleccionadas?" ; +//STRIP001 Text [ portuguese_brazilian ] = "Deseja realmente excluir permanentemente esta(s) planilha(s)?" ; +//STRIP001 Text[ chinese_simplified ] = "您真的è¦åˆ 除这个选ä¸çš„工作表å—?"; +//STRIP001 Text[ russian ] = "Âû äåéñòâèòåëüí?õîòèòå óäàëèò?òåêóùè?ëèñò(??"; +//STRIP001 Text[ polish ] = "Czy na pewno chcesz ostatecznie usun¹æ bie¿¹ce arkusze?"; +//STRIP001 Text[ japanese ] = "é¸æŠžã—ãŸè¡¨ã‚’削除ã—ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "您真è¦åˆªé™¤é€™å€‹é¸å–的工作表?"; +//STRIP001 Text[ arabic ] = "åá ÊÑíÏ ÍÐ?ÇáÌÏÇæ?ÇáÊí Êã ÇÎÊíÇÑåÇ?"; +//STRIP001 Text[ greek ] = "ÈÝëåôå íá äéáãñáöïýí ïé åðéëåãìÝíï?ðßíáêå?"; +//STRIP001 Text[ korean ] = "현재ì?시트ë¥?ì˜êµ¬íž?ì‚ì œí•˜ê² ìŠµë‹ˆê¹?"; +//STRIP001 Text[ turkish ] = "Seçilen tablolar?kalýc?olarak silmek istiyor musunuz?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Esteu segur que voleu suprimir definitivament el(s) full(s) actual(s)?"; +//STRIP001 Text[ finnish ] = "Haluatko varmasti poistaa nykyisen taulukon tai valitut taulukot?"; +//STRIP001 Text[ thai ] = "คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸à¹„ม่ที่จะลบà¹à¸œà¹ˆà¸™à¸‡à¸²à¸™à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™à¹à¸šà¸šà¸–าวร?"; +//STRIP001 Text[ czech ] = "Opravdu si pÅ™ejete permanentnÄ› smazat souÄasný list?"; +//STRIP001 Text[ hebrew ] = "Wollen Sie die ausgewählten Tabellen löschen?"; +//STRIP001 Text[ hindi ] = "आप वरà¥à¤¤à¤®à¤¾à¤?शीटॠको सचमà¥à¤?मेà¤?सà¥à¤¥à¤¾à¤¯à¥€ रूà¤?से मिटाना चाहतà¥?है?"; +//STRIP001 }; +//STRIP001 String STR_QUERY_DELSCENARIO +//STRIP001 { +//STRIP001 Text = "Wollen Sie das ausgewählte Szenario löschen?" ; +//STRIP001 Text [ ENGLISH ] = "Are you sure you want to delete the selected scenario?" ; +//STRIP001 Text [ portuguese ] = "Deseja realmente apagar o cenário seleccionado?" ; +//STRIP001 Text [ english_us ] = "Are you sure you want to delete the selected scenario?" ; +//STRIP001 Text [ portuguese_brazilian ] = "Deseja realmente excluir o cenário selecionado?" ; +//STRIP001 Text [ swedish ] = "Vill du radera det markerade scenariot?" ; +//STRIP001 Text [ danish ] = "Vil du slette det markerede scenario?" ; +//STRIP001 Text [ italian ] = "Cancellare lo scenario scelto?" ; +//STRIP001 Text [ spanish ] = "¿Est?seguro de querer borrar el escenario seleccionado?" ; +//STRIP001 Text [ french ] = "Voulez-vous supprimer le scénario sélectionn??" ; +//STRIP001 Text [ dutch ] = "Wilt u het geselecteerde scenario verwijderen?" ; +//STRIP001 Text[ chinese_simplified ] = "您真的è¦åˆ 除这个选ä¸çš„方案å—ï¼?"; +//STRIP001 Text[ russian ] = "Âû äåéñòâèòåëüí?õîòèòå óäàëèò?âûáðàííû?ñöåíàðèé?"; +//STRIP001 Text[ polish ] = "Czy na pewno chcesz usun¹æ zaznaczony scenariusz?"; +//STRIP001 Text[ japanese ] = "é¸æŠžã—ãŸã‚·ãƒŠãƒªã‚ªã‚’削除ã—ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "您真è¦åˆªé™¤é€™å€‹é¸å–的分æžè—本ï¼?"; +//STRIP001 Text[ arabic ] = "åá ÊÑíÏ ÍÐ?ÇáÓíäÇÑí?ÇáãõÍÏÏ¿"; +//STRIP001 Text[ greek ] = "ÈÝëåôå íá äéáãñÜøåôå ôï åðéëåãìÝíï óåíÜñé?"; +//STRIP001 Text[ korean ] = "ì„ íƒë?시나리오ë¥?ì‚ì œí•˜ê² ìŠµë‹ˆê¹?"; +//STRIP001 Text[ turkish ] = "Seçili senaryoyu silmek istiyor musunuz?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Esteu segur que voleu suprimir l'escenari seleccionat?"; +//STRIP001 Text[ finnish ] = "Haluatko varmasti poistaa valitun skenaarion?"; +//STRIP001 Text[ thai ] = "คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸à¹„ม่ที่จะลบสถานà¸à¸²à¸£à¸“์สมมติที่เลืà¸à¸?"; +//STRIP001 Text[ czech ] = "Opravdu si pÅ™ejete smazat vybraný scénář?"; +//STRIP001 Text[ hebrew ] = "Wollen Sie das ausgewählte Szenario löschen?"; +//STRIP001 Text[ hindi ] = "आप चà¥à¤¨à¥‡ हà¥à¤?विवरà¤?को सचमà¥à¤?मेà¤?मिटाना चाहतà¥?है?"; +//STRIP001 }; +//STRIP001 String STR_EXPORT_ASCII_WARNING +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Der Thesaurus ist nicht verfügbar : Der Thesaurus ist nicht verf³gbar */ +//STRIP001 TEXT = "Der Thesaurus ist nicht verfügbar" ; +//STRIP001 TEXT [ English ] = "Thesaurus is not available" ; +//STRIP001 Text [ dutch ] = "De thesaurus is niet beschikbaar" ; +//STRIP001 Text [ english_us ] = "Thesaurus is not available" ; +//STRIP001 Text [ italian ] = "Il dizionario dei sinonimi non ?disponibile" ; +//STRIP001 Text [ spanish ] = "El diccionario de sinónimos no est?disponible" ; +//STRIP001 Text [ french ] = "Le dictionnaire des synonymes n'est pas disponible" ; +//STRIP001 Text [ swedish ] = "Synonymordlistan är inte tillgänglig" ; +//STRIP001 Text [ danish ] = "Synonymordbogen er ikke tilgængelig" ; +//STRIP001 Text [ portuguese ] = "O dicionário de sinónimos não est?disponível" ; +//STRIP001 Text [ portuguese_brazilian ] = "O dicionário de sinônimos não est?disponível" ; +//STRIP001 Text[ chinese_simplified ] = "åŒä¹‰è¯è¯å…¸ä¸å˜åœ¨"; +//STRIP001 Text[ russian ] = "Òåçàóðóñ íåäîñòóïåí"; +//STRIP001 Text[ polish ] = "Tezaurus jest niedostêpny"; +//STRIP001 Text[ japanese ] = "類義語辞典ã¯ã‚ã‚Šã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "åŒç¾©è©žè©žå…¸ä¸å˜åœ¨"; +//STRIP001 Text[ arabic ] = "ÞÇãæ?ÇáãÑÇÏÝÇ?Ûí?ãÊæÝ?"; +//STRIP001 Text[ greek ] = "?èçóáõñüò ëÝîåùí äå?åßíá?äéáèÝóéìïò"; +//STRIP001 Text[ korean ] = "ë™ì˜ì–?ì‚¬ì „ì?불가능합니다."; +//STRIP001 Text[ turkish ] = "Eþanlamlýlar sözlüð?mevcut deðil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "El tesaurus no est?disponible"; +//STRIP001 Text[ finnish ] = "Synonyymisanasto ei ole käytettäviss?"; +//STRIP001 Text[ thai ] = "à¸à¸£à¸£à¸–าภิธานใช้ไม่ไดà¹?"; +//STRIP001 Text[ czech ] = "SlovnÃk synonym nenà dostupný"; +//STRIP001 Text[ hebrew ] = "Der Thesaurus ist nicht verfügbar"; +//STRIP001 Text[ hindi ] = "शबà¥à¤¦à¤•à¥‹à¤?उपलबà¥à¤§ नहीà¤?है"; +//STRIP001 }; +//STRIP001 String STR_IMPORT_ERROR +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Die Rechtschreibprüfung ist nicht verfügbar : Die Rechtschreibpr³fung ist nicht verf³gbar */ +//STRIP001 TEXT = "Die Rechtschreibprüfung ist nicht verfügbar" ; +//STRIP001 TEXT [ English ] = "Spellchecking is not available" ; +//STRIP001 Text [ english_us ] = "Spellcheck not available" ; +//STRIP001 Text [ italian ] = "Il controllo ortografico non ?disponibile" ; +//STRIP001 Text [ spanish ] = "La revisión ortográfica no est?disponible" ; +//STRIP001 Text [ french ] = "La vérification de l'orthographe n'est pas disponible" ; +//STRIP001 Text [ dutch ] = "De spellingcontrole is niet beschikbaar" ; +//STRIP001 Text [ swedish ] = "Rättstavningskontrollen är inte tillgänglig" ; +//STRIP001 Text [ danish ] = "Stavekontrollen er ikke tilgængelig" ; +//STRIP001 Text [ portuguese ] = "A verificação ortográfica não est?disponível" ; +//STRIP001 Text [ portuguese_brazilian ] = "A verificação ortográfica não est?disponível" ; +//STRIP001 Text[ chinese_simplified ] = "ä¸æ供这个拼写检查功èƒ?"; +//STRIP001 Text[ russian ] = "Ïðîâåðêà îðôîãðàôèè íåäîñòóïíà"; +//STRIP001 Text[ polish ] = "Sprawdzanie pisowni jest niedostêpne"; +//STRIP001 Text[ japanese ] = "スペãƒ?ãƒã‚§ãƒƒã‚¯æ©Ÿèƒ½ã¯ã‚ã‚Šã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "ä¸æ供這個拼寫檢查功èƒ?"; +//STRIP001 Text[ arabic ] = "ÇáÊÏÞí?ÇáÅãáÇÆí Ûí?ãÊæÝ?"; +//STRIP001 Text[ greek ] = "O ïñèïãñáöéêüò Ýëåã÷ï?äå?åßíá?äéáèÝóéìïò"; +//STRIP001 Text[ korean ] = "맞춤ë²?검사가 불가능합니다."; +//STRIP001 Text[ turkish ] = "Yaz?denetimi mevcut deðil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "La verificaci?ortogràfica no est?disponible"; +//STRIP001 Text[ finnish ] = "Oikeinkirjoituksen tarkistus ei ole käytettäviss?"; +//STRIP001 Text[ thai ] = "ตรวจสà¸à¸šà¸à¸²à¸£à¸ªà¸°à¸à¸”ใช้ไม่ไดà¹?"; +//STRIP001 Text[ czech ] = "Kontrola pravopisu nenà dostupná"; +//STRIP001 Text[ hebrew ] = "Die Rechtschreibprüfung ist nicht verfügbar"; +//STRIP001 Text[ hindi ] = "अकà¥à¤·à¤?की जाà¤à¤š उपलबà¥à¤§ नहीà¤?है"; +//STRIP001 }; + String STR_IMPORT_ASCII + { + Text [ de ] = "Textimport" ; + Text [ en-US ] = "Import text files" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Importar ficheiros de texto"; + Text[ ru ] = "Импорт текÑтовых файлов"; + Text[ el ] = "Εισαγωγή κειμÎνου"; + Text[ nl ] = "Tekstimport"; + Text[ fr ] = "Import de texte"; + Text[ es ] = "Importar texto"; + Text[ fi ] = "Tuo tekstitiedostot"; + Text[ ca ] = "Importa fitxers de text"; + Text[ it ] = "Importazione testo"; + Text[ da ] = "Tekstimport"; + Text[ sv ] = "Textimport"; + Text[ pl ] = "Importuj pliki tekstowe"; + Text[ pt-BR ] = "Importar arquivos texto"; + Text[ th ] = "นำเข้าà¹à¸Ÿà¹‰à¸¡à¸‚้à¸à¸„วาม"; + Text[ ja ] = "テã‚ストã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"; + Text[ ko ] = "í…스트 íŒŒì¼ ê°€ì ¸ì˜¤ê¸°"; + Text[ zh-CN ] = "输入文å—"; + Text[ zh-TW ] = "匯入文å—"; + Text[ tr ] = "Metin içe aktarımı"; + Text[ hi-IN ] = "टेकà¥à¤¸à¥à¤Ÿà¥ फाइलों को आयात करो"; + Text[ ar ] = "استيراد نص"; + Text[ he ] = "Textimport"; + }; + String STR_EXPORT_ASCII + { + Text [ de ] = "Textexport" ; + Text [ en-US ] = "Export of text files" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Exportar texto"; + Text[ ru ] = "ÐкÑпорт текÑта"; + Text[ el ] = "Εξαγωγή κειμÎνου"; + Text[ nl ] = "Export van tekst"; + Text[ fr ] = "Export de texte"; + Text[ es ] = "Exportación de texto"; + Text[ fi ] = "Tekstitiedostojen vienti"; + Text[ ca ] = "Exportació dels fitxers de text"; + Text[ it ] = "Esportazione testo"; + Text[ da ] = "Teksteksport"; + Text[ sv ] = "Textexport"; + Text[ pl ] = "Eksport plików tekstowych"; + Text[ pt-BR ] = "Exportar arquivos texto"; + Text[ th ] = "ส่งà¹à¸Ÿà¹‰à¸¡à¸‚้à¸à¸„วามà¸à¸à¸"; + Text[ ja ] = "テã‚ストã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ"; + Text[ ko ] = "í…스트 내보내기"; + Text[ zh-CN ] = "输出文å—"; + Text[ zh-TW ] = "匯出文å—"; + Text[ tr ] = "Dışa aktar (metin)"; + Text[ hi-IN ] = "Export of text files"; + Text[ ar ] = "تصدير نص"; + Text[ he ] = "Textexport"; + }; + String STR_IMPORT_LOTUS + { + Text [ de ] = "Lotusimport" ; + Text [ en-US ] = "Import Lotus files" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Importar Lotus"; + Text[ ru ] = "Импорт файлов Lotus"; + Text[ el ] = "Εισαγωγή αÏχείου Lotus"; + Text[ nl ] = "Lotus-import"; + Text[ fr ] = "Import Lotus"; + Text[ es ] = "Importación Lotus"; + Text[ fi ] = "Tuo Lotus-tiedostot"; + Text[ ca ] = "Importa fitxers de Lotus"; + Text[ it ] = "Importazione Lotus"; + Text[ da ] = "Lotusimport"; + Text[ sv ] = "Lotusimport"; + Text[ pl ] = "Importuj pliki Lotus"; + Text[ pt-BR ] = "Importar arquivos Lotus"; + Text[ th ] = "นำเข้าà¹à¸Ÿà¹‰à¸¡à¹‚ลตัส"; + Text[ ja ] = "Lotus ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"; + Text[ ko ] = "LotusíŒŒì¼ ê°€ì ¸ì˜¤ê¸°"; + Text[ zh-CN ] = "输入 Lotus 文档"; + Text[ zh-TW ] = "匯入 Lotus 檔案"; + Text[ tr ] = "Lotus dosyaları içe aktarımı"; + Text[ hi-IN ] = "Import Lotus files"; + Text[ ar ] = "استيراد ملÙات Lotus"; + Text[ he ] = "Lotusimport"; + }; + String STR_IMPORT_DBF + { + Text [ de ] = "DBaseimport" ; + Text [ en-US ] = "Import DBase files" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Importar ficheiros de DBase"; + Text[ ru ] = "Импорт файлов DBase"; + Text[ el ] = "Εισαγωγή αÏχεία DBase"; + Text[ nl ] = "DBase-import"; + Text[ fr ] = "Import dBase"; + Text[ es ] = "Importación DBase"; + Text[ fi ] = "Tuo DBase-tiedostot"; + Text[ ca ] = "Importa fitxers de dBase"; + Text[ it ] = "Importazione DBase"; + Text[ da ] = "DBase import"; + Text[ sv ] = "DBaseimport"; + Text[ pl ] = "Importuj pliki DBase"; + Text[ pt-BR ] = "Importar arquivos DBase"; + Text[ th ] = "นำเข้าà¹à¸Ÿà¹‰à¸¡à¸”ีเบส"; + Text[ ja ] = "DBase ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"; + Text[ ko ] = "DBase íŒŒì¼ ê°€ì ¸ì˜¤ê¸°"; + Text[ zh-CN ] = "输入 DBase 文件"; + Text[ zh-TW ] = "匯入 DBase 檔案"; + Text[ tr ] = "DBase dosyaları içe aktarımı"; + Text[ hi-IN ] = "Import DBase files"; + Text[ ar ] = "استيراد ملÙات DBase"; + Text[ he ] = "DBaseimport"; + }; + String STR_EXPORT_DBF + { + Text [ de ] = "DBase-Export" ; + Text [ en-US ] = "DBase export"; + Text[ pt ] = "Exportar DBase"; + Text[ ru ] = "ÐкÑпорт DBase"; + Text[ el ] = "Εξαγωγή DBase"; + Text[ nl ] = "DBase-export"; + Text[ fr ] = "Export DBase"; + Text[ es ] = "Exportación DBase"; + Text[ fi ] = "DBase-vienti"; + Text[ ca ] = "Exportació cap a dBase"; + Text[ it ] = "Esportazione DBase"; + Text[ da ] = "DBase eksport"; + Text[ sv ] = "DBase-export"; + Text[ pl ] = "Eksport DBase"; + Text[ pt-BR ] = "Exportar DBase"; + Text[ th ] = "ส่ง DBase à¸à¸à¸"; + Text[ ja ] = "DBase ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ"; + Text[ ko ] = "DBase 내보내기"; + Text[ zh-CN ] = "DBase 输出"; + Text[ zh-TW ] = "DBase 匯出"; + Text[ tr ] = "Dışa aktar (DBase)"; + Text[ hi-IN ] = "DBase निरà¥à¤¯à¤¾à¤¤"; + Text[ ar ] = "تصديرDBase "; + Text[ he ] = "DBase-Export"; + }; + String STR_EXPORT_DIF + { + Text [ de ] = "Dif-Export" ; + Text [ en-US ] = "Dif Export" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Exportar Dif"; + Text[ ru ] = "ÐкÑпорт Dif"; + Text[ el ] = "Εξαγωγή Dif"; + Text[ nl ] = "Dif-Export"; + Text[ fr ] = "Export Dif"; + Text[ es ] = "Exportar Dif"; + Text[ fi ] = "Dif-vienti"; + Text[ ca ] = "Exportació DIF"; + Text[ it ] = "Esporta Dif"; + Text[ da ] = "Dif-eksport"; + Text[ sv ] = "Dif-export"; + Text[ pl ] = "Eksport formatu Dif"; + Text[ pt-BR ] = "Exportar Dif"; + Text[ th ] = "ส่ง Dif à¸à¸à¸"; + Text[ ja ] = "Dif エクスãƒãƒ¼ãƒˆ"; + Text[ ko ] = "Dif 내보내기"; + Text[ zh-CN ] = "å˜ç›˜æˆ DIF æ ¼å¼"; + Text[ zh-TW ] = "儲å˜æˆ DIF æ ¼å¼"; + Text[ tr ] = "Dışa aktar (Dif)"; + Text[ hi-IN ] = "Dif निरà¥à¤¯à¤¾à¤¤"; + Text[ ar ] = "تصدير Dif"; + Text[ he ] = "Dif-Export"; + }; + String STR_IMPORT_DIF + { + Text [ de ] = "Dif-Import" ; + Text [ en-US ] = "Dif Import" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Importar Dif"; + Text[ ru ] = "Импорт Dif"; + Text[ el ] = "Εισαγωγή Dif"; + Text[ nl ] = "Dif-Import"; + Text[ fr ] = "Import Dif"; + Text[ es ] = "Importar Dif"; + Text[ fi ] = "Dif-tuonti"; + Text[ ca ] = "Importació DIF"; + Text[ it ] = "Importa Dif"; + Text[ da ] = "Dif-import"; + Text[ sv ] = "Dif-import"; + Text[ pl ] = "Import formatu Dif"; + Text[ pt-BR ] = "Importar Dif"; + Text[ th ] = "นำเข้า Dif "; + Text[ ja ] = "Dif ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"; + Text[ ko ] = "Dif ê°€ì ¸ì˜¤ê¸°"; + Text[ zh-CN ] = "输入 DIF"; + Text[ zh-TW ] = "匯入 DIF"; + Text[ tr ] = "Dif içe aktarımı"; + Text[ hi-IN ] = "Dif आयात"; + Text[ ar ] = "استيراد Dif"; + Text[ he ] = "Dif-Import"; + }; + String STR_STYLENAME_STANDARD + { + Text [ de ] = "Standard" ; + Text [ en-US ] = "Default" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Padrão"; + Text[ ru ] = "Обычный"; + Text[ el ] = "Î Ïοεπιλογή"; + Text[ nl ] = "Standaard"; + Text[ fr ] = "Standard"; + Text[ es ] = "Predeterminado"; + Text[ fi ] = "Oletus"; + Text[ ca ] = "Per defecte"; + Text[ it ] = "Standard"; + Text[ da ] = "Standard"; + Text[ sv ] = "Standard"; + Text[ pl ] = "DomyÅ›lnie"; + Text[ pt-BR ] = "Padrão"; + Text[ th ] = "ค่าเริ่มต้น"; + Text[ ja ] = "標準"; + Text[ ko ] = "기본값"; + Text[ zh-CN ] = "æ ‡å‡†"; + Text[ zh-TW ] = "標準"; + Text[ tr ] = "Varsayılan"; + Text[ hi-IN ] = "अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤à¤¿"; + Text[ ar ] = "اÙتراضي"; + Text[ he ] = "‮ברירת מחדל‬"; + }; + String STR_STYLENAME_RESULT + { + Text [ de ] = "Ergebnis" ; + Text [ en-US ] = "Result" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Resultado"; + Text[ ru ] = "Результат"; + Text[ el ] = "ΑποτÎλεσμα"; + Text[ nl ] = "Resultaat"; + Text[ fr ] = "Résultat"; + Text[ es ] = "Resultado"; + Text[ fi ] = "Tulos"; + Text[ ca ] = "Resultat"; + Text[ it ] = "Risultato"; + Text[ da ] = "Resultat"; + Text[ sv ] = "Resultat"; + Text[ pl ] = "Wynik"; + Text[ pt-BR ] = "Resultado"; + Text[ th ] = "ผลลัพธ์"; + Text[ ja ] = "çµæžœ"; + Text[ ko ] = "ê²°ê³¼"; + Text[ zh-CN ] = "结果"; + Text[ zh-TW ] = "çµæžœ"; + Text[ tr ] = "Sonuç"; + Text[ hi-IN ] = "नतीजा"; + Text[ ar ] = "النتيجة"; + Text[ he ] = "Ergebnis"; + }; + String STR_STYLENAME_RESULT1 + { + Text [ de ] = "Ergebnis2" ; + Text [ en-US ] = "Result2" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Resultado2"; + Text[ ru ] = "Результат2"; + Text[ el ] = "ΑποτÎλεσμα 2"; + Text[ nl ] = "Resultaat2"; + Text[ fr ] = "Résultat2"; + Text[ es ] = "Resultado2"; + Text[ fi ] = "Tulos2"; + Text[ ca ] = "Resultat2"; + Text[ it ] = "Risultato2"; + Text[ da ] = "Resultat2"; + Text[ sv ] = "Resultat2"; + Text[ pl ] = "Wynik2"; + Text[ pt-BR ] = "Resultado2"; + Text[ th ] = "ผลลัพธ์2"; + Text[ ja ] = "çµæžœ2"; + Text[ ko ] = "ê²°ê³¼2"; + Text[ zh-CN ] = "结果 2"; + Text[ zh-TW ] = "çµæžœ 2"; + Text[ tr ] = "Sonuç2"; + Text[ hi-IN ] = "नतीजा2"; + Text[ ar ] = "نتيجة2"; + Text[ he ] = "Ergebnis2"; + }; + String STR_STYLENAME_HEADLINE + { + /* ### ACHTUNG: Neuer Text in Resource? Überschrift : šberschrift */ + Text [ de ] = "Ãœberschrift" ; + Text [ en-US ] = "Heading" ; + Text [ x-comment ] = " "; + Text[ pt ] = "TÃtulo"; + Text[ ru ] = "Заголовок"; + Text[ el ] = "Επικεφαλίδα"; + Text[ nl ] = "Kop"; + Text[ fr ] = "Titre"; + Text[ es ] = "Encabezado"; + Text[ fi ] = "Otsikko"; + Text[ ca ] = "Encapçalament"; + Text[ it ] = "Intestazione"; + Text[ da ] = "Overskrift"; + Text[ sv ] = "Rubrik"; + Text[ pl ] = "Nagłówek"; + Text[ pt-BR ] = "TÃtulo"; + Text[ th ] = "หัวเรื่à¸à¸‡"; + Text[ ja ] = "見出ã—"; + Text[ ko ] = "ì œëª©"; + Text[ zh-CN ] = "æ ‡é¢˜"; + Text[ zh-TW ] = "標é "; + Text[ tr ] = "BaÅŸlık"; + Text[ hi-IN ] = "शीरà¥à¤·à¤•"; + Text[ ar ] = "العنوان"; + Text[ he ] = "Ãœberschrift"; + }; + String STR_STYLENAME_HEADLINE1 + { + /* ### ACHTUNG: Neuer Text in Resource? Überschrift1 : šberschrift1 */ + Text [ de ] = "Ãœberschrift1" ; + Text [ en-US ] = "Heading1" ; + Text [ x-comment ] = " "; + Text[ pt ] = "TÃtulo1"; + Text[ ru ] = "Заголовок1"; + Text[ el ] = "Επικεφαλίδα1"; + Text[ nl ] = "Kop1"; + Text[ fr ] = "Titre1"; + Text[ es ] = "Encabezado1"; + Text[ fi ] = "Otsikko1"; + Text[ ca ] = "Encapçalament1"; + Text[ it ] = "Intestazione1"; + Text[ da ] = "Overskrift1"; + Text[ sv ] = "Överskrift1"; + Text[ pl ] = "Nagłówek1"; + Text[ pt-BR ] = "TÃtulo1"; + Text[ th ] = "หัวเรื่à¸à¸‡1"; + Text[ ja ] = "見出ã—1"; + Text[ ko ] = "ì œëª©1"; + Text[ zh-CN ] = "æ ‡é¢˜ 1"; + Text[ zh-TW ] = "標é 1"; + Text[ tr ] = "BaÅŸlık1"; + Text[ hi-IN ] = "शीरà¥à¤·à¤•1"; + Text[ ar ] = "العنوان 1"; + Text[ he ] = "Ãœberschrift1"; + }; + String STR_STYLENAME_REPORT + { + Text [ de ] = "Bericht" ; + Text [ en-US ] = "Report" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Relatório"; + Text[ ru ] = "Отчет"; + Text[ el ] = "ΑναφοÏά"; + Text[ nl ] = "Bericht"; + Text[ fr ] = "Compte rendu"; + Text[ es ] = "Informe"; + Text[ fi ] = "Raportti"; + Text[ ca ] = "Informe"; + Text[ it ] = "Rapporto"; + Text[ da ] = "Rapport"; + Text[ sv ] = "Rapport"; + Text[ pl ] = "Raport"; + Text[ pt-BR ] = "Relatório"; + Text[ th ] = "รายงาน"; + Text[ ja ] = "レãƒãƒ¼ãƒˆ"; + Text[ ko ] = "ë³´ê³ ì„œ"; + Text[ zh-CN ] = "报表"; + Text[ zh-TW ] = "å ±è¡¨"; + Text[ tr ] = "Rapor"; + Text[ hi-IN ] = "रिपोरà¥à¤Ÿ"; + Text[ ar ] = "التقرير"; + Text[ he ] = "‮דו\"ח‬"; + }; + String STR_STYLENAME_REPORT1 + { + Text [ de ] = "Bericht1" ; + Text [ en-US ] = "Report1" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Relatório1"; + Text[ ru ] = "Отчет1"; + Text[ el ] = "ΑναφοÏά1"; + Text[ nl ] = "Bericht1"; + Text[ fr ] = "Compte rendu1"; + Text[ es ] = "Informe1"; + Text[ fi ] = "Raportti1"; + Text[ ca ] = "Informe1"; + Text[ it ] = "Rapporto1"; + Text[ da ] = "Rapport1"; + Text[ sv ] = "Rapport1"; + Text[ pl ] = "Raport1"; + Text[ pt-BR ] = "Relatório1"; + Text[ th ] = "รายงาน1"; + Text[ ja ] = "レãƒãƒ¼ãƒˆ 1"; + Text[ ko ] = "ë³´ê³ ì„œ1"; + Text[ zh-CN ] = "报表 1"; + Text[ zh-TW ] = "å ±è¡¨ 1"; + Text[ tr ] = "Rapor1"; + Text[ hi-IN ] = "रिपोरà¥à¤Ÿ1"; + Text[ ar ] = "التقرير1"; + Text[ he ] = "Bericht1"; + }; +//STRIP001 String STR_IMPORT_EXCEL_WARNING +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? ist für die Prüfung nicht verfügbar. \nÜberprüfen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gewünschte Sprache : ist f³r die Pr³fung nicht verf³gbar. \nšberpr³fen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gew³nschte Sprache */ +//STRIP001 TEXT = " ist für die Prüfung nicht verfügbar. \nÜberprüfen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gewünschte Sprache" ; +//STRIP001 TEXT [ English ] = " is not available for spellchecking\nPlease check your installation and install the desired language\n" ; +//STRIP001 Text [ dutch ] = "is voor de controle niet beschikbaar. \nControleer uw installatie en installeer \neventueel de gewenste taal" ; +//STRIP001 Text [ english_us ] = "is not available for spellchecking\nPlease check your installation and install \nthe desired language if necessary" ; +//STRIP001 Text [ italian ] = "non ?disponibile per il controllo. \nControllate l'installazione ed installate \nse necessario la lingua desiderata" ; +//STRIP001 Text [ spanish ] = "no est?disponible para la verificación.\nRevise la instalación\ne instale, si es necesario, el idioma deseado." ; +//STRIP001 Text [ french ] = "n'est pas disponible pour la vérification. Veuillez vérifier l'installation et installer, le cas échéant, la langue souhaitée" ; +//STRIP001 Text [ swedish ] = " står inte till förfogande för stavningskontrollen.\nKontrollera din installation och installera\neventuellt det önskade språket." ; +//STRIP001 Text [ danish ] = "står ikke til rådighed for stavekontrollen.\nKontroller venligst din installation og installer\ni givet fald det ønskede sprog" ; +//STRIP001 Text [ portuguese ] = "não est?disponível para a verificação ortográfica. \nControle a sua instalação e, se necessário,\ninstale a língua desejada" ; +//STRIP001 Text [ portuguese_brazilian ] = "não est?disponível para verificação ortográfica.\nVerifique sua instalação e instale\no idioma desejado se necessário" ; +//STRIP001 Text[ chinese_simplified ] = "没有检查拼写的功能。\n请检查您的安装,如有必è¦è¯·å®‰è£…所è¦ä½¿ç”¨çš„è¯è¨€ç‰ˆæœ¬"; +//STRIP001 Text[ russian ] = "íåäîñòóïåí äëÿ ïðîâåðêè îðôîãðàôèè. \nÏðîâåðüò?óñòàíîâê?? ?ñëó÷àå íåîáõîäèìîñò? äîáàâüòå\níåîáõîäèìû?ÿçû?"; +//STRIP001 Text[ polish ] = "jest niedostêpny do sprawdzania pisowni.\nNale¿y sprawdzi?instalacj?i, jeœli trzeba,\nzainstalowa?potrzebny jêzyk."; +//STRIP001 Text[ japanese ] = "スペãƒ?ãƒã‚§ãƒƒã‚¯æ©Ÿèƒ½ã¯ã‚ã‚Šã¾ã›ã‚“。\nインストールã•ã‚Œã¦ã„ã‚‹ã‹ãƒã‚§ãƒƒã‚¯ã—㦠\nå¿…è¦ãªå ´åˆã¯è©²å½“ã™ã‚‹è¨€èªžã‚’インストールã—ã¦ãã ã•ã„ã€?"; +//STRIP001 Text[ chinese_traditional ] = " 沒有拼寫檢查的功能。\n請檢查安è£ï¼Œè‹¥æœ‰å¿…è¦è«‹å®‰è£æ‰€è¦ä½¿ç”¨çš„語言版本"; +//STRIP001 Text[ arabic ] = "Ûí?ãÊæÝ?ááÊÏÞí?ÇáÅãáÇÆí. \nÇáÑÌÇÁ ÝÍ?ÇáÊËÈí?ÇáÎÇ?Èß?æÊËÈíÊ ÇááÛ?ÇáãØáæÈÉ?ÅÐ?áÒ?ÇáÃã?"; +//STRIP001 Text[ greek ] = "äå?åßíá?äéáèÝóéì?ãé?ôï?Ýëåã÷ï.\nÐáñáêáëþ åëÝãîô?ôç?åãêáôÜóôáó?êá?áí ÷ñåéáóôå? íá \nãßíå?åãêáôÜóôáó?ôç?ãëþóóá?ðï?åðéèõìåßôå"; +//STRIP001 Text[ korean ] = " 맞춤ë²?검사가 불가능합니다.\n사용ìžì˜ 설치ë¥?확ì¸í•?ë‹¤ìŒ \ní•„ìš”ì‹?요구ë˜ëŠ” 언어ë¥?설치하ì‹ì‹œì˜¤."; +//STRIP001 Text[ turkish ] = "denetim için mevcut deðil.\nKurulumu kontrol edip\ngerekirse istenen dili yükleyin"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "no est?disponible per a la verificaci?ortogràfica\nVerifiqueu la instal.laci?i, si cal, instal.leu \nl'idioma desitjat"; +//STRIP001 Text[ finnish ] = "ei ole käytettäviss?oikeinkirjoituksen tarkistusta varten.\nTarkista asennetut osat ja asenna haluttu kieli.\n"; +//STRIP001 Text[ thai ] = "ใช้ไม่ได้สำหรับà¸à¸²à¸£à¸•à¸£à¸§à¸ˆà¸ªà¸à¸šà¸à¸²à¸£à¸ªà¸°à¸à¸”\nà¸à¸£à¸¸à¸“าตรวจสà¸à¸šà¸à¸²à¸£à¸•à¸´à¸”ตั้งà¹à¸¥à¸°à¸•à¸´à¸”ตั้ง \nภาษาที่ต้à¸à¸‡à¸à¸²à¸£à¸«à¸²à¸à¸ˆà¸³à¹€à¸›à¹‡à¸?"; +//STRIP001 Text[ czech ] = "nenà dostupné pro kontrolu pravopisu.\nZkontrolujte vaÅ¡i instalaci a podle potÅ™eby\nnainstalujte požadovaný jazyk"; +//STRIP001 Text[ hebrew ] = " ist für die Prüfung nicht verfügbar. \nÃœberprüfen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gewünschte Sprache"; +//STRIP001 Text[ hindi ] = "अकà¥à¤·à¤?की जाà¤à¤š केलिà¤?उपलबà¥à¤§ नहीà¤?है ।\nकृपयà¤?आपका पà¥à¤°à¤¤à¤¿à¤·à¥à¤ ापà¤?का जाà¤à¤š करà¥?और \nआवशà¥à¤¯à¤• à¤à¤¾à¤·à¤¾ का पà¥à¤°à¤¤à¤¿à¤·à¥à¤ ापà¤?कीजिà¤?"; +//STRIP001 }; +//STRIP001 String STR_THESAURUS_NO_STRING +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Thesaurus nur in Textzellen möglich! : Thesaurus nur in Textzellen m÷glich! */ +//STRIP001 Text = "Thesaurus nur in Textzellen möglich!" ; +//STRIP001 Text [ ENGLISH ] = "Thesaurus possible only in text cells!" ; +//STRIP001 Text [ english_us ] = "Thesaurus can only be used in text cells!" ; +//STRIP001 Text [ italian ] = "Dizionario dei sinonimi possibile solo in celle di testo" ; +//STRIP001 Text [ spanish ] = "La búsqueda de sinónimos sólo es posible en celdas de texto" ; +//STRIP001 Text [ french ] = "Dict. des synonymes uniquement dans cellules de texte !" ; +//STRIP001 Text [ dutch ] = "Thesaurus alleen in tekstcellen mogelijk" ; +//STRIP001 Text [ swedish ] = "Synonymordlistan kan bara användas i textceller!" ; +//STRIP001 Text [ danish ] = "Det er kun muligt at bruge synonymordbogen i tekstceller!" ; +//STRIP001 Text [ portuguese ] = "A procura de sinónimos s??possível em células de texto!" ; +//STRIP001 Text [ portuguese_brazilian ] = "O dicionário de sinônimos s?pode ser usado em células de texto!" ; +//STRIP001 Text[ chinese_simplified ] = "åŒä¹‰è¯è¯å…¸åªèƒ½é€‚用于文å—å•å…ƒæ ¼ï¼?"; +//STRIP001 Text[ russian ] = "Èñïîëüçîâàíè?òåçàóðóñ?âîçìîæíî òîëüêî ?òåêñòîâû?ÿ÷åéêàõ!"; +//STRIP001 Text[ polish ] = "Tezaurusa mo¿na u¿ywa?tylko w komórkach tekstowych!"; +//STRIP001 Text[ japanese ] = "類義語辞典ã¯ãƒ†ã‚ストã®ã‚»ãƒ«ã§ã—ã‹ä½¿ãˆã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "åŒç¾©è©žè©žå…¸åªé©ç”¨æ–¼æ–‡å—儲å˜æ ¼ï¼?"; +//STRIP001 Text[ arabic ] = "áÇ íãßä ÇÓÊÎÏÇ?ÞÇãæ?ÇáãÑÇÏÝÇ?Åá?Ýí ÎáÇí?äÕ!"; +//STRIP001 Text[ greek ] = "?èçóáõñüò ëÝîåùí åêôåëåßôáé ìüíï óå êåëé?êåéìÝíïõ"; +//STRIP001 Text[ korean ] = "ë™ì˜ì–?ì‚¬ì „ì€ í…스íŠ?ì…€ 안ì—서만 사용 가능합니다!"; +//STRIP001 Text[ turkish ] = "Eþanlamlýlar sözlüð?yalnýzca metin hücrelerinde kullanýlabilir!"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "El tesaurus només es pot utilitzar en cel.les de text"; +//STRIP001 Text[ finnish ] = "Synonyymisanastoa voi käyttää vain tekstisoluissa."; +//STRIP001 Text[ thai ] = "ไม่สามารถใช้à¸à¸£à¸£à¸–าภิธานในเซลล์ข้à¸à¸„วามได้!"; +//STRIP001 Text[ czech ] = "SlovnÃk synonym lze použÃt pouze v textových buňkách!"; +//STRIP001 Text[ hebrew ] = "Thesaurus nur in Textzellen möglich"; +//STRIP001 Text[ hindi ] = "शबà¥à¤¦à¤•à¥‹à¤?को केवल टेकà¥à¤¸à¥à¤Ÿà¥ कोषà¥à¤ ोà¤?मेà¤?उपयोà¤?कर सकते है!"; +//STRIP001 }; +//STRIP001 String STR_SPELLING_BEGIN_TAB +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Soll die Rechtschreibprüfung am Tabellenanfang fortgesetzt werden? : Soll die Rechtschreibpr³fung am Tabellenanfang fortgesetzt werden? */ +//STRIP001 Text = "Soll die Rechtschreibprüfung am Tabellenanfang fortgesetzt werden?" ; +//STRIP001 Text [ ENGLISH ] = "Continue spell checking at begin of current table?" ; +//STRIP001 Text [ dutch ] = "Wilt u de spellingcontrole aan het begin van het werkblad voortzetten?" ; +//STRIP001 Text [ english_us ] = "Should the spellcheck be continued at the beginning of the current sheet?" ; +//STRIP001 Text [ italian ] = "Continuare il controllo ortografico dall'inizio della tabella?" ; +//STRIP001 Text [ spanish ] = "¿Desea que se continúe la revisión ortográfica al comienzo de la hoja?" ; +//STRIP001 Text [ french ] = "Continuer la vérification de l'orthographe au début de la feuille ?" ; +//STRIP001 Text [ swedish ] = "Ska rättstavningskontrollen forsätta i början av tabellen?" ; +//STRIP001 Text [ danish ] = "Skal stavekontrollen fortsættes fra arkets begyndelse?" ; +//STRIP001 Text [ portuguese ] = "Continuar a verificação ortográfica no princípio da folha?" ; +//STRIP001 Text [ portuguese_brazilian ] = "A verificação ortográfica deve continuar pelo começo da planilha atual?" ; +//STRIP001 Text[ chinese_simplified ] = "è¦ä»Žå·¥ä½œè¡¨çš„起始ä½ç½®å¼€å§‹ç»§ç»è¿›è¡Œæ‹¼å†™æ£€æŸ¥ï¼Ÿ"; +//STRIP001 Text[ russian ] = "Ïðîäîëæèòü ïðîâåðêó îðôîãðàôèè ?íà÷àëà òåêóùåãî ëèñò?"; +//STRIP001 Text[ polish ] = "Czy sprawdzanie pisowni ma by?kontynuowane na pocz¹tku bie¿¹cego arkusza?"; +//STRIP001 Text[ japanese ] = "表ã®å§‹ã‚ã«æˆ»ã£ã¦ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚¯ã‚’続行ã—ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "è¦å¾žå·¥ä½œè¡¨çš„起始ä½ç½®é–‹å§‹æ‹¼å¯«æª¢æŸ¥ï¼?"; +//STRIP001 Text[ arabic ] = "åá ÊÑíÏ ãÊÇÈÚÉ ÇáÊÏÞí?ÇáÅãáÇÆí Úä?ÈÏÇí?ÇáÌÏæá?"; +//STRIP001 Text[ greek ] = "ÓõíÝ÷åéá ôï?ïñèïãñáöéêïý åëÝã÷ï?áð?ôç?áñ÷Þ ôï?ðßíáêá;"; +//STRIP001 Text[ korean ] = "현재 시트ì?시작부분ì—ì„?맞춤ë²?검사를 계ì†í•˜ê² 습니ê¹?"; +//STRIP001 Text[ turkish ] = "Yazým denetimi tablo baþýndan devam ettirilsin mi?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "S'ha de continuar la verificaci?ortogràfica al començament del full actual?"; +//STRIP001 Text[ finnish ] = "Jatketaanko oikeinkirjoituksen tarkistusta tämänhetkisen taulukon alusta?"; +//STRIP001 Text[ thai ] = "ควรตรวจสà¸à¸šà¸à¸²à¸£à¸ªà¸°à¸à¸”ต่à¸à¸—ี่จุดเริ่มต้นขà¸à¸‡à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™à¸«à¸£à¸·à¸à¹„ม่?"; +//STRIP001 Text[ czech ] = "Má kontrola pravopisu pokraÄovat od zaÄátku aktivnÃho listu?"; +//STRIP001 Text[ hebrew ] = "Soll die Rechtschreibprüfung am Tabellenanfang fortgesetzt werden?"; +//STRIP001 Text[ hindi ] = "आप अकà¥à¤·à¤?की जाà¤à¤š को पà¥à¤°à¤šà¤²à¤¿à¤?शीटॠका पà¥à¤°à¤¾à¤°à¤‚à¤?से जारी रखना चाहतà¥?है?"; +//STRIP001 }; +//STRIP001 String STR_SPELLING_NO_LANG +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? ist für den Thesaurus nicht verfügbar. \nÜberprüfen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gewünschte Sprache : ist f³r den Thesaurus nicht verf³gbar. \nšberpr³fen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gew³nschte Sprache */ +//STRIP001 TEXT = " ist für den Thesaurus nicht verfügbar. \nÜberprüfen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gewünschte Sprache" ; +//STRIP001 TEXT [ English ] = " is not available for thesaurus\nPlease check your installation and install the desired language\n" ; +//STRIP001 Text [ english_us ] = "is not available for the thesaurus.\nPlease check your installation and install \nthe desired language if necessary" ; +//STRIP001 Text [ italian ] = "non ?disponibile per il dizionario di sinonimi e contrari.\nControllate l'installazione e installate\nse necessario la lingua desiderata" ; +//STRIP001 Text [ spanish ] = "no est?disponible para el diccionario de sinónimos.\n Verifique por favor su instalación e instale en caso \nnecesario el idioma deseado." ; +//STRIP001 Text [ french ] = "n'est pas disponible pour le dictionnaire des synonymes. Veuillez vérifier l'installation et installer, le cas échéant, la langue souhaitée." ; +//STRIP001 Text [ dutch ] = "is voor de thesaurus niet beschikbaar.\nControleer uw installatie en installeer \neventueel de gewenste taal" ; +//STRIP001 Text [ swedish ] = " står inte till förfogande för synonymordslistan. \nKontrollera din installation och installera\neventuellt det önskade språket." ; +//STRIP001 Text [ danish ] = "står ikke til rådighed for synonymordbogen. \nKontroller venligst din installation og installer\ni givet fald det ønskede sprog" ; +//STRIP001 Text [ portuguese ] = "não est?disponível para o dicionário de sinónimos. \nControle a sua instalação e, se necessário, instale \na língua desejada." ; +//STRIP001 Text [ portuguese_brazilian ] = "não est?disponível para o dicionário de sinônimos.\nVerifique sua instalação e instale\no idioma desejado se necessário" ; +//STRIP001 Text[ chinese_simplified ] = "åŒä¹‰è¯è¯å…¸ä¸èƒ½ä½¿ç”¨ã€‚\n请检查您的安装程åºï¼Œåœ¨å¿…è¦æ—¶è¯·å®‰è£…è¦ä½¿ç”¨çš„è¯è¨€ç‰ˆæœ¬ã€?"; +//STRIP001 Text[ russian ] = "íåäîñòóïåí äëÿ òåçàóðóñ? \nÏðîâåðüò?óñòàíîâê??äîáàâüòå,\n ?ñëó÷àå íåîáõîäèìîñò? íóæíûé ÿçû?"; +//STRIP001 Text[ polish ] = "jest niedostêpny dla Tezaurusa.\nNale¿y sprawdzi?instalacj?i, jeœli trzeba,\nzainstalowa?potrzebny jêzyk."; +//STRIP001 Text[ japanese ] = "ã“ã‚Œã¯é¡žç¾©èªžè¾žå…¸ã«ä½¿ãˆã¾ã›ã‚“。\nインストールをãƒã‚§ãƒƒã‚¯ã—ã¦ã€\nå¿…è¦ãªå ´åˆã¯è©²å½“ã®è¨€èªžã‚’インストールã—ã¦ãã ã•ã„ã€?"; +//STRIP001 Text[ chinese_traditional ] = "åŒç¾©è©žè©žå…¸ç„¡æ³•ä½¿ç”¨ã€‚\n請檢查您的安è£ç¨‹åºï¼Œè‹¥æœ‰å¿…è¦ï¼Œè«‹å®‰è£è¦ä½¿ç”¨çš„語言版本ã€?"; +//STRIP001 Text[ arabic ] = "Ûí?ãÊæÝ?áÞÇãæÓ ÇáãÑÇÏÝÇ? \nÇáÑÌÇÁ ÝÍ?ÇáÊËÈí?ÇáÎÇ?Èß?æÊËÈíÊ ÇááÛ?ÇáãØáæÈÉ?ÅÐ?áÒ?ÇáÃã?"; +//STRIP001 Text[ greek ] = "äå?åßíá?äéáèÝóéì?ãé?ôï?èçóáõñ?ëÝîåùí.\nÐáñáêáëþ åëÝãîô?ôç?åãêáôÜóôáó?êá?áí ÷ñåéáóôåß\nåãêáôáóôÞóôå ôç?ãëþóóá ðï?åðéèõìåßôå"; +//STRIP001 Text[ korean ] = " ë™ì˜ì–?ì‚¬ì „ì?사용ì?불가능합니다.\n사용ìžì˜ 설치ë¥?확ì¸í•˜ê³ \n필요하다ë©?요구ë?언어ë¥?설치하ì‹ì‹œì˜¤."; +//STRIP001 Text[ turkish ] = "eþanlamlýlar sözlüð?için mevcut deðil. \nKurulumu kontrol edip \ngerekirse istenilen dili yükleyin."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "no est?disponible per al tesaurus.\nVerifiqueu la instal.laci?i, si cal, instal.leu \nl'idioma desitjat"; +//STRIP001 Text[ finnish ] = "ei ole käytettäviss?synonyymisanastoa varten.\nTarkista asennetut osat ja asenna haluttu kieli.\n"; +//STRIP001 Text[ thai ] = "ใช้à¸à¸£à¸£à¸–าภิธานไม่ไดà¹?\nà¸à¸£à¸¸à¸“าตรวจสà¸à¸šà¸à¸²à¸£à¸•à¸´à¸”ตั้งà¹à¸¥à¸°à¸•à¸´à¸”ตั้ง \nภาษาที่ต้à¸à¸‡à¸à¸²à¸£à¸«à¸²à¸à¸ˆà¸³à¹€à¸›à¹‡à¸?"; +//STRIP001 Text[ czech ] = "nenà dostupné pro slovnÃk synonym.\nZkontrolujte vaÅ¡i instalaci a podle potÅ™eby\nnainstalujte požadovaný jazyk"; +//STRIP001 Text[ hebrew ] = " ist für den Thesaurus nicht verfügbar. \nÃœberprüfen Sie bitte Ihre Installation und installieren Sie \ngegebenenfalls die gewünschte Sprache"; +//STRIP001 Text[ hindi ] = "शबà¥à¤¦à¤•à¥‹à¤?केलिà¤?उपलबà¥à¤§ नहीà¤?है ।\nकृपयà¤?आपका पà¥à¤°à¤¤à¤¿à¤·à¥à¤ ापà¤?का जाà¤à¤š करà¥?और \nआवशà¥à¤¯à¤• à¤à¤¾à¤·à¤¾ का पà¥à¤°à¤¤à¤¿à¤·à¥à¤ ापà¤?कीजिà¤?"; +//STRIP001 }; +//STRIP001 String STR_SPELLING_STOP_OK +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Die Rechtschreibprüfung dieser Tabelle ist abgeschlossen! : Die Rechtschreibpr³fung dieser Tabelle ist abgeschlossen! */ +//STRIP001 Text = "Die Rechtschreibprüfung dieser Tabelle ist abgeschlossen!" ; +//STRIP001 Text [ ENGLISH ] = "Spell checking for this table has finished." ; +//STRIP001 Text [ english_us ] = "The spellcheck of this sheet has been completed." ; +//STRIP001 Text [ italian ] = "Il controllo ortografico di questa tabella ?concluso" ; +//STRIP001 Text [ spanish ] = "¡Se ha finalizado la revisión ortográfica de esta hoja!" ; +//STRIP001 Text [ french ] = "La vérification de l'orthographe est terminée." ; +//STRIP001 Text [ dutch ] = "De spellingcontrole van dit werkblad is beëindigd!" ; +//STRIP001 Text [ swedish ] = "Rättstavningskontrollen av denna tabell är avslutad." ; +//STRIP001 Text [ danish ] = "Stavekontrollen er afsluttet for dette ark!" ; +//STRIP001 Text [ portuguese ] = "A verificação ortográfica est?concluída!" ; +//STRIP001 Text [ portuguese_brazilian ] = "A verificação ortográfica desta planilha foi concluída." ; +//STRIP001 Text[ chinese_simplified ] = "å·²ç»å®Œæˆè¿™ä¸ªå·¥ä½œè¡¨çš„拼写检查ï¼"; +//STRIP001 Text[ russian ] = "Çàâåðøåí?ïðîâåðêà îðôîãðàôèè ýòîã?ëèñò?"; +//STRIP001 Text[ polish ] = "Sprawdzanie pisowni w tym arkuszu zosta³o zakoñczone."; +//STRIP001 Text[ japanese ] = "ã“ã®è¡¨ã®ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚¯ã¯å®Œäº†ã—ã¾ã—ãŸã€?"; +//STRIP001 Text[ chinese_traditional ] = "這個工作表的拼寫檢查已經完æˆï¼"; +//STRIP001 Text[ arabic ] = "Êã ÇáÇäÊåÇÁ ãä ÇáÊÏÞí?ÇáÅãáÇÆí Ýí åÐ?ÇáÌÏæá!"; +//STRIP001 Text[ greek ] = "O ïñèïãñáöéêüò Ýëåã÷ï?áõôï?ôï?ðßíáêá ïëïêëçñþèçêå."; +//STRIP001 Text[ korean ] = "ì?시트ì—?대í•?맞춤ë²?검사가 완료ë˜ì—ˆìŠµë‹ˆë‹?"; +//STRIP001 Text[ turkish ] = "Bu tablonun yazým denetimi tamamland?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "S'ha completat la verificaci?ortogràfica del full."; +//STRIP001 Text[ finnish ] = "Tämän taulukon oikeinkirjoituksen tarkistus on valmis."; +//STRIP001 Text[ thai ] = "à¸à¸²à¸£à¸•à¸£à¸§à¸ˆà¸ªà¸à¸šà¸à¸²à¸£à¸ªà¸°à¸à¸”ขà¸à¸‡à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™à¸™à¸µà¹‰à¸ªà¸¡à¸šà¸¹à¸£à¸“์à¹à¸¥à¹‰à¸?"; +//STRIP001 Text[ czech ] = "Kontrola pravopisu tohoto listu byla dokonÄena."; +//STRIP001 Text[ hebrew ] = "Die Rechtschreibprüfung dieser Tabelle ist abgeschlossen"; +//STRIP001 Text[ hindi ] = "इस शीटॠमेà¤?अकà¥à¤·à¤?की जाà¤à¤š समापà¥à¤¤ हà¥à¤?à¥?"; +//STRIP001 }; +//STRIP001 String STR_NOLANGERR +//STRIP001 { +//STRIP001 Text = "Keine Sprache eingestellt" ; +//STRIP001 Text [ ENGLISH ] = "No language set" ; +//STRIP001 Text [ dutch ] = "Geen taal ingesteld" ; +//STRIP001 Text [ english_us ] = "No language set" ; +//STRIP001 Text [ italian ] = "Nessuna lingua impostata" ; +//STRIP001 Text [ spanish ] = "Ningún idioma especificado" ; +//STRIP001 Text [ french ] = "Pas de langue activée" ; +//STRIP001 Text [ swedish ] = "Inget språk inställt" ; +//STRIP001 Text [ danish ] = "Ingen sprog indstillet" ; +//STRIP001 Text [ portuguese_brazilian ] = "Nenhum idioma foi especificado" ; +//STRIP001 Text [ portuguese ] = "A língua não foi especificada." ; +//STRIP001 Text[ chinese_simplified ] = "没有设定任何è¯è¨€"; +//STRIP001 Text[ russian ] = "ßçûê íå óñòàíîâëåí"; +//STRIP001 Text[ polish ] = "Nie ustawiono jêzyka"; +//STRIP001 Text[ japanese ] = "言語ãŒè¨å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "沒有è¨å®šä»»ä½•èªžè¨€"; +//STRIP001 Text[ arabic ] = "áã íÊ?ÊÚíí?ÇááÛ?"; +//STRIP001 Text[ greek ] = "Äå?ïñßóôçêå ãëþóóá"; +//STRIP001 Text[ korean ] = "언어ë¥?ì„¤ì •í•˜ì§€ 않았습니ë‹?"; +//STRIP001 Text[ turkish ] = "Dil seçilmedi"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Sense conjunt d'idiomes"; +//STRIP001 Text[ finnish ] = "Kielt?ei ole asetettu"; +//STRIP001 Text[ thai ] = "ไม่ได้à¸à¸³à¸«à¸™à¸”ภาษà¸?"; +//STRIP001 Text[ czech ] = "Nenà nastaven žádný jazyk"; +//STRIP001 Text[ hebrew ] = "Keine Sprache eingestellt"; +//STRIP001 Text[ hindi ] = "कोà¤?à¤à¤¾à¤·à¤¾ सेटà¥à¤?नहीà¤?है"; +//STRIP001 }; + String STR_UNDO_INSERT_TAB + { + /* ### ACHTUNG: Neuer Text in Resource? Tabelle einfügen : Tabelle einf³gen */ + Text [ de ] = "Tabellen einfügen" ; + Text [ en-US ] = "Insert Sheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Inserir folha"; + Text[ ru ] = "Ð’Ñтавить лиÑÑ‚"; + Text[ el ] = "Εισαγωγή πίνακα"; + Text[ nl ] = "Werkblad invoegen"; + Text[ fr ] = "Insérer une feuille"; + Text[ es ] = "Insertar hoja"; + Text[ fi ] = "Lisää taulukko"; + Text[ ca ] = "Insereix un full"; + Text[ it ] = "Inserisci tabella"; + Text[ da ] = "Indsæt ark"; + Text[ sv ] = "Infoga tabeller"; + Text[ pl ] = "Wstaw arkusz"; + Text[ pt-BR ] = "Inserir Planilha"; + Text[ th ] = "à¹à¸—รà¸à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表ã®æŒ¿å…¥"; + Text[ ko ] = "시트 삽입"; + Text[ zh-CN ] = "æ’入工作表"; + Text[ zh-TW ] = "æ’入工作表"; + Text[ tr ] = "Tablo ekle"; + Text[ hi-IN ] = "शीटॠजोड़ो"; + Text[ ar ] = "إدراج جداول"; + Text[ he ] = "Tabellen einfügen"; + }; +//STRIP001 String STR_UNDO_DELETE_TAB +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Tabelle löschen : Tabelle l÷schen */ +//STRIP001 Text = "Tabellen löschen" ; +//STRIP001 Text [ ENGLISH ] = "Delete Sheets" ; +//STRIP001 Text [ dutch ] = "Werkblad wissen" ; +//STRIP001 Text [ english_us ] = "Delete Sheets" ; +//STRIP001 Text [ italian ] = "Elimina tabelle" ; +//STRIP001 Text [ spanish ] = "Borrar hojas" ; +//STRIP001 Text [ french ] = "Supprimer des feuilles" ; +//STRIP001 Text [ swedish ] = "Radera tabeller" ; +//STRIP001 Text [ danish ] = "Slet ark" ; +//STRIP001 Text [ portuguese ] = "Eliminar folha" ; +//STRIP001 Text [ portuguese_brazilian ] = "Excluir Planilhas" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤å·¥ä½œè¡?"; +//STRIP001 Text[ russian ] = "Óäàëèò?ëèñò"; +//STRIP001 Text[ polish ] = "Usu?arkusze"; +//STRIP001 Text[ japanese ] = "表ã®å‰Šé™¤"; +//STRIP001 Text[ chinese_traditional ] = "刪除工作è¡?"; +//STRIP001 Text[ arabic ] = "ÍÐ?ÇáÌÏÇæ?"; +//STRIP001 Text[ greek ] = "ÄéáãñáöÞ ðéíÜêù?"; +//STRIP001 Text[ korean ] = "시트 ì‚ì œ"; +//STRIP001 Text[ turkish ] = "Tablo sil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suprimeix els fulls"; +//STRIP001 Text[ finnish ] = "Poista taulukot"; +//STRIP001 Text[ thai ] = "ลบà¹à¸œà¹ˆà¸™à¸‡à¸²à¸?"; +//STRIP001 Text[ czech ] = "Smazat listy"; +//STRIP001 Text[ hebrew ] = "Tabellen löschen"; +//STRIP001 Text[ hindi ] = "शीटॠमिटाà¤?"; +//STRIP001 }; + String STR_UNDO_RENAME_TAB + { + Text [ de ] = "Tabelle umbenennen" ; + Text [ en-US ] = "Rename Sheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Mudar nome da folha"; + Text[ ru ] = "Переименовать лиÑÑ‚"; + Text[ el ] = "Μετονομασία πίνακα"; + Text[ nl ] = "Werkbladnaam wijzigen"; + Text[ fr ] = "Renommer la feuille"; + Text[ es ] = "Cambiar nombre a la hoja"; + Text[ fi ] = "Nimeä taulukko uudelleen"; + Text[ ca ] = "Reanomena el full"; + Text[ it ] = "Rinomina tabella"; + Text[ da ] = "Omdøb ark"; + Text[ sv ] = "Byt namn pÃ¥ tabell"; + Text[ pl ] = "ZmieÅ„ nazwÄ™ arkusza"; + Text[ pt-BR ] = "Renomear Planilha"; + Text[ th ] = "เปลี่ยนชื่à¸à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表åã®å¤‰æ›´"; + Text[ ko ] = "시트 ì´ë¦„ 바꾸기"; + Text[ zh-CN ] = "é‡å‘½å工作表"; + Text[ zh-TW ] = "é‡æ–°å‘½å工作表"; + Text[ tr ] = "Tabloyu yeniden adlandır"; + Text[ hi-IN ] = "शीटॠको पà¥à¤¨à¤ƒ नाम दो"; + Text[ ar ] = "إعادة تسمية الجدول"; + Text[ he ] = "Tabelle umbenennen"; + }; +//STRIP001 String STR_UNDO_MOVE_TAB +//STRIP001 { +//STRIP001 Text = "Tabellen verschieben" ; +//STRIP001 Text [ ENGLISH ] = "Move Sheets" ; +//STRIP001 Text [ dutch ] = "Werkblad verplaatsen" ; +//STRIP001 Text [ english_us ] = "Move Sheets" ; +//STRIP001 Text [ italian ] = "Sposta tabella" ; +//STRIP001 Text [ spanish ] = "Desplazar hojas" ; +//STRIP001 Text [ french ] = "Déplacer les feuilles" ; +//STRIP001 Text [ swedish ] = "Flytta tabeller" ; +//STRIP001 Text [ danish ] = "Flyt ark" ; +//STRIP001 Text [ portuguese ] = "Mover folhas" ; +//STRIP001 Text [ portuguese_brazilian ] = "Mover Planilhas" ; +//STRIP001 Text[ chinese_simplified ] = "移动工作è¡?"; +//STRIP001 Text[ russian ] = "Ïåðåìåñòèò?ëèñò?"; +//STRIP001 Text[ polish ] = "Przenie?arkusze"; +//STRIP001 Text[ japanese ] = "表ã®ç§»å‹•"; +//STRIP001 Text[ chinese_traditional ] = "移動工作è¡?"; +//STRIP001 Text[ arabic ] = "ÊÍÑí?ÌÏÇæ?"; +//STRIP001 Text[ greek ] = "Ìåôáêßíçóç ðéíÜêù?"; +//STRIP001 Text[ korean ] = "시트 ì´ë™"; +//STRIP001 Text[ turkish ] = "Tablolar?taþý"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Mou els fulls"; +//STRIP001 Text[ finnish ] = "Siirr?taulukoita"; +//STRIP001 Text[ thai ] = "ย้ายà¹à¸œà¹ˆà¸™à¸‡à¸²à¸?"; +//STRIP001 Text[ czech ] = "PÅ™esunout listy"; +//STRIP001 Text[ hebrew ] = "Tabellen verschieben"; +//STRIP001 Text[ hindi ] = "शीटोà¤?का सà¥à¤¥à¤¾à¤?परिवरà¥à¤¤à¤¨ करà¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_COPY_TAB +//STRIP001 { +//STRIP001 Text = "Tabellen kopieren" ; +//STRIP001 Text [ ENGLISH ] = "Copy Sheets" ; +//STRIP001 Text [ dutch ] = "Werkblad kopiëren" ; +//STRIP001 Text [ english_us ] = "Copy Sheet" ; +//STRIP001 Text [ italian ] = "Copia tabella" ; +//STRIP001 Text [ spanish ] = "Copiar hoja" ; +//STRIP001 Text [ french ] = "Copier la feuille" ; +//STRIP001 Text [ swedish ] = "Kopiera tabeller" ; +//STRIP001 Text [ danish ] = "Kopier ark" ; +//STRIP001 Text [ portuguese ] = "Copiar folha" ; +//STRIP001 Text [ portuguese_brazilian ] = "Copiar Planilha" ; +//STRIP001 Text[ chinese_simplified ] = "å¤åˆ¶å·¥ä½œè¡?"; +//STRIP001 Text[ russian ] = "Êîïèðîâàòü ëèñò"; +//STRIP001 Text[ polish ] = "Kopiuj arkusz"; +//STRIP001 Text[ japanese ] = "表ã®ã‚³ãƒ”ãƒ?"; +//STRIP001 Text[ chinese_traditional ] = "複製工作è¡?"; +//STRIP001 Text[ arabic ] = "äÓ?ÇáÌÏÇæ?"; +//STRIP001 Text[ greek ] = "Áíôéãñáö?ðßíáêá"; +//STRIP001 Text[ korean ] = "시트 복사"; +//STRIP001 Text[ turkish ] = "Tabloyu kopyala"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Copia el full"; +//STRIP001 Text[ finnish ] = "Kopioi taulukko"; +//STRIP001 Text[ thai ] = "คัดลà¸à¸à¹à¸œà¹ˆà¸™à¸‡à¸²à¸?"; +//STRIP001 Text[ czech ] = "KopÃrovat list"; +//STRIP001 Text[ hebrew ] = "Tabellen kopieren"; +//STRIP001 Text[ hindi ] = "शीटॠकी पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤?"; +//STRIP001 }; + String STR_UNDO_APPEND_TAB + { + /* ### ACHTUNG: Neuer Text in Resource? Tabelle anhängen : Tabelle anhõngen */ + Text [ de ] = "Tabelle anhängen" ; + Text [ en-US ] = "Append sheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Anexar folha"; + Text[ ru ] = "Прикрепить лиÑÑ‚"; + Text[ el ] = "Î Ïοσκόλληση πίνακα"; + Text[ nl ] = "Werkblad toevoegen"; + Text[ fr ] = "Annexer la feuille"; + Text[ es ] = "Adjuntar hoja"; + Text[ fi ] = "Liitä taulukko"; + Text[ ca ] = "Afegeix un full"; + Text[ it ] = "Allega tabella"; + Text[ da ] = "Vedhæft ark"; + Text[ sv ] = "Tillfoga tabell"; + Text[ pl ] = "DoÅ‚Ä…cz arkusz"; + Text[ pt-BR ] = "Anexar planilha"; + Text[ th ] = "ผนวà¸à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表ã®æ·»ä»˜"; + Text[ ko ] = "시트 첨부"; + Text[ zh-CN ] = "é™„åŠ å·¥ä½œè¡¨"; + Text[ zh-TW ] = "é™„åŠ å·¥ä½œè¡¨"; + Text[ tr ] = "Tablo ekle"; + Text[ hi-IN ] = "शीटॠजोड़ो"; + Text[ ar ] = "إرÙاق جدول"; + Text[ he ] = "Tabelle anhängen"; + }; + String STR_UNDO_SHOWTAB + { + Text [ de ] = "Tabelle einblenden" ; + Text [ en-US ] = "Show Sheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Mostrar folha"; + Text[ ru ] = "Показать лиÑÑ‚"; + Text[ el ] = "Εμφάνιση πίνακα"; + Text[ nl ] = "Werkblad weergeven"; + Text[ fr ] = "Afficher la feuille"; + Text[ es ] = "Mostrar hoja"; + Text[ fi ] = "Näytä taulukko"; + Text[ ca ] = "Mostra el full"; + Text[ it ] = "Mostra tabella"; + Text[ da ] = "Vis ark"; + Text[ sv ] = "Visa tabell"; + Text[ pl ] = "Pokaż arkusz"; + Text[ pt-BR ] = "Mostrar Planilha"; + Text[ th ] = "à¹à¸ªà¸”งà¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表ã®è¡¨ç¤º"; + Text[ ko ] = "시트 표시"; + Text[ zh-CN ] = "显示工作表"; + Text[ zh-TW ] = "顯示工作表"; + Text[ tr ] = "Tabloyu görüntüle"; + Text[ hi-IN ] = "शीटॠदिखाओ"; + Text[ ar ] = "إظهار الجدول"; + Text[ he ] = "Tabelle einblenden"; + }; + String STR_UNDO_HIDETAB + { + Text [ de ] = "Tabelle ausblenden" ; + Text [ en-US ] = "Hide sheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Ocultar folha"; + Text[ ru ] = "Скрыть лиÑÑ‚"; + Text[ el ] = "ΑπόκÏυψη πίνακα"; + Text[ nl ] = "Werkblad verbergen"; + Text[ fr ] = "Masquer feuille"; + Text[ es ] = "Ocultar hoja"; + Text[ fi ] = "Piilota taulukko"; + Text[ ca ] = "Oculta el full"; + Text[ it ] = "Nacondi la tabella"; + Text[ da ] = "Skjul ark"; + Text[ sv ] = "Dölj tabell"; + Text[ pl ] = "Ukryj arkusz"; + Text[ pt-BR ] = "Ocultar planilha"; + Text[ th ] = "ซ่à¸à¸™à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表ã®éžè¡¨ç¤º"; + Text[ ko ] = "시트 숨기기"; + Text[ zh-CN ] = "éšå…¥å·¥ä½œè¡¨"; + Text[ zh-TW ] = "隱入工作表"; + Text[ tr ] = "Tabloyu gizle"; + Text[ hi-IN ] = "शीटॠछिपाओ"; + Text[ ar ] = "إخÙاء الجدول"; + Text[ he ] = "Tabelle ausblenden"; + }; + String STR_CHART_MAINTITLE + { + Text [ de ] = "Haupttitel" ; + Text [ en-US ] = "Main Title" ; + Text [ x-comment ] = " "; + Text[ pt ] = "TÃtulo principal"; + Text[ ru ] = "Главный заголовок"; + Text[ el ] = "ΚÏÏιος τίτλος"; + Text[ nl ] = "Hoofdtitel"; + Text[ fr ] = "Titre principal"; + Text[ es ] = "TÃtulo principal"; + Text[ fi ] = "Pääotsikko"; + Text[ ca ] = "TÃtol principal"; + Text[ it ] = "Titolo principale"; + Text[ da ] = "Hovedoverskrift"; + Text[ sv ] = "Huvudrubrik"; + Text[ pl ] = "TytuÅ‚ główny"; + Text[ pt-BR ] = "TÃtulo Principal"; + Text[ th ] = "ชื่à¸à¹€à¸£à¸·à¹ˆà¸à¸‡à¸«à¸¥à¸±à¸"; + Text[ ja ] = "メインタイトル"; + Text[ ko ] = "주 ì œëª©"; + Text[ zh-CN ] = "ä¸»æ ‡é¢˜"; + Text[ zh-TW ] = "主標題"; + Text[ tr ] = "Ana baÅŸlık"; + Text[ hi-IN ] = "मà¥à¤–à¥à¤¯ शीरà¥à¤·à¤•"; + Text[ ar ] = "العنوان الرئيسي"; + Text[ he ] = "Haupttitel"; + }; + String STR_CHART_SUBTITLE + { + Text [ de ] = "Untertitel" ; + Text [ en-US ] = "Subtitle" ; + Text [ x-comment ] = " "; + Text[ pt ] = "SubtÃtulo"; + Text[ ru ] = "Подзаголовок"; + Text[ el ] = "Υπότιτλος"; + Text[ nl ] = "Ondertitel"; + Text[ fr ] = "Sous-titre"; + Text[ es ] = "SubtÃtulo"; + Text[ fi ] = "Alaotsikko"; + Text[ ca ] = "SubtÃtol"; + Text[ it ] = "Sottotitolo"; + Text[ da ] = "Undertitel"; + Text[ sv ] = "Underrubrik"; + Text[ pl ] = "PodtytuÅ‚"; + Text[ pt-BR ] = "SubtÃtulo"; + Text[ th ] = "ชื่à¸à¹€à¸£à¸·à¹ˆà¸à¸‡à¸¢à¹ˆà¸à¸¢"; + Text[ ja ] = "サブタイトル"; + Text[ ko ] = "ë¶€ì œ"; + Text[ zh-CN ] = "åˆ†æ ‡é¢˜"; + Text[ zh-TW ] = "分標題"; + Text[ tr ] = "Alt baÅŸlık"; + Text[ hi-IN ] = "अधीन शीरà¥à¤·à¤•"; + Text[ ar ] = "عنوان Ùرعي"; + Text[ he ] = "Untertitel"; + }; + String STR_CHART_XTITLE + { + Text [ de ] = "X-Achsentitel" ; + Text [ en-US ] = "X axis title" ; + Text [ x-comment ] = " "; + Text[ pt ] = "TÃtulo do eixo X"; + Text[ ru ] = "Заголовок оÑи X"; + Text[ el ] = "Τίτλος άξονα Χ"; + Text[ nl ] = "Titel X-as"; + Text[ fr ] = "Titre de l'axe X"; + Text[ es ] = "TÃtulo del eje X"; + Text[ fi ] = "X-akselin otsikko"; + Text[ ca ] = "TÃtol de l'eix X"; + Text[ it ] = "Titolo asse X"; + Text[ da ] = "X-aksetitel"; + Text[ sv ] = "X-axelrubrik"; + Text[ pl ] = "TytuÅ‚ osi X"; + Text[ pt-BR ] = "TÃtulo do eixo X"; + Text[ th ] = "ชื่à¸à¹€à¸£à¸·à¹ˆà¸à¸‡à¹à¸à¸™X "; + Text[ ja ] = "X軸タイトル"; + Text[ ko ] = "X축 ì œëª©"; + Text[ zh-CN ] = "X è½´æ ‡é¢˜"; + Text[ zh-TW ] = "X-軸標題"; + Text[ tr ] = "X-Ekseni deÄŸeri"; + Text[ hi-IN ] = "X अकà¥à¤·à¤°à¥‡à¤–ा शीरà¥à¤·à¤•"; + Text[ ar ] = "عنوان المØور س"; + Text[ he ] = "X-Achsentitel"; + }; + String STR_CHART_YTITLE + { + Text [ de ] = "Y-Achsentitel" ; + Text [ en-US ] = "Y axis title" ; + Text [ x-comment ] = " "; + Text[ pt ] = "TÃtulo do eixo Y"; + Text[ ru ] = "Заголовок оÑи Y"; + Text[ el ] = "Τίτλος άξονα Y"; + Text[ nl ] = "Titel Y-as"; + Text[ fr ] = "Titre de l'axe Y"; + Text[ es ] = "TÃtulo del eje Y"; + Text[ fi ] = "Y-akselin otsikko"; + Text[ ca ] = "TÃtol de l'eix Y"; + Text[ it ] = "Titolo asse Y"; + Text[ da ] = "Y-aksetitel"; + Text[ sv ] = "Y-axelrubrik"; + Text[ pl ] = "TytuÅ‚ osi Y"; + Text[ pt-BR ] = "TÃtulo do eixo Y"; + Text[ th ] = "ชื่à¸à¹€à¸£à¸·à¹ˆà¸à¸‡à¹à¸à¸™Y "; + Text[ ja ] = "Y軸タイトル"; + Text[ ko ] = "Y 축 ì œëª©"; + Text[ zh-CN ] = "Y è½´æ ‡é¢˜"; + Text[ zh-TW ] = "Y-軸標題"; + Text[ tr ] = "Y-Ekseni deÄŸeri"; + Text[ hi-IN ] = "Y अकà¥à¤·à¤°à¥‡à¤–ा शीरà¥à¤·à¤•"; + Text[ ar ] = "عنوان المØور ص"; + Text[ he ] = "Y-Achsentitel"; + }; + String STR_CHART_ZTITLE + { + Text [ de ] = "Z-Achsentitel" ; + Text [ en-US ] = "Z axis title" ; + Text [ x-comment ] = " "; + Text[ pt ] = "TÃtulo do eixo Z"; + Text[ ru ] = "Заголовок оÑи Z"; + Text[ el ] = "Τίτλος άξονα Z"; + Text[ nl ] = "Titel Z-as"; + Text[ fr ] = "Titre de l'axe Z"; + Text[ es ] = "TÃtulo del eje Z"; + Text[ fi ] = "Z-akselin otsikko"; + Text[ ca ] = "TÃtol de l'eix Z"; + Text[ it ] = "Titolo asse Z"; + Text[ da ] = "Z-aksetitel"; + Text[ sv ] = "Z-axelrubrik"; + Text[ pl ] = "TytuÅ‚ osi Z"; + Text[ pt-BR ] = "TÃtulo do eixo Z"; + Text[ th ] = "ชื่à¸à¹€à¸£à¸·à¹ˆà¸à¸‡à¹à¸à¸™Z "; + Text[ ja ] = "Z軸タイトル"; + Text[ ko ] = "Z축 ì œëª©"; + Text[ zh-CN ] = "Z è½´æ ‡é¢˜"; + Text[ zh-TW ] = "Z-軸標題"; + Text[ tr ] = "Z-Ekseni deÄŸeri"; + Text[ hi-IN ] = "Z अकà¥à¤·à¤°à¥‡à¤–ा शीरà¥à¤·à¤•"; + Text[ ar ] = "عنوان المØور ع"; + Text[ he ] = "Z-Achsentitel"; + }; +//STRIP001 String STR_ABSREFLOST +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Die neue Tabelle enthält absolute Referenzen auf andere Tabellen, die nicht mehr stimmen müssen! : Die neue Tabelle enthõlt absolute Referenzen auf andere Tabellen, die nicht mehr stimmen m³ssen! */ +//STRIP001 Text = "Die neue Tabelle enthält absolute Referenzen auf andere Tabellen, die nicht mehr stimmen müssen!" ; +//STRIP001 Text [ ENGLISH ] = "The new table contains absolute references to other tables which may be incorrect!" ; +//STRIP001 Text [ english_us ] = "The new table contains absolute references to other tables which may be incorrect!" ; +//STRIP001 Text [ italian ] = "La nuova tabella contiene riferimenti assoluti ad altre tabelle che non sono pi?necessariamente corrette" ; +//STRIP001 Text [ spanish ] = "La tabla nueva contiene referencias absolutas a otras tablas que posiblemente no sean correctas." ; +//STRIP001 Text [ french ] = "La nouvelle table contient des références absolues qui peuvent éventuellement être incorrectes !" ; +//STRIP001 Text [ dutch ] = "De nieuwe tabel bevat absolute verwijzingen naar andere tabellen die niet meer hoeven overeen te stemmen" ; +//STRIP001 Text [ swedish ] = "Den nya tabellen innehåller absoluta referenser till andra tabeller som möjligtvis inte längre stämmer!" ; +//STRIP001 Text [ danish ] = "Den ny tabel indeholder absolute referencer til andre tabeller, som muligvis ikke mere er korrekte!" ; +//STRIP001 Text [ portuguese_brazilian ] = "A nova tabela contém referências absolutas a outras tabelas que podem estar incorretas!" ; +//STRIP001 Text [ portuguese ] = "A nova tabela contém referências absolutas a outras tabelas que poderão estar incorrectas!" ; +//STRIP001 Text[ chinese_simplified ] = "新的工作表å«æœ‰ç»å¯¹çš„指å‘其它工作表的引用,这些其它的工作表å¯èƒ½ä¸æ£ç¡®ï¼?"; +//STRIP001 Text[ russian ] = "Íîâàÿ òàáëèö?ñîäåðæèò àáñîëþòíûå ññûëêè íà äðóãèå òàáëèö? êîòîðû? âîçìîæíî, íåïðàâèëüí?"; +//STRIP001 Text[ polish ] = "Nowa tabela zawiera bezwzglêdne odwo³ania do innych tabel, które mog?by?nieprawid³owe!"; +//STRIP001 Text[ japanese ] = "æ–°ã—ã„表ã¯ä¸æ£ç¢ºãªåˆ¥ã®è¡¨ã¸ã®çµ¶å¯¾å‚照をå«ã‚“ã§ã„ã¾ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "新的工作表å«æœ‰çµ•å°çš„指å‘其它工作表的åƒç…§ï¼Œé€™äº›å…¶å®ƒçš„工作表å¯èƒ½æœ‰éŒ¯èª¤ï¼"; +//STRIP001 Text[ arabic ] = "íÍÊæ?ÇáÌÏæá ÇáÌÏíÏ Úá?ÅÔÇÑÇÊ ãØáÞ?Åá?ÌÏÇæ?ÃÎÑì ÞÏ Êßæä Ûí?ÕÍíÍ?"; +//STRIP001 Text[ greek ] = "?íÝïò ðßíáêá?ðåñéÝ÷åé áðüëõôåò áíáöïñÝò ãé?Üëëïõò ðßíáêå?, ïé ïðïßåò äå?åßíá?ïðùóäÞðïôå Ýãêõñå?"; +//STRIP001 Text[ korean ] = "ìƒ?표는 옳지 ì•Šì„ ìˆ?있는 다른 í‘œì— ëŒ€í•?ì ˆëŒ€ì ?참조ë¥?수ë¡í•˜ê³ 있습니다."; +//STRIP001 Text[ turkish ] = "Yeni tabloda bulunan diðer tablolar ile ilgili mutlak referanslar doðru olmayabilir!"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "La taula nova cont?referències absolutes a altres taules que poden ser incorrectes."; +//STRIP001 Text[ finnish ] = "Uusi taulukko sisältää toisiin taulukoihin kohdistuvia absoluuttisia viitteit? jotka saattavat olla virheellisi?"; +//STRIP001 Text[ thai ] = "ตารางใหม่มีà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¸ªà¸±à¸¡à¸šà¸¹à¸£à¸“์ไปยังตารางà¸à¸·à¹ˆà¸™à¸—ี่ไม่ถูà¸à¸•à¹‰à¸à¸‡!"; +//STRIP001 Text[ czech ] = "Nová tabulka obsahuje absolutnà odkazy do dalÅ¡Ãch tabulek, které mohou být chybné!"; +//STRIP001 Text[ hebrew ] = "Die neue Tabelle enthält absolute Referenzen auf andere Tabellen, die nicht mehr stimmen müssen"; +//STRIP001 Text[ hindi ] = "नयà¤?सारणी मेà¤?अनà¥à¤¯ सारणियों के लिà¤?रहनेवाला निशà¥à¤šà¤¿à¤?रेफरेनà¥à¤¸ गलà¤?हो सकता है!"; +//STRIP001 }; +//STRIP001 String STR_NAMECONFLICT +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Wegen einer Namensgleichheit wurde im Zieldokument ein bestehender Bereichsname verändert! : Wegen einer Namensgleichheit wurde im Zieldokument ein bestehender Bereichsname verõndert! */ +//STRIP001 Text = "Wegen einer Namensgleichheit wurde im Zieldokument ein bestehender Bereichsname verändert!" ; +//STRIP001 Text [ ENGLISH ] = "Because of identical names a rangename in the destination document was altered!" ; +//STRIP001 Text [ english_us ] = "Due to identical names, an existing range name in the destination document has been altered!" ; +//STRIP001 Text [ italian ] = "Nel documento destinazione, a causa di nomi uguali, ?stato cambiato un nome di area!" ; +//STRIP001 Text [ spanish ] = "¡Debido a la igualdad de nombres se ha alterado el nombre existente de un área del documento!" ; +//STRIP001 Text [ french ] = "Un nom de section existant dans le document cible a d?être chang?parce qu'il faisait double emploi !" ; +//STRIP001 Text [ dutch ] = "Wegens identieke namen is in het doeldocument een bestaande bereiksnaam gewijzigd." ; +//STRIP001 Text [ swedish ] = "P?grund av identiska namn blev ett kategorinamn i måldokumentet ändrat!" ; +//STRIP001 Text [ danish ] = "P?grund af identiske navne blev et eksisterende områdenavn i destinationsdokumentet ændret!" ; +//STRIP001 Text [ portuguese ] = "Devido a nomes idênticos foi modificado o nome de uma área no documento de destino!" ; +//STRIP001 Text [ portuguese_brazilian ] = "Devido a nomes idênticos, um nome de intervalo existente no documento de destino foi alterado!" ; +//STRIP001 Text[ chinese_simplified ] = "å› ä¸ºå称相åŒï¼Œç›®æ ‡æ–‡æ¡£å†…的区域å称已ç»è¢«æ›´æ”¹ï¼?"; +//STRIP001 Text[ russian ] = "Èç-çà èäåíòè÷íîñòè èìåí èçìåíåíî íàçâàíèå äèàïàçîí??äîêóìåíò?íàçíà÷åí?!"; +//STRIP001 Text[ polish ] = "Ze wzglêdu na identyczne nazwy zosta³a zmieniona dotychczasowa nazwa zakresu w dokumencie docelowym!"; +//STRIP001 Text[ japanese ] = "åå‰ãŒåŒä¸€ã§ã‚ã£ãŸãŸã‚ã€ã‚¿ãƒ¼ã‚²ãƒƒãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«æ—¢å˜ã™ã‚‹ç¯„囲åãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€?"; +//STRIP001 Text[ chinese_traditional ] = "å› ç‚ºå稱相åŒï¼Œç›®æ¨™æ–‡ä»¶å…§çš„å€åŸŸå稱已經被變更ï¼?"; +//STRIP001 Text[ arabic ] = "äÙÑÇ?áÊÔÇÈå ÇáÃÓãÇÁ¡ Êã ÊÛíí?ÇÓ?äØÇÞ ãæÌæ?ãÓÈÞÇð Ýí ÇáãÓÊä?ÇáåÏ?"; +//STRIP001 Text[ greek ] = "Ëüãù ôç?ôáýôéóçò ïíüìáôïò Ýãéí?ôñïðïðïßçó?õðÜñ÷ïíôïò ïíüìáôïò ðåñéï÷Þò óô?Ýããñáö?ðñïïñéóìïý!"; +//STRIP001 Text[ korean ] = "ì´ë¦„ì?ê°™ì€ ì´ìœ ë¡?대ìƒ?문서ì?기존 범위 ì´ë¦„ì?바뀌었습니ë‹?"; +//STRIP001 Text[ turkish ] = "Ad eþleþmesi nedeniyle hedef belgede mevcut bir aralýk ad?deðiþtirildi!"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Com que hi havia noms idèntics, s'ha modificat un nom d'àrea existent al document de destinaci?"; +//STRIP001 Text[ finnish ] = "Identtisten nimien takia kohdeasiakirjassa ollutta aluenime?on muutettu."; +//STRIP001 Text[ thai ] = "เนื่à¸à¸‡à¸ˆà¸²à¸à¸Šà¸·à¹ˆà¸à¸—ี่à¸à¸³à¸«à¸™à¸” à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸à¸™à¸Šà¸·à¹ˆà¸à¸‚à¸à¸‡à¸Šà¹ˆà¸§à¸‡à¸—ี่มีà¸à¸¢à¸¹à¹ˆà¹ƒà¸™à¹€à¸à¸à¸ªà¸²à¸£à¹€à¸›à¹‰à¸²à¸«à¸¡à¸²à¸?"; +//STRIP001 Text[ czech ] = "Kvůli identickým názvům byl existujÃcà název oblasti v cÃlovém dokumentu zmÄ›nÄ›n!"; +//STRIP001 Text[ hebrew ] = "Wegen einer Namensgleichheit wurde im Zieldokument ein bestehender Bereichsname verändert"; +//STRIP001 Text[ hindi ] = "समान नाà¤?के कारण, नियत सà¥à¤¥à¤¾à¤?लेखपतà¥à¤?मेà¤?असà¥à¤¤à¤¿à¤¤à¥à¤µ मेà¤?रहनेवाला फैलाà¤?नाà¤?मेà¤?परिवरà¥à¤¤à¤¨ हà¥à¤?है !"; +//STRIP001 }; +//STRIP001 String STR_ERR_AUTOFILTER +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? AutoFilter nicht möglich : AutoFilter nicht m÷glich */ +//STRIP001 Text = "AutoFilter nicht möglich" ; +//STRIP001 Text [ ENGLISH ] = "AutoFilter not allowed" ; +//STRIP001 Text [ dutch ] = "AutoFilter niet mogelijk" ; +//STRIP001 Text [ english_us ] = "AutoFilter not possible" ; +//STRIP001 Text [ italian ] = "Filtro automatico non possibile" ; +//STRIP001 Text [ spanish ] = "Filtro automático imposible" ; +//STRIP001 Text [ french ] = "AutoFiltre impossible" ; +//STRIP001 Text [ swedish ] = "AutoFilter omöjligt" ; +//STRIP001 Text [ danish ] = "AutoFilter ikke mulig" ; +//STRIP001 Text [ portuguese ] = "Impossível AutoFiltro." ; +//STRIP001 Text [ portuguese_brazilian ] = "Não ?possível aplicar o AutoFiltro" ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ³•ä½¿ç”¨è‡ªåŠ¨ç›é€?"; +//STRIP001 Text[ russian ] = "Àâòîôèëüòð íå âîçìîæåí"; +//STRIP001 Text[ polish ] = "Nie mo¿na zastosowa?Autofiltru"; +//STRIP001 Text[ japanese ] = "オートフィルタã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "無法使用自動篩é¸"; +//STRIP001 Text[ arabic ] = "ÇáÝáÊÑ ÇáÊáÞÇÆí Ûí?ããßä"; +//STRIP001 Text[ greek ] = "Äå?åßíá?äõíáôü?íá ãßíå?ÁõôïÖßëôñï"; +//STRIP001 Text[ korean ] = "ìžë™ í•„í„° 불가ëŠ?"; +//STRIP001 Text[ turkish ] = "Otomatik filtre kullanýlamaz"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No és possible aplicar el filtre automàtic"; +//STRIP001 Text[ finnish ] = "Automaattinen suodatus ei ole mahdollista"; +//STRIP001 Text[ thai ] = "ตัวà¸à¸£à¸à¸‡à¸à¸±à¸•à¹‚นมัติใช้ไม่ไดà¹?"; +//STRIP001 Text[ czech ] = "Nelze provést automatické filtrovánÃ"; +//STRIP001 Text[ hebrew ] = "AutoFilter nicht möglich"; +//STRIP001 Text[ hindi ] = "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ फिलà¥à¤Ÿà¤° करना संà¤à¤µ नहीà¤?है"; +//STRIP001 }; +//STRIP001 String STR_MSSG_SEARCHANDREPLACE_1 +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? StarCalc hat bis zum Anfang der Tabelle gesucht. Möchten Sie die Suche am Tabellenende fortsetzen? : StarCalc hat bis zum Anfang der Tabelle gesucht. M÷chten Sie die Suche am Tabellenende fortsetzen? */ +//STRIP001 Text = "%PRODUCTNAME Calc hat bis zum Anfang der Tabelle gesucht. Möchten Sie die Suche am Tabellenende fortsetzen?" ; +//STRIP001 Text [ ENGLISH ] = "StarCalc has searched to the beginning of the table. Do you want to continue at the end?" ; +//STRIP001 Text [ english_us ] = "%PRODUCTNAME Calc has searched to the beginning of the sheet. Do you want to continue at the end?" ; +//STRIP001 Text [ italian ] = "%PRODUCTNAME Calc ha effettuato la ricerca fino all'inizio della tabella. Volete continuare dalla fine?" ; +//STRIP001 Text [ spanish ] = "%PRODUCTNAME Calc ha buscado hasta el comienzo de la hoja. ¿Desea continuar la búsqueda por el final?" ; +//STRIP001 Text [ french ] = "%PRODUCTNAME Calc a atteint le début du classeur. Souhaitez-vous reprendre la recherche ?la fin du classeur ?" ; +//STRIP001 Text [ dutch ] = "%PRODUCTNAME Calc heeft tot aan het begin van het werkblad gezocht. Wilt u het zoeken aan het einde voortzetten?" ; +//STRIP001 Text [ swedish ] = "%PRODUCTNAME Calc har sökt till början av tabellen. Vill du att sökningen skall fortsätta vid tabellens slut?" ; +//STRIP001 Text [ danish ] = "%PRODUCTNAME Calc har søgt til begyndelsen af arket. Vil du fortsætte søgningen fra arkets slutning?" ; +//STRIP001 Text [ portuguese ] = "O %PRODUCTNAME Calc procurou at?ao princípio da folha. Deseja continuar a procura no fim?" ; +//STRIP001 Text [ portuguese_brazilian ] = " O %PRODUCTNAME Calc pesquisou at?o início da planilha. Deseja continuar pelo final?" ; +//STRIP001 Text[ chinese_simplified ] = "%PRODUCTNAME Calc å·²ç»æœå¯»åˆ°å·¥ä½œè¡¨çš„起始ä½ç½®ã€‚è¦è‡ªå·¥ä½œè¡¨çš„结æŸä½ç½®ç»§ç»æœå¯»ï¼Ÿ"; +//STRIP001 Text[ russian ] = "%PRODUCTNAME Calc îñóùåñòâèë ïîèñ?ïî íàïðàâëåíè??íà÷àëó ëèñò? Ïðîäîëæèòü ïîèñ??êîíö?ëèñò?"; +//STRIP001 Text[ polish ] = "%PRODUCTNAME Calc przeszuka?arkusz do pocz¹tku. Czy kontynuowa?wyszukiwanie od koñca arkusza?"; +//STRIP001 Text[ japanese ] = "%PRODUCTNAME Calc ã¯è¡¨ã®å§‹ã‚ã¾ã§æ¤œç´¢ã—ã¾ã—ãŸã€‚表ã®çµ‚ã‚Šã«æˆ»ã£ã¦æ¤œç´¢ã‚’続ã‘ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "%PRODUCTNAME Calc 已經æœå°‹åˆ°å·¥ä½œè¡¨çš„起始ä½ç½®ã€‚è¦ç¹¼çºŒå¾žå·¥ä½œè¡¨çš„çµæŸä½ç½®æœå°‹ï¼Ÿ"; +//STRIP001 Text[ arabic ] = "ÈÍ?%PRODUCTNAME Calc ÍÊ?ÈÏÇí?ÇáÌÏæá. åá ÊÑíÏ ãÊÇÈÚÉ ÇáÈÍ?Úä?äåÇí?ÇáÌÏæá?"; +//STRIP001 Text[ greek ] = "Ôï %PRODUCTNAME Calc åêôÝëåóå ôç?áíáæÞôçó?ùò ôç?áñ÷Þ ôï?ðßíáêá. ÈÝëåôå íá óõíå÷éóôåß ?áíáæÞôçó?óô?ôÝëï?ôï?ðßíáêá;"; +//STRIP001 Text[ korean ] = "%PRODUCTNAME Calc ëŠ?시트ì?ì‹œìž‘ë¶€ë¶„ì„ ê²€ìƒ‰í–ˆìŠµë‹ˆë‹? 마지막까지 ê³„ì† í•˜ê² ìŠµë‹ˆê¹?"; +//STRIP001 Text[ turkish ] = "%PRODUCTNAME Calc tablonun baþýna kadar arad? Aramaya tablo sonunda devam etmek istiyor musunuz?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "%PRODUCTNAME Calc ha buscat fins a l'inici del full. Voleu continuar la cerca fins al final?"; +//STRIP001 Text[ finnish ] = "%PRODUCTNAME Calc on tehnyt haun taulukon alkuun asti. Haluatko jatkaa hakua loppuun?"; +//STRIP001 Text[ thai ] = "ค้นหà¸?%PRODUCTNAME Calc ที่จุดเริ่มต้นขà¸à¸‡à¹à¸œà¹ˆà¸™à¸‡à¸²à¸?คุณต้à¸à¸‡à¸à¸²à¸£à¸—ำต่à¸à¸—ี่จุดสุดท้ายหรืà¸à¹„มà¹?"; +//STRIP001 Text[ czech ] = "%PRODUCTNAME Calc dosáhl pÅ™i hledánà zaÄátku listu. Chcete pokraÄovat od konce?"; +//STRIP001 Text[ hebrew ] = "%PRODUCTNAME Calc hat bis zum Anfang der Tabelle gesucht. Möchten Sie die Suche am Tabellenende fortsetzen?"; +//STRIP001 Text[ hindi ] = "%PRODUCTNAME गणना शीटॠका पà¥à¤°à¤¾à¤°à¤‚à¤?तक खोà¤?किया à¥?आप अंà¤?से खोà¤?जारी रखना चाहतà¥?है?"; +//STRIP001 }; +//STRIP001 String STR_MSSG_SEARCHANDREPLACE_2 +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? StarCalc hat bis zum Ende der Tabelle gesucht. Möchten Sie die Suche am Tabellenanfang fortsetzen? : StarCalc hat bis zum Ende der Tabelle gesucht. M÷chten Sie die Suche am Tabellenanfang fortsetzen? */ +//STRIP001 Text = "%PRODUCTNAME Calc hat bis zum Ende der Tabelle gesucht. Möchten Sie die Suche am Tabellenanfang fortsetzen?" ; +//STRIP001 Text [ ENGLISH ] = "StarCalc has searched to the end of the table. Do you want to continue at the beginning?" ; +//STRIP001 Text [ english_us ] = "%PRODUCTNAME Calc has searched to the end of the sheet. Do you want to continue at the beginning?" ; +//STRIP001 Text [ italian ] = "%PRODUCTNAME Calc ha effettuato la ricerca fino alla fine della tabella. Volete continuare dall'inizio?" ; +//STRIP001 Text [ spanish ] = "%PRODUCTNAME Calc ha buscado hasta el final de la hoja. ¿Desea continuar la búsqueda desde el comienzo?" ; +//STRIP001 Text [ french ] = "%PRODUCTNAME Calc a atteint la fin du classeur. Souhaitez-vous reprendre la recherche au début du classeur ?" ; +//STRIP001 Text [ dutch ] = "%PRODUCTNAME Calc heeft tot aan het einde van het werkblad gezocht. Wilt u het zoeken aan het begin voortzetten?" ; +//STRIP001 Text [ swedish ] = "%PRODUCTNAME Calc har sökt till slutet av tabellen. Vill du att sökningen skall fortsätta i tabellens början?" ; +//STRIP001 Text [ danish ] = "%PRODUCTNAME Calc har søgt til slutningen af arket. Vil du fortsætte søgningen fra arkets begyndelse?" ; +//STRIP001 Text [ portuguese ] = "O %PRODUCTNAME Calc procurou at?ao fim da folha. Deseja continuar a procura no princípio?" ; +//STRIP001 Text [ portuguese_brazilian ] = "O %PRODUCTNAME Calc pesquisou at?o final da planilha. Deseja continuar pelo início?" ; +//STRIP001 Text[ chinese_simplified ] = "%PRODUCTNAME Calc å·²ç»æœå¯»åˆ°å·¥ä½œè¡¨çš„结æŸä½ç½®ã€‚è¦è‡ªå·¥ä½œè¡¨çš„起始ä½ç½®ç»§ç»æœå¯»ï¼Ÿ"; +//STRIP001 Text[ russian ] = "%PRODUCTNAME Calc îñóùåñòâèë ïîèñ?ïî íàïðàâëåíè??êîíö?ëèñò? Ïðîäîëæèòü ïîèñ??íà÷àëà ëèñò?"; +//STRIP001 Text[ polish ] = "%PRODUCTNAME Calc przeszuka?arkusz do koñca. Czy kontynuowa?wyszukiwanie od pocz¹tku arkusza?"; +//STRIP001 Text[ japanese ] = "%PRODUCTNAME Calc ã¯è¡¨ã®çµ‚ã‚Šã¾ã§æ¤œç´¢ã—ã¾ã—ãŸã€‚表ã®å§‹ã‚ã«æˆ»ã£ã¦æ¤œç´¢ã‚’続ã‘ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "%PRODUCTNAME Calc 已經æœå°‹åˆ°å·¥ä½œè¡¨çš„çµæŸä½ç½®ã€‚è¦ç¹¼çºŒåœ¨å·¥ä½œè¡¨çš„起始ä½ç½®æœå°‹ï¼Ÿ"; +//STRIP001 Text[ arabic ] = "ÈÍ?%PRODUCTNAME Calc ÍÊ?äåÇí?ÇáÌÏæá. åá ÊÑíÏ ãÊÇÈÚÉ ÇáÈÍ?Úä?ÈÏÇí?ÇáÌÏæá?"; +//STRIP001 Text[ greek ] = "Ôï %PRODUCTNAME Calc åêôÝëåóå ôç?áíáæÞôçó?ùò ôï ôÝëï?ôï?ðßíáêá. ÈÝëåôå íá óõíå÷éóôåß ?áíáæÞôçó?óôçí áñ÷Þ ôï?ðßíáêá;"; +//STRIP001 Text[ korean ] = "%PRODUCTNAME Calc ëŠ?시트ì?마지ë§?ë¶€ë¶„ì„ ê²€ìƒ‰í–ˆìŠµë‹ˆë‹? 처ìŒë¶€í„?ê³„ì† í•˜ê² ìŠµë‹ˆê¹?"; +//STRIP001 Text[ turkish ] = "%PRODUCTNAME Calc tablonun sonuna kadar arad? Aramaya tablo baþýndan devam etmek istiyor musunuz?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "%PRODUCTNAME Calc ha buscat fins al final del full. Voleu continuar la cerca des del principi?"; +//STRIP001 Text[ finnish ] = "%PRODUCTNAME Calc on tehnyt haun taulukon loppuun asti. Haluatko jatkaa hakua alkuun?"; +//STRIP001 Text[ thai ] = "ค้นหà¸?%PRODUCTNAME Calc ที่จุดสุดท้ายขà¸à¸‡à¹à¸œà¹ˆà¸™à¸‡à¸²à¸? คุณต้à¸à¸‡à¸à¸²à¸£à¸—ำต่à¸à¸—ี่จุดเริ่มต้นหรืà¸à¹„ม่?"; +//STRIP001 Text[ czech ] = "%PRODUCTNAME Calc dosáhl pÅ™i hledánà konce listu. Chcete pokraÄovat od zaÄátku?"; +//STRIP001 Text[ hebrew ] = "%PRODUCTNAME Calc hat bis zum Ende der Tabelle gesucht. Möchten Sie die Suche am Tabellenanfang fortsetzen?"; +//STRIP001 Text[ hindi ] = "%PRODUCTNAME गणना शीटॠका अंà¤?तक खोà¤?किया à¥?आप पà¥à¤°à¤¾à¤°à¤‚à¤?से खोà¤?जारी रखना चाहतà¥?है?"; +//STRIP001 }; +//STRIP001 String STR_MSSG_SEARCHANDREPLACE_3 +//STRIP001 { +//STRIP001 Text = "Suchen & Ersetzen" ; +//STRIP001 Text [ ENGLISH ] = "Search & replace" ; +//STRIP001 Text [ english_us ] = "Find & Replace" ; +//STRIP001 Text [ italian ] = "Cerca e sostituisci" ; +//STRIP001 Text [ spanish ] = "Buscar y reemplazar" ; +//STRIP001 Text [ french ] = "Rechercher & Remplacer" ; +//STRIP001 Text [ dutch ] = "Zoeken & vervangen" ; +//STRIP001 Text [ swedish ] = "Sök och ersätt" ; +//STRIP001 Text [ danish ] = "Søg og erstat" ; +//STRIP001 Text [ portuguese ] = "Localizar & Substituir" ; +//STRIP001 Text [ portuguese_brazilian ] = "Localizar & Substituir" ; +//STRIP001 Text[ chinese_simplified ] = "æœå¯»å’Œæ›¿æ?"; +//STRIP001 Text[ russian ] = "Íàéò??çàìåíèòü"; +//STRIP001 Text[ polish ] = "Znajd?i zamie?"; +//STRIP001 Text[ japanese ] = "検索ã¨ç½®æ?"; +//STRIP001 Text[ chinese_traditional ] = "æœå°‹å’Œä»£æ›?"; +//STRIP001 Text[ arabic ] = "ÇáÈÍ?æÇáÇÓÊÈÏÇá"; +//STRIP001 Text[ greek ] = "ÁíáæÞôçó?êá?ÁíôéêáôÜóôáó?"; +//STRIP001 Text[ korean ] = "찾기 ë°?바꾸ê¸?"; +//STRIP001 Text[ turkish ] = "Ara & deðiþtir"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Cerca i reemplaça"; +//STRIP001 Text[ finnish ] = "Etsi ja korvaa"; +//STRIP001 Text[ thai ] = "หาà¹à¸¥à¸°à¹à¸—นทีà¹?"; +//STRIP001 Text[ czech ] = "NajÃt a nahradit"; +//STRIP001 Text[ hebrew ] = "‮חיפו×?והחלפהâ€?"; +//STRIP001 Text[ hindi ] = "अनà¥à¤µà¥‡à¤·à¤?और पà¥à¤°à¤¤à¤¿à¤¸à¥à¤¥à¤¾à¤ªà¤?"; +//STRIP001 }; +//STRIP001 String STR_MSSG_SEARCHANDREPLACE_4 +//STRIP001 { +//STRIP001 Text = "%PRODUCTNAME Calc hat bis zum Anfang des Dokuments gesucht. Möchten Sie die Suche am Dokumentende fortsetzen?" ; +//STRIP001 Text [ english ] = "StarCalc has searched to the beginning of the document. Do you want to continue at the end?" ; +//STRIP001 Text [ portuguese ] = "O %PRODUCTNAME Calc procurou at?ao início do documento. Deseja continuar no final do documento?" ; +//STRIP001 Text [ english_us ] = "%PRODUCTNAME Calc has searched to the beginning of the document. Do you want to continue at the end?" ; +//STRIP001 Text [ portuguese_brazilian ] = "O %PRODUCTNAME Calc pesquisou at?o início do documento. Deseja continuar pelo final?" ; +//STRIP001 Text [ swedish ] = "%PRODUCTNAME Calc har sökt till början p?dokumentet. Vill du att sökningen skall fortsätta i slutet p?dokumentet?" ; +//STRIP001 Text [ danish ] = "%PRODUCTNAME Calc har søgt til begyndelsen af dokumentet. Vil du fortsætte søgningen fra dokumentets slutning?" ; +//STRIP001 Text [ italian ] = "La ricerca effettuata da %PRODUCTNAME Calc ha raggiunto l'inizio. Volete proseguire la ricerca dalla fine del documento?" ; +//STRIP001 Text [ spanish ] = "%PRODUCTNAME Calc ha buscado hasta el principio del documento.¿Desea continuar la búsqueda por el final del documento?" ; +//STRIP001 Text [ french ] = "%PRODUCTNAME Calc a atteint le début du classeur. Souhaitez-vous reprendre la recherche ?la fin du classeur ?" ; +//STRIP001 Text [ dutch ] = "%PRODUCTNAME Calc heeft gezocht tot aan het begin van het document. Wilt u het zoeken aan het einde van het document voortzetten?" ; +//STRIP001 Text[ chinese_simplified ] = "%PRODUCTNAME Calc å·²ç»æœå¯»åˆ°æ–‡æ¡£èµ·å§‹ä½ç½®ã€‚è¦è‡ªæ–‡æ¡£çš„结æŸä½ç½®ç»§ç»æœå¯»ï¼?"; +//STRIP001 Text[ russian ] = "%PRODUCTNAME Calc îñóùåñòâèë ïîèñ?ïî íàïðàâëåíè??íà÷àëó äîêóìåíò? Ïðîäîëæèòü ïîèñ??êîíö?äîêóìåíò?"; +//STRIP001 Text[ polish ] = "%PRODUCTNAME Calc przeszuka?dokument do pocz¹tku. Czy kontynuowa?wyszukiwanie od koñca dokumentu?"; +//STRIP001 Text[ japanese ] = "%PRODUCTNAME Calc ã¯ãƒ‰ã‚ュメントã®å§‹ã‚ã¾ã§æ¤œç´¢ã—ã¾ã—ãŸã€‚ドã‚ュメントã®çµ‚ã‚Šã«æˆ»ã£ã¦æ¤œç´¢ã‚’続ã‘ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "%PRODUCTNAME Calc 已經æœå°‹åˆ°æ–‡ä»¶çš„起始ä½ç½®ã€‚è¦ç¹¼çºŒåœ¨æ–‡ä»¶çš„çµæŸä½ç½®æœå°‹ï¼?"; +//STRIP001 Text[ arabic ] = "ÈÍ?%PRODUCTNAME Calc ÍÊ?ÈÏÇí?ÇáãÓÊä? åá ÊÑíÏ ãÊÇÈÚÉ ÇáÈÍ?Úä?äåÇí?ÇáãÓÊäÏ¿"; +//STRIP001 Text[ greek ] = "Ôï %PRODUCTNAME Calc ïëïêëÞñùóå ôç?áíáæÞôçó?ùò ôç?áñ÷Þ ôï?åããñÜöïõ. ÈÝëåôå íá óõíå÷éóôåß ?áíáæÞôçó?áð?ôï ôÝëï?ôï?åããñÜöïõ;"; +//STRIP001 Text[ korean ] = "%PRODUCTNAME CalcëŠ?문서ì?시작ì?검색했습니ë‹? 문서ì?ëì—ì„?ê²€ìƒ‰ì„ ê³„ì†í•˜ì‹œê² 습니까?"; +//STRIP001 Text[ turkish ] = "%PRODUCTNAME Calc belgenin baþýna kadar arad? Aramaya belge sonunda devam etmek istiyor musunuz?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "%PRODUCTNAME Calc ha buscat fins al principi del document. Voleu continuar la cerca fins al final del document?"; +//STRIP001 Text[ finnish ] = "%PRODUCTNAME Calc on tehnyt haun asiakirjan alkuun asti. Haluatko jatkaa hakua loppuun?"; +//STRIP001 Text[ thai ] = "ค้นหà¸?%PRODUCTNAME Calc ไปยังจุดเริ่มต้นเà¸à¸à¸ªà¸²à¸?คุณต้à¸à¸‡à¸à¸²à¸£à¸—ำต่à¸à¸—ี่จุดสุดท้ายหรืà¸à¹„มà¹?"; +//STRIP001 Text[ czech ] = "%PRODUCTNAME Calc dosáhl pÅ™i hledánà zaÄátku listu. Chcete pokraÄovat od konce?"; +//STRIP001 Text[ hebrew ] = "%PRODUCTNAME Calc hat bis zum Anfang des Dokuments gesucht. Möchten Sie die Suche am Dokumentende fortsetzen?"; +//STRIP001 Text[ hindi ] = "%PRODUCTNAME गणना लेखपतà¥à¤?का पà¥à¤°à¤¾à¤°à¤‚à¤?तक खोà¤?किया à¥?आप अंà¤?से खोà¤?जारी रखना चाहतà¥?है?"; +//STRIP001 }; +//STRIP001 String STR_MSSG_SEARCHANDREPLACE_5 +//STRIP001 { +//STRIP001 Text = "%PRODUCTNAME Calc hat bis zum Ende des Dokuments gesucht. Möchten Sie die Suche am Dokumentanfang fortsetzen?" ; +//STRIP001 Text [ english ] = "StarCalc has searched to the end of the document. Do you want to continue at the beginning?" ; +//STRIP001 Text [ portuguese ] = "O %PRODUCTNAME Calc procurou at?ao final do documento. Deseja continuar no início?" ; +//STRIP001 Text [ english_us ] = "%PRODUCTNAME Calc has searched to the end of the document. Do you want to continue at the beginning?" ; +//STRIP001 Text [ portuguese_brazilian ] = "O %PRODUCTNAME Calc pesquisou at?o final do documento. Deseja continuar pelo início?" ; +//STRIP001 Text [ swedish ] = "%PRODUCTNAME Calc har sökt till slutet p?dokumentet. Vill du att sökningen skall fortsätta i början p?dokumentet?" ; +//STRIP001 Text [ danish ] = "%PRODUCTNAME Calc har søgt til slutningen af dokumentet. Vil du fortsætte søgningen fra dokumentets begyndelse?" ; +//STRIP001 Text [ italian ] = "La ricerca effettuata da %PRODUCTNAME Calc ha raggiunto la fine. Volete proseguire la ricerca dall'inizio del documento?" ; +//STRIP001 Text [ spanish ] = "%PRODUCTNAME Calc ha buscado hasta el final del documento. ¿Desea continuar la búsqueda desde el principio del documento?" ; +//STRIP001 Text [ french ] = "%PRODUCTNAME Calc a atteint la fin du classeur. Souhaitez-vous reprendre la recherche au début du classeur ?" ; +//STRIP001 Text [ dutch ] = "%PRODUCTNAME Calc heeft gezocht tot aan het einde van het document. Wilt u het zoeken aan het begin van het document voortzetten?" ; +//STRIP001 Text[ chinese_simplified ] = "%PRODUCTNAME Calc å·²ç»æœå¯»åˆ°æ–‡æ¡£çš„结æŸä½ç½®ã€‚è¦è‡ªæ–‡æ¡£çš„起始ä½ç½®ç»§ç»æœå¯»ï¼?"; +//STRIP001 Text[ russian ] = "%PRODUCTNAME Calc îñóùåñòâèë ïîèñ?ïî íàïðàâëåíè??êîíö?äîêóìåíò? Ïðîäîëæèòü ïîèñ??íà÷àëà äîêóìåíò?"; +//STRIP001 Text[ polish ] = "%PRODUCTNAME Calc przeszuka?dokument do koñca. Czy kontynuowa?wyszukiwanie od pocz¹tku dokumentu?"; +//STRIP001 Text[ japanese ] = "%PRODUCTNAME Calc ã¯ãƒ‰ã‚ュメントã®çµ‚ã‚Šã¾ã§æ¤œç´¢ã—ã¾ã—ãŸã€‚ドã‚ュメントã®å§‹ã‚ã«æˆ»ã£ã¦æ¤œç´¢ã‚’続ã‘ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "%PRODUCTNAME Calc 已經æœå°‹åˆ°æ–‡ä»¶çš„çµæŸä½ç½®ã€‚è¦ç¹¼çºŒåœ¨æ–‡ä»¶çš„起始ä½ç½®æœå°‹ï¼?"; +//STRIP001 Text[ arabic ] = "ÈÍ?%PRODUCTNAME Calc ÍÊ?äåÇí?ÇáãÓÊä? åá ÊÑíÏ ãÊÇÈÚÉ ÇáÈÍ?Úä?ÈÏÇí?ÇáãÓÊäÏ¿"; +//STRIP001 Text[ greek ] = "Ôï %PRODUCTNAME Calc ïëïêëÞñùóå ôç?áíáæÞôçó?ùò ôï ôÝëï?ôï?åããñÜöïõ. ÈÝëåôå íá óõíå÷éóôåß ?áíáæÞôçó?áð?ôç?áñ÷Þ ôï?åããñÜöïõ;"; +//STRIP001 Text[ korean ] = "%PRODUCTNAME CalcëŠ?문서ì?마지ë§?ë¶€ë¶„ì„ ê²€ìƒ‰í–ˆìŠµë‹ˆë‹? 처ìŒë¶€í„?ê³„ì† í•˜ê² ìŠµë‹ˆê¹?"; +//STRIP001 Text[ turkish ] = "%PRODUCTNAME Calc belgenin sonuna kadar arad? Aramaya belge baþýndan devam etmek istiyor musunuz?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "%PRODUCTNAME Calc ha buscado fins al final del document. Voleu continuar la cerca des del principi del document?"; +//STRIP001 Text[ finnish ] = "%PRODUCTNAME Calc on tehnyt haun asiakirjan loppuun asti. Haluatko jatkaa hakua alkuun?"; +//STRIP001 Text[ thai ] = "ค้นหà¸?%PRODUCTNAME Calc ไปยังจุดสุดท้ายขà¸à¸‡à¹€à¸à¸à¸ªà¸²à¸?คุณต้à¸à¸‡à¸à¸²à¸£à¸—ำต่à¸à¸—ี่จุดเริ่มต้นหรืà¸à¹„ม่?"; +//STRIP001 Text[ czech ] = "%PRODUCTNAME Calc dosáhl pÅ™i hledánà konce listu. Chcete pokraÄovat od zaÄátku?"; +//STRIP001 Text[ hebrew ] = "%PRODUCTNAME Calc hat bis zum Ende des Dokuments gesucht. Möchten Sie die Suche am Dokumentanfang fortsetzen?"; +//STRIP001 Text[ hindi ] = "%PRODUCTNAME गणना लेखपतà¥à¤?का अंà¤?तक खोà¤?किया à¥?आप पà¥à¤°à¤¾à¤°à¤‚à¤?से खोà¤?जारी रखना चाहतà¥?है?"; +//STRIP001 }; + String STR_CREATENAME_REPLACE + { + Text [ de ] = "Vorhandene Definition von # ersetzen?" ; + Text [ en-US ] = "Replace existing definition of #?" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Substituir definição existente de #?"; + Text[ ru ] = "Заменить ÑущеÑтвующее определение #?"; + Text[ el ] = "Αντικατάσταση υπάÏχον οÏÎ¹ÏƒÎ¼Î¿Ï Î³Î¹Î± #;"; + Text[ nl ] = "Bestaande definitie van # vervangen?"; + Text[ fr ] = "Remplacer la définition existante de # ?"; + Text[ es ] = "¿Reemplazar la definición existente de #?"; + Text[ fi ] = "Korvataanko kohteen # tämänhetkinen määritelmä?"; + Text[ ca ] = "Voleu reemplaçar la definició existent de #?"; + Text[ it ] = "Sostituire la definizione presente di #?"; + Text[ da ] = "Skal de eksisterende definitioner erstattes af #?"; + Text[ sv ] = "Ersätta existerande definition av #?"; + Text[ pl ] = "Czy zamienić istniejÄ…cÄ… definicjÄ™ #?"; + Text[ pt-BR ] = "Substituir a definição existente de #?"; + Text[ th ] = "à¹à¸—นที่คำนิยามขà¸à¸‡ # ที่มีà¸à¸¢à¸¹à¹ˆà¸«à¸£à¸·à¸à¹„ม่?"; + Text[ ja ] = "æ—¢å˜ã®å®šç¾©ã‚’ # ã«ç½®ãæ›ãˆã¾ã™ã‹ã€‚"; + Text[ ko ] = "#ì˜ ê¸°ì¡´ ì •ì˜ë¥¼ ë°”ê¾¸ì‹œê² ìŠµë‹ˆê¹Œ?"; + Text[ zh-CN ] = "替æ¢çŽ°å˜çš„定义 # ?"; + Text[ zh-TW ] = "代替ç¾å˜çš„定義 # ?"; + Text[ tr ] = "Mevcut # tanımı deÄŸiÅŸtirilsin mi?"; + Text[ hi-IN ] = "# का असà¥à¤¤à¤¿à¤¤à¥à¤µ में रहनेवाला परिà¤à¤¾à¤·à¤¾ को पà¥à¤°à¤¤à¤¿à¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤ करना है ?"; + Text[ ar ] = "هل تريد استبدال تعري٠# الموجود؟"; + Text[ he ] = "Vorhandene Definition von # ersetzen?"; + }; +//STRIP001 String STR_CREATENAME_MARKERR +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Falsche Markierung für Bereichsnamen : Falsche Markierung f³r Bereichsnamen */ +//STRIP001 Text = "Falsche Markierung für Bereichsnamen" ; +//STRIP001 Text [ ENGLISH ] = "Invalid area for rangenames" ; +//STRIP001 Text [ dutch ] = "Ongeldige markering voor bereiknaam" ; +//STRIP001 Text [ english_us ] = "Invalid selection for range names" ; +//STRIP001 Text [ italian ] = "Contrassegno errato per i nomi delle aree" ; +//STRIP001 Text [ spanish ] = "Selección incorrecta para los nombres de área" ; +//STRIP001 Text [ french ] = "Sélection incorrecte pour les noms de plages" ; +//STRIP001 Text [ swedish ] = "Fel markering för områdesnamn" ; +//STRIP001 Text [ danish ] = "Forkerte markeringer for områdenavne." ; +//STRIP001 Text [ portuguese ] = "Selecção incorrecta para os nomes da área." ; +//STRIP001 Text [ portuguese_brazilian ] = "Seleção inválida para os nomes de intervalo." ; +//STRIP001 Text[ chinese_simplified ] = "区域å称的错误选择"; +//STRIP001 Text[ russian ] = "Íåïðàâèëüíîå âûäåëåíè?äëÿ èìåí îáëàñò?"; +//STRIP001 Text[ polish ] = "Nieprawid³owy wybór nazw zakresu"; +//STRIP001 Text[ japanese ] = "é¸æŠžã—ãŸç¯„囲åãŒæ£ã—ãã‚ã‚Šã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "å€åŸŸå稱的錯誤é¸æ“‡"; +//STRIP001 Text[ arabic ] = "ÊÍÏí?Ûí?ÕÇáÍ áÃÓãÇÁ äØÇÞ."; +//STRIP001 Text[ greek ] = "ËÜèï?åðéëïã?ãé?ïíüìáô?ðåñéï÷þí"; +//STRIP001 Text[ korean ] = "범위 ì´ë¦„ì?잘못ë?ì„ íƒ"; +//STRIP001 Text[ turkish ] = "Aralýk adlar?için geçersiz seçim"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "La selecci?per a noms d'àrea no és vàlida"; +//STRIP001 Text[ finnish ] = "Virheellinen aluenimien valinta"; +//STRIP001 Text[ thai ] = "เลืà¸à¸à¸Šà¸·à¹ˆà¸à¸Šà¹ˆà¸§à¸‡à¹„ม่ถูà¸à¸•à¹‰à¸à¸‡"; +//STRIP001 Text[ czech ] = "Neplatný výbÄ›r pro názvy oblastÃ"; +//STRIP001 Text[ hebrew ] = "Falsche Markierung für Bereichsnamen"; +//STRIP001 Text[ hindi ] = "फैलाà¤?नाà¤?केलिà¤?अमानà¥à¤¯ चà¥à¤¨à¤¾à¤?"; +//STRIP001 }; + String STR_CONSOLIDATE_ERR1 + { + /* ### ACHTUNG: Neuer Text in Resource? Verbindungen können nicht oberhalb der Quelldaten eingefügt werden. : Verbindungen k÷nnen nicht oberhalb der Quelldaten eingef³gt werden. */ + Text [ de ] = "Verbindungen können nicht oberhalb der Quelldaten eingefügt werden." ; + Text [ en-US ] = "References can not be inserted above the source data." ; + Text [ x-comment ] = " "; + Text[ pt ] = "ImpossÃvel inserir referências acima dos dados-fonte."; + Text[ ru ] = "Ðевозможно вÑтавить ÑвÑзь над иÑходными данными."; + Text[ el ] = "Δεν είναι δυνατόν να εισαχθοÏν συνδÎσεις πάνω από τα δεδομÎνα Ï€ÏοÎλευσης."; + Text[ nl ] = "Verbindingen kunnen niet boven brongegevens worden ingevoegd."; + Text[ fr ] = "Impossible d'insérer des liaisons au-dessus des données de source."; + Text[ es ] = "Las referencias no se pueden insertar sobre los datos fuente."; + Text[ fi ] = "Viitteitä ei voi lisätä lähdetietojen yläpuolelle."; + Text[ ca ] = "No es poden inserir referències sobre les dades font."; + Text[ it ] = "Non è possibile inserire collegamenti al di sopra dei dati sorgente"; + Text[ da ] = "Forbindelser kan ikke indsættes ovenfor kildedata."; + Text[ sv ] = "Förbindelser kan inte infogas ovanför källdata."; + Text[ pl ] = "Adresów nie można wpisać powyżej danych źródÅ‚owych."; + Text[ pt-BR ] = "Referências não podem ser inseridas acima da origem de dados."; + Text[ th ] = "ไม่สามารถà¹à¸—รà¸à¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸‡à¹€à¸«à¸™à¸·à¸à¹à¸«à¸¥à¹ˆà¸‡à¸‚้à¸à¸¡à¸¹à¸¥à¹„ด้"; + Text[ ja ] = "ソースデータã®ä¸Šã«å‚照を挿入ã§ãã¾ã›ã‚“。"; + Text[ ko ] = "참조를 ì›ë³¸ ë°ì´í„° 위로 ì‚½ìž…í• ìˆ˜ 없습니다."; + Text[ zh-CN ] = "æ— æ³•åœ¨æºæ•°æ®ä¹‹ä¸ŠåŠ 入链接。"; + Text[ zh-TW ] = "無法在æºè³‡æ–™ä¹‹ä¸ŠåŠ å…¥æ·å¾‘。"; + Text[ tr ] = "Referanslar, kaynak verilerinin üstüne eklenemez."; + Text[ hi-IN ] = "मूल ड़ॉटा के ऊपर रेफरेनà¥à¤¸ को नहीं जोड़ सकते है ।"; + Text[ ar ] = "لا يمكن إدراج الاتصالات Ùوق بيانات المصدر."; + Text[ he ] = "Verbindungen können nicht oberhalb der Quelldaten eingefügt werden."; + }; + String STR_SCENARIO_NOTFOUND + { + Text [ de ] = "Szenario nicht gefunden" ; + Text [ en-US ] = "Scenario not found" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Cenário não encontrado"; + Text[ ru ] = "Сценарий не найден"; + Text[ el ] = "Το σενάÏιο δεν βÏÎθηκε"; + Text[ nl ] = "Scenario niet gevonden"; + Text[ fr ] = "Scénario non trouvé"; + Text[ es ] = "No se ha encontrado el escenario"; + Text[ fi ] = "Skenaariota ei löytynyt"; + Text[ ca ] = "No s'ha trobat l'escenari"; + Text[ it ] = "Scenario non trovato"; + Text[ da ] = "Scenario blev ikke fundet"; + Text[ sv ] = "Hittar inte scenario"; + Text[ pl ] = "Scenariusza nie znaleziono"; + Text[ pt-BR ] = "Cenário não encontrado"; + Text[ th ] = "ไม่พบสถานà¸à¸²à¸£à¸“์สมมติ"; + Text[ ja ] = "シナリオãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"; + Text[ ko ] = "시나리오를 찾지 못했습니다."; + Text[ zh-CN ] = "没有找到方案"; + Text[ zh-TW ] = "沒有找到分æžè—本"; + Text[ tr ] = "Senaryo bulunamadı"; + Text[ hi-IN ] = "विवरण नहीं मिला"; + Text[ ar ] = "تعذر العثور على السيناريو"; + Text[ he ] = "Szenario nicht gefunden"; + }; +//STRIP001 String STR_QUERY_DELENTRY +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Wollen Sie den Eintrag # wirklich löschen? : Wollen Sie den Eintrag # wirklich l÷schen? */ +//STRIP001 Text = "Wollen Sie den Eintrag # wirklich löschen?" ; +//STRIP001 Text [ ENGLISH ] = "Do you really want to delete entry #?" ; +//STRIP001 Text [ english_us ] = "Do you really want to delete the entry #?" ; +//STRIP001 Text [ dutch ] = "Wilt u het item # werkelijk wissen?" ; +//STRIP001 Text [ italian ] = "Si vuole veramente eliminare la voce #?" ; +//STRIP001 Text [ spanish ] = "¿Desea realmente borrar la entrada #?" ; +//STRIP001 Text [ french ] = "Voulez-vous vraiment supprimer l'entrée # ?" ; +//STRIP001 Text [ swedish ] = "Vill du verkligen radera #?" ; +//STRIP001 Text [ danish ] = "Er du sikker p?at du vil slette element #?" ; +//STRIP001 Text [ portuguese ] = "Deseja realmente eliminar a entrada #?" ; +//STRIP001 Text [ portuguese_brazilian ] = "Deseja realmente excluir a entrada #?" ; +//STRIP001 Text[ chinese_simplified ] = "您真的è¦åˆ 除这个æ¡ç›® # å—?"; +//STRIP001 Text[ russian ] = "Âû äåéñòâèòåëüí?õîòèòå óäàëèò?ýëåìåí?#?"; +//STRIP001 Text[ polish ] = "Czy na pewno chcesz usun¹æ has³o #?"; +//STRIP001 Text[ japanese ] = "é …ç›® # を削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "您真è¦åˆªé™¤é€™å€‹æ¢ç›?# ï¼?"; +//STRIP001 Text[ arabic ] = "åá ÊÑíÏ ÈÇáÝÚá ÍÐ?ÇáÅÏÎÇ?#?"; +//STRIP001 Text[ greek ] = "ÈÝëåôå ðñáãìáôéêÜ íá äéáãñáöå??êáôá÷þñéóç #;"; +//STRIP001 Text[ korean ] = "í•ëª© #ì?ë¥? ì •ë§ë¡?ì‚ì œí•˜ê² ìŠµë‹ˆê¹?"; +//STRIP001 Text[ turkish ] = "# giriþini gerçekten silmek istiyor musunuz?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Esteu segur que voleu suprimir l'entrada #?"; +//STRIP001 Text[ finnish ] = "Haluatko varmasti poistaa merkinnän #?"; +//STRIP001 Text[ thai ] = "คุณต้à¸à¸‡à¸à¸²à¸£à¸¥à¸šà¸£à¸²à¸¢à¸à¸²à¸£ # หรืà¸à¹„มà¹?"; +//STRIP001 Text[ czech ] = "Opravdu chcete smazat položku #?"; +//STRIP001 Text[ hebrew ] = "Wollen Sie den Eintrag # wirklich löschen?"; +//STRIP001 Text[ hindi ] = "आप # पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿà¤?को सचमà¥à¤?मेà¤?मिटाना चाहतà¥?है?"; +//STRIP001 }; +//STRIP001 String STR_VOBJ_OBJECT +//STRIP001 { +//STRIP001 Text = "Objekte/Grafiken" ; +//STRIP001 Text [ ENGLISH ] = "Objects/Images" ; +//STRIP001 Text [ english_us ] = "Objects/graphics" ; +//STRIP001 Text [ italian ] = "Oggetti/immagini" ; +//STRIP001 Text [ spanish ] = "Objetos/Imágenes" ; +//STRIP001 Text [ french ] = "Objets/Images" ; +//STRIP001 Text [ dutch ] = "Objecten/afbeeldingen" ; +//STRIP001 Text [ swedish ] = "Objekt/grafik" ; +//STRIP001 Text [ danish ] = "Objekter/grafik" ; +//STRIP001 Text [ portuguese ] = "Objectos/Imagens" ; +//STRIP001 Text [ portuguese_brazilian ] = "Objetos/figuras" ; +//STRIP001 Text[ chinese_simplified ] = "对象/图形"; +//STRIP001 Text[ russian ] = "Îáúåêò?Ðèñóíê?"; +//STRIP001 Text[ polish ] = "Obiekty/Grafiki"; +//STRIP001 Text[ japanese ] = "オブジェクトã¨å›³"; +//STRIP001 Text[ chinese_traditional ] = "物件/圖形"; +//STRIP001 Text[ arabic ] = "ßÇÆäÇÊ/Õæ?"; +//STRIP001 Text[ greek ] = "Áíôéêåßìåí?Ãñáöéê?"; +//STRIP001 Text[ korean ] = "개체/그림"; +//STRIP001 Text[ turkish ] = "Nesneler/Grafikler"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Objectes/gràfics"; +//STRIP001 Text[ finnish ] = "Objektit/grafiikka"; +//STRIP001 Text[ thai ] = "วัตถà¸?à¸à¸£à¸²à¸Ÿà¸´à¸„"; +//STRIP001 Text[ czech ] = "Objekty/obrázky"; +//STRIP001 Text[ hebrew ] = "Objekte/Grafiken"; +//STRIP001 Text[ hindi ] = "वसà¥à¤¤à¥?सà¥à¤šà¤¿à¤¤à¥à¤?"; +//STRIP001 }; +//STRIP001 String STR_VOBJ_CHART +//STRIP001 { +//STRIP001 Text = "Diagramme" ; +//STRIP001 Text [ ENGLISH ] = "Charts" ; +//STRIP001 Text [ english_us ] = "Charts" ; +//STRIP001 Text [ dutch ] = "Diagrammen" ; +//STRIP001 Text [ italian ] = "Diagrammi" ; +//STRIP001 Text [ spanish ] = "Diagramas" ; +//STRIP001 Text [ french ] = "Diagrammes" ; +//STRIP001 Text [ swedish ] = "Diagram" ; +//STRIP001 Text [ danish ] = "Diagrammer" ; +//STRIP001 Text [ portuguese ] = "Gráficos" ; +//STRIP001 Text [ portuguese_brazilian ] = "Gráficos" ; +//STRIP001 Text[ chinese_simplified ] = "图表"; +//STRIP001 Text[ russian ] = "Äèàãðàìì?"; +//STRIP001 Text[ polish ] = "Wykresy"; +//STRIP001 Text[ japanese ] = "グラãƒ?"; +//STRIP001 Text[ chinese_traditional ] = "圖表"; +//STRIP001 Text[ arabic ] = "ÑÓæã ÈíÇäíÉ"; +//STRIP001 Text[ greek ] = "ÄéáãñÜììáô?"; +//STRIP001 Text[ korean ] = "차트"; +//STRIP001 Text[ turkish ] = "Þemalar"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Diagrames"; +//STRIP001 Text[ finnish ] = "Kaaviot"; +//STRIP001 Text[ thai ] = "à¹à¸œà¸™à¸ ูมà¸?"; +//STRIP001 Text[ czech ] = "Grafy"; +//STRIP001 Text[ hebrew ] = "Diagramme"; +//STRIP001 Text[ hindi ] = "चारà¥à¤?"; +//STRIP001 }; +//STRIP001 String STR_VOBJ_DRAWINGS +//STRIP001 { +//STRIP001 Text = "Zeichenobjekte" ; +//STRIP001 Text [ ENGLISH ] = "Drawobjects" ; +//STRIP001 Text [ english_us ] = "Drawing Objects" ; +//STRIP001 Text [ italian ] = "Oggetti di disegno" ; +//STRIP001 Text [ spanish ] = "Objetos de dibujo" ; +//STRIP001 Text [ french ] = "Objets de dessin" ; +//STRIP001 Text [ dutch ] = "Tekenobjecten" ; +//STRIP001 Text [ swedish ] = "Ritobjekt" ; +//STRIP001 Text [ danish ] = "Tegneobjekter" ; +//STRIP001 Text [ portuguese ] = "Objectos de desenho" ; +//STRIP001 Text [ portuguese_brazilian ] = "Objetos de Desenho" ; +//STRIP001 Text[ chinese_simplified ] = "绘图对象"; +//STRIP001 Text[ russian ] = "Îáúåêò?ðèñóíêîâ"; +//STRIP001 Text[ polish ] = "Obiekty rysunkowe"; +//STRIP001 Text[ japanese ] = "図形æ画オブジェクト"; +//STRIP001 Text[ chinese_traditional ] = "繪圖物件"; +//STRIP001 Text[ arabic ] = "ßÇÆäÇÊ ÑÓæãíÉ"; +//STRIP001 Text[ greek ] = "Áíôéêåßìåí?ó÷åäßáóç?"; +//STRIP001 Text[ korean ] = "그리ê¸?개체"; +//STRIP001 Text[ turkish ] = "Çizim nesneleri"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Objectes de dibuix"; +//STRIP001 Text[ finnish ] = "Piirrosobjektit"; +//STRIP001 Text[ thai ] = "วาดวัตถุ"; +//STRIP001 Text[ czech ] = "Grafické objekty"; +//STRIP001 Text[ hebrew ] = "Zeichenobjekte"; +//STRIP001 Text[ hindi ] = "रेखाचितà¥à¤?वसà¥à¤¤à¥?"; +//STRIP001 }; +//STRIP001 String STR_VOBJ_MODE_SHOW +//STRIP001 { +//STRIP001 Text = "Anzeigen" ; +//STRIP001 Text [ ENGLISH ] = "Show" ; +//STRIP001 Text [ english_us ] = "Show" ; +//STRIP001 Text [ italian ] = "Mostra" ; +//STRIP001 Text [ spanish ] = "Mostrar" ; +//STRIP001 Text [ french ] = "Afficher" ; +//STRIP001 Text [ dutch ] = "Weergeven" ; +//STRIP001 Text [ swedish ] = "Visa" ; +//STRIP001 Text [ danish ] = "Vis" ; +//STRIP001 Text [ portuguese ] = "Mostrar" ; +//STRIP001 Text [ portuguese_brazilian ] = "Mostrar" ; +//STRIP001 Text[ chinese_simplified ] = "显示"; +//STRIP001 Text[ russian ] = "Ïîêàçàòü"; +//STRIP001 Text[ polish ] = "Poka?"; +//STRIP001 Text[ japanese ] = "表示"; +//STRIP001 Text[ chinese_traditional ] = "顯示"; +//STRIP001 Text[ arabic ] = "ÅÙåÇ?"; +//STRIP001 Text[ greek ] = "ÅìöÜíéóç"; +//STRIP001 Text[ korean ] = "표시"; +//STRIP001 Text[ turkish ] = "Görüntüle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Mostra"; +//STRIP001 Text[ finnish ] = "Näyt?"; +//STRIP001 Text[ thai ] = "à¹à¸ªà¸”ง"; +//STRIP001 Text[ czech ] = "Zobrazit"; +//STRIP001 Text[ hebrew ] = "Anzeigen"; +//STRIP001 Text[ hindi ] = "दिखाà¤?"; +//STRIP001 }; + String STR_VOBJ_MODE_HIDE + { + Text [ de ] = "Ausblenden" ; + Text [ en-US ] = "Hide" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Ocultar"; + Text[ ru ] = "Скрыть"; + Text[ el ] = "ΑπόκÏυψη"; + Text[ nl ] = "Verbergen"; + Text[ fr ] = "Masquer"; + Text[ es ] = "Ocultar"; + Text[ fi ] = "Piilota"; + Text[ ca ] = "Oculta"; + Text[ it ] = "Nascondi"; + Text[ da ] = "Skjul"; + Text[ sv ] = "Dölj"; + Text[ pl ] = "Ukryj"; + Text[ pt-BR ] = "Ocultar"; + Text[ th ] = "ซ่à¸à¸™"; + Text[ ja ] = "éžè¡¨ç¤º"; + Text[ ko ] = "숨기기"; + Text[ zh-CN ] = "éšå…¥"; + Text[ zh-TW ] = "隱入"; + Text[ tr ] = "Gizle"; + Text[ hi-IN ] = "छिपाओ"; + Text[ ar ] = "إخÙاء"; + Text[ he ] = "Ausblenden"; + }; + String STR_VOBJ_MODE_DUMMY + { + Text [ de ] = "Platzhalter" ; + Text [ en-US ] = "Placeholders" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Marcador de posição"; + Text[ ru ] = "ÐŸÐ¾Ð»Ñ Ð¿Ð¾Ð´Ñтановки"; + Text[ el ] = "ΣÏμβολα κÏάτησης θÎσης"; + Text[ nl ] = "Plaatsvervanger"; + Text[ fr ] = "Substituant"; + Text[ es ] = "ComodÃn"; + Text[ fi ] = "Paikkamerkit"; + Text[ ca ] = "Marcadors"; + Text[ it ] = "Segnaposto"; + Text[ da ] = "Pladsholdere"; + Text[ sv ] = "PlatshÃ¥llare"; + Text[ pl ] = "Znaki-wypeÅ‚niacze"; + Text[ pt-BR ] = "Marcadores de posição"; + Text[ th ] = "ตัวยึดตำà¹à¸«à¸™à¹ˆà¸‡"; + Text[ ja ] = "ã‚¤ãƒ¡ãƒ¼ã‚¸æž "; + Text[ ko ] = "í”Œë ˆì´ìŠ¤í™€ë”"; + Text[ zh-CN ] = "通é…符"; + Text[ zh-TW ] = "è¬ç”¨å—å…ƒ"; + Text[ tr ] = "Genel arama karakterleri"; + Text[ hi-IN ] = "सà¥à¤¥à¤¾à¤¨à¤§à¤¾à¤°à¤•"; + Text[ ar ] = "عناصر نائبة"; + Text[ he ] = "Platzhalter"; + }; +//STRIP001 String STR_SCATTR_PAGE_TOPDOWN +//STRIP001 { +//STRIP001 Text = "Von oben nach unten" ; +//STRIP001 Text [ ENGLISH ] = "Top to bottom" ; +//STRIP001 Text [ english_us ] = "Top to bottom" ; +//STRIP001 Text [ dutch ] = "Van boven naar beneden" ; +//STRIP001 Text [ italian ] = "Da sopra a sotto" ; +//STRIP001 Text [ spanish ] = "De arriba hacia abajo" ; +//STRIP001 Text [ french ] = "De haut en bas" ; +//STRIP001 Text [ swedish ] = "Uppifrån ned" ; +//STRIP001 Text [ danish ] = "Fra øverst til nederst" ; +//STRIP001 Text [ portuguese ] = "De cima para baixo" ; +//STRIP001 Text [ portuguese_brazilian ] = "De cima para baixo" ; +//STRIP001 Text[ chinese_simplified ] = "从上å‘下"; +//STRIP001 Text[ russian ] = "Ñâåðõó âíèç"; +//STRIP001 Text[ polish ] = "Z góry do do³u"; +//STRIP001 Text[ japanese ] = "上ã‹ã‚‰ä¸‹ã?"; +//STRIP001 Text[ chinese_traditional ] = "從上å‘下"; +//STRIP001 Text[ arabic ] = "ãä ÃÚáì áÃÓÝ?"; +//STRIP001 Text[ greek ] = "Áð?ðÜíù ðñïò ôá êÜôù"; +//STRIP001 Text[ korean ] = "위ì—ì„?아래ë¡?"; +//STRIP001 Text[ turkish ] = "Yukardan aþaðý"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "De baix cap a dalt"; +//STRIP001 Text[ finnish ] = "Ylhäält?alas"; +//STRIP001 Text[ thai ] = "บนลงล่าง"; +//STRIP001 Text[ czech ] = "Shora dolů"; +//STRIP001 Text[ hebrew ] = "Von oben nach unten"; +//STRIP001 Text[ hindi ] = "ऊपà¤?से नीचे तक"; +//STRIP001 }; +//STRIP001 String STR_SCATTR_PAGE_LEFTRIGHT +//STRIP001 { +//STRIP001 Text = "Von Links-nach-rechts" ; +//STRIP001 Text [ ENGLISH ] = "Left to right" ; +//STRIP001 Text [ english_us ] = "Left-to-right" ; +//STRIP001 Text [ dutch ] = "Van links naar rechts" ; +//STRIP001 Text [ italian ] = "Da sinistra a destra" ; +//STRIP001 Text [ spanish ] = "De izquierda a derecha" ; +//STRIP001 Text [ french ] = "De gauche ?droite" ; +//STRIP001 Text [ swedish ] = "Vänster-till-höger" ; +//STRIP001 Text [ danish ] = "Fra venstre til højre" ; +//STRIP001 Text [ portuguese ] = "Da esquerda para a direita" ; +//STRIP001 Text [ portuguese_brazilian ] = "Da esquerda para a direita" ; +//STRIP001 Text[ chinese_simplified ] = "从左å‘å³"; +//STRIP001 Text[ russian ] = "Ñëåâ?íàïðàâ?"; +//STRIP001 Text[ polish ] = "Od lewej do prawej"; +//STRIP001 Text[ japanese ] = "å·¦ã‹ã‚‰å³ã?"; +//STRIP001 Text[ chinese_traditional ] = "從左å‘å³"; +//STRIP001 Text[ arabic ] = "ãä ÇáíÓÇÑ Åá?Çáíãíä"; +//STRIP001 Text[ greek ] = "Áð?áñéóôåñÜ ðñïò ôá äåîé?"; +//STRIP001 Text[ korean ] = "왼쪽ì—ì„œ 오른쪽으ë¡?"; +//STRIP001 Text[ turkish ] = "Soldan saða"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "D'esquerra a dreta"; +//STRIP001 Text[ finnish ] = "Vasemmalta oikealle"; +//STRIP001 Text[ thai ] = "ซ้ายไปขวà¸?"; +//STRIP001 Text[ czech ] = "Zleva doprava"; +//STRIP001 Text[ hebrew ] = "‮משמ××?לימיןâ€?"; +//STRIP001 Text[ hindi ] = "बायाà¤?ओर से दाहिनी ओर"; +//STRIP001 }; +//STRIP001 String STR_SCATTR_PAGE_NOTES +//STRIP001 { +//STRIP001 Text = "Notizen" ; +//STRIP001 Text [ ENGLISH ] = "Notes" ; +//STRIP001 Text [ english_us ] = "Notes" ; +//STRIP001 Text [ italian ] = "Note" ; +//STRIP001 Text [ spanish ] = "Notas" ; +//STRIP001 Text [ french ] = "Notes" ; +//STRIP001 Text [ dutch ] = "Aantekeningen" ; +//STRIP001 Text [ swedish ] = "Anteckningar" ; +//STRIP001 Text [ danish ] = "Noter" ; +//STRIP001 Text [ portuguese ] = "Anotações" ; +//STRIP001 Text [ portuguese_brazilian ] = "Anotações" ; +//STRIP001 Text[ chinese_simplified ] = "备注"; +//STRIP001 Text[ russian ] = "Ïðèìå÷àí?"; +//STRIP001 Text[ polish ] = "Notatki"; +//STRIP001 Text[ japanese ] = "コメント"; +//STRIP001 Text[ chinese_traditional ] = "備註"; +//STRIP001 Text[ arabic ] = "ãáÇÍÙÇ?"; +//STRIP001 Text[ greek ] = "Óçìåéþóåéò"; +//STRIP001 Text[ korean ] = "메모"; +//STRIP001 Text[ turkish ] = "Notlar"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Notes"; +//STRIP001 Text[ finnish ] = "Huomautukset"; +//STRIP001 Text[ thai ] = "บันทึà¸à¸¢à¹ˆà¸?"; +//STRIP001 Text[ czech ] = "Poznámky"; +//STRIP001 Text[ hebrew ] = "‮הערותâ€?"; +//STRIP001 Text[ hindi ] = "टिपà¥à¤ªà¤£à¥€"; +//STRIP001 }; +//STRIP001 String STR_SCATTR_PAGE_GRID +//STRIP001 { +//STRIP001 Text = "Tabellengitter" ; +//STRIP001 Text [ ENGLISH ] = "Grid" ; +//STRIP001 Text [ english_us ] = "Grid" ; +//STRIP001 Text [ dutch ] = "Raster" ; +//STRIP001 Text [ italian ] = "Griglia tabella" ; +//STRIP001 Text [ spanish ] = "Cuadrícula" ; +//STRIP001 Text [ french ] = "Grille" ; +//STRIP001 Text [ swedish ] = "Tabellgitter" ; +//STRIP001 Text [ danish ] = "T~abelgitter" ; +//STRIP001 Text [ portuguese ] = "Grelha" ; +//STRIP001 Text [ portuguese_brazilian ] = "Grade" ; +//STRIP001 Text[ chinese_simplified ] = "工作表网æ ?"; +//STRIP001 Text[ russian ] = "Ñåòê?"; +//STRIP001 Text[ polish ] = "Siatka"; +//STRIP001 Text[ japanese ] = "表ã®ã‚°ãƒªãƒƒãƒ‰ç·?"; +//STRIP001 Text[ chinese_traditional ] = "工作表網æ ?"; +//STRIP001 Text[ arabic ] = "ÔÈßÉ ÌÏæá"; +//STRIP001 Text[ greek ] = "ÐëÝãìá ðßíáêá"; +//STRIP001 Text[ korean ] = "í‘œì˜ ëˆˆê¸ˆì„?"; +//STRIP001 Text[ turkish ] = "Kýlavuz çizgiler"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Graella"; +//STRIP001 Text[ finnish ] = "Ruudukko"; +//STRIP001 Text[ thai ] = "เส้นตาราง"; +//STRIP001 Text[ czech ] = "MřÞka"; +//STRIP001 Text[ hebrew ] = "Tabellengitter"; +//STRIP001 Text[ hindi ] = "जाà¤?"; +//STRIP001 }; +//STRIP001 String STR_SCATTR_PAGE_HEADERS +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Zeilen- & Spaltenköpfe : Zeilen- & Spaltenk÷pfe */ +//STRIP001 Text = "Zeilen- & Spaltenköpfe" ; +//STRIP001 Text [ ENGLISH ] = "Column- & row headings" ; +//STRIP001 Text [ english_us ] = "Row & Column Headers" ; +//STRIP001 Text [ italian ] = "Intestazioni colonna/riga" ; +//STRIP001 Text [ spanish ] = "Títulos de filas/columnas" ; +//STRIP001 Text [ french ] = "En-têtes de colonnes/lignes" ; +//STRIP001 Text [ dutch ] = "Rij- en kolomkoppen" ; +//STRIP001 Text [ swedish ] = "Rad- och kolumnhuvuden" ; +//STRIP001 Text [ danish ] = "Række- og kolonneoverskrifter" ; +//STRIP001 Text [ portuguese ] = "Cabeçalhos das linhas e colunas" ; +//STRIP001 Text [ portuguese_brazilian ] = "Cabeçalhos de Linha & Coluna" ; +//STRIP001 Text[ chinese_simplified ] = "è¡Œæ ‡é¢˜å’Œåˆ—æ ‡é¢?"; +//STRIP001 Text[ russian ] = "Çàãîëîâê?ñòðî??ñòîëáöîâ"; +//STRIP001 Text[ polish ] = "Nag³ówki wierszy i kolumn"; +//STRIP001 Text[ japanese ] = "è¡Œã¨åˆ—ã®ç•ªå·"; +//STRIP001 Text[ chinese_traditional ] = "欄標題和列標é¡?"; +//STRIP001 Text[ arabic ] = "ÑÄæÓ ÇáÃÓØÑ æÇáÃÚãÏÉ"; +//STRIP001 Text[ greek ] = "Åðéêåöáëßäåò ãñáììþ?êá?óôçëþí"; +//STRIP001 Text[ korean ] = "ì—?머리글/í–?머리글"; +//STRIP001 Text[ turkish ] = "Satýr ve sütun baþlýklar?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Capçaleres de la fila i de la columna"; +//STRIP001 Text[ finnish ] = "Rivi- ja saraketunnukset"; +//STRIP001 Text[ thai ] = "ส่วนหัวà¹à¸–วà¹à¸¥à¸°à¸„à¸à¸¥à¸±à¸¡à¸™à¹Œ"; +//STRIP001 Text[ czech ] = "Záhlavà řádků a sloupců"; +//STRIP001 Text[ hebrew ] = "Zeilen- & Spaltenköpfe"; +//STRIP001 Text[ hindi ] = "पंकà¥à¤¤à¤¿ और सà¥à¤¤à¤‚à¤?शीरà¥à¤·à¤•"; +//STRIP001 }; + String STR_SCATTR_PAGE_FORMULAS + { + Text [ de ] = "Formeln" ; + Text [ en-US ] = "Formulas" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Fórmulas"; + Text[ ru ] = "Формулы"; + Text[ el ] = "ΤÏποι"; + Text[ nl ] = "Formules"; + Text[ fr ] = "Formules"; + Text[ es ] = "Fórmulas"; + Text[ fi ] = "Kaavat"; + Text[ ca ] = "Fórmules"; + Text[ it ] = "Formule"; + Text[ da ] = "Formler"; + Text[ sv ] = "Formler"; + Text[ pl ] = "FormuÅ‚y"; + Text[ pt-BR ] = "Fórmulas"; + Text[ th ] = "สูตร"; + Text[ ja ] = "æ•°å¼"; + Text[ ko ] = "수ì‹"; + Text[ zh-CN ] = "å…¬å¼"; + Text[ zh-TW ] = "å…¬å¼"; + Text[ tr ] = "Formüller"; + Text[ hi-IN ] = "सूतà¥à¤°"; + Text[ ar ] = "الصيغ"; + Text[ he ] = "Formeln"; + }; +//STRIP001 String STR_SCATTR_PAGE_NULLVALS +//STRIP001 { +//STRIP001 Text = "Nullwerte" ; +//STRIP001 Text [ ENGLISH ] = "Null values" ; +//STRIP001 Text [ english_us ] = "Zero Values" ; +//STRIP001 Text [ italian ] = "Valori zero" ; +//STRIP001 Text [ spanish ] = "Valores cero" ; +//STRIP001 Text [ french ] = "Valeurs zéro" ; +//STRIP001 Text [ dutch ] = "Nulwaarden" ; +//STRIP001 Text [ swedish ] = "Nollvärden" ; +//STRIP001 Text [ danish ] = "Nulværdier" ; +//STRIP001 Text [ portuguese ] = "Valores zero" ; +//STRIP001 Text [ portuguese_brazilian ] = "Valores Zero" ; +//STRIP001 Text[ chinese_simplified ] = "零å€?"; +//STRIP001 Text[ russian ] = "Íóëåâû?çíà÷åí?"; +//STRIP001 Text[ polish ] = "Wartoœci zerowe"; +//STRIP001 Text[ japanese ] = "ゼãƒå€?"; +//STRIP001 Text[ chinese_traditional ] = "零å€?"; +//STRIP001 Text[ arabic ] = "Þí?ÇáÕÝ?"; +//STRIP001 Text[ greek ] = "ÌçäåíéêÝ?ôéìÝ?"; +//STRIP001 Text[ korean ] = "0 ê°?"; +//STRIP001 Text[ turkish ] = "Sýfýr deðerler"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Valors zero"; +//STRIP001 Text[ finnish ] = "Nolla-arvot"; +//STRIP001 Text[ thai ] = "ค่าศูนย์"; +//STRIP001 Text[ czech ] = "Nulové hodnoty"; +//STRIP001 Text[ hebrew ] = "Nullwerte"; +//STRIP001 Text[ hindi ] = "शूनà¥à¤?मूलà¥à¤?"; +//STRIP001 }; +//STRIP001 String STR_SCATTR_PAGE_PRINTDIR +//STRIP001 { +//STRIP001 Text = "Druckrichtung" ; +//STRIP001 Text [ ENGLISH ] = "Print direction" ; +//STRIP001 Text [ english_us ] = "Print direction" ; +//STRIP001 Text [ italian ] = "Direzione di stampa" ; +//STRIP001 Text [ spanish ] = "Dirección de impresión" ; +//STRIP001 Text [ french ] = "Orientation de l'impression" ; +//STRIP001 Text [ dutch ] = "Afdrukrichting" ; +//STRIP001 Text [ swedish ] = "Utskriftsriktning" ; +//STRIP001 Text [ danish ] = "Udskriftsretning" ; +//STRIP001 Text [ portuguese ] = "Orientação de impressão" ; +//STRIP001 Text [ portuguese_brazilian ] = "Orientação da impressão" ; +//STRIP001 Text[ chinese_simplified ] = "打å°æ–¹å‘"; +//STRIP001 Text[ russian ] = "Íàïðàâëåíè?ïå÷àòè"; +//STRIP001 Text[ polish ] = "Orientacja wydruku"; +//STRIP001 Text[ japanese ] = "å°åˆ·ã®å‘ã?"; +//STRIP001 Text[ chinese_traditional ] = "列å°æ–¹å‘"; +//STRIP001 Text[ arabic ] = "ÇÊÌÇ?ÇáØÈÇÚ?"; +//STRIP001 Text[ greek ] = "Êáôåýèõíóç åêôýðùóç?"; +//STRIP001 Text[ korean ] = "ì¸ì‡„ ë°©í–¥"; +//STRIP001 Text[ turkish ] = "Yazdýrma yön?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Direcci?d'impressi?"; +//STRIP001 Text[ finnish ] = "Tulostussuunta"; +//STRIP001 Text[ thai ] = "ทิศทางà¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œ"; +//STRIP001 Text[ czech ] = "SmÄ›r tisku"; +//STRIP001 Text[ hebrew ] = "Druckrichtung"; +//STRIP001 Text[ hindi ] = "छपाई दिशा"; +//STRIP001 }; +//STRIP001 String STR_SCATTR_PAGE_FIRSTPAGENO +//STRIP001 { +//STRIP001 Text = "Erste Seitenzahl" ; +//STRIP001 Text [ ENGLISH ] = "First page" ; +//STRIP001 Text [ english_us ] = "First page number" ; +//STRIP001 Text [ dutch ] = "Eerste pagina" ; +//STRIP001 Text [ italian ] = "Primo numero di pagina" ; +//STRIP001 Text [ spanish ] = "Primer número de página" ; +//STRIP001 Text [ french ] = "Premier numéro de page" ; +//STRIP001 Text [ swedish ] = "Första sidnummret" ; +//STRIP001 Text [ danish ] = "Første sidetal" ; +//STRIP001 Text [ portuguese ] = "Número da primeira página" ; +//STRIP001 Text [ portuguese_brazilian ] = "Número da primeira página" ; +//STRIP001 Text[ chinese_simplified ] = "第一个页ç ?"; +//STRIP001 Text[ russian ] = "Íîìå?ïåðâîé ñòðàíèöû"; +//STRIP001 Text[ polish ] = "Numer pierwszej strony"; +//STRIP001 Text[ japanese ] = "最åˆã®ãƒšãƒ¼ã‚¸ç•ªå?"; +//STRIP001 Text[ chinese_traditional ] = "第一個é ç¢?"; +//STRIP001 Text[ arabic ] = "Ãæ?ÑÞ?ÕÝÍÉ"; +//STRIP001 Text[ greek ] = "Ðñþôïò áñéèìü?óåëßäá?"; +//STRIP001 Text[ korean ] = "시작 페ì´ì§€ 번호"; +//STRIP001 Text[ turkish ] = "Ýlk sayfa numaras?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Número de la primera pàgina"; +//STRIP001 Text[ finnish ] = "1. sivun numero"; +//STRIP001 Text[ thai ] = "ตัวเลขหน้าà¹à¸£à¸?"; +//STRIP001 Text[ czech ] = "ÄŒÃslo prvnà stránky"; +//STRIP001 Text[ hebrew ] = "Erste Seitenzahl"; +//STRIP001 Text[ hindi ] = "पहिलà¤?पृषà¥à¤?संखà¥à¤¯à¤¾"; +//STRIP001 }; +//STRIP001 String STR_SCATTR_PAGE_SCALE +//STRIP001 { +//STRIP001 Text = "Alles auf [%]" ; +//STRIP001 Text [ ENGLISH ] = "All pages to [%]" ; +//STRIP001 Text [ english_us ] = "All to [%]" ; +//STRIP001 Text [ italian ] = "Tutto a [%]" ; +//STRIP001 Text [ spanish ] = "Todo en [%]" ; +//STRIP001 Text [ french ] = "Tout ?[%]" ; +//STRIP001 Text [ dutch ] = "Alles naar [%]" ; +//STRIP001 Text [ swedish ] = "Allt till (%)" ; +//STRIP001 Text [ danish ] = "Alt til [%]" ; +//STRIP001 Text [ portuguese ] = "Tudo para [%]" ; +//STRIP001 Text [ portuguese_brazilian ] = "Tudo para [%]" ; +//STRIP001 Text[ chinese_simplified ] = "全部采用百分比[%]"; +//STRIP001 Text[ russian ] = "Âñ?íà [%]"; +//STRIP001 Text[ polish ] = "Wszystko na [%] "; +//STRIP001 Text[ japanese ] = "ã™ã¹ã?[%]"; +//STRIP001 Text[ greek ] = "¼ë?óå [%]"; +//STRIP001 Text[ korean ] = "모ë‘ë¥?[%]ë¡?"; +//STRIP001 Text[ chinese_traditional ] = "全部採用[%]"; +//STRIP001 Text[ arabic ] = "Çáßá Åá? [%]"; +//STRIP001 Text[ turkish ] = "Tümün?[%]"; +//STRIP001 Text[ catalan ] = "Tot en [%]"; +//STRIP001 Text[ finnish ] = "Kaikki -> [%]"; +//STRIP001 Text[ thai ] = "ทั้งหมดถึง [%]"; +//STRIP001 Text[ czech ] = "PÅ™izpůsobit [%]"; +//STRIP001 Text[ hebrew ] = "Alles auf [%]"; +//STRIP001 Text[ hindi ] = "सब [%] केलिà¤?"; +//STRIP001 }; +//STRIP001 String STR_SCATTR_PAGE_SCALETOPAGES +//STRIP001 { +//STRIP001 Text = "Max. Seitenzahl" ; +//STRIP001 Text [ ENGLISH ] = "To fit on pages" ; +//STRIP001 Text [ english_us ] = "Max. no of pages" ; +//STRIP001 Text [ italian ] = "Num. massimo pagine" ; +//STRIP001 Text [ spanish ] = "Núm. máx. de páginas" ; +//STRIP001 Text [ french ] = "Nbre max. de pages" ; +//STRIP001 Text [ dutch ] = "Max. aantal pagina's" ; +//STRIP001 Text [ swedish ] = "Max sidantal" ; +//STRIP001 Text [ danish ] = "Maks. antal sider" ; +//STRIP001 Text [ portuguese ] = "N?máx. de páginas" ; +//STRIP001 Text [ portuguese_brazilian ] = "N?máximo de páginas" ; +//STRIP001 Text[ chinese_simplified ] = "最多页æ•?"; +//STRIP001 Text[ russian ] = "Ìàêñèìàëüí?ñòðàíè?"; +//STRIP001 Text[ polish ] = "Maks. liczba stron"; +//STRIP001 Text[ japanese ] = "最高ページæ•?"; +//STRIP001 Text[ chinese_traditional ] = "最多é æ•?"; +//STRIP001 Text[ arabic ] = "ÇáÚÏ?ÇáÃÞÕì ááÕÝÍÇ?"; +//STRIP001 Text[ greek ] = "ÌÝ? áñéèìü?óåëéäþ?"; +//STRIP001 Text[ korean ] = "최대 페ì´ì§€ ìˆ?"; +//STRIP001 Text[ turkish ] = "Max. sayfa sayýs?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Nombre màxim de pàgines"; +//STRIP001 Text[ finnish ] = "Sivujen enimmäismäär?"; +//STRIP001 Text[ thai ] = "ตัวเลขหน้ามาà¸à¸—ี่สุà¸?"; +//STRIP001 Text[ czech ] = "Maximálnà poÄet stran"; +//STRIP001 Text[ hebrew ] = "Max. Seitenzahl"; +//STRIP001 Text[ hindi ] = "पृषà¥à¤ ोà¤?की अधिकतम संखà¥à¤¯à¤¾"; +//STRIP001 }; +//STRIP001 String STR_DOC_STAT +//STRIP001 { +//STRIP001 TEXT = "Statistik" ; +//STRIP001 TEXT [ English ] = "Statistics" ; +//STRIP001 TEXT [ norwegian ] = "Statistics" ; +//STRIP001 TEXT [ italian ] = "Statistiche" ; +//STRIP001 TEXT [ portuguese_brazilian ] = "Estatísticas" ; +//STRIP001 TEXT [ portuguese ] = "Estatística" ; +//STRIP001 TEXT [ finnish ] = "Tilastotiedot" ; +//STRIP001 TEXT [ danish ] = "Statistik" ; +//STRIP001 TEXT [ french ] = "Statistiques" ; +//STRIP001 TEXT [ swedish ] = "Statistik" ; +//STRIP001 TEXT [ dutch ] = "Statistiek" ; +//STRIP001 TEXT [ spanish ] = "Estadística" ; +//STRIP001 TEXT [ english_us ] = "Statistics" ; +//STRIP001 TEXT[ chinese_simplified ] = "统计"; +//STRIP001 TEXT[ russian ] = "Ñòàòèñòèêà"; +//STRIP001 TEXT[ polish ] = "Statystyka"; +//STRIP001 TEXT[ japanese ] = "統計"; +//STRIP001 TEXT[ chinese_traditional ] = "統計"; +//STRIP001 TEXT[ arabic ] = "ÅÍÕÇÆíÇÊ"; +//STRIP001 TEXT[ greek ] = "ÓôáôéóôéêÜ"; +//STRIP001 TEXT[ korean ] = "통계"; +//STRIP001 TEXT[ turkish ] = "Ýstatistikler"; +//STRIP001 TEXT[ language_user1 ] = " "; +//STRIP001 TEXT[ catalan ] = "Estadístiques"; +//STRIP001 TEXT[ thai ] = "สถิตà¸?"; +//STRIP001 TEXT[ czech ] = "Statistika"; +//STRIP001 TEXT[ hebrew ] = "‮סטטיסטיקותâ€?"; +//STRIP001 TEXT[ hindi ] = "अà¤à¤•à¤¡à¤¼à¥‡"; +//STRIP001 }; + String STR_LINKERROR + { + /* ### ACHTUNG: Neuer Text in Resource? Die Verknüpfung konnte nicht aktualisiert werden. : Die Verkn³pfung konnte nicht aktualisiert werden. */ + Text [ de ] = "Die Verknüpfung konnte nicht aktualisiert werden." ; + Text [ en-US ] = "The link could not be updated." ; + Text [ x-comment ] = " "; + Text[ pt ] = "ImpossÃvel actualizar a ligação."; + Text[ ru ] = "Ðевозможно обновить ÑÑылку."; + Text[ el ] = "Δεν ήταν δυνατόν να ενημεÏωθεί η σÏνδεση"; + Text[ nl ] = "De koppeling kan niet bijgewerkt worden."; + Text[ fr ] = "Impossible d'actualiser le lien !"; + Text[ es ] = "No se pudo actualizar el vÃnculo."; + Text[ fi ] = "Linkkiä ei voitu päivittää."; + Text[ ca ] = "No s'ha pogut actualitzar l'enllaç."; + Text[ it ] = "Non è stato possibile aggiornare il collegamento"; + Text[ da ] = "Det var ikke muligt at opdatere kæden."; + Text[ sv ] = "Länken kunde inte uppdateras."; + Text[ pl ] = "ÅÄ…cze nie mogÅ‚o zostać zaktualizowane."; + Text[ pt-BR ] = "Não foi possÃvel atualizar o vÃnculo."; + Text[ th ] = "ไม่สามารถปรับปรุงà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¹‚ยง"; + Text[ ja ] = "リンクã¯æ›´æ–°ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"; + Text[ ko ] = "ì´ ë§í¬ëŠ” ì—…ë°ì´íŠ¸í• 수 없습니다."; + Text[ zh-CN ] = "æ— æ³•æ›´æ–°é“¾æŽ¥ã€‚"; + Text[ zh-TW ] = "無法更新æ·å¾‘。"; + Text[ tr ] = "BaÄŸlantı güncellenemedi."; + Text[ hi-IN ] = "लिंक को अपडेटॠनहीं कर सकते है । "; + Text[ ar ] = "تعذر تØديث الارتباط."; + Text[ he ] = "Die Verknüpfung konnte nicht aktualisiert werden."; + }; + String STR_LINKERRORFILE + { + Text [ de ] = "Datei:" ; + Text [ en-US ] = "File:" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Ficheiro:"; + Text[ ru ] = "Файл:"; + Text[ el ] = "ΑÏχείο:"; + Text[ nl ] = "Bestand:"; + Text[ fr ] = "Fichier :"; + Text[ es ] = "Archivo:"; + Text[ fi ] = "Tiedosto:"; + Text[ ca ] = "Fitxer:"; + Text[ it ] = "File:"; + Text[ da ] = "Fil:"; + Text[ sv ] = "Fil:"; + Text[ pl ] = "Plik:"; + Text[ pt-BR ] = "Arquivo:"; + Text[ th ] = "à¹à¸Ÿà¹‰à¸¡:"; + Text[ ja ] = "ファイル:"; + Text[ ko ] = "파ì¼:"; + Text[ zh-CN ] = "文件:"; + Text[ zh-TW ] = "檔案:"; + Text[ tr ] = "Dosya:"; + Text[ hi-IN ] = "फाइल:"; + Text[ ar ] = "الملÙ:"; + Text[ he ] = "‮קובץ:‬"; + }; + String STR_LINKERRORTAB + { + Text [ de ] = "Tabelle:" ; + Text [ en-US ] = "Sheet:" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Folha:"; + Text[ ru ] = "ЛиÑÑ‚:"; + Text[ el ] = "Πίνακας:"; + Text[ nl ] = "Werkblad:"; + Text[ fr ] = "Feuille :"; + Text[ es ] = "Hoja:"; + Text[ fi ] = "Taulukko:"; + Text[ ca ] = "Full:"; + Text[ it ] = "Tabella:"; + Text[ da ] = "Ark:"; + Text[ sv ] = "Tabell:"; + Text[ pl ] = "Arkusz:"; + Text[ pt-BR ] = "Planilha:"; + Text[ th ] = "à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™:"; + Text[ ja ] = "表:"; + Text[ ko ] = "시트:"; + Text[ zh-CN ] = "工作表:"; + Text[ zh-TW ] = "工作表:"; + Text[ tr ] = "Tablo:"; + Text[ hi-IN ] = "शीटà¥:"; + Text[ ar ] = "الجدول:"; + Text[ he ] = "Tabelle:"; + }; +//STRIP001 String STR_OVERVIEW +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Übersicht : šbersicht */ +//STRIP001 Text = "Übersicht" ; +//STRIP001 Text [ ENGLISH ] = "Overview" ; +//STRIP001 Text [ ENGLISH_US ] = "Overview" ; +//STRIP001 Text [ italian ] = "Panoramica" ; +//STRIP001 Text [ spanish ] = "Resumen" ; +//STRIP001 Text [ french ] = "Résum?" ; +//STRIP001 Text [ dutch ] = "Overzicht" ; +//STRIP001 Text [ swedish ] = "Översikt" ; +//STRIP001 Text [ danish ] = "Oversigt" ; +//STRIP001 Text [ portuguese ] = "Vista geral" ; +//STRIP001 Text [ portuguese_brazilian ] = "Visão Geral" ; +//STRIP001 Text[ chinese_simplified ] = "摘è¦"; +//STRIP001 Text[ russian ] = "Îáçî?"; +//STRIP001 Text[ polish ] = "Przegl¹d"; +//STRIP001 Text[ japanese ] = "目次"; +//STRIP001 Text[ chinese_traditional ] = "摘è¦"; +//STRIP001 Text[ arabic ] = "ÇáÊáÎí?"; +//STRIP001 Text[ greek ] = "Óýíïøç"; +//STRIP001 Text[ korean ] = "개요"; +//STRIP001 Text[ turkish ] = "Genel bakýþ"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Visi?general"; +//STRIP001 Text[ finnish ] = "Tiivistelm?"; +//STRIP001 Text[ thai ] = "ภาพรวม"; +//STRIP001 Text[ czech ] = "PÅ™ehled"; +//STRIP001 Text[ hebrew ] = "Ãœbersicht"; +//STRIP001 Text[ hindi ] = "सारांश"; +//STRIP001 }; +//STRIP001 String STR_DOC_INFO +//STRIP001 { +//STRIP001 Text = "Dokumentinfo" ; +//STRIP001 Text [ ENGLISH ] = "Document Info" ; +//STRIP001 Text [ ENGLISH_US ] = "Doc.Information" ; +//STRIP001 Text [ dutch ] = "Documentinfo" ; +//STRIP001 Text [ italian ] = "Info documento" ; +//STRIP001 Text [ spanish ] = "Información documento" ; +//STRIP001 Text [ french ] = "Info document" ; +//STRIP001 Text [ swedish ] = "Dokumentinformation" ; +//STRIP001 Text [ danish ] = "Dokumentinfo" ; +//STRIP001 Text [ portuguese ] = "Info. sobre documento" ; +//STRIP001 Text [ portuguese_brazilian ] = "Info. sobre documento" ; +//STRIP001 Text[ chinese_simplified ] = "文档信æ¯"; +//STRIP001 Text[ russian ] = "Ñâåäåí? ?äîêóìåíò?"; +//STRIP001 Text[ polish ] = "Informacje o dokumencie"; +//STRIP001 Text[ japanese ] = "ドã‚ãƒ¥ãƒ¡ãƒ³ãƒˆæƒ…å ±"; +//STRIP001 Text[ chinese_traditional ] = "文件資訊"; +//STRIP001 Text[ arabic ] = "ãÚáæãÇ?ÇáãÓÊä?"; +//STRIP001 Text[ greek ] = "Ðëçñïöïñßå?åããñÜöïõ"; +//STRIP001 Text[ korean ] = "문서 ì •ë³´"; +//STRIP001 Text[ turkish ] = "Belge bilgileri"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Informaci?del document"; +//STRIP001 Text[ finnish ] = "Asiakirjatiedot"; +//STRIP001 Text[ thai ] = "ข้à¸à¸¡à¸¹à¸¥à¹€à¸à¸à¸ªà¸²à¸?"; +//STRIP001 Text[ czech ] = "Informace o dokumentu"; +//STRIP001 Text[ hebrew ] = "Dokumentinfo"; +//STRIP001 Text[ hindi ] = "लेखपतà¥à¤?सूचनà¤?"; +//STRIP001 }; + String STR_DOC_CREATED + { + Text [ de ] = "Erstellt" ; + Text [ en-US ] = "Created" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Criado"; + Text[ ru ] = "Создан"; + Text[ el ] = "ΔημιουÏγήθηκε"; + Text[ nl ] = "Gemaakt"; + Text[ fr ] = "Créé"; + Text[ es ] = "Creado el"; + Text[ fi ] = "Luotu"; + Text[ ca ] = "Creat"; + Text[ it ] = "Creato"; + Text[ da ] = "Oprettet"; + Text[ sv ] = "Skapad"; + Text[ pl ] = "Utworzony"; + Text[ pt-BR ] = "Criado em"; + Text[ th ] = "สร้าง"; + Text[ ja ] = "作æˆæ—¥æ™‚"; + Text[ ko ] = "만들어졌ìŒ"; + Text[ zh-CN ] = "å·²ç»åˆ¶ä½œ"; + Text[ zh-TW ] = "已經製作"; + Text[ tr ] = "OluÅŸturuldu"; + Text[ hi-IN ] = "उतà¥à¤ªà¤¨à¥à¤¨ किया"; + Text[ ar ] = "تم الإنشاء"; + Text[ he ] = "â€®× ×•×¦×¨â€¬"; + }; + String STR_DOC_MODIFIED + { + /* ### ACHTUNG: Neuer Text in Resource? Verändert : Verõndert */ + Text [ de ] = "Verändert" ; + Text [ en-US ] = "Modified" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Modificado"; + Text[ ru ] = "Изменен"; + Text[ el ] = "ΤÏοποποίηση"; + Text[ nl ] = "Gewijzigd"; + Text[ fr ] = "Modifié"; + Text[ es ] = "Modificado"; + Text[ fi ] = "Muokattu"; + Text[ ca ] = "Modificat"; + Text[ it ] = "Modificato"; + Text[ da ] = "Ændret"; + Text[ sv ] = "Förändrad"; + Text[ pl ] = "Zmodyfikowany"; + Text[ pt-BR ] = "Modificado em"; + Text[ th ] = "ดัดà¹à¸›à¸¥à¸‡"; + Text[ ja ] = "変更日時"; + Text[ ko ] = "변경ë¨"; + Text[ zh-CN ] = "å·²ç»ä¿®æ”¹"; + Text[ zh-TW ] = "已經修改"; + Text[ tr ] = "DeÄŸiÅŸtirildi"; + Text[ hi-IN ] = "सà¥à¤§à¤¾à¤° किया"; + Text[ ar ] = "معدل"; + Text[ he ] = "‮עודכן‬"; + }; + String STR_DOC_PRINTED + { + Text [ de ] = "Ausgedruckt" ; + Text [ en-US ] = "Printed" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Impresso"; + Text[ ru ] = "Ðапечатан"; + Text[ el ] = "Εκτυπώθηκε(-αν)"; + Text[ nl ] = "Afgedrukt"; + Text[ fr ] = "Imprimé"; + Text[ es ] = "Impreso"; + Text[ fi ] = "Tulostettu"; + Text[ ca ] = "Imprès"; + Text[ it ] = "Stampato"; + Text[ da ] = "Udskrevet"; + Text[ sv ] = "Utskrivet"; + Text[ pl ] = "Wydrukowany"; + Text[ pt-BR ] = "Impresso em"; + Text[ th ] = "พิมพ์"; + Text[ ja ] = "å°åˆ·æ—¥æ™‚"; + Text[ ko ] = "ì¸ì‡„ë¨"; + Text[ zh-CN ] = "å·²ç»æ‰“å°çš„"; + Text[ zh-TW ] = "已經列å°çš„"; + Text[ tr ] = "Yazdırıldı"; + Text[ hi-IN ] = "छपाई किया"; + Text[ ar ] = "مطبوع"; + Text[ he ] = "‮הודפס‬"; + }; + String STR_DOC_THEME + { + Text [ de ] = "Thema" ; + Text [ en-US ] = "Subject" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Assunto"; + Text[ ru ] = "Тема"; + Text[ el ] = "ΘÎμα"; + Text[ nl ] = "Onderwerp"; + Text[ fr ] = "Sujet"; + Text[ es ] = "Asunto"; + Text[ fi ] = "Aihe"; + Text[ ca ] = "Assumpte"; + Text[ it ] = "Argomento"; + Text[ da ] = "Emne"; + Text[ sv ] = "Tema"; + Text[ pl ] = "Temat"; + Text[ pt-BR ] = "Assunto"; + Text[ th ] = "ชื่à¸à¹€à¸£à¸·à¹ˆà¸à¸‡"; + Text[ ja ] = "テーマ"; + Text[ ko ] = "ì£¼ì œ"; + Text[ zh-CN ] = "主题"; + Text[ zh-TW ] = "主題"; + Text[ tr ] = "Konu"; + Text[ hi-IN ] = "विषय"; + Text[ ar ] = "الموضوع"; + Text[ he ] = "â€®× ×•×©×‬"; + }; + String STR_DOC_KEYWORDS + { + /* ### ACHTUNG: Neuer Text in Resource? Schlüsselworte : Schl³sselworte */ + Text [ de ] = "Schlüsselworte" ; + Text [ en-US ] = "Key words" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Palavras-chave"; + Text[ ru ] = "Ключевые Ñлова"; + Text[ el ] = "ΛÎξεις κλειδιά"; + Text[ nl ] = "Sleutelwoorden"; + Text[ fr ] = "Mots-clés"; + Text[ es ] = "Palabras clave"; + Text[ fi ] = "Avainsanat"; + Text[ ca ] = "Paraules clau"; + Text[ it ] = "Parole chiave"; + Text[ da ] = "Nøgleord"; + Text[ sv ] = "Nyckelord"; + Text[ pl ] = "SÅ‚owa kluczowe"; + Text[ pt-BR ] = "Palavras-chave"; + Text[ th ] = "คำสำคัà¸"; + Text[ ja ] = "ã‚ーワード"; + Text[ ko ] = "키워드"; + Text[ zh-CN ] = "关键å—"; + Text[ zh-TW ] = "é—œéµå—"; + Text[ tr ] = "Anahtar sözcükler"; + Text[ hi-IN ] = "पà¥à¤°à¤§à¤¾à¤¨ शबà¥à¤¦"; + Text[ ar ] = "الكلمات الأساسية"; + Text[ he ] = "‮מילות מפתח‬"; + }; + String STR_DOC_COMMENT + { + Text [ de ] = "Bemerkungen" ; + Text [ en-US ] = "Comments" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Observações"; + Text[ ru ] = "Комментарии"; + Text[ el ] = "ΠαÏατηÏήσεις"; + Text[ nl ] = "Opmerkingen"; + Text[ fr ] = "Commentaires"; + Text[ es ] = "Observaciones"; + Text[ fi ] = "Huomautukset"; + Text[ ca ] = "Comentaris"; + Text[ it ] = "Annotazioni"; + Text[ da ] = "Kommentarer"; + Text[ sv ] = "Anmärkningar"; + Text[ pl ] = "Komentarze"; + Text[ pt-BR ] = "Comentários"; + Text[ th ] = "ข้à¸à¸„ิดเห็น"; + Text[ ja ] = "コメント"; + Text[ ko ] = "설명"; + Text[ zh-CN ] = "评è¯"; + Text[ zh-TW ] = "評語"; + Text[ tr ] = "Açıklamalar"; + Text[ hi-IN ] = "अपवाद"; + Text[ ar ] = "ملاØظات"; + Text[ he ] = "‮הערות‬"; + }; +//STRIP001 String STR_BY +//STRIP001 { +//STRIP001 Text = "von" ; +//STRIP001 Text [ ENGLISH ] = "by" ; +//STRIP001 Text [ ENGLISH_US ] = "by" ; +//STRIP001 Text [ dutch ] = "door" ; +//STRIP001 Text [ italian ] = "da" ; +//STRIP001 Text [ spanish ] = "de" ; +//STRIP001 Text [ french ] = "de" ; +//STRIP001 Text [ swedish ] = "från" ; +//STRIP001 Text [ danish ] = "fra" ; +//STRIP001 Text [ portuguese ] = "de" ; +//STRIP001 Text [ portuguese_brazilian ] = "por" ; +//STRIP001 Text[ chinese_simplified ] = "ç”?"; +//STRIP001 Text[ russian ] = "îò"; +//STRIP001 Text[ polish ] = "z"; +//STRIP001 Text[ japanese ] = "作æˆè€?"; +//STRIP001 Text[ chinese_traditional ] = "ç”?"; +//STRIP001 Text[ arabic ] = "ÈæÇÓØÉ"; +//STRIP001 Text[ greek ] = "áð?"; +//STRIP001 Text[ korean ] = "작성ìž?"; +//STRIP001 Text[ turkish ] = "Yazdýran"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "per"; +//STRIP001 Text[ finnish ] = "etäisyys"; +//STRIP001 Text[ thai ] = "โดà¸?"; +//STRIP001 Text[ czech ] = "Autor"; +//STRIP001 Text[ hebrew ] = "von"; +//STRIP001 Text[ hindi ] = "से"; +//STRIP001 }; + String STR_ON + { + Text [ de ] = "am" ; + Text [ en-US ] = "on" ; + Text [ x-comment ] = " "; + Text[ pt ] = "em"; + Text[ ru ] = "в"; + Text[ el ] = "τις"; + Text[ nl ] = "op"; + Text[ fr ] = "le"; + Text[ es ] = "en"; + Text[ fi ] = "käytössä"; + Text[ ca ] = "el"; + Text[ it ] = "il"; + Text[ da ] = "pÃ¥"; + Text[ sv ] = "pÃ¥"; + Text[ pl ] = "w"; + Text[ pt-BR ] = "em"; + Text[ th ] = "บน"; + Text[ ja ] = "日付"; + Text[ ko ] = "ìž‘ë™"; + Text[ zh-CN ] = "在"; + Text[ zh-TW ] = "在"; + Text[ tr ] = "tarih"; + Text[ hi-IN ] = "में"; + Text[ ar ] = "ÙÙŠ"; + Text[ he ] = "am"; + }; + String STR_RELOAD_TABLES + { + Text [ de ] = "Diese Datei enthält Verknüpfungen zu anderen Dateien.\nSollen diese aktualisiert werden?" ; + Text [ en-US ] = "This file contains links to other files.\nShould they be updated?" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Este ficheiro contém ligações a outros ficheiros.\nActualizar?"; + Text[ ru ] = "Ðтот файл Ñодержит ÑÑылки на другие файлы.\nОбновить их?"; + Text[ el ] = "Το αÏχείο αυτό πεÏιÎχει συνδÎσεις Ï€Ïος άλλα αÏχεία.\nΘÎλετε να γίνει ενημÎÏωση αυτών;"; + Text[ nl ] = "Dit bestand bevat koppelingen naar andere bestanden.\n Wilt u deze bijwerken?"; + Text[ fr ] = "Ce fichier contient des liens vers d'autres fichiers. Les actualiser ?"; + Text[ es ] = "Este archivo está vinculado a otros archivos.\n¿Desea usted actualizarlos?"; + Text[ fi ] = "Tämä tiedosto sisältää linkkejä toisiin tiedostoihin.\nPäivitetänkö linkit?"; + Text[ ca ] = "Aquest fitxer conté enllaços a altres fitxers.\nVoleu actualitzar-los?"; + Text[ it ] = "Il file corrente contiene collegamenti ad altri file.\nVolete aggiornarli?"; + Text[ da ] = "Denne fil indeholder kæder til andre filer.\nSkal de opdateres?"; + Text[ sv ] = "Den här filen innehÃ¥ller länkar till andra filer.\nSkall de uppdateras?"; + Text[ pl ] = "W tym pliku znajdujÄ… siÄ™ Å‚Ä…cza do innych plików.\nCzy wykonać aktualizacjÄ™?"; + Text[ pt-BR ] = "Este arquivo contém vÃnculos para outros arquivos.\nDevem eles ser atualizados?"; + Text[ th ] = "à¹à¸Ÿà¹‰à¸¡à¸™à¸µà¹‰à¸¡à¸µà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¹‚ยงไปยังà¹à¸Ÿà¹‰à¸¡à¸à¸·à¹ˆà¸™\nจะปรับปรุงà¹à¸Ÿà¹‰à¸¡à¸«à¸£à¸·à¸à¹„ม่?"; + Text[ ja ] = "ã“ã®ãƒ‡ãƒ¼ã‚¿ã«ã¯ã»ã‹ã®ãƒ‡ãƒ¼ã‚¿ã¸ã®ãƒªãƒ³ã‚¯ãŒã‚ã‚Šã¾ã™ã€‚\nリンクを更新ã—ã¾ã™ã‹ã€‚"; + Text[ ko ] = "ì´ íŒŒì¼ì€ 다른 파ì¼ê³¼ ì—°ê²°ë˜ì–´ 있습니다.\nì´ íŒŒì¼ì„ ì—…ë°ì´íŠ¸í•˜ì‹œê² 습니까?"; + Text[ zh-CN ] = "æ¤æ–‡ä»¶å†…å«æœ‰æŒ‡å‘其他文件的链接。\nè¦æ›´æ–°è¿™äº›é“¾æŽ¥å—?"; + Text[ zh-TW ] = "這個檔案å«æœ‰æŒ‡å‘其他檔案的æ·å¾‘。\nè¦æ›´æ–°é€™å€‹æª”案?"; + Text[ tr ] = "Bu dosyada baÅŸka dosyalara baÄŸlantılar mevcut.\nBaÄŸlantılar güncellensin mi?"; + Text[ hi-IN ] = "इस फाइल में अनà¥à¤¯ फाइलों के लिठलिंकà¥à¤¸ है ।\nउनको अपडेटॠकरना है?"; + Text[ ar ] = "ÙŠØتوي هذا المل٠على ارتباطات مع ملÙات أخرى.\nهل تريد تØديثها؟"; + Text[ he ] = "Diese Datei enthält Verknüpfungen zu anderen Dateien.\nSollen diese aktualisiert werden?"; + }; + String STR_REIMPORT_AFTER_LOAD + { + /* ### ACHTUNG: Neuer Text in Resource? Diese Datei enthält Abfragen, deren Ergebnisse nicht mitgespeichert wurden.\nSollen diese Abfragen wiederholt werden? : Diese Datei enthõlt Abfragen, deren Ergebnisse nicht mitgespeichert wurden.\nSollen diese Abfragen wiederholt werden? */ + Text [ de ] = "Diese Datei enthält Abfragen, deren Ergebnisse nicht mitgespeichert wurden.\nSollen diese Abfragen wiederholt werden?" ; + Text [ en-US ] = "This file contains queries. The results of these queries were not saved.\nDo you want these queries to be repeated?" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Este ficheiro contém consultas com resultados não guardados.\nRepeti-las?"; + Text[ ru ] = "Ðтот файл Ñодержит запроÑÑ‹, результаты которых Ñохранены не будут.\nПовторить Ñти запроÑÑ‹?"; + Text[ el ] = "Το αÏχείο αυτό πεÏιÎχει εÏωτήματα, τα αποτελÎσματα των οποίων δεν αποθηκεÏτηκαν.\nΘÎλετε να επαναληφθοÏν τα εÏωτήματα αυτά;"; + Text[ nl ] = "Dit bestand bevat query's waarvan de resultaten niet zijn opgeslagen.\nWilt u deze query's herhalen?"; + Text[ fr ] = "Ce fichier contient des requêtes dont les résultats n'ont pas été enregistrés avec celles-ci.\nRépéter les requêtes ?"; + Text[ es ] = "Este archivo contiene consultas cuyos resultados no se guardaron.\n¿Desea repetir las consultas?"; + Text[ fi ] = "Tämä tiedosto sisältää kyselyitä. Kyselyiden tuloksia ei tallennettu.\nHaluatko suorittaa kyselyt uudelleen?"; + Text[ ca ] = "Aquest fitxer conté consultes. Els resultats d'aquestes consultes no s'han desat.\nVoleu repetir-les?"; + Text[ it ] = "Questo file contiene ricerche i cui risultati non sono stati salvati.\nRipetere le ricerche?"; + Text[ da ] = "Denne fil indeholder forespørgsler, resultaterne er ikke blevet gemt.\nSkal denne forespørgsel gentages?"; + Text[ sv ] = "Den här filen innehÃ¥ller sökningar vars resultat inte har sparats.\nSkall dessa sökningar upprepas?"; + Text[ pl ] = "Plik zawiera kwerendy, których wyniki nie zostaÅ‚y zapisane.\nCzy powtórzyć te kwerendy?"; + Text[ pt-BR ] = "Este arquivo contém consultas. Os resultados dessas consultas não foram salvos.\nDeseja que estas consultas sejam repetidas?"; + Text[ th ] = "à¹à¸Ÿà¹‰à¸¡à¸™à¸µà¹‰à¸¡à¸µà¹à¸šà¸šà¸ªà¸à¸šà¸–าม ไม่ได้บันทึà¸à¸œà¸¥à¸¥à¸±à¸žà¸˜à¹Œà¸‚à¸à¸‡à¹à¸šà¸šà¸ªà¸à¸šà¸–าม\nคุณต้à¸à¸‡à¸à¸²à¸£à¸—ำà¹à¸šà¸šà¸ªà¸à¸šà¸–ามซ้ำหรืà¸à¹„ม่?"; + Text[ ja ] = "ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã«ã¯çµæžœãŒä¿å˜ã•ã‚Œãªã‹ã£ãŸã‚¯ã‚¨ãƒªãƒ¼ãŒã‚ã‚Šã¾ã™ã€‚\nã“ã®ã‚¯ã‚¨ãƒªãƒ¼ã‚’ã‚„ã‚Šç›´ã—ã¾ã™ã‹ã€‚"; + Text[ ko ] = "ì´ íŒŒì¼ì—는 쿼리가 í¬í•¨ë˜ì–´ 있습니다. ì´ ì¿¼ë¦¬ì˜ ê²°ê³¼ê°€ ì €ìž¥ë˜ì§€ 않았습니다.\nì´ ì¿¼ë¦¬ë¥¼ ë°˜ë³µí•˜ì‹œê² ìŠµë‹ˆê¹Œ?"; + Text[ zh-CN ] = "这个文件å«æœ‰ä¸€äº›æŸ¥è¯¢ï¼Œå®ƒä»¬çš„ç»“æžœæ— æ³•è¢«å˜ç›˜çš„。\nè¦é‡å¤æ‰§è¡Œè¿™ä¸ªæŸ¥è¯¢å—?"; + Text[ zh-TW ] = "這個檔案å«æœ‰ä¸€äº›æŸ¥è©¢ï¼Œå®ƒå€‘çš„çµæžœç„¡æ³•è¢«å„²å˜ã€‚\nè¦é‡è¤‡åŸ·è¡Œé€™å€‹æŸ¥è©¢ï¼Ÿ"; + Text[ tr ] = "Bu dosya, sonuçları kaydedilmeyen sorgular içeriyor.\nBU sorgular yinelensin mi?"; + Text[ hi-IN ] = "इस फाइल में जानकारी है । इन जानकारियों का नतीजों को संचित नहीं किया है ।\nआप इन जानकारियों को दà¥à¤¹à¤°à¤¾à¤¨à¤¾ चाहते है?"; + Text[ ar ] = "ÙŠØتوي هذا المل٠على استÙسارات لم يتم ØÙظ نتائجها.\nهل تريد تكرار هذه الاستÙسارات؟"; + Text[ he ] = "Diese Datei enthält Abfragen, deren Ergebnisse nicht mitgespeichert wurden.\nSollen diese Abfragen wiederholt werden?"; + }; +//STRIP001 String STR_FILTER_TOOMANY +//STRIP001 { +//STRIP001 Text = "Zuviele Bedingungen" ; +//STRIP001 Text [ ENGLISH ] = "Too many conditions" ; +//STRIP001 Text [ ENGLISH_US ] = "Too many conditions" ; +//STRIP001 Text [ dutch ] = "Te veel voorwaarden" ; +//STRIP001 Text [ italian ] = "Troppe condizioni" ; +//STRIP001 Text [ spanish ] = "Demasiadas condiciones" ; +//STRIP001 Text [ french ] = "Trop de conditions." ; +//STRIP001 Text [ swedish ] = "För många villkor" ; +//STRIP001 Text [ danish ] = "For mange betingelser" ; +//STRIP001 Text [ portuguese ] = "Demasiadas condições" ; +//STRIP001 Text [ portuguese_brazilian ] = "Número excessivo de condições" ; +//STRIP001 Text[ chinese_simplified ] = "æ¡ä»¶å¤ªå¤š"; +//STRIP001 Text[ russian ] = "Ñëèøêî?ìíîã?óñëîâè?"; +//STRIP001 Text[ polish ] = "Zbyt wiele warunków"; +//STRIP001 Text[ japanese ] = "æ¡ä»¶ãŒå¤šã™ãŽã¾ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "æ¢ä»¶å¤ªå¤š"; +//STRIP001 Text[ arabic ] = "ÔÑæØ ßËíÑ?ÌÏÇð"; +//STRIP001 Text[ greek ] = "ÕðåñâïëéêÜ ðïëëÝò óõíèÞêåò"; +//STRIP001 Text[ korean ] = "ì¡°ê±´ì?너무 많습니다."; +//STRIP001 Text[ turkish ] = "Koþul sayýs?çok fazla"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Massa condicions"; +//STRIP001 Text[ finnish ] = "Liian monta ehtoa"; +//STRIP001 Text[ thai ] = "เงื่à¸à¸™à¹„ขมาà¸à¹€à¸à¸´à¸™à¹„à¸?"; +//STRIP001 Text[ czech ] = "PÅ™ÃliÅ¡ mnoho podmÃnek"; +//STRIP001 Text[ hebrew ] = "Zuviele Bedingungen"; +//STRIP001 Text[ hindi ] = "बहà¥à¤¤ अधिक शरà¥à¤¤à¥‡à¤‚"; +//STRIP001 }; +//STRIP001 String STR_INSERT_FULL +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Ausgefüllte Zellen können nicht über\ndas Blatt hinaus verschoben werden. : Ausgef³llte Zellen k÷nnen nicht ³ber\ndas Blatt hinaus verschoben werden. */ +//STRIP001 Text = "Ausgefüllte Zellen können nicht über\ndas Blatt hinaus verschoben werden." ; +//STRIP001 Text [ ENGLISH ] = "Cells cannot be moved out of the sheet." ; +//STRIP001 Text [ ENGLISH_US ] = "Filled cells cannot be shifted\nbeyond the sheet." ; +//STRIP001 Text [ italian ] = "Non ?stato possibile spostare\nle celle piene oltre il foglio." ; +//STRIP001 Text [ spanish ] = "No es posible desplazar celdas llenas\nfuera de la hoja." ; +//STRIP001 Text [ french ] = "Les cellules remplies ne peuvent pas\nêtre décalées au-del?de la page." ; +//STRIP001 Text [ dutch ] = "Gevulde cellen kunnen niet buiten\nhet blad worden geplaatst." ; +//STRIP001 Text [ swedish ] = "Utfyllda celler kan inte förskjutas\növer sidranden." ; +//STRIP001 Text [ danish ] = "Fyldte celler kan ikke flyttes\nud over arkets rand." ; +//STRIP001 Text [ portuguese ] = "Impossível mover células \npreenchidas fora da folha." ; +//STRIP001 Text [ portuguese_brazilian ] = "Células preenchidas não podem ser deslocadas\nalém da planilha." ; +//STRIP001 Text[ chinese_simplified ] = "å¡«å……çš„å•å…ƒæ ¼ä¸èƒ½è¢«\n移出工作表ã€?"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî ïåðåìåùàòü çàïîëíåííûå\nÿ÷åéê?çà ïðåäåë?ëèñò?"; +//STRIP001 Text[ polish ] = "Nie mo¿na przesun¹æ wype³nionych komórek poza\nobszar arkusza."; +//STRIP001 Text[ japanese ] = "入力済ã¿ã®ã‚»ãƒ«ã‚’表ã®å¤–ã«ç§»å‹•ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "填充的儲å˜æ ¼ä¸èƒ½è¢«\n移出工作表ã€?"; +//STRIP001 Text[ arabic ] = "áÇ íãßä ÅÒÇÍ?ÎáÇí?ããÊáÆÉ\nÅá?ÎÇÑÌ ÇáæÑÞÉ."; +//STRIP001 Text[ greek ] = "Äå?åßíá?äõíáôü?íá ãßíå?ìåôáêßíçóç \nôù?óõìðëçñùìÝíù?êåëéþí ðÝñá áð?ôá üñéá ôï?÷áñôéï?"; +//STRIP001 Text[ korean ] = "채워ì§?ì…€ì?시트 범위ë¥?초과하여 \n밀리지 않습니다."; +//STRIP001 Text[ turkish ] = "Dolu hücreler, sayfa dýþýna\ntaþýnamaz."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Les cel.les plenes no es poden desplaçar\nfora del full."; +//STRIP001 Text[ finnish ] = "Täytettyj?soluja ei voi siirtää\ntaulukon ulkopuolelle."; +//STRIP001 Text[ thai ] = "ไม่สามารถเลื่à¸à¸™à¹€à¸‹à¸¥à¸¥à¹Œà¸—ี่เติม\nเà¸à¸´à¸™à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; +//STRIP001 Text[ czech ] = "VyplnÄ›né buňky nelze pÅ™enést\nza list."; +//STRIP001 Text[ hebrew ] = "Ausgefüllte Zellen können nicht über\ndas Blatt hinaus verschoben werden."; +//STRIP001 Text[ hindi ] = "à¤à¤°à¤?हà¥à¤?कोषà¥à¤ ोà¤?को शीटॠसे बाहर सà¥à¤¥à¤¾à¤?परिवरà¥à¤¤à¤¨\nनहीà¤?कर सकते है à¥?"; +//STRIP001 }; + String STR_TABINSERT_ERROR + { + /* ### ACHTUNG: Neuer Text in Resource? Die Tabelle konnte nicht eingefügt werden. : Die Tabelle konnte nicht eingef³gt werden. */ + Text [ de ] = "Die Tabelle konnte nicht eingefügt werden." ; + Text [ en-US ] = "The table could not be inserted." ; + Text [ x-comment ] = " "; + Text[ pt ] = "ImpossÃvel inserir tabela."; + Text[ ru ] = "Ðевозможно вÑтавить таблицу."; + Text[ el ] = "Δεν ήταν δυνατόν να γίνει εισαγωγή του πίνακα."; + Text[ nl ] = "De tabel kan niet worden ingevoegd"; + Text[ fr ] = "Impossible d'insérer la table."; + Text[ es ] = "No se pudo insertar la tabla."; + Text[ fi ] = "Taulukkoa ei voitu lisätä."; + Text[ ca ] = "No s'ha pogut inserir la taula."; + Text[ it ] = "Non è stato possibile inserire la tabella"; + Text[ da ] = "Det var ikke muligt at indsætte tabellen."; + Text[ sv ] = "Tabellen kunde inte infogas."; + Text[ pl ] = "Tabela nie mogÅ‚a zostać wstawiona."; + Text[ pt-BR ] = "Não foi possÃvel inserir a tabela."; + Text[ th ] = "ไม่สามารถà¹à¸—รà¸à¸•à¸²à¸£à¸²à¸‡"; + Text[ ja ] = "表を挿入ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"; + Text[ ko ] = "표를 삽입하지 못했습니다."; + Text[ zh-CN ] = "æ— æ³•è¾“å…¥è¿™ä¸ªå·¥ä½œè¡¨ã€‚"; + Text[ zh-TW ] = "無法輸入這個工作表。"; + Text[ tr ] = "Tablo eklenemedi."; + Text[ hi-IN ] = "सारणी को नहीं जोड़ सकते है ।"; + Text[ ar ] = "تعذر إدراج الجدول."; + Text[ he ] = "Die Tabelle konnte nicht eingefügt werden."; + }; +//STRIP001 String STR_TABREMOVE_ERROR +//STRIP001 { +//STRIP001 Text = "Die Tabellen konnten nicht gelöscht werden." ; +//STRIP001 Text [ ENGLISH ] = "The tables could not be removed." ; +//STRIP001 Text [ portuguese ] = "Impossível eliminar folhas de cálculo." ; +//STRIP001 Text [ english_us ] = "The sheets could not be deleted." ; +//STRIP001 Text [ portuguese_brazilian ] = "Não foi possível excluir as planilhas." ; +//STRIP001 Text [ swedish ] = "Tabellerna kunde inte raderas." ; +//STRIP001 Text [ danish ] = "Det var ikke muligt at slette arkene." ; +//STRIP001 Text [ italian ] = "Impossibile cancellare le tabelle." ; +//STRIP001 Text [ spanish ] = "No se pudieron borrar las hojas de cálculo." ; +//STRIP001 Text [ french ] = "Impossible de supprimer les feuilles de calcul" ; +//STRIP001 Text [ dutch ] = "De werkbladen kunnen niet worden gewist." ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ³•åˆ é™¤è¿™ä¸ªå·¥ä½œè¡¨ã€?"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî óäàëèò?ëèñò?"; +//STRIP001 Text[ polish ] = "Arkusze nie mog³y zosta?usuniête."; +//STRIP001 Text[ japanese ] = "表を削除ã§ãã¾ã›ã‚“ã§ã—ãŸã€?"; +//STRIP001 Text[ chinese_traditional ] = "無法刪除這個工作表ã€?"; +//STRIP001 Text[ arabic ] = "ÊÚÐÑ ÍÐ?ÇáÌÏÇæ?"; +//STRIP001 Text[ greek ] = "Äå?Þôáí äõíáôü?íá äéáãñáöïýí ïé ðßíáêå?"; +//STRIP001 Text[ korean ] = "시트ë¥?ì‚ì œí•˜ì§€ 못했습니ë‹?"; +//STRIP001 Text[ turkish ] = "Tablolar silinemedi."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'han pogut suprimir els fulls."; +//STRIP001 Text[ finnish ] = "Taulukoita ei voitu poistaa."; +//STRIP001 Text[ thai ] = "ไม่สามารถลบà¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; +//STRIP001 Text[ czech ] = "Listy nelze smazat."; +//STRIP001 Text[ hebrew ] = "Die Tabellen konnten nicht gelöscht werden."; +//STRIP001 Text[ hindi ] = "शीटॠको नहीà¤?मिटा सकते है à¥?"; +//STRIP001 }; +//STRIP001 String STR_PASTE_ERROR +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Der Inhalt der Zwischenablage konnte nicht eingefügt werden. : Der Inhalt der Zwischenablage konnte nicht eingef³gt werden. */ +//STRIP001 Text = "Der Inhalt der Zwischenablage konnte nicht eingefügt werden." ; +//STRIP001 Text [ ENGLISH ] = "The contents of the clipboard could not be inserted." ; +//STRIP001 Text [ ENGLISH_US ] = "The contents of the clipboard could not be pasted." ; +//STRIP001 Text [ dutch ] = "De inhoud van het Klembord kan niet worden ingevoegd" ; +//STRIP001 Text [ italian ] = "Non ?stato possibile incollare il contenuto degli appunti" ; +//STRIP001 Text [ spanish ] = "No se pudo pegar el contenido del portapapeles." ; +//STRIP001 Text [ french ] = "Impossible d'insérer le contenu du presse-papiers." ; +//STRIP001 Text [ swedish ] = "Urklippsinnehållet kunde inte infogas." ; +//STRIP001 Text [ danish ] = "Det var ikke muligt at indsætte udklipsholderens indhold." ; +//STRIP001 Text [ portuguese ] = "Impossível inserir o conteúdo da área de transferência." ; +//STRIP001 Text [ portuguese_brazilian ] = "Não foi possível colar o conteúdo da área de transferência." ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ³•ç²˜è´´å‰ªè´´æ¿çš„内容ã€?"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî âñòàâèòü ñîäåðæèìîå áóôåðà îáìåíà."; +//STRIP001 Text[ polish ] = "Nie mo¿na wklei?zawartoœci schowka."; +//STRIP001 Text[ japanese ] = "クリップボードã®å†…容ã¯æŒ¿å…¥ã§ãã¾ã›ã‚“ã§ã—ãŸã€?"; +//STRIP001 Text[ chinese_traditional ] = "無法貼上剪貼簿的內容ã€?"; +//STRIP001 Text[ arabic ] = "ÊÚÐÑ ÅÏÑÇ?ãÍÊæíÇ?ÇáÍÇÝÙ?"; +//STRIP001 Text[ greek ] = "Äå?Þôáí äõíáôü?íá ãßíå?åéóáãùãÞ ôï?ðåñéå÷ïìÝíïõ ôï?ðñü÷åéñï?"; +//STRIP001 Text[ korean ] = "í´ë¦½ë³´ë“œì?ë‚´ìš©ì?삽입ë?수없습니ë‹?."; +//STRIP001 Text[ turkish ] = "Pano içeriði eklenemedi."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'ha pogut enganxar el contingut del porta-retalls."; +//STRIP001 Text[ finnish ] = "Leikepöydän sisältöä ei voitu liittää."; +//STRIP001 Text[ thai ] = "ไม่สามารถวางเนื้à¸à¸«à¸²à¸‚à¸à¸‡à¸„ลิปบà¸à¸£à¹Œà¸”"; +//STRIP001 Text[ czech ] = "Obsah schránky nelze vložit."; +//STRIP001 Text[ hebrew ] = "Der Inhalt der Zwischenablage konnte nicht eingefügt werden."; +//STRIP001 Text[ hindi ] = "कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ की विषय को नहीà¤?छिपकà¤?सकते है à¥?"; +//STRIP001 }; +//STRIP001 String STR_PASTE_FULL +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Es kann nicht über das Blatt hinaus eingefügt werden. : Es kann nicht ³ber das Blatt hinaus eingef³gt werden. */ +//STRIP001 Text = "Es kann nicht über das Blatt hinaus eingefügt werden." ; +//STRIP001 Text [ ENGLISH ] = "There is not enough space to paste here." ; +//STRIP001 Text [ ENGLISH_US ] = "There is not enough space on the sheet to insert here." ; +//STRIP001 Text [ italian ] = "Non ?possibile incollare al di l?del foglio" ; +//STRIP001 Text [ spanish ] = "No se puede insertar más all?de la página." ; +//STRIP001 Text [ french ] = "Impossible d'insérer au-del?de la page" ; +//STRIP001 Text [ dutch ] = "Er kan niet buiten het blad worden ingevoegd." ; +//STRIP001 Text [ swedish ] = "Du kan inte klistra in utanför arkets kant." ; +//STRIP001 Text [ danish ] = "Det er ikke muligt at indsætte ud over arkets rand." ; +//STRIP001 Text [ portuguese ] = "Espaço insuficiente para inserir." ; +//STRIP001 Text [ portuguese_brazilian ] = "Não h?espaço suficiente na planilha para inserir aqui." ; +//STRIP001 Text[ chinese_simplified ] = "空间ä¸å¤Ÿï¼Œæ— 法æ’å…¥ã€?"; +//STRIP001 Text[ russian ] = "Äëÿ âñòàâê?íåäîñòàòî÷íî ìå? íà ëèñò?"; +//STRIP001 Text[ polish ] = "W arkuszu jest za ma³o miejsca, aby tu wstawi?"; +//STRIP001 Text[ japanese ] = "ã“ã®ç¯„囲以上ã«æŒ¿å…¥ã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "空間ä¸å¤ ,無法æ’å…¥ã€?"; +//STRIP001 Text[ arabic ] = "áÇ ÊßÝí ÇáæÑÞÉ áÚãáíÉ ÇáÅÏÑÇ?"; +//STRIP001 Text[ greek ] = "Äå?õðÜñ÷å?áñêåôü?÷þñï?óô?öýëë?ãé?íá ãßíå?åéóáãùãÞ."; +//STRIP001 Text[ korean ] = "시트ì—?삽입í•?공간ì?부족합니다."; +//STRIP001 Text[ turkish ] = "Sayfada ekleme için yeterli alan yok."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No hi ha prou espai al full per inserir aqu?"; +//STRIP001 Text[ finnish ] = "Taulukossa ei ole tarpeeksi tilaa tähän lisäämiseen."; +//STRIP001 Text[ thai ] = "มีที่ว่างไม่พà¸à¸šà¸™à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™à¸—ี่จะà¹à¸—รà¸"; +//STRIP001 Text[ czech ] = "V listu nenà dostatek mÃsta, proto sem nenà možné vkládat."; +//STRIP001 Text[ hebrew ] = "Es kann nicht über das Blatt hinaus eingefügt werden."; +//STRIP001 Text[ hindi ] = "यहाठपर जोड़ने केलिà¤?शीटॠमेà¤?जगà¤?अपरà¥à¤¯à¤¾à¤ªà¥à¤?है à¥?"; +//STRIP001 }; +//STRIP001 String STR_PASTE_BIGGER +//STRIP001 { +//STRIP001 Text = "Der Inhalt der Zwischenablage ist größer als der ausgewählte Bereich.\nMöchten Sie trotzdem einfügen?" ; +//STRIP001 Text [ ENGLISH ] = "The content of the clipboard is bigger than the selection.\nInsert anyway?" ; +//STRIP001 Text[ italian ] = "Il contenuto degli appunti ?pi?grande dell'area selezionata.\nVolete incollarlo lo stesso?"; +//STRIP001 Text[ portuguese_brazilian ] = "O conteúdo da área de transferência ?maior que o intervalo selecionado.\nDeseja inseri-lo mesmo assim?"; +//STRIP001 Text[ portuguese ] = "O conteúdo da área de transferência ?maior do que a selecção.\nMesmo assim inserir?"; +//STRIP001 Text[ danish ] = "Udklipholderens indhold er større end det markerede område.\nVil du indsætte alligevel?"; +//STRIP001 Text[ french ] = "Le contenu du presse-papiers dépasse l'espace offert par la sélection.\nVoulez vous quand même l'insérer ?"; +//STRIP001 Text[ swedish ] = "Innehållet i urklippet är större än det markerade området.\nSka det änd?infogas?"; +//STRIP001 Text[ dutch ] = "De inhoud van het Klembord is groter dan het geselecteerde bereik.\nToch invoegen?"; +//STRIP001 Text[ spanish ] = "El contenido del portapapeles es mayor que el área seleccionada.\n¿Desea insertarlo de todas formas?"; +//STRIP001 Text[ english_us ] = "The content of the clipboard is bigger than the range selected.\nDo you want to insert it anyway?"; +//STRIP001 Text[ chinese_simplified ] = "剪贴æ¿çš„内容大于选ä¸çš„区域。\n您还是è¦æ’入它?"; +//STRIP001 Text[ russian ] = "Ñîäåðæèìîå áóôåðà îáìåíà áîëüøå âûäåëåííîé îáëàñò?\nÂñòàâèòü, íåñìîò? íà ýò?"; +//STRIP001 Text[ polish ] = "Zawartoœæ schowka jest wiêksza ni?zaznaczony zakres.\nCzy mimo to wstawi?"; +//STRIP001 Text[ japanese ] = "クリップボードã®å†…容ãŒé¸æŠžã—ãŸç¯„囲を超ãˆã¦ã„ã¾ã™ã€‚\nãã‚Œã§ã‚‚挿入ã—ã¾ã™ã‹ã€?"; +//STRIP001 Text[ chinese_traditional ] = "剪貼簿的內容大於é¸å–çš„å€åŸŸã€‚\n您還是è¦æ’å…¥ï¼?"; +//STRIP001 Text[ arabic ] = "ãÍÊæíÇ?ÇáÍÇÝÙ?ÊÝæÞ ÇáäØÇÞ?ÇáÐí Þã?ÈÇÎÊíÇÑå?ÍÌãÇ?\nåá ÊÑíÏ ÇáÅÏÑÇ?ÈÇáÑÛã ãä Ðáß¿"; +//STRIP001 Text[ greek ] = "Ôï ðåñéå÷üìåí?ôï?ðñü÷åéñï?åßíá?ìåãáëýôåñï áð?ôç?åðéëåãìÝíç ðåñéï÷?\nÈÝëåôå ðá? üë?áõôÜ íá ãßíå??åéóáãùãÞ;"; +//STRIP001 Text[ korean ] = "í´ë¦½ë³´ë“œì?ë‚´ìš©ì?ì„ íƒë?범위ì?내용보다 ë?í½ë‹ˆë‹?\n그래ë?ì‚½ìž…í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"; +//STRIP001 Text[ turkish ] = "Pano içeriði, seçilen alandan daha büyük.\nYine de eklemek istiyor musunuz?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "El contingut del porta-retalls és més gran que l'àrea seleccionada.\nEl voleu inserir igualment?"; +//STRIP001 Text[ finnish ] = "Leikepöydän sisält?on valittua aluetta suurempi.\nHaluatko kuitenkin lisät?sen?"; +//STRIP001 Text[ thai ] = "เนื้à¸à¸«à¸²à¸‚à¸à¸‡à¸„ลิปบà¸à¸£à¹Œà¸”ใหà¸à¹ˆà¸à¸§à¹ˆà¸²à¸Šà¹ˆà¸§à¸‡à¸—ี่เลืà¸à¸\nคุณต้à¸à¸‡à¸à¸²à¸£à¹à¸—รà¸à¸¡à¸±à¸™à¸«à¸£à¸·à¸à¹„ม่?"; +//STRIP001 Text[ czech ] = "Obsah schránky je vÄ›tÅ¡Ã než vybraná oblast.\nChcete pÅ™esto vložit obsah schránky?"; +//STRIP001 Text[ hebrew ] = "Der Inhalt der Zwischenablage ist größer als der ausgewählte Bereich.\nMöchten Sie trotzdem einfügen?"; +//STRIP001 Text[ hindi ] = "चà¥à¤¨à¥‡ हà¥à¤?फैलाà¤?से कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ की विषय बड़ा है ।\nआप किसी तरà¤?उसको जोड़ना चाहतà¥?है?"; +//STRIP001 }; +//STRIP001 String STR_ERR_NOREF +//STRIP001 { +//STRIP001 Text = "Keine Referenzen gefunden." ; +//STRIP001 Text [ ENGLISH ] = "No references found." ; +//STRIP001 Text [ ENGLISH_US ] = "No references found." ; +//STRIP001 Text [ dutch ] = "Geen verwijzingen gevonden" ; +//STRIP001 Text [ italian ] = "Nessun riferimento trovato" ; +//STRIP001 Text [ spanish ] = "No se encontraron referencias." ; +//STRIP001 Text [ french ] = "Références introuvables." ; +//STRIP001 Text [ swedish ] = "Inga referenser funna." ; +//STRIP001 Text [ danish ] = "Ingen referencer fundet." ; +//STRIP001 Text [ portuguese ] = "Não foram encontradas referências." ; +//STRIP001 Text [ portuguese_brazilian ] = "Nenhuma referência encontrada." ; +//STRIP001 Text[ chinese_simplified ] = "没有找到引用ã€?"; +//STRIP001 Text[ russian ] = "Ññûëêè íå íàéäåí?"; +//STRIP001 Text[ polish ] = "Nie znaleziono odwo³a?"; +//STRIP001 Text[ japanese ] = "å‚ç…§ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€?"; +//STRIP001 Text[ chinese_traditional ] = "沒有找到åƒç…§ã€?"; +//STRIP001 Text[ arabic ] = "ÊÚÐÑ ÇáÚËæÑ Úá?Ãí?ãÑÇÌ?"; +//STRIP001 Text[ greek ] = "Äå?âñÝèçê?áöïñ?"; +//STRIP001 Text[ korean ] = "참조ë¥?찾지 못했습니ë‹?"; +//STRIP001 Text[ turkish ] = "Referans bulunamad?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'ha trobat cap referència."; +//STRIP001 Text[ finnish ] = "Viitteit?ei löytynyt."; +//STRIP001 Text[ thai ] = "ไม่พบà¸à¸²à¸£à¸à¹‰à¸²à¸‡à¸à¸´à¸?"; +//STRIP001 Text[ czech ] = "Nebyly nalezeny žádné odkazy."; +//STRIP001 Text[ hebrew ] = "Keine Referenzen gefunden."; +//STRIP001 Text[ hindi ] = "कोà¤?रेफरेनà¥à¤¸ नहीà¤?मिला à¥?"; +//STRIP001 }; +//STRIP001 String STR_ERR_LINKOVERLAP +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Quell- und Zielbereich dürfen sich nicht überlappen. : Quell- und Zielbereich d³rfen sich nicht ³berlappen. */ +//STRIP001 Text = "Quell- und Zielbereich dürfen sich nicht überlappen." ; +//STRIP001 Text [ ENGLISH ] = "Source and destination must not overlap." ; +//STRIP001 Text [ ENGLISH_US ] = "Source and destination must not overlap." ; +//STRIP001 Text [ dutch ] = "Bron en doel mogen elkaar niet overlappen" ; +//STRIP001 Text [ italian ] = "L'area sorgente e l'area di destinazione non possono sovrapporsi" ; +//STRIP001 Text [ spanish ] = "El área de origen y de destino no deben sobreponerse." ; +//STRIP001 Text [ french ] = "La plage source et la plage cible ne doivent pas se chevaucher." ; +//STRIP001 Text [ swedish ] = "Käll- och målområde får inte överlappa varandra." ; +//STRIP001 Text [ danish ] = "Kilde- og destinationsområde m?ikke overlappe." ; +//STRIP001 Text [ portuguese ] = "Fonte e destino não se devem sobrepor." ; +//STRIP001 Text [ portuguese_brazilian ] = "A origem e o destino não podem ser sobrepostos." ; +//STRIP001 Text[ chinese_simplified ] = "æºåŒºåŸŸå’Œç›®æ ‡åŒºåŸŸä¸å¯ä»¥ç›¸äº’é‡å ã€?"; +//STRIP001 Text[ russian ] = "Èñõîäí? îáëàñò??îáëàñò?íàçíà÷åí? íå äîëæíû ïåðåñåêàòü?."; +//STRIP001 Text[ polish ] = "Obszar Ÿród³owy i docelowy nie mog?si?nak³ada?"; +//STRIP001 Text[ japanese ] = "ソース範囲ã¨ã‚¿ãƒ¼ã‚²ãƒƒãƒˆç¯„囲をé‡ãã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "æºå€åŸŸå’Œç›®æ¨™å€åŸŸä¸å¯ä»¥ç›¸äº’é‡ç–Šã€?"; +//STRIP001 Text[ arabic ] = "íÌ?Ãá?íÊÏÇÎá ÇáäØÇÞ ÇáãÕÏÑ æÇáäØÇ?ÇáåÏ?"; +//STRIP001 Text[ greek ] = "Ïé ðåñéï÷Ýò ðñïÝëåõóçò êá?ðñïïñéóìïý äå?åðéôñÝðåôá?íá åðéêáëýðôïðíôá?"; +//STRIP001 Text[ korean ] = "ì›ë³¸ê³?대ìƒì´ ê²¹ì³ì ¸ì„œëŠ?안ë©ë‹ˆë‹¤."; +//STRIP001 Text[ turkish ] = "Kaynak ve hedef aralýð?örtüþmemelidir."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No es poden superposar la font i la destinaci?"; +//STRIP001 Text[ finnish ] = "Lähde ja kohde eivät saa olla päällekkäin."; +//STRIP001 Text[ thai ] = "ที่มาà¹à¸¥à¸°à¸—ี่หมายต้à¸à¸‡à¹„ม่ซ้à¸à¸™à¸—ับà¸à¸±à¸™"; +//STRIP001 Text[ czech ] = "Zdroj a cÃl se nesmÄ›jà pÅ™ekrývat."; +//STRIP001 Text[ hebrew ] = "Quell- und Zielbereich dürfen sich nicht überlappen."; +//STRIP001 Text[ hindi ] = "मूà¤?और नियत सà¥à¤¥à¤¾à¤?ओवरलॉप नहीà¤?हो सकता है à¥?"; +//STRIP001 }; +//STRIP001 String STR_GRAPHICNAME +//STRIP001 { +//STRIP001 Text = "Grafik" ; +//STRIP001 Text [ ENGLISH ] = "Graphic" ; +//STRIP001 Text [ ENGLISH_US ] = "Graphics" ; +//STRIP001 Text [ italian ] = "Immagine" ; +//STRIP001 Text [ spanish ] = "Imagen" ; +//STRIP001 Text [ french ] = "Image" ; +//STRIP001 Text [ dutch ] = "Afbeelding" ; +//STRIP001 Text [ swedish ] = "Grafik" ; +//STRIP001 Text [ danish ] = "Grafik" ; +//STRIP001 Text [ portuguese ] = "Imagem" ; +//STRIP001 Text [ portuguese_brazilian ] = "Figuras" ; +//STRIP001 Text[ chinese_simplified ] = "图形"; +//STRIP001 Text[ russian ] = "Ãðàôè÷åñêè?îáúåêò?"; +//STRIP001 Text[ polish ] = "Grafika"; +//STRIP001 Text[ japanese ] = "å›?"; +//STRIP001 Text[ chinese_traditional ] = "圖形"; +//STRIP001 Text[ arabic ] = "ÕæÑÉ"; +//STRIP001 Text[ greek ] = "Ãñáöéê?"; +//STRIP001 Text[ korean ] = "그림"; +//STRIP001 Text[ turkish ] = "Grafikler"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Gràfics"; +//STRIP001 Text[ finnish ] = "Grafiikka"; +//STRIP001 Text[ thai ] = "à¸à¸£à¸²à¸Ÿà¸´à¸„"; +//STRIP001 Text[ czech ] = "Obrázky"; +//STRIP001 Text[ hebrew ] = "‮גרפיקהâ€?"; +//STRIP001 Text[ hindi ] = "सà¥à¤šà¤¿à¤¤à¥à¤?"; +//STRIP001 }; +//STRIP001 String STR_INVALIDNAME +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Ungültiger Name. : Ung³ltiger Name. */ +//STRIP001 Text = "Ungültiger Name." ; +//STRIP001 Text [ ENGLISH ] = "Invalid name." ; +//STRIP001 Text [ ENGLISH_US ] = "Invalid name." ; +//STRIP001 Text [ italian ] = "Nome non valido." ; +//STRIP001 Text [ spanish ] = "Nombre no válido." ; +//STRIP001 Text [ french ] = "Nom incorrect." ; +//STRIP001 Text [ dutch ] = "Ongeldige naam." ; +//STRIP001 Text [ swedish ] = "Ogiltigt namn." ; +//STRIP001 Text [ danish ] = "Ugyldigt navn." ; +//STRIP001 Text [ portuguese ] = "Nome não válido." ; +//STRIP001 Text [ portuguese_brazilian ] = "Nome inválido." ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ•ˆçš„å称ã€?"; +//STRIP001 Text[ russian ] = "Íåäîïóñòèìîå èìÿ."; +//STRIP001 Text[ polish ] = "Nieprawid³owa nazwa."; +//STRIP001 Text[ japanese ] = "åå‰ãŒæ£ã—ãã‚ã‚Šã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "無效的å稱ã€?"; +//STRIP001 Text[ arabic ] = "ÇÓ?Ûí?ÕÇáÍ."; +//STRIP001 Text[ greek ] = "¢êõñ?üíïì?"; +//STRIP001 Text[ korean ] = "잘못ë?ì´ë¦„."; +//STRIP001 Text[ turkish ] = "Geçersiz ad."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "El nom no és vàlid."; +//STRIP001 Text[ finnish ] = "Virheellinen nimi."; +//STRIP001 Text[ thai ] = "ชื่à¸à¹„ม่ถูà¸à¸•à¹‰à¸à¸‡"; +//STRIP001 Text[ czech ] = "Neplatný název."; +//STRIP001 Text[ hebrew ] = "Ungültiger Name."; +//STRIP001 Text[ hindi ] = "अमानà¥à¤¯ नाà¤?à¥?"; +//STRIP001 }; +//STRIP001 String STR_VALID_MACRONOTFOUND +//STRIP001 { +//STRIP001 Text = "Das eingestellte Makro wurde nicht gefunden." ; +//STRIP001 Text [ ENGLISH ] = "The selected macro was not found." ; +//STRIP001 Text [ dutch ] = "De gewenste macro kan niet worden gevonden." ; +//STRIP001 Text [ english_us ] = "Selected macro not found." ; +//STRIP001 Text [ italian ] = "La macro scelta non ?stata trovata." ; +//STRIP001 Text [ spanish ] = "La macro seleccionada no se encontr?" ; +//STRIP001 Text [ french ] = "Impossible de trouver la macro configurée." ; +//STRIP001 Text [ swedish ] = "Det inställda makrot hittades inte." ; +//STRIP001 Text [ danish ] = "Den valgte makro blev ikke fundet." ; +//STRIP001 Text [ portuguese ] = "A macro seleccionada não foi encontrada." ; +//STRIP001 Text [ portuguese_brazilian ] = "A macro selecionada não foi encontrada." ; +//STRIP001 Text[ chinese_simplified ] = "没有找到这个设定的å®ã€?"; +//STRIP001 Text[ russian ] = "Íå íàéäåí âûáðàííû?ìàêðîñ."; +//STRIP001 Text[ polish ] = "Zaznaczonego makra nie znaleziono."; +//STRIP001 Text[ japanese ] = "è¨å®šã•ã‚ŒãŸãƒžã‚¯ãƒãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "沒有找到這個è¨å®šçš„巨集ã€?"; +//STRIP001 Text[ arabic ] = "ÊÚÐÑ ÇáÚËæÑ Úá?ÇáãÇßÑ?ÇáãÍÏÏ."; +//STRIP001 Text[ greek ] = "?åðéëåãìÝíç ìáêñïåíôïë?äå?âñÝèçê?"; +//STRIP001 Text[ korean ] = "ì„¤ì •ë?매í¬ë¡œë¥¼ 찾지 못했습니ë‹?"; +//STRIP001 Text[ turkish ] = "Seçilen makro bulunamad?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'ha trobat la macro seleccionada."; +//STRIP001 Text[ finnish ] = "Valittua makroa ei löydy."; +//STRIP001 Text[ thai ] = "ไม่พบมาโครที่เลืà¸à¸"; +//STRIP001 Text[ czech ] = "Vybrané makro nebylo nalezeno."; +//STRIP001 Text[ hebrew ] = "Das eingestellte Makro wurde nicht gefunden."; +//STRIP001 Text[ hindi ] = "चà¥à¤¨à¤¾ हà¥à¤?मॉकà¥à¤°à¥‹ नहीà¤?मिला à¥?"; +//STRIP001 }; +//STRIP001 String STR_VALID_DEFERROR +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Der eingegebene Wert ist ungültig. : Der eingegebene Wert ist ung³ltig. */ +//STRIP001 Text = "Der eingegebene Wert ist ungültig." ; +//STRIP001 Text [ ENGLISH ] = "Invalid data was entered." ; +//STRIP001 Text [ dutch ] = "De ingevoerde waarde is ongeldig" ; +//STRIP001 Text [ english_us ] = "Invalid value." ; +//STRIP001 Text [ italian ] = "Il valore digitato non ?valido." ; +//STRIP001 Text [ spanish ] = "Valor no válido." ; +//STRIP001 Text [ french ] = "Valeur incorrecte" ; +//STRIP001 Text [ swedish ] = "Det inmatade värdet är ogilitigt." ; +//STRIP001 Text [ danish ] = "Den indtastede værdi er ugyldig." ; +//STRIP001 Text [ portuguese ] = "O valor ?incorrecto." ; +//STRIP001 Text [ portuguese_brazilian ] = "Valor inválido." ; +//STRIP001 Text[ chinese_simplified ] = "è¿™ä¸ªè¾“å…¥çš„æ•°å€¼æ— æ•ˆã€?"; +//STRIP001 Text[ russian ] = "Íåäîïóñòèìîå çíà÷åíèå."; +//STRIP001 Text[ polish ] = "Nieprawid³owa wartoœæ."; +//STRIP001 Text[ japanese ] = "入力ã—ãŸå€¤ã¯ç„¡åŠ¹ã§ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "這個輸入的數值無效ã€?"; +//STRIP001 Text[ arabic ] = "ÇáÞíãÉ ÇáãÏÎá?Ûí?ÕÇáÍ?"; +//STRIP001 Text[ greek ] = "Ìç Ýãêõñç ôéìÞ."; +//STRIP001 Text[ korean ] = "ìž…ë ¥ë?ê°’ì€ ìž˜ëª»ë?"; +//STRIP001 Text[ turkish ] = "Geçersiz deðer."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "El valor no és vàlid."; +//STRIP001 Text[ finnish ] = "Virheellinen arvo."; +//STRIP001 Text[ thai ] = "ค่าไม่ถูà¸à¸•à¹‰à¸à¸?"; +//STRIP001 Text[ czech ] = "Neplatná hodnota."; +//STRIP001 Text[ hebrew ] = "Der eingegebene Wert ist ungültig."; +//STRIP001 Text[ hindi ] = "अमानà¥à¤¯ मूलà¥à¤?à¥?"; +//STRIP001 }; + String STR_PROGRESS_CALCULATING + { + Text [ de ] = "berechnen" ; + Text [ en-US ] = "calculating" ; + Text [ x-comment ] = " "; + Text[ pt ] = "calcular"; + Text[ ru ] = "вычиÑление"; + Text[ el ] = "υπολογισμός"; + Text[ nl ] = "berekenen"; + Text[ fr ] = "calculer"; + Text[ es ] = "calcular"; + Text[ fi ] = "lasketaan"; + Text[ ca ] = "s'està calculant"; + Text[ it ] = "calcola"; + Text[ da ] = "beregner"; + Text[ sv ] = "beräkna"; + Text[ pl ] = "Obliczanie"; + Text[ pt-BR ] = "calculando"; + Text[ th ] = "คำนวณ"; + Text[ ja ] = "計算"; + Text[ ko ] = "계산"; + Text[ zh-CN ] = "计算"; + Text[ zh-TW ] = "計算"; + Text[ tr ] = "hesaplanıyor"; + Text[ hi-IN ] = "गणना करना"; + Text[ ar ] = "Øساب"; + Text[ he ] = "berechnen"; + }; +//STRIP001 String STR_PROGRESS_SORTING +//STRIP001 { +//STRIP001 Text = "sortieren" ; +//STRIP001 Text [ ENGLISH ] = "sorting" ; +//STRIP001 Text [ dutch ] = "sorteren" ; +//STRIP001 Text [ english_us ] = "sorting" ; +//STRIP001 Text [ swedish ] = "sortera" ; +//STRIP001 Text [ danish ] = "sorterer" ; +//STRIP001 Text [ italian ] = "ordina" ; +//STRIP001 Text [ spanish ] = "ordenar" ; +//STRIP001 Text [ french ] = "trier" ; +//STRIP001 Text [ portuguese ] = "ordenar" ; +//STRIP001 Text [ portuguese_brazilian ] = "ordenando" ; +//STRIP001 Text[ chinese_simplified ] = "排åº"; +//STRIP001 Text[ russian ] = "ñîðòèðîâêà"; +//STRIP001 Text[ polish ] = "Sortowanie"; +//STRIP001 Text[ japanese ] = "並ã¹æ›¿ãˆ"; +//STRIP001 Text[ chinese_traditional ] = "排åº"; +//STRIP001 Text[ arabic ] = "ÇáÝÑ?"; +//STRIP001 Text[ greek ] = "ôáîéíüìçóç"; +//STRIP001 Text[ korean ] = "ì •ë ¬"; +//STRIP001 Text[ turkish ] = "sýralanýyor"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "s'est?ordenant"; +//STRIP001 Text[ finnish ] = "lajitellaan"; +//STRIP001 Text[ thai ] = "เรียงลำดัà¸?"; +//STRIP001 Text[ czech ] = "probÃhá Å™azenÃ"; +//STRIP001 Text[ hebrew ] = "sortieren"; +//STRIP001 Text[ hindi ] = "सोरà¥à¤?करना"; +//STRIP001 }; + String STR_PROGRESS_HEIGHTING + { + /* ### ACHTUNG: Neuer Text in Resource? Zeilenhöhen anpassen : Zeilenh÷hen anpassen */ + Text [ de ] = "Zeilenhöhen anpassen" ; + Text [ en-US ] = "Adapt row height" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Ajustar altura das linhas"; + Text[ ru ] = "Подбор выÑоты Ñтроки"; + Text[ el ] = "Î ÏοσαÏμογή Ïψους γÏαμμής"; + Text[ nl ] = "Rijhoogte aanpassen"; + Text[ fr ] = "Adapter la hauteur des lignes"; + Text[ es ] = "Ajustar altura de filas"; + Text[ fi ] = "Sovita rivikorkeus"; + Text[ ca ] = "Adapta l'alçada de la fila"; + Text[ it ] = "Adatta altezza riga"; + Text[ da ] = "Tilpas rækkehøjde"; + Text[ sv ] = "Anpassa radhöjder"; + Text[ pl ] = "Dostosuj wysokość wierszy"; + Text[ pt-BR ] = "Adaptar a altura da linha"; + Text[ th ] = "ปรับความสูงขà¸à¸‡à¹à¸–ว"; + Text[ ja ] = "è¡Œã®é«˜ã•ã‚’調整"; + Text[ ko ] = "새로운 ë†’ì´ ì¡°ì •"; + Text[ zh-CN ] = "调整行高"; + Text[ zh-TW ] = "調整欄高"; + Text[ tr ] = "Satır yüksekliklerini ayarla"; + Text[ hi-IN ] = "पंकà¥à¤¤à¤¿ ऊà¤à¤šà¤¾à¤ˆ सà¥à¤µà¥€à¤•à¤¾à¤° करो"; + Text[ ar ] = "ملاءمة ارتÙاع الصÙÙˆÙ"; + Text[ he ] = "Zeilenhöhen anpassen"; + }; +//STRIP001 String STR_PROGRESS_COMPARING +//STRIP001 { +//STRIP001 Text = "Vergleiche #" ; +//STRIP001 Text [ ENGLISH ] = "Compare #" ; +//STRIP001 Text [ portuguese ] = "Comparar #" ; +//STRIP001 Text [ english_us ] = "Compare #" ; +//STRIP001 Text [ portuguese_brazilian ] = "Comparar #" ; +//STRIP001 Text [ swedish ] = "Jämför #" ; +//STRIP001 Text [ danish ] = "Sammenlign #" ; +//STRIP001 Text [ italian ] = "Confronta #" ; +//STRIP001 Text [ spanish ] = "Comparar #" ; +//STRIP001 Text [ french ] = "Compare #" ; +//STRIP001 Text [ dutch ] = "Vergelijk #" ; +//STRIP001 Text[ chinese_simplified ] = "比较 #"; +//STRIP001 Text[ russian ] = "Ñðàâíèòü #"; +//STRIP001 Text[ polish ] = "Porównaj #"; +//STRIP001 Text[ japanese ] = "比較 #"; +//STRIP001 Text[ chinese_traditional ] = "比較 #"; +//STRIP001 Text[ arabic ] = "ãÞÇÑäÉ #"; +//STRIP001 Text[ greek ] = "Óýãêñéóç #"; +//STRIP001 Text[ korean ] = "ë¹„êµ #"; +//STRIP001 Text[ turkish ] = "Karþýlaþtýr #"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Compara #"; +//STRIP001 Text[ finnish ] = "Vertaa #"; +//STRIP001 Text[ thai ] = "เปรียบเทียบ #"; +//STRIP001 Text[ czech ] = "Porovnat #"; +//STRIP001 Text[ hebrew ] = "Vergleiche #"; +//STRIP001 Text[ hindi ] = "तà¥à¤²à¤¨à¤?करà¥?#"; +//STRIP001 }; + String STR_DETINVALID_OVERFLOW + { + /* ### ACHTUNG: Neuer Text in Resource? Die maximale Anzahl ungültiger Zellen wurde überschritten.\nEs wurden nicht alle ungültigen Zellen markiert. : Die maximale Anzahl ung³ltiger Zellen wurde ³berschritten.\nEs wurden nicht alle ung³ltigen Zellen markiert. */ + Text [ de ] = "Die maximale Anzahl ungültiger Zellen wurde überschritten.\nEs wurden nicht alle ungültigen Zellen markiert." ; + Text [ en-US ] = "The maximum number of invalid cells has been exceeded.\nNot all invalid cells have been marked." ; + Text [ x-comment ] = " "; + Text[ pt ] = "O número máximo de células incorrectas foi ultrapassado.\nNem todas as células incorrectas foram marcadas."; + Text[ ru ] = "Превышено макÑимальное чиÑло недопуÑтимых Ñчеек.\nВыделены не вÑе недопуÑтимые Ñчейки."; + Text[ el ] = "ΥπÎÏβαση του μÎγιστου αÏÎ¹Î¸Î¼Î¿Ï Î¼Î· ÎγκυÏων κελιών. Δεν \nεκτελÎστηκε η σήμανση όλων των μη ÎγκυÏων κελιών."; + Text[ nl ] = "Het maximale aantal ongeldige cellen is overschreden.\nNiet alle ongeldige cellen zijn gemarkeerd."; + Text[ fr ] = "Le nombre maximal de cellules non valides a été dépassé.\nToutes les cellules invalides n'ont pas été marquées."; + Text[ es ] = "El número máximo de celdas no válidas se ha excedido.\nNo se marcaron todas las celdas no válidas."; + Text[ fi ] = "Virheellisten solujen enimmäismäärä on ylitetty.\nKaikkia virheellisiä soluja ei ole merkitty."; + Text[ ca ] = "S'ha excedit el nombre mà xim de cel.les no và lides.\\No s'han marcat totes les cel.les no và lides."; + Text[ it ] = "Il numero massimo di celle non valido è stato superato.\nNon sono state selezionate tutte le celle non valide."; + Text[ da ] = "Det maksimale antal ugyldige celler blev overskredet.\\Alle ugyldige celler blev ikke markeret."; + Text[ sv ] = "Det maximala antalet ogiltiga celler överskreds.\nAlla ogiltiga celler blev inte markerade."; + Text[ pl ] = "ZostaÅ‚a przekroczona maksymalna liczba nieprawidÅ‚owych komórek.\nNie wszystkie nieprawidÅ‚owe komórki zostaÅ‚y zaznaczone."; + Text[ pt-BR ] = "O número máximo de células inválidas foi excedido.\nNem todas as células inválidas foram marcadas."; + Text[ th ] = "เà¸à¸´à¸™à¸ˆà¸³à¸™à¸§à¸™à¸—ี่มาà¸à¸—ี่สุดขà¸à¸‡à¹€à¸‹à¸¥à¸¥à¹Œà¸—ี่ไม่ถูà¸à¸•à¹‰à¸à¸‡\nไม่ทำเครื่à¸à¸‡à¸«à¸¡à¸²à¸¢à¹€à¸‹à¸¥à¸¥à¹Œà¸—ี่ไม่ถูà¸à¸•à¹‰à¸à¸‡à¸—ั้งหมด"; + Text[ ja ] = "無効ãªã‚»ãƒ«ã®æœ€å¤§æ•°ã‚’超ãˆã¦ã„ã¾ã™ã€‚\né¸æŠžã•ã‚Œã¦ã„ãªã„無効ãªã‚»ãƒ«ãŒã‚ã‚Šã¾ã™ã€‚"; + Text[ ko ] = "ìœ íš¨í•˜ì§€ ì•Šì€ ì…€ì˜ ìµœëŒ€ 개수를 초과하였습니다. \nìœ íš¨í•˜ì§€ ì•Šì€ ì…€ì´ ëª¨ë‘ ì„ íƒë˜ì§€ëŠ” 않았습니다."; + Text[ zh-CN ] = "å·²ç»è¶…è¿‡æœ€å¤šæ— æ•ˆå•å…ƒæ ¼çš„数目。\n没有选ä¸å…¨éƒ¨æ— 效的å•å…ƒæ ¼ã€‚"; + Text[ zh-TW ] = "已經超éŽæœ€å¤šç„¡æ•ˆå„²å˜æ ¼çš„數目。\n沒有é¸å–全部無效的儲å˜æ ¼ã€‚"; + Text[ tr ] = "Maksimum geçersiz hücre sayısı aşıldı.\nGeçersiz hücrelerin tümüü seçilmedi."; + Text[ hi-IN ] = "अमानà¥à¤¯ कोषà¥à¤ ों की अधिकतम संखà¥à¤¯à¤¾ सीमा से बाहर है ।\nसब अमानà¥à¤¯ कोषà¥à¤ ों को चिहà¥à¤¨à¤¿à¤¤ नहीं किया जाà¤à¤—ा ।"; + Text[ ar ] = "تم تجاوز العدد الأقصى للخلايا الغير صالØØ©.\nلم يتم تØديد كل الخلايا الغير صالØØ©."; + Text[ he ] = "Die maximale Anzahl ungültiger Zellen wurde überschritten.\nEs wurden nicht alle ungültigen Zellen markiert."; + }; +//STRIP001 String STR_QUICKHELP_DELETE +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Inhalte löschen : Inhalte l÷schen */ +//STRIP001 Text = "Inhalte löschen" ; +//STRIP001 Text [ ENGLISH ] = "Delete contents" ; +//STRIP001 Text [ portuguese ] = "Apagar conteúdos" ; +//STRIP001 Text [ english_us ] = "Delete contents" ; +//STRIP001 Text [ portuguese_brazilian ] = "Excluir conteúdo" ; +//STRIP001 Text [ swedish ] = "Radera innehåll" ; +//STRIP001 Text [ danish ] = "Slet indhold" ; +//STRIP001 Text [ italian ] = "Elimina contenuti" ; +//STRIP001 Text [ spanish ] = "Borrar contenido" ; +//STRIP001 Text [ french ] = "Supprimer du contenu" ; +//STRIP001 Text [ dutch ] = "Inhoud wissen" ; +//STRIP001 Text[ chinese_simplified ] = "åˆ é™¤å†…å®¹"; +//STRIP001 Text[ russian ] = "Óäàëèò?ñîäåðæèìîå"; +//STRIP001 Text[ polish ] = "Usu?zawartoœæ"; +//STRIP001 Text[ japanese ] = "内容ã®å‰Šé™?"; +//STRIP001 Text[ chinese_traditional ] = "刪除內容"; +//STRIP001 Text[ arabic ] = "ÍÐ?ãÍÊæíÇ?"; +//STRIP001 Text[ greek ] = "ÄéáãñáöÞ ðåñéå÷ïìÝíùí"; +//STRIP001 Text[ korean ] = "ë‚´ìš© ì‚ì œ"; +//STRIP001 Text[ turkish ] = "Ýçeriði sil"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Suprimeix el contingut"; +//STRIP001 Text[ finnish ] = "Poista sisält?"; +//STRIP001 Text[ thai ] = "ลบเนื้à¸à¸«à¸²"; +//STRIP001 Text[ czech ] = "Smazat obsah"; +//STRIP001 Text[ hebrew ] = "Inhalte löschen"; +//STRIP001 Text[ hindi ] = "विषयों को मिटाà¤?"; +//STRIP001 }; +//STRIP001 String STR_QUICKHELP_REF +//STRIP001 { +//STRIP001 Text = "%1 Z x %2 S" ; +//STRIP001 Text [ ENGLISH ] = "%1 R x %2 C" ; +//STRIP001 Text [ portuguese ] = "%1 Z x %2 S" ; +//STRIP001 Text [ english_us ] = "%1 R x %2 C" ; +//STRIP001 Text [ portuguese_brazilian ] = "%1 L x %2 C" ; +//STRIP001 Text [ swedish ] = "%1 R x %2 K" ; +//STRIP001 Text [ danish ] = "%1 R x %2 K" ; +//STRIP001 Text [ italian ] = "%1 Z x %2 S" ; +//STRIP001 Text [ spanish ] = "%1 F x %2 C" ; +//STRIP001 Text [ french ] = "%1 Lgn x %2 Col" ; +//STRIP001 Text [ dutch ] = "%1 r x %2 k" ; +//STRIP001 Text[ chinese_simplified ] = "%1 è¡?x %2 åˆ?"; +//STRIP001 Text[ russian ] = "%1 ?x %2 ?"; +//STRIP001 Text[ polish ] = "%1 W x %2 K"; +//STRIP001 Text[ japanese ] = "%1 è¡?x %2 åˆ?"; +//STRIP001 Text[ chinese_traditional ] = "%1 åˆ?x %2 æ¬?"; +//STRIP001 Text[ arabic ] = "%1 R x %2 C"; +//STRIP001 Text[ greek ] = "%1 ? x %2 ?"; +//STRIP001 Text[ korean ] = "%1 R x %2 C"; +//STRIP001 Text[ turkish ] = "%1 Sa x %2 S?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "%1 F x %2 C"; +//STRIP001 Text[ finnish ] = "%1 R x %2 C"; +//STRIP001 Text[ thai ] = "%1 R x %2 C"; +//STRIP001 Text[ czech ] = "%1 S x %2 Ř"; +//STRIP001 Text[ hebrew ] = "%1 Z x %2 S"; +//STRIP001 Text[ hindi ] = "%1 R x %2 C"; +//STRIP001 }; +//STRIP001 String STR_FUNCTIONLIST_MORE +//STRIP001 { +//STRIP001 Text = "Andere..." ; +//STRIP001 Text [ ENGLISH ] = "More Functions..." ; +//STRIP001 Text [ portuguese ] = "Outros..." ; +//STRIP001 Text [ english_us ] = "More..." ; +//STRIP001 Text [ portuguese_brazilian ] = "Mais..." ; +//STRIP001 Text [ swedish ] = "Andra..." ; +//STRIP001 Text [ danish ] = "Andre..." ; +//STRIP001 Text [ italian ] = "Altri..." ; +//STRIP001 Text [ spanish ] = "Otros..." ; +//STRIP001 Text [ french ] = "Autres..." ; +//STRIP001 Text [ dutch ] = "Andere..." ; +//STRIP001 Text[ chinese_simplified ] = "其他..."; +//STRIP001 Text[ russian ] = "Äîïîëíèòåëüí?.."; +//STRIP001 Text[ polish ] = "Inne..."; +//STRIP001 Text[ japanese ] = "ãã®ä»?.."; +//STRIP001 Text[ chinese_traditional ] = "其他..."; +//STRIP001 Text[ arabic ] = "ÇáãÒíÏ..."; +//STRIP001 Text[ greek ] = "¢ëëá..."; +//STRIP001 Text[ korean ] = "기타..."; +//STRIP001 Text[ turkish ] = "Diðer..."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Més..."; +//STRIP001 Text[ finnish ] = "Lisää..."; +//STRIP001 Text[ thai ] = "มาà¸à¸à¸§à¹ˆà¸?.."; +//STRIP001 Text[ czech ] = "VÃce..."; +//STRIP001 Text[ hebrew ] = "Andere..."; +//STRIP001 Text[ hindi ] = "अधिक..."; +//STRIP001 }; +//STRIP001 String STR_ERR_INVALID_AREA +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Ungültiger Bereich : Ung³ltiger Bereich */ +//STRIP001 Text = "Ungültiger Bereich" ; +//STRIP001 Text [ ENGLISH ] = "Invalid Area" ; +//STRIP001 Text [ portuguese ] = "Área não válida." ; +//STRIP001 Text [ english_us ] = "Invalid range" ; +//STRIP001 Text [ portuguese_brazilian ] = "Intervalo inválido" ; +//STRIP001 Text [ swedish ] = "Ogiltigt område" ; +//STRIP001 Text [ danish ] = "Ugyldigt område" ; +//STRIP001 Text [ italian ] = "Area non valida" ; +//STRIP001 Text [ spanish ] = "Referencia no válida" ; +//STRIP001 Text [ french ] = "Plage non valide" ; +//STRIP001 Text [ dutch ] = "Ongeldig bereik" ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ•ˆçš„åŒºåŸ?"; +//STRIP001 Text[ russian ] = "Íåäîïóñòèì? îáëàñò?"; +//STRIP001 Text[ polish ] = "Nieprawid³owy zakres"; +//STRIP001 Text[ japanese ] = "範囲ã«å•é¡ŒãŒã‚ã‚Šã¾ã™ã€?"; +//STRIP001 Text[ chinese_traditional ] = "無效的å€åŸ?"; +//STRIP001 Text[ arabic ] = "äØÇÞ Ûí?ÕÇáÍ"; +//STRIP001 Text[ greek ] = "Ìç Ýãêõñç ðåñéï÷?"; +//STRIP001 Text[ korean ] = "잘못ë?범위"; +//STRIP001 Text[ turkish ] = "Geçersiz aralýk"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "L'àrea no és vàlida"; +//STRIP001 Text[ finnish ] = "Virheellinen alue"; +//STRIP001 Text[ thai ] = "ช่วงไม่ถูà¸à¸•à¹‰à¸à¸‡"; +//STRIP001 Text[ czech ] = "Neplatný rozsah"; +//STRIP001 Text[ hebrew ] = "Ungültiger Bereich"; +//STRIP001 Text[ hindi ] = "अमानà¥à¤¯ फैलाà¤?"; +//STRIP001 }; + // Vorlagen fuer Pivottabellen +//STRIP001 String STR_PIVOT_STYLE_INNER +//STRIP001 { +//STRIP001 Text = "Datenpilot Wert" ; +//STRIP001 Text [ ENGLISH ] = "Datapilot Value" ; +//STRIP001 Text [ portuguese ] = "Valor do Piloto de Dados" ; +//STRIP001 Text [ english_us ] = "DataPilot Value" ; +//STRIP001 Text [ portuguese_brazilian ] = "Valor da Tabela Dinâmica" ; +//STRIP001 Text [ swedish ] = "Datapilot värde" ; +//STRIP001 Text [ danish ] = "DataPilot værdi" ; +//STRIP001 Text [ italian ] = "DataPilot - Valore" ; +//STRIP001 Text [ spanish ] = "Piloto de Datos Valor" ; +//STRIP001 Text [ french ] = "Pilote de données - Valeur" ; +//STRIP001 Text [ dutch ] = "DataPiloot Waarde" ; +//STRIP001 Text[ chinese_simplified ] = "æ•°æ®åŠ©ç†-工作è¡?æ•°å€?"; +//STRIP001 Text[ russian ] = "Çíà÷åíèå ñâîäíî?òàáëèö?"; +//STRIP001 Text[ polish ] = "Wartoœæ Pilota danych"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã®æ•°å€?"; +//STRIP001 Text[ chinese_traditional ] = "資料助ç†å·¥ä½œè¡¨æ•¸å€?"; +//STRIP001 Text[ arabic ] = "ÞíãÉ ãÑÔÏ ÇáÈíÇäÇÊ"; +//STRIP001 Text[ greek ] = "ÔéìÞ ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?ê°?"; +//STRIP001 Text[ turkish ] = "Veri pilotu deðeri"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Valor del DataPilot"; +//STRIP001 Text[ finnish ] = "Tietojen ohjauksen arvo"; +//STRIP001 Text[ thai ] = "ค่าข้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸?"; +//STRIP001 Text[ czech ] = "Hodnota KontingenÄnà tabulky"; +//STRIP001 Text[ hebrew ] = "Datenpilot Wert"; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠमूलà¥à¤?"; +//STRIP001 }; +//STRIP001 String STR_PIVOT_STYLE_RESULT +//STRIP001 { +//STRIP001 Text = "Datenpilot Ergebnis" ; +//STRIP001 Text [ ENGLISH ] = "Datapilot Result" ; +//STRIP001 Text [ portuguese ] = "Resultado do Piloto de Dados" ; +//STRIP001 Text [ english_us ] = "DataPilot Result" ; +//STRIP001 Text [ portuguese_brazilian ] = "Resultado da Tabela Dinâmica" ; +//STRIP001 Text [ swedish ] = "Datapilot resultat" ; +//STRIP001 Text [ danish ] = "DataPilot resultat" ; +//STRIP001 Text [ italian ] = "DataPilot Risultato" ; +//STRIP001 Text [ spanish ] = "Piloto de Datos Resultado" ; +//STRIP001 Text [ french ] = "Pilote de données - Résultat" ; +//STRIP001 Text [ dutch ] = "DataPiloot Resultaat" ; +//STRIP001 Text[ chinese_simplified ] = "æ•°æ®åŠ©ç†å·¥ä½œè¡?结果"; +//STRIP001 Text[ russian ] = "Ðåçóëüòà?ñâîäíî?òàáëèö?"; +//STRIP001 Text[ polish ] = "Wynik Pilota danych"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã®çµæž?"; +//STRIP001 Text[ chinese_traditional ] = "資料助ç†å·¥ä½œè¡¨çµæž?"; +//STRIP001 Text[ arabic ] = "äÊíÌ?ãÑÔÏ ÇáÈíÇäÇÊ"; +//STRIP001 Text[ greek ] = "ÁðïôÝëåóìá ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?ê²°ê³¼"; +//STRIP001 Text[ turkish ] = "Veri pilotu sonucu"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Resultat del DataPilot"; +//STRIP001 Text[ finnish ] = "Tietojen ohjauksen tulokset"; +//STRIP001 Text[ thai ] = "ผลลัพธ์ข้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸?"; +//STRIP001 Text[ czech ] = "Výsledek KontingenÄnà tabulky"; +//STRIP001 Text[ hebrew ] = "Datenpilot Ergebnis"; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠनतीजा"; +//STRIP001 }; +//STRIP001 String STR_PIVOT_STYLE_CATEGORY +//STRIP001 { +//STRIP001 Text = "Datenpilot Kategorie" ; +//STRIP001 Text [ ENGLISH ] = "Datapilot Category" ; +//STRIP001 Text [ portuguese ] = "Categoria do Piloto de Dados" ; +//STRIP001 Text [ english_us ] = "DataPilot Category" ; +//STRIP001 Text [ portuguese_brazilian ] = "Categoria da Tabela Dinâmica" ; +//STRIP001 Text [ swedish ] = "Datapilot kategori" ; +//STRIP001 Text [ danish ] = "DataPilot kategori" ; +//STRIP001 Text [ italian ] = "DataPilot Categoria" ; +//STRIP001 Text [ spanish ] = "Categoría del Piloto de Datos" ; +//STRIP001 Text [ french ] = "Pilote de données - Catégorie" ; +//STRIP001 Text [ dutch ] = "DataPiloot Categorie" ; +//STRIP001 Text[ chinese_simplified ] = "æ•°æ®åŠ©ç† 分类"; +//STRIP001 Text[ russian ] = "Êàòåãîðèÿ ñâîäíî?òàáëèö?"; +//STRIP001 Text[ polish ] = "Kategoria Pilota danych"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã®åˆ†é¡žé …ç›?"; +//STRIP001 Text[ chinese_traditional ] = "è³‡æ–™åŠ©ç† åˆ†é¡ž"; +//STRIP001 Text[ arabic ] = "ÝÆ?ãÑÔÏ ÇáÈíÇäÇÊ"; +//STRIP001 Text[ greek ] = "Êáôçãïñß?ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?범주"; +//STRIP001 Text[ turkish ] = "Veri pilotu kategorisi"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Categoria del DataPilot"; +//STRIP001 Text[ finnish ] = "Tietojen ohjausluokka"; +//STRIP001 Text[ thai ] = "ประเภทข้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸‡"; +//STRIP001 Text[ czech ] = "Kategorie KontingenÄnà tabulky"; +//STRIP001 Text[ hebrew ] = "Datenpilot Kategorie"; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠवरà¥à¤—"; +//STRIP001 }; +//STRIP001 String STR_PIVOT_STYLE_TITLE +//STRIP001 { +//STRIP001 Text = "Datenpilot Titel" ; +//STRIP001 Text [ ENGLISH ] = "Datapilot Title" ; +//STRIP001 Text [ portuguese ] = "Título do Piloto de Dados" ; +//STRIP001 Text [ english_us ] = "DataPilot Title" ; +//STRIP001 Text [ portuguese_brazilian ] = "Título da Tabela Dinâmica" ; +//STRIP001 Text [ swedish ] = "Datapilot titel" ; +//STRIP001 Text [ danish ] = "DataPilot titel" ; +//STRIP001 Text [ italian ] = "DataPilot Titolo" ; +//STRIP001 Text [ spanish ] = "Piloto de Datos Título" ; +//STRIP001 Text [ french ] = "Pilote de données - Titre" ; +//STRIP001 Text [ dutch ] = "DataPiloot Titel" ; +//STRIP001 Text[ chinese_simplified ] = "æ•°æ®åŠ©ç†å·¥ä½œè¡?æ ‡é¢˜"; +//STRIP001 Text[ russian ] = "Çàãîëîâî?ñâîäíî?òàáëèö?"; +//STRIP001 Text[ polish ] = "Tytu?Pilota danych"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã®ã‚¿ã‚¤ãƒˆãƒ?"; +//STRIP001 Text[ chinese_traditional ] = "資料助ç†å·¥ä½œè¡¨æ¨™é¡?"; +//STRIP001 Text[ arabic ] = "ÚäæÇ?ãÑÔÏ ÇáÈíÇäÇÊ"; +//STRIP001 Text[ greek ] = "Ôßôëïò ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?ì œëª©"; +//STRIP001 Text[ turkish ] = "Veri pilotu baþlýð?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Títol del DataPilot"; +//STRIP001 Text[ finnish ] = "Tietojen ohjauksen otsikko"; +//STRIP001 Text[ thai ] = "หัวเรื่à¸à¸‡à¸‚้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸?"; +//STRIP001 Text[ czech ] = "Nadpis KontingenÄnà tabulky"; +//STRIP001 Text[ hebrew ] = "Datenpilot Titel"; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠशीरà¥à¤·à¤•"; +//STRIP001 }; +//STRIP001 String STR_PIVOT_STYLE_FIELDNAME +//STRIP001 { +//STRIP001 Text = "Datenpilot Feld" ; +//STRIP001 Text [ ENGLISH ] = "Datapilot Field" ; +//STRIP001 Text [ portuguese ] = "Campo do Piloto de Dados" ; +//STRIP001 Text [ english_us ] = "DataPilot Field" ; +//STRIP001 Text [ portuguese_brazilian ] = "Campo da Tabela Dinâmica" ; +//STRIP001 Text [ swedish ] = "Datapilot fält" ; +//STRIP001 Text [ danish ] = "DataPilot felt" ; +//STRIP001 Text [ italian ] = "DataPilot Campo" ; +//STRIP001 Text [ spanish ] = "Piloto de Datos Campo" ; +//STRIP001 Text [ french ] = "Pilote de données - Champ" ; +//STRIP001 Text [ dutch ] = "DataPiloot Veld" ; +//STRIP001 Text[ chinese_simplified ] = "æ•°æ®åŠ©ç†å·¥ä½œè¡?å—段"; +//STRIP001 Text[ russian ] = "Ïîëå ñâîäíî?òàáëèö?"; +//STRIP001 Text[ polish ] = "Pole Pilota danych"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰"; +//STRIP001 Text[ chinese_traditional ] = "資料助ç†å·¥ä½œè¡¨æ¬„ä½?"; +//STRIP001 Text[ arabic ] = "ÍÞ?ãÑÔÏ ÇáÈíÇäÇÊ"; +//STRIP001 Text[ greek ] = "Ðåäß?ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?í•„ë“œ"; +//STRIP001 Text[ turkish ] = "Veri pilotu alan?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Camp del DataPilot"; +//STRIP001 Text[ finnish ] = "Tietojen ohjauskentt?"; +//STRIP001 Text[ thai ] = "เขตข้à¸à¸¡à¸¹à¸¥à¸‚à¸à¸‡à¸‚้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸?"; +//STRIP001 Text[ czech ] = "Pole KontingenÄnà tabulky"; +//STRIP001 Text[ hebrew ] = "Datenpilot Feld"; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠकà¥à¤·à¥‡à¤¤à¥à¤?"; +//STRIP001 }; +//STRIP001 String STR_PIVOT_STYLE_TOP +//STRIP001 { +//STRIP001 Text = "Datenpilot Ecke" ; +//STRIP001 Text [ ENGLISH ] = "Datapilot Corner" ; +//STRIP001 Text [ portuguese ] = "Piloto de Dados Esquina" ; +//STRIP001 Text [ english_us ] = "DataPilot Corner" ; +//STRIP001 Text [ portuguese_brazilian ] = "Canto da Tabela Dinâmica" ; +//STRIP001 Text [ swedish ] = "Datapilot hörn" ; +//STRIP001 Text [ danish ] = "DataPilot hjørne" ; +//STRIP001 Text [ italian ] = "DataPilot Angolo" ; +//STRIP001 Text [ spanish ] = "Piloto de Datos Ángulo" ; +//STRIP001 Text [ french ] = "Pilote de données - Coin" ; +//STRIP001 Text [ dutch ] = "DataPiloot Hoek" ; +//STRIP001 Text[ chinese_simplified ] = "æ•°æ®åŠ©ç† è§?"; +//STRIP001 Text[ russian ] = "Óãîë ñâîäíî?òàáëèö?"; +//STRIP001 Text[ polish ] = "Naro¿nik Pilota danych"; +//STRIP001 Text[ japanese ] = "データパイãƒãƒƒãƒˆã®è§’"; +//STRIP001 Text[ chinese_traditional ] = "è³‡æ–™åŠ©ç† è§?"; +//STRIP001 Text[ arabic ] = "ÒÇæí?ãÑÔÏ ÇáÈíÇäÇÊ"; +//STRIP001 Text[ greek ] = "¢êñç ðéëüôï?äåäïìÝíù?"; +//STRIP001 Text[ korean ] = "ë°ì´í„?파ì¼ëŸ?코너"; +//STRIP001 Text[ turkish ] = "Veri pilotu köþesi"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Angle del DataPilot"; +//STRIP001 Text[ finnish ] = "Tietojen ohjauskulma"; +//STRIP001 Text[ thai ] = "มุมข้à¸à¸¡à¸¹à¸¥à¸™à¸³à¸£à¹ˆà¸à¸?"; +//STRIP001 Text[ czech ] = "Roh KontingenÄnà tabulky"; +//STRIP001 Text[ hebrew ] = "Datenpilot Ecke"; +//STRIP001 Text[ hindi ] = "ड़ॉटापैलटॠकोना"; +//STRIP001 }; +//STRIP001 String STR_OPERATION_FILTER +//STRIP001 { +//STRIP001 Text = "Filter" ; +//STRIP001 Text [ ENGLISH ] = "Filter" ; +//STRIP001 Text [ portuguese ] = "Filtro" ; +//STRIP001 Text [ english_us ] = "Filter" ; +//STRIP001 Text [ portuguese_brazilian ] = "Filtro" ; +//STRIP001 Text [ swedish ] = "Filter" ; +//STRIP001 Text [ danish ] = "Filter" ; +//STRIP001 Text [ italian ] = "Filtro" ; +//STRIP001 Text [ spanish ] = "Filtro" ; +//STRIP001 Text [ french ] = "Filtre" ; +//STRIP001 Text [ dutch ] = "Filter" ; +//STRIP001 Text[ chinese_simplified ] = "ç›é€?"; +//STRIP001 Text[ russian ] = "Ôèëüòð"; +//STRIP001 Text[ polish ] = "Filtr"; +//STRIP001 Text[ japanese ] = "フィルタ"; +//STRIP001 Text[ chinese_traditional ] = "篩é¸"; +//STRIP001 Text[ arabic ] = "ÝáÊÑ"; +//STRIP001 Text[ greek ] = "Ößëôñï"; +//STRIP001 Text[ korean ] = "í•„í„°"; +//STRIP001 Text[ turkish ] = "Filtre"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Filtre"; +//STRIP001 Text[ finnish ] = "Suodatus"; +//STRIP001 Text[ thai ] = "ตัวà¸à¸£à¸à¸?"; +//STRIP001 Text[ czech ] = "Filtr"; +//STRIP001 Text[ hebrew ] = "â€®×¡×™× ×•×Ÿâ€?"; +//STRIP001 Text[ hindi ] = "Filter"; +//STRIP001 }; +//STRIP001 String STR_OPERATION_SORT +//STRIP001 { +//STRIP001 Text = "Sortierung" ; +//STRIP001 Text [ ENGLISH ] = "Sort" ; +//STRIP001 Text [ portuguese ] = "Ordenar" ; +//STRIP001 Text [ english_us ] = "Sort" ; +//STRIP001 Text [ portuguese_brazilian ] = "Ordenar" ; +//STRIP001 Text [ swedish ] = "Sortering" ; +//STRIP001 Text [ danish ] = "Sortering" ; +//STRIP001 Text [ italian ] = "Ordina" ; +//STRIP001 Text [ spanish ] = "Ordenar" ; +//STRIP001 Text [ french ] = "Tri" ; +//STRIP001 Text [ dutch ] = "Sortering" ; +//STRIP001 Text[ chinese_simplified ] = "排åº"; +//STRIP001 Text[ russian ] = "Ñîðòèðîâêà"; +//STRIP001 Text[ polish ] = "Sortowanie"; +//STRIP001 Text[ japanese ] = "並ã¹æ›¿ãˆ"; +//STRIP001 Text[ chinese_traditional ] = "排åº"; +//STRIP001 Text[ arabic ] = "ÇáÝÑ?"; +//STRIP001 Text[ greek ] = "Ôáîéíüìçóç"; +//STRIP001 Text[ korean ] = "ì •ë ¬"; +//STRIP001 Text[ turkish ] = "Sýrala"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Ordena"; +//STRIP001 Text[ finnish ] = "Lajittele"; +//STRIP001 Text[ thai ] = "เรียงลำดัà¸?"; +//STRIP001 Text[ czech ] = "Řadit"; +//STRIP001 Text[ hebrew ] = "‮מיוןâ€?"; +//STRIP001 Text[ hindi ] = "सोरà¥à¤?"; +//STRIP001 }; +//STRIP001 String STR_OPERATION_SUBTOTAL +//STRIP001 { +//STRIP001 Text = "Teilergebnisse" ; +//STRIP001 Text [ ENGLISH ] = "Subtotals" ; +//STRIP001 Text [ portuguese ] = "Subtotais" ; +//STRIP001 Text [ english_us ] = "Subtotals" ; +//STRIP001 Text [ portuguese_brazilian ] = "Sub-totais" ; +//STRIP001 Text [ swedish ] = "Delresultat" ; +//STRIP001 Text [ danish ] = "Subtotaler" ; +//STRIP001 Text [ italian ] = "Subtotali" ; +//STRIP001 Text [ spanish ] = "Subtotales" ; +//STRIP001 Text [ french ] = "Sous-totaux" ; +//STRIP001 Text [ dutch ] = "Subtotalen" ; +//STRIP001 Text[ chinese_simplified ] = "分类汇æ€?"; +//STRIP001 Text[ russian ] = "Ïðîìåæóòî÷íû?èòîã?"; +//STRIP001 Text[ polish ] = "Sumy czêœciowe"; +//STRIP001 Text[ japanese ] = "å°è¨ˆ"; +//STRIP001 Text[ chinese_traditional ] = "å°è¨ˆ"; +//STRIP001 Text[ arabic ] = "ÇáãÌÇãíÚ ÇáÝÑÚí?"; +//STRIP001 Text[ greek ] = "ÌåñéêÜ áèñïßóìáôá"; +//STRIP001 Text[ korean ] = "부분합"; +//STRIP001 Text[ turkish ] = "Ara toplamlar"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Subtotals"; +//STRIP001 Text[ finnish ] = "Välisummat"; +//STRIP001 Text[ thai ] = "ผลรวมย่à¸à¸?"; +//STRIP001 Text[ czech ] = "MezisouÄty"; +//STRIP001 Text[ hebrew ] = "Teilergebnisse"; +//STRIP001 Text[ hindi ] = "आधà¤?कà¥à¤²à¤œà¥‹à¤¡à¤?"; +//STRIP001 }; +//STRIP001 String STR_OPERATION_NONE +//STRIP001 { +//STRIP001 Text = "keine" ; +//STRIP001 Text [ ENGLISH ] = "none" ; +//STRIP001 Text [ portuguese ] = "nenhum" ; +//STRIP001 Text [ english_us ] = "None" ; +//STRIP001 Text [ portuguese_brazilian ] = "Nenhum" ; +//STRIP001 Text [ swedish ] = "ingen" ; +//STRIP001 Text [ danish ] = "ingen" ; +//STRIP001 Text [ italian ] = "nessuno" ; +//STRIP001 Text [ spanish ] = "ninguno" ; +//STRIP001 Text [ french ] = "aucun(e)" ; +//STRIP001 Text [ dutch ] = "geen" ; +//STRIP001 Text[ chinese_simplified ] = "æ—?"; +//STRIP001 Text[ russian ] = "Íå?"; +//STRIP001 Text[ polish ] = "brak"; +//STRIP001 Text[ japanese ] = "ãªã—"; +//STRIP001 Text[ chinese_traditional ] = "ç„?"; +//STRIP001 Text[ arabic ] = "ÈÏæä"; +//STRIP001 Text[ greek ] = "ÊáíÝíá"; +//STRIP001 Text[ korean ] = "ì—†ìŒ"; +//STRIP001 Text[ turkish ] = "Yok"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Cap"; +//STRIP001 Text[ finnish ] = "Ei mitään"; +//STRIP001 Text[ thai ] = "ไม่มà¸?"; +//STRIP001 Text[ czech ] = "Nic"; +//STRIP001 Text[ hebrew ] = "‮לל×â€?"; +//STRIP001 Text[ hindi ] = "कोà¤?नहीà¤?"; +//STRIP001 }; + String STR_IMPORT_REPLACE + { + Text [ de ] = "Wollen Sie den Inhalt von # ersetzen?" ; + Text [ en-US ] = "Do you want to replace the contents of #?" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Deseja substituir o conteúdo de #?"; + Text[ ru ] = "Заменить Ñодержимое #?"; + Text[ el ] = "ΘÎλετε Ï€Ïαγματικά να γίνει αντικατάσταση του πεÏιεχομÎνου του #;"; + Text[ nl ] = "Wilt u de inhoud van # vervangen?"; + Text[ fr ] = "Souhaitez-vous remplacer le contenu de # ?"; + Text[ es ] = "¿Desea reemplazar el contenido de #?"; + Text[ fi ] = "Haluatko korvata kohteen # sisällön?"; + Text[ ca ] = "Voleu reemplaçar el contingut de #?"; + Text[ it ] = "Sostituire il contenuto di #?"; + Text[ da ] = "Vil du erstatte indholdet af #?"; + Text[ sv ] = "Vill du ersätta innehÃ¥llet i #?"; + Text[ pl ] = "Czy chcesz zamienić zawartość #?"; + Text[ pt-BR ] = "Deseja substituir o conteúdo de #?"; + Text[ th ] = "คุณต้à¸à¸‡à¸à¸²à¸£à¹à¸—นที่เนื้à¸à¸«à¸² # หรืà¸à¹„ม่?"; + Text[ ja ] = "# ã®å†…容を置æ›ã—ã¾ã™ã‹ã€‚"; + Text[ ko ] = "#ì˜ ë‚´ìš©ì„ ë°”ê¾¸ì‹œê² ìŠµë‹ˆê¹Œ?"; + Text[ zh-CN ] = "您è¦æ›¿æ¢ # 的内容?"; + Text[ zh-TW ] = "您è¦ä»£æ›¿ # 的內容?"; + Text[ tr ] = "# içeriÄŸini deÄŸiÅŸtirmek istiyor musunuz?"; + Text[ hi-IN ] = "आप # के विषयों को पà¥à¤°à¤¤à¤¿à¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤ करना चाहते है?"; + Text[ ar ] = "هل تريد استبدال Ù…Øتويات #ØŸ"; + Text[ he ] = "Wollen Sie den Inhalt von # ersetzen?"; + }; + String STR_TIP_WIDTH + { + Text [ de ] = "Breite:" ; + Text [ en-US ] = "Width:" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Largura:"; + Text[ ru ] = "Ширина:"; + Text[ el ] = "Πλάτος:"; + Text[ nl ] = "Breedte:"; + Text[ fr ] = "Largeur :"; + Text[ es ] = "Ancho:"; + Text[ fi ] = "Leveys:"; + Text[ ca ] = "Amplada:"; + Text[ it ] = "Larghezza:"; + Text[ da ] = "Bredde:"; + Text[ sv ] = "Bredd:"; + Text[ pl ] = "Szerokość:"; + Text[ pt-BR ] = "Largura:"; + Text[ th ] = "ความà¸à¸§à¹‰à¸²à¸‡:"; + Text[ ja ] = "å¹…:"; + Text[ ko ] = "너비:"; + Text[ zh-CN ] = "宽度:"; + Text[ zh-TW ] = "寬度:"; + Text[ tr ] = "GeniÅŸlik:"; + Text[ hi-IN ] = "चौड़ाई:"; + Text[ ar ] = "العرض:"; + Text[ he ] = "‮רוחב‬"; + }; +//STRIP001 String STR_TIP_HEIGHT +//STRIP001 { +//STRIP001 /* ### ACHTUNG: Neuer Text in Resource? Höhe: : H÷he: */ +//STRIP001 Text = "Höhe:" ; +//STRIP001 Text [ ENGLISH ] = "Height:" ; +//STRIP001 Text [ portuguese ] = "Altura:" ; +//STRIP001 Text [ english_us ] = "Height:" ; +//STRIP001 Text [ portuguese_brazilian ] = "Altura:" ; +//STRIP001 Text [ swedish ] = "Höjd:" ; +//STRIP001 Text [ danish ] = "Højde:" ; +//STRIP001 Text [ italian ] = "Altezza:" ; +//STRIP001 Text [ spanish ] = "Altura:" ; +//STRIP001 Text [ french ] = "Hauteur :" ; +//STRIP001 Text [ dutch ] = "Hoogte:" ; +//STRIP001 Text[ chinese_simplified ] = "高度ï¼?"; +//STRIP001 Text[ russian ] = "Âûñîòà:"; +//STRIP001 Text[ polish ] = "Wysokoœæ:"; +//STRIP001 Text[ japanese ] = "高ã•:"; +//STRIP001 Text[ chinese_traditional ] = "高度ï¼?"; +//STRIP001 Text[ arabic ] = "ÇáÇÑÊÝÇÚ:"; +//STRIP001 Text[ greek ] = "¾øïò:"; +//STRIP001 Text[ korean ] = "높ì´:"; +//STRIP001 Text[ turkish ] = "Yükseklik:"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Alçada:"; +//STRIP001 Text[ finnish ] = "Korkeus:"; +//STRIP001 Text[ thai ] = "ความสูà¸?"; +//STRIP001 Text[ czech ] = "Výška:"; +//STRIP001 Text[ hebrew ] = "‮גובהâ€?"; +//STRIP001 Text[ hindi ] = "ऊà¤à¤šà¤¾à¤?"; +//STRIP001 }; +//STRIP001 String STR_TIP_HIDE +//STRIP001 { +//STRIP001 Text = "Ausblenden" ; +//STRIP001 Text [ ENGLISH ] = "Hide" ; +//STRIP001 Text [ portuguese ] = "Ocultar" ; +//STRIP001 Text [ english_us ] = "Hide" ; +//STRIP001 Text [ portuguese_brazilian ] = "Ocultar" ; +//STRIP001 Text [ swedish ] = "Dölj" ; +//STRIP001 Text [ danish ] = "Skjul" ; +//STRIP001 Text [ italian ] = "Nascondi" ; +//STRIP001 Text [ spanish ] = "Ocultar" ; +//STRIP001 Text [ french ] = "Masquer" ; +//STRIP001 Text [ dutch ] = "Verbergen" ; +//STRIP001 Text[ chinese_simplified ] = "éšå…¥"; +//STRIP001 Text[ russian ] = "Ñêðûòü"; +//STRIP001 Text[ polish ] = "Ukryj"; +//STRIP001 Text[ japanese ] = "表示ã—ãªã?"; +//STRIP001 Text[ chinese_traditional ] = "隱入"; +//STRIP001 Text[ arabic ] = "ÅÎÝÇ?"; +//STRIP001 Text[ greek ] = "Áðüêñõøç"; +//STRIP001 Text[ korean ] = "숨기ê¸?"; +//STRIP001 Text[ turkish ] = "Gizle"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Oculta"; +//STRIP001 Text[ finnish ] = "Piilota"; +//STRIP001 Text[ thai ] = "ซ่à¸à¸™"; +//STRIP001 Text[ czech ] = "Skrýt"; +//STRIP001 Text[ hebrew ] = "Ausblenden"; +//STRIP001 Text[ hindi ] = "छिपाà¤?"; +//STRIP001 }; +//STRIP001 String STR_ERR_INSERTOBJ +//STRIP001 { +//STRIP001 Text = "Das Objekt konnte nicht eingefügt werden." ; +//STRIP001 Text [ ENGLISH ] = "The object could not be inserted." ; +//STRIP001 Text [ portuguese ] = "Foi impossível inserir o objecto." ; +//STRIP001 Text [ english_us ] = "The object could not be inserted." ; +//STRIP001 Text [ portuguese_brazilian ] = "Não foi possível inserir o objeto." ; +//STRIP001 Text [ swedish ] = "Objektet kunde inte infogas." ; +//STRIP001 Text [ danish ] = "Det var ikke muligt at indsætte objektet." ; +//STRIP001 Text [ italian ] = "Non ?stato possibile inserire l'oggetto." ; +//STRIP001 Text [ spanish ] = "No se pudo insertar el objeto." ; +//STRIP001 Text [ french ] = "L'objet n'a pas pu être insér?" ; +//STRIP001 Text [ dutch ] = "Het object kan niet worden ingevoegd." ; +//STRIP001 Text[ chinese_simplified ] = "æ— æ³•æ’入对象ã€?"; +//STRIP001 Text[ russian ] = "Íåâîçìîæíî âñòàâèòü îáúåêò."; +//STRIP001 Text[ polish ] = "Obiekt nie móg?zosta?wstawiony."; +//STRIP001 Text[ japanese ] = "オブジェクトã¯æŒ¿å…¥ã§ãã¾ã›ã‚“ã§ã—ãŸã€?"; +//STRIP001 Text[ chinese_traditional ] = "無法æ’入物件ã€?"; +//STRIP001 Text[ arabic ] = "ÊÚÐÑ ÅÏÑÇ?ÇáßÇÆä."; +//STRIP001 Text[ greek ] = "Äå?Þôáí äõíáôü?íá ãßíå?åéóáãùãÞ ôï?áíôéêåéìÝíïõ."; +//STRIP001 Text[ korean ] = "개체ë¥?삽입하지 못했습니ë‹?"; +//STRIP001 Text[ turkish ] = "Nesne eklenemedi."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No s'ha pogut inserir l'objecte."; +//STRIP001 Text[ finnish ] = "Objektia ei voitu lisät?"; +//STRIP001 Text[ thai ] = "ไม่สามารถà¹à¸—รà¸à¸§à¸±à¸•à¸–ุ"; +//STRIP001 Text[ czech ] = "Objekt nebylo možné vložit."; +//STRIP001 Text[ hebrew ] = "Das Objekt konnte nicht eingefügt werden."; +//STRIP001 Text[ hindi ] = "वसà¥à¤¤à¥?को नहीà¤?जोड़ सकते है à¥?"; +//STRIP001 }; + String STR_CHANGED_BLANK + { + Text [ de ] = "<leer>" ; + Text [ en-US ] = "<empty>" ; + Text [ x-comment ] = " "; + Text[ pt ] = "<vazio>"; + Text[ ru ] = "<пуÑто>"; + Text[ el ] = "<κενό>"; + Text[ nl ] = "<leeg>"; + Text[ fr ] = "<vide>"; + Text[ es ] = "<vacÃo>"; + Text[ fi ] = "<tyhjä>"; + Text[ ca ] = "<buit>"; + Text[ it ] = "<vuoto>"; + Text[ da ] = "<tom>"; + Text[ sv ] = "<tom>"; + Text[ pl ] = "<pusty>"; + Text[ pt-BR ] = "<vazio>"; + Text[ th ] = "<ว่าง>"; + Text[ ja ] = "<空白>"; + Text[ ko ] = "<빈>"; + Text[ zh-CN ] = "<空缺>"; + Text[ zh-TW ] = "<空缺>"; + Text[ tr ] = "<boÅŸ>"; + Text[ hi-IN ] = "<खाली>"; + Text[ ar ] = "<Ùارغ>"; + Text[ he ] = "<leer>"; + }; + String STR_CHANGED_CELL + { + Text [ de ] = "Zelle #1 von '#2' zu '#3' geändert" ; + Text [ en-US ] = "Cell #1 changed from '#2' to '#3'" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Célula #1 modificada de '#2' para '#3'"; + Text[ ru ] = "Ячейка #1 изменена Ñ '#2' на '#3'"; + Text[ el ] = "Το κελί #1 άλλαξε από '#2' σε '#3'"; + Text[ nl ] = "Cel #1 van '#2' in '#3' gewijzigd"; + Text[ fr ] = "Cellule #1 modifiée de '#2' en '#3'"; + Text[ es ] = "Celda #1 cambiada de '#2' a '#3' "; + Text[ fi ] = "Solu #1 muutettu kohteesta '#2' kohteeseen '#3'"; + Text[ ca ] = "La cel.la #1 ha canviat de '#2' a '#3'"; + Text[ it ] = "Riga #1 di '#2' modificata in '#3'"; + Text[ da ] = "Celle #1 blev ændret fra '#2' til '#3'"; + Text[ sv ] = "Cell #1 har ändrats frÃ¥n '#2' till '#3'"; + Text[ pl ] = "Komórka #1 zostaÅ‚a zmieniona z '#2' na '#3' "; + Text[ pt-BR ] = "Célula #1 modificada de '#2' para '#3'"; + Text[ th ] = "เซลล์ #1 เปลี่ยนจาภ'#2' เป็น '#3'"; + Text[ ja ] = "セル #1 ã¯ã€Œ#2ã€ã‹ã‚‰ã€Œ#3ã€ã«å¤‰æ›´ã«ãªã‚Šã¾ã—ãŸã€‚"; + Text[ ko ] = "ì…€ #1ì€(는) '#2'ì—ì„œ '#3'ë¡œ 변경ë¨"; + Text[ zh-CN ] = "å•å…ƒæ ¼ #1 从 '#2' 改å˜æˆ '#3'"; + Text[ zh-TW ] = "儲å˜æ ¼#1從<#2>變更æˆ<#3>"; + Text[ tr ] = "#1 hücresi, '#2' den #3' e deÄŸiÅŸtirildi"; + Text[ hi-IN ] = "कोषà¥à¤ #1 को '#2' से '#3' में परिवरà¥à¤¤à¤¨ किया"; + Text[ ar ] = "تم تغيير الخلية #1 من '#2' إلى '#3'"; + Text[ he ] = "Zelle #1 von '#2' zu '#3' geändert"; + }; + String STR_CHANGED_INSERT + { + Text [ de ] = "#1 eingefügt" ; + Text [ en-US ] = "#1 inserted" ; + Text [ x-comment ] = " "; + Text[ pt ] = "#1 inserido"; + Text[ ru ] = "#1 вÑтавлена"; + Text[ el ] = "#1 εισάχθηκαν"; + Text[ nl ] = "#1 ingevoegd"; + Text[ fr ] = "#1 inséré"; + Text[ es ] = "#1 insertada"; + Text[ fi ] = "#1 lisätty"; + Text[ ca ] = "#1 inserit"; + Text[ it ] = "#1 inserito"; + Text[ da ] = "#1 indsat"; + Text[ sv ] = "#1 infogad"; + Text[ pl ] = "Wstawiono #1"; + Text[ pt-BR ] = "#1 inserido"; + Text[ th ] = "à¹à¸—รภ#1 "; + Text[ ja ] = "#1 ã¯æŒ¿å…¥ã•ã‚Œã¾ã—ãŸã€‚"; + Text[ ko ] = "#1 삽입"; + Text[ zh-CN ] = "å·²ç»åŠ å…¥ #1"; + Text[ zh-TW ] = "å·²ç¶“åŠ å…¥ #1"; + Text[ tr ] = "#1 eklendi"; + Text[ hi-IN ] = "#1 जोड़ा"; + Text[ ar ] = "تم إدراج #1"; + Text[ he ] = "#1 eingefügt"; + }; + String STR_CHANGED_DELETE + { + Text [ de ] = "#1 gelöscht" ; + Text [ en-US ] = "#1deleted" ; + Text [ x-comment ] = " "; + Text[ pt ] = "#1 eliminado"; + Text[ ru ] = "#1 удалена"; + Text[ el ] = "#1 Îχει διαγÏαφεί"; + Text[ nl ] = "#1 gewist"; + Text[ fr ] = "#1 supprimé"; + Text[ es ] = "#1 borrado"; + Text[ fi ] = "#1 poistettu"; + Text[ ca ] = "#1suprimit"; + Text[ it ] = "#1 cancellato"; + Text[ da ] = "#1 slettet"; + Text[ sv ] = "#1 raderad"; + Text[ pl ] = "UsuniÄ™to #1"; + Text[ pt-BR ] = "#1 excluÃdo"; + Text[ th ] = "ลบ #1"; + Text[ ja ] = "#1 ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚"; + Text[ ko ] = "#1 ì‚ì œë¨"; + Text[ zh-CN ] = "å·²ç»åˆ 除 #1"; + Text[ zh-TW ] = "已經刪除 #1"; + Text[ tr ] = "#1 silindi"; + Text[ hi-IN ] = "#1मिटाया"; + Text[ ar ] = "تم ØØ°Ù #1"; + Text[ he ] = "#1 gelöscht"; + }; + String STR_CHANGED_MOVE + { + Text [ de ] = "Bereich von #1 nach #2 verschoben" ; + Text [ en-US ] = "Range moved from #1 to #2" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Mover área #1 para #2"; + Text[ ru ] = "ОблаÑÑ‚ÑŒ перемещена из #1 в #2"; + Text[ el ] = "Μετακίνηση πεÏιοχής από #1 Ï€Ïος #2"; + Text[ nl ] = "Bereik van #1 naar #2 verplaatst"; + Text[ fr ] = "Plage déplacée de #1 vers #2"; + Text[ es ] = "Ãrea desplazada de #1 a #2"; + Text[ fi ] = "Alue siirretty kohteesta #1 kohteeseen #2"; + Text[ ca ] = "L'à rea s'ha mogut de #1 a #2"; + Text[ it ] = "Area spostata da #1 a #2"; + Text[ da ] = "OmrÃ¥de flyttet fra #1 til #2"; + Text[ sv ] = "OmrÃ¥de flyttat frÃ¥n #1 till #2"; + Text[ pl ] = "Zakres przeniesiony z #1 do #2 "; + Text[ pt-BR ] = "Intervalo movido de #1 para #2"; + Text[ th ] = "ย้ายช่วงจาภ#1 ไปยัง #2"; + Text[ ja ] = "範囲㯠#1 ã‹ã‚‰ #2 ã¸ç§»å‹•ã—ã¾ã—ãŸã€‚"; + Text[ ko ] = "#1 ì—ì„œ #2ë¡œ 범위 ì´ë™"; + Text[ zh-CN ] = "区域从 #1 移动到 #2"; + Text[ zh-TW ] = "å€åŸŸå¾ž #1 移動到 #2"; + Text[ tr ] = "Aralık taşındı; eski konum #1 yeni konum #2"; + Text[ hi-IN ] = "फैलाव को #1 से #2 को सà¥à¤¥à¤¾à¤¨ परिवरà¥à¤¤à¤¨ किया है"; + Text[ ar ] = "إزاØØ© النطاق من #1 إلى #2"; + Text[ he ] = "Bereich von #1 nach #2 verschoben"; + }; +//STRIP001 String STR_END_REDLINING_TITLE +//STRIP001 { +//STRIP001 Text = "Aufzeichnung beenden" ; +//STRIP001 Text [ ENGLISH ] = "Remove change history" ; +//STRIP001 Text [ portuguese ] = "Cancelar registo" ; +//STRIP001 Text [ english_us ] = "Exit Recording" ; +//STRIP001 Text [ portuguese_brazilian ] = "Terminar Gravação" ; +//STRIP001 Text [ swedish ] = "Avsluta registrering" ; +//STRIP001 Text [ danish ] = "Afslut registrering" ; +//STRIP001 Text [ italian ] = "Termina registrazione" ; +//STRIP001 Text [ spanish ] = "Finalizar grabación" ; +//STRIP001 Text [ french ] = "Quitter l'enregistrement" ; +//STRIP001 Text [ dutch ] = "Registratie beëindigen" ; +//STRIP001 Text[ chinese_simplified ] = "结æŸè®°å½•"; +//STRIP001 Text[ russian ] = "Âûéò?èç ðåæèìà çàïèñè"; +//STRIP001 Text[ polish ] = "Zakoñcz zapisywanie"; +//STRIP001 Text[ japanese ] = "記録ã®çµ‚äº?"; +//STRIP001 Text[ chinese_traditional ] = "çµæŸä¿®æ”¹"; +//STRIP001 Text[ arabic ] = "ÅäåÇ?ÇáÊÓÌí?"; +//STRIP001 Text[ greek ] = "ÔÝëï?êáôáãñáöÞò"; +//STRIP001 Text[ korean ] = "ê¸°ë¡ ì¢…ë£Œ"; +//STRIP001 Text[ turkish ] = "Kayýttan çýk"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Surt de l'enregistrament"; +//STRIP001 Text[ finnish ] = "Lopeta nauhoitus"; +//STRIP001 Text[ thai ] = "à¸à¸à¸à¸ˆà¸²à¸à¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸?"; +//STRIP001 Text[ czech ] = "UkonÄit nahrávánÃ"; +//STRIP001 Text[ hebrew ] = "Aufzeichnung beenden"; +//STRIP001 Text[ hindi ] = "रेकोरà¥à¤¡à¤¿à¤‚ग से निरà¥à¤—म"; +//STRIP001 }; + String STR_END_REDLINING + { + Text [ de ] = "Mit dieser Aktion wird die Aufzeichnung von Änderungen beendet.\nDie Information über Änderungen geht hierdurch verloren.\n\nAufzeichnung beenden?\n\n" ; + Text [ en-US ] = "This action will exit the change recording mode.\nAny information about changes will be lost.\n\nExit change recording mode?\n\n" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Com esta acção será cancelado o registo das modificações.\nAs informações sobre modificações prévias desaparecerão.\n\nCancelar?\n\n"; + Text[ ru ] = "Режим запиÑи изменений будет отключен.\nÐ’ÑÑ Ð½Ð°ÐºÐ¾Ð¿Ð»ÐµÐ½Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± изменениÑÑ… будет удалена.\n\nОтключить режим запиÑи изменений?\n\n"; + Text[ el ] = "Με αυτή την ενÎÏγεια τεÏματίζεται η καταγÏαφή των αλλαγών.\nΟι πληÏοφοÏίες σχετικά με τις αλλαγÎÏ‚ Ï€Ïόκειται να χαθοÏν.\n\nÎα τεÏματιστεί η εγγÏαφή;\n\n"; + Text[ nl ] = "Door deze activiteit wordt het registreren van wijzigingen beëindigd.\\ nDe informatie over wijzigingen gaat hierdoor verloren.\n\nRegistratie beëindigen?\n\n"; + Text[ fr ] = "Cette opération met fin à l'enregistrement des modifications.\nToute information concernant les modifications sera perdue.\n\nQuitter l'enregistrement ?\n\n"; + Text[ es ] = "Esta acción finalizará la grabación de las modificaciones.\nLa información relativa a las modificaciones se perderá.\n\n¿Desea finalizar la grabación?\n\n"; + Text[ fi ] = "Tämän toiminnon avulla poistutaan muutosten nauhoitustilasta.\nKaikki muutostiedot menetetään.\n\nHaluatko poistua muutosten nauhoitustilasta?\n\n"; + Text[ ca ] = "Aquesta acció sortirà dels canvis del registre.\nEs perdrà tota la informació sobre els canvis.\n\nVoleu sortir dels canvis del registre?\n\n"; + Text[ it ] = "Con questa operazione si termina la registrazione delle modifiche.\nL'informazione relativa alle modifiche andrà persa.\n\nTerminare la registrazione?\n\n"; + Text[ da ] = "Denne handling afslutter registreringen af ændringer.\nAlle informationer om ændringer vil herigennem gÃ¥ tabt.\nVil du afslutte registreringen?"; + Text[ sv ] = "Den här Ã¥tgärden avslutar registreringen av ändringar.\nInformationen om ändringar gÃ¥r dÃ¥ förlorad.\n\nVill du avsluta registreringen?\n\n"; + Text[ pl ] = "Ta akcja koÅ„czy rejestrowanie zmian.\nProwadzi to do utraty informacji o zmianach.\n\nCzy wyjść z trybu rejestrowania zmian?\n\n"; + Text[ pt-BR ] = "Esta ação sairá do modo de gravação de alteração.\nQualquer informação sobre modificações serão perdidas.\n\nSair do modo de gravação de alteração?\n\n"; + Text[ th ] = "à¸à¸²à¸£à¸à¸£à¸°à¸—ำนี้จะà¸à¸à¸à¸ˆà¸²à¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸£à¸°à¹€à¸šà¸µà¸¢à¸™\nข้à¸à¸¡à¸¹à¸¥à¹€à¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸«à¸²à¸¢à¹„ป.\n\nà¸à¸à¸à¸ˆà¸²à¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸£à¸°à¹€à¸šà¸µà¸¢à¸™à¸«à¸£à¸·à¸à¹„ม่?\n\n"; + Text[ ja ] = "変更ã®è¨˜éŒ²ã‚’ã“ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã§çµ‚了ã—ã¾ã™ã€‚\nåŒæ™‚ã«å¤‰æ›´ã—ãŸæƒ…å ±ã‚‚å®Œå…¨ã«å¤±ã‚ã‚Œã¾ã™ã€‚\n\n記録を終了ã—ã¾ã™ã‹ã€‚\n\n"; + Text[ ko ] = "ì´ ìž‘ë™ì„ 실행하면 변경 기ë¡ì´ 종료ë©ë‹ˆë‹¤.\n그러면 변경 ë‚´ìš© ì •ë³´ê°€ ì†ì‹¤ë©ë‹ˆë‹¤.\n\n변경 기ë¡ì„ ì¢…ë£Œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?\n\n"; + Text[ zh-CN ] = "这个æ“作会ä¸æ–更改记录。\n更改内容就会é—失。\n\n您还是è¦ä¸æ–记录å—?\n\n"; + Text[ zh-TW ] = "這個動作會çµæŸä¿®æ”¹ã€‚\n修改內容就會æµå¤±ã€‚\n\n您還是è¦ç¹¼çºŒï¼Ÿ\n\n"; + Text[ tr ] = "Bu iÅŸlem ile deÄŸiÅŸikliklerin izlenmesi sona erdirilecek.\nDaha önceki deÄŸiÅŸiklikler ile ilgili tüm bilgiler kaybolacak.\n\nKayıt durdurulsun mu?\n\n"; + Text[ hi-IN ] = "इस कारà¥à¤¯ से रेकोरà¥à¤¡à¤¿à¤‚ग पà¥à¤°à¤•à¤¾à¤° को बदलने से निरà¥à¤—म कर सकते है ।\nपरिवरà¥à¤¤à¤¨à¥‹à¤‚ के बारे में कोई सूचना है तो वह नषà¥à¤Ÿ होगा ।\n\nरेकोरà¥à¤¡à¤¿à¤‚ग पà¥à¤°à¤•à¤¾à¤° को बदलने से निरà¥à¤—म करे?\n\n"; + Text[ ar ] = "هذا الإجراء سو٠يؤدي إلى إنهاء عملية تسجيل التغييرات.\nسو٠يؤدي هذا بدوره إلى ضياع المعلومات الخاصة بالتغييرات.\n\nهل تريد إنهاء التسجيل؟\n\n"; + Text[ he ] = "Mit dieser Aktion wird die Aufzeichnung von Änderungen beendet.\nDie Information über Änderungen geht hierdurch verloren.\n\nAufzeichnung beenden?\n\n"; + }; +//STRIP001 String STR_CLOSE_ERROR_LINK +//STRIP001 { +//STRIP001 Text = "Das Dokument kann nicht geschlossen werden, während eine Verknüpfung aktualisiert wird." ; +//STRIP001 Text [ ENGLISH ] = "The document cannot be closed while a link is being updated." ; +//STRIP001 Text [ portuguese ] = "Impossível fechar o documento enquanto a ligação estiver a ser actualizada. " ; +//STRIP001 Text [ english_us ] = "The document can not be closed while a link is being updated." ; +//STRIP001 Text [ portuguese_brazilian ] = "O documento não pode ser fechado enquanto um vínculo est?sendo atualizado." ; +//STRIP001 Text [ swedish ] = "Dokumentet kan inte stängas medan en länk uppdateras." ; +//STRIP001 Text [ danish ] = "Det er ikke muligt at lukke dokumentet, mens en kæde opdateres." ; +//STRIP001 Text [ italian ] = "Impossibile chiudere il documento durante l'aggiornamento di un collegamento." ; +//STRIP001 Text [ spanish ] = "El documento no se puede cerrar mientras se est?actualizando un vínculo." ; +//STRIP001 Text [ french ] = "Impossible de fermer le document durant l'actualisation d'un lien !" ; +//STRIP001 Text [ dutch ] = "Het document kan niet worden gesloten terwijl een verbinding wordt gerealiseerd." ; +//STRIP001 Text[ chinese_simplified ] = "åœ¨æ›´æ–°ä¸€ä¸ªé“¾æŽ¥æ—¶æ— æ³•å…³é—这个文档ã€?"; +//STRIP001 Text[ russian ] = "Çàêðûò?äîêóìåíò âî âðåìÿ îáíîâëåí? ññûëêè íåâîçìîæíî."; +//STRIP001 Text[ polish ] = "Dokumentu nie mo¿na zamkn¹æ podczas aktualizacji ³¹cza."; +//STRIP001 Text[ japanese ] = "リンクã®æ›´æ–°ä¸ã¯ãƒ‰ã‚ュメントを閉ã˜ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã€?"; +//STRIP001 Text[ chinese_traditional ] = "在更新一個æ·å¾‘時無法關閉這個文件ã€?"; +//STRIP001 Text[ arabic ] = "áÇ íãßä ÅÛáÇ?ÇáãÓÊä?Ýí ÇáæÞ?ÇáÐí íÊ?Ýí?ÊÍÏí?ÇÑÊÈÇØ."; +//STRIP001 Text[ greek ] = "Äå?åßíá?äõíáôü?íá êëåßóåôå ôï Ýããñáö?êáèþ?ãßíåôá?åíçìÝñùó?ìéáò óýíäåóçò."; +//STRIP001 Text[ korean ] = "ë§í¬ê°€ ì—…ë°ì´íŠ¸ë˜ëŠ” ë™ì•ˆì—는 문서ë¥?ë‹«ì„ ìˆ?없습니다."; +//STRIP001 Text[ turkish ] = "Belge, baðlant?güncellemesi yapýlýrken kapatýlamaz."; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "No es pot tancar el document mentre s'actualitza un enlla?"; +//STRIP001 Text[ finnish ] = "Asiakirjaa ei voi sulkea, kun linkki?päivitetään."; +//STRIP001 Text[ thai ] = "ไม่สามารถปิดเà¸à¸à¸ªà¸²à¸£à¸‚ณะà¸à¸³à¸¥à¸±à¸‡à¸›à¸£à¸±à¸šà¸›à¸£à¸¸à¸‡à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¹‚ยง"; +//STRIP001 Text[ czech ] = "Dokument nelze zavÅ™Ãt, pokud je aktualizován odkaz."; +//STRIP001 Text[ hebrew ] = "Das Dokument kann nicht geschlossen werden, während eine Verknüpfung aktualisiert wird."; +//STRIP001 Text[ hindi ] = "लिंक को अपडेटॠकरने के समà¤?लेखपतà¥à¤?को बनà¥à¤¦ नहीà¤?कर सकते है à¥?"; +//STRIP001 }; +//STRIP001 String STR_UNDO_RESIZEMATRIX +//STRIP001 { +//STRIP001 Text = "Matrixbereich anpassen" ; +//STRIP001 Text [ ENGLISH ] = "Adjust array formula size" ; +//STRIP001 Text[ italian ] = "Adatta l'area di matrice"; +//STRIP001 Text[ portuguese_brazilian ] = "Adaptar a área da matriz"; +//STRIP001 Text[ portuguese ] = "Adaptar área da matriz"; +//STRIP001 Text[ danish ] = "Tilpas matrixområde"; +//STRIP001 Text[ french ] = "Adapter la plage de la matrice"; +//STRIP001 Text[ swedish ] = "Anpassa matrisområde"; +//STRIP001 Text[ dutch ] = "Matrixbereik aanpassen"; +//STRIP001 Text[ spanish ] = "Adaptar el área de la matriz"; +//STRIP001 Text[ english_us ] = "Adapt array area"; +//STRIP001 Text[ chinese_simplified ] = "调整矩阵区域"; +//STRIP001 Text[ russian ] = "Ïîäáîð îáëàñò?ìàññèâ?"; +//STRIP001 Text[ polish ] = "Dostosuj obszar macierzy"; +//STRIP001 Text[ japanese ] = "行列範囲ã®å¤‰æ›?"; +//STRIP001 Text[ chinese_traditional ] = "調整矩陣å€åŸ?"; +//STRIP001 Text[ arabic ] = "ãáÇÁãÉ äØÇÞ ÇáãÕÝæÝÉ"; +//STRIP001 Text[ greek ] = "ÐñïóáñìïãÞ ðåñéï÷Þò ìÞôñáò"; +//STRIP001 Text[ korean ] = "í–‰ë ¬ 범위 ì¡°ì •"; +//STRIP001 Text[ turkish ] = "Matriks alanýn?ayarla"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Adapta l'àrea de la matriu"; +//STRIP001 Text[ finnish ] = "Sovita taulukkoalue"; +//STRIP001 Text[ thai ] = "ปรับพื้นที่à¹à¸–วลำดัà¸?"; +//STRIP001 Text[ czech ] = "Upravit pole"; +//STRIP001 Text[ hebrew ] = "Matrixbereich anpassen"; +//STRIP001 Text[ hindi ] = "शà¥à¤°à¥‡à¤£à¥€ विसà¥à¤¤à¥€à¤°à¥à¤?सà¥à¤µà¥€à¤•à¤¾à¤?करà¥?"; +//STRIP001 }; +//STRIP001 String STR_TIP_RESIZEMATRIX +//STRIP001 { +//STRIP001 Text = "Matrixformel %1 Z x %2 S" ; +//STRIP001 Text [ ENGLISH ] = "Array formula %1 R x %2 C" ; +//STRIP001 Text[ italian ] = "Formula matrice %1 Z x %2 S"; +//STRIP001 Text[ portuguese_brazilian ] = "Fórmula de matriz %1 L x %2 C"; +//STRIP001 Text[ portuguese ] = "Fórmula matriz %1 Z x %2 S"; +//STRIP001 Text[ danish ] = "Matrixformel %1 R x %2 K"; +//STRIP001 Text[ french ] = "Formule matricielle %1 Lgn x %2 Col"; +//STRIP001 Text[ swedish ] = "Matrisformel %1 R x %2 K"; +//STRIP001 Text[ dutch ] = "Matrixformule %1 r x %2 k"; +//STRIP001 Text[ spanish ] = "Fórmula matriz %1 F x %2 C"; +//STRIP001 Text[ english_us ] = "Array formula %1 R x %2 C"; +//STRIP001 Text[ chinese_simplified ] = "çŸ©é˜µå…¬å¼ %1 è¡?x %2 åˆ?"; +//STRIP001 Text[ russian ] = "Ôîðìóë?ìàòðèö?%1 ?x %2 ?"; +//STRIP001 Text[ polish ] = "Formu³a macierzy %1 Z x %2 S"; +//STRIP001 Text[ japanese ] = "行列å¼?%1 è¡?x %2 åˆ?"; +//STRIP001 Text[ chinese_traditional ] = "çŸ©é™£æ ¼å¼ %1 åˆ?x %2 æ¬?"; +//STRIP001 Text[ arabic ] = "ÕíÛÉ ÇáãÕÝæÝÉ %1 R x %2 C"; +//STRIP001 Text[ greek ] = "Ôýðï?ìÞôñáò %1 ?x %2 ?"; +//STRIP001 Text[ korean ] = "í–‰ë ¬ ìˆ˜ì‹ %1 R x %2 C"; +//STRIP001 Text[ turkish ] = "Matriks formul?%1 Sa x %2 S?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Fórmula matriz %1 F x %2 C"; +//STRIP001 Text[ finnish ] = "Taulukkokaava %1 R x %2 C"; +//STRIP001 Text[ thai ] = "สูตรà¹à¸–วลำดับ %1 R x %2 C"; +//STRIP001 Text[ czech ] = "Maticový vzorec %1 Ř x %2 S"; +//STRIP001 Text[ hebrew ] = "Matrixformel %1 Z x %2 S"; +//STRIP001 Text[ hindi ] = "शà¥à¤°à¥‡à¤£à¥€ सूतà¥à¤? %1 R x %2 C"; +//STRIP001 }; +//STRIP001 String STR_MACRO_WARNING +//STRIP001 { +//STRIP001 Text = "Das Dokument enthält Makro-Aufrufe.\nSollen diese ausgeführt werden?"; +//STRIP001 Text[ENGLISH] = "This document contains macro calls.\nShould they be executed?"; +//STRIP001 Text[ english_us ] = "This document contains macro function calls.\nDo you want to run them?"; +//STRIP001 Text[ portuguese ] = "Este documento contém chamadas de macro.\nDeseja execut?las?"; +//STRIP001 Text[ russian ] = "Ýòîò äîêóìåíò ñîäåðæèò âûçîâû ìàêðîñ?\nÂûïîëíèò?èõ?"; +//STRIP001 Text[ dutch ] = "Dit document bevat macro's.\nWilt u deze uitvoeren?"; +//STRIP001 Text[ french ] = "Ce document contient des appels de macros.\nSouhaitez-vous les exécuter?"; +//STRIP001 Text[ spanish ] = "El documento contiene llamadas de macro.\n¿Desea ejecutarlas?"; +//STRIP001 Text[ italian ] = "Questo documento contiene delle macro.\nVolete eseguirle?"; +//STRIP001 Text[ danish ] = "Dokumentet indeholder makro-opkald.\nSkal de udføres?"; +//STRIP001 Text[ swedish ] = "Dokumentet innehåller makroanrop.\nSkall de utföras?"; +//STRIP001 Text[ polish ] = "Ten dokument zawiera wywo³ania makr.\nCzy maj?one zosta?wykonane?"; +//STRIP001 Text[ portuguese_brazilian ] = "Este documento contém chamadas a funções de macro.\nDeseja execut?las?"; +//STRIP001 Text[ japanese ] = "ã“ã®ãƒ‰ã‚ュメントã«ã¯ãƒžã‚¯ãƒã®å‘¼ã³å‡ºã—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ãれらを実行ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ã€?"; +//STRIP001 Text[ chinese_simplified ] = "这个文档å«æœ‰ä¸€ä¸ªå®æŒ‡ä»¤ã€‚\n您è¦æ‰§è¡Œè¿™ä¸ªå®å—ï¼?"; +//STRIP001 Text[ chinese_traditional ] = "這個文件å«æœ‰ä¸€å€‹å·¨é›†ã€‚\n您è¦åŸ·è¡Œé€™å€‹å·¨é›†ï¼Ÿ"; +//STRIP001 Text[ arabic ] = "ÊæÌÏ ÇÓÊÏÚÇÁÇ?ãÇßÑ?Ýí åÐ?ÇáãÓÊä?\nåá ÊÑíÏ ÊäÝíÐåÇ¿"; +//STRIP001 Text[ greek ] = "Ôï Ýããñáö?áõôü ðåñéÝ÷åé êëÞóåé?åíôïëþ?ìÜêñ?\nÈÝëåôå íá åêôåëåóôïý?áõôÝ?"; +//STRIP001 Text[ korean ] = "ì?문서ëŠ?매í¬ë¡?함수 호출ì?í¬í•¨í•˜ê³ 있습니다 .\nì?매í¬ë¡?호출ì?ì‹¤í–‰í•˜ê² ìŠµë‹ˆê¹?"; +//STRIP001 Text[ turkish ] = "Belge makro iþlev çaðrýlar?içeriyor.\nMakrolar çalýþtýrýlsýn m?"; +//STRIP001 Text[ language_user1 ] = " "; +//STRIP001 Text[ catalan ] = "Aquest document cont?crides de funcions macro.\nVoleu executar-les?"; +//STRIP001 Text[ finnish ] = "Täm?asiakirja sisältää makroja.\nHaluatko suorittaa ne?"; +//STRIP001 Text[ thai ] = "เà¸à¸à¸ªà¸²à¸£à¸™à¸µà¹‰à¸¡à¸µà¸à¸²à¸£à¹€à¸£à¸µà¸¢à¸à¸Ÿà¸±à¸‡à¸à¹Œà¸Šà¸±à¹ˆà¸™à¸¡à¸²à¹‚คร\nคุณต้à¸à¸‡à¸à¸²à¸£à¸£à¸±à¸™à¸«à¸£à¸·à¸à¹„ม่?"; +//STRIP001 Text[ czech ] = "Tento dokument obsahuje volánà makrofunkcÃ.\nChcete je spustit?"; +//STRIP001 Text[ hebrew ] = "Das Dokument enthält Makro-Aufrufe.\nSollen diese ausgeführt werden?"; +//STRIP001 Text[ hindi ] = "इस लेखपतà¥à¤?मेà¤?मॉकà¥à¤°à¥‹ फंकà¥à¤¶à¤¨ बà¥à¤²à¤¾à¤µà¤¾ है ।\nआप इनको चलानà¤?चाहतà¥?है?"; +//STRIP001 }; + /* + String STR_ + { + Text [ de ] = ""; + Text [ en-US ] = ""; + }; +*/ +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/binfilter/bf_sc/source/ui/src/sc_hdrcont.src b/binfilter/bf_sc/source/ui/src/sc_hdrcont.src new file mode 100644 index 000000000000..97cf3a88a882 --- /dev/null +++ b/binfilter/bf_sc/source/ui/src/sc_hdrcont.src @@ -0,0 +1,729 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#define NO_LOCALIZE_EXPORT +#include "bf_sc.hrc" + + + +#define PART1 \ + MenuItem\ + {\ + Identifier = FID_CELL_FORMAT ; \ + HelpId = FID_CELL_FORMAT ; \ + Text [ de ] = "~Zellen formatieren..." ; \ + Text [ en-US ] = "~Format Cells..." ; \ + Text [ x-comment ] = " ";\ + Text[ pt ] = "Formatar células...";\ + Text[ ru ] = "Формат Ñчеек...";\ + Text[ el ] = "ΜοÏφο~ποίηση κελιών...";\ + Text[ nl ] = "~Cellen opmaken...";\ + Text[ fr ] = "Formater les ~cellules...";\ + Text[ es ] = "~Formatear celdas...";\ + Text[ fi ] = "~Muotoile solut...";\ + Text[ ca ] = "~Formata les cel.les...";\ + Text[ it ] = "Formatta celle...";\ + Text[ da ] = "Formater celler...";\ + Text[ sv ] = "Formatera ~celler...";\ + Text[ pl ] = "~Formatuj komórki...";\ + Text[ pt-BR ] = "~Formatar Células...";\ + Text[ th ] = "~รูปà¹à¸šà¸šà¹€à¸‹à¸¥à¸¥à¹Œ...";\ + Text[ ja ] = "セルã®æ›¸å¼è¨å®š(~F)...";\ + Text[ ko ] = "ì…€ ì„œì‹ ì„¤ì •(~F)...";\ + Text[ zh-CN ] = "å•å…ƒæ ¼æ ¼å¼åŒ–(~F)...";\ + Text[ zh-TW ] = "儲å˜æ ¼æ ¼å¼åŒ–(~F)...";\ + Text[ tr ] = "Hücreleri formatla...";\ + Text[ hi-IN ] = "कोषà¥à¤ ों का ~रचना करो...";\ + Text[ ar ] = "...تنسيق الخلايا";\ + Text[ he ] = "~Zellen formatieren...";\ + }; + + +#define PART2 \ + MenuItem\ + {\ + Identifier = SID_CUT ; \ + HelpId = SID_CUT ; \ + Text [ de ] = "Auss~chneiden" ; \ + Text [ en-US ] = "Cu~t" ; \ + /* ### ACHTUNG: Neuer Text in Resource? Die Selektion in die Zwischenablage kopieren und löschen : Die Selektion in die Zwischenablage kopieren und l÷schen */\ + Text [ x-comment ] = " ";\ + Text[ pt ] = "Cortar";\ + Text[ ru ] = "Вырезать";\ + Text[ el ] = "Α~ποκοπή";\ + Text[ nl ] = "K~nippen";\ + Text[ fr ] = "Couper";\ + Text[ es ] = "Co~rtar";\ + Text[ fi ] = "~Leikkaa";\ + Text[ ca ] = "Retal~la";\ + Text[ it ] = "Taglia";\ + Text[ da ] = "Klip";\ + Text[ sv ] = "Klipp ~ut";\ + Text[ pl ] = "Wy~tnij";\ + Text[ pt-BR ] = "Cor~tar";\ + Text[ th ] = "ตั~ด";\ + Text[ ja ] = "切りå–ã‚Š(~T)";\ + Text[ ko ] = "잘ë¼ë‚´ê¸°(~T)";\ + Text[ zh-CN ] = "剪切(~T)";\ + Text[ zh-TW ] = "剪下(~T)";\ + Text[ tr ] = "Ke~s";\ + Text[ hi-IN ] = "का~टो";\ + Text[ ar ] = "قص";\ + Text[ he ] = "‮גזירה‬";\ + };\ + MenuItem\ + {\ + Identifier = SID_COPY ; \ + HelpId = SID_COPY ; \ + Text [ de ] = "Kopie~ren" ; \ + Text [ en-US ] = "~Copy" ; \ + Text [ x-comment ] = " ";\ + Text[ pt ] = "Copiar";\ + Text[ ru ] = "Копировать";\ + Text[ el ] = "Αντι~γÏαφή";\ + Text[ nl ] = "~Kopiëren";\ + Text[ fr ] = "Copier";\ + Text[ es ] = "Co~piar";\ + Text[ fi ] = "K~opioi";\ + Text[ ca ] = "~Copia";\ + Text[ it ] = "Copia";\ + Text[ da ] = "Kopier";\ + Text[ sv ] = "Kopie~ra";\ + Text[ pl ] = "~Kopiuj";\ + Text[ pt-BR ] = "~Copiar";\ + Text[ th ] = "~คัดลà¸à¸";\ + Text[ ja ] = "コピー(~C)";\ + Text[ ko ] = "복사(~C)";\ + Text[ zh-CN ] = "å¤åˆ¶(~C)";\ + Text[ zh-TW ] = "複製(~C)";\ + Text[ tr ] = "~Kopyala";\ + Text[ hi-IN ] = "~पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿";\ + Text[ ar ] = "نسخ";\ + Text[ he ] = "‮העתקה‬";\ + };\ + MenuItem\ + {\ + Identifier = SID_PASTE ; \ + HelpId = SID_PASTE ; \ + /* ### ACHTUNG: Neuer Text in Resource? Einfügen : Einf³gen */\ + Text [ de ] = "E~infügen" ; \ + Text [ en-US ] = "~Paste" ; \ + /* ### ACHTUNG: Neuer Text in Resource? Den Inhalt der Zwischenablage einfügen : Den Inhalt der Zwischenablage einf³gen */\ + Text [ x-comment ] = " ";\ + Text[ pt ] = "Colar";\ + Text[ ru ] = "Ð’ÑÑ‚~авить";\ + Text[ el ] = "Επ~ικόλληση";\ + Text[ nl ] = "~Plakken";\ + Text[ fr ] = "~Insérer";\ + Text[ es ] = "P~egar";\ + Text[ fi ] = "Lii~tä";\ + Text[ ca ] = "~Enganxa";\ + Text[ it ] = "~Incolla";\ + Text[ da ] = "Sæt i~nd";\ + Text[ sv ] = "Klistra ~in";\ + Text[ pl ] = "Wkle~j";\ + Text[ pt-BR ] = "Co~lar";\ + Text[ th ] = "~วาง";\ + Text[ ja ] = "貼り付ã‘(~P)";\ + Text[ ko ] = "붙여넣기(~P)";\ + Text[ zh-CN ] = "粘贴(~P)";\ + Text[ zh-TW ] = "貼上(~P)";\ + Text[ tr ] = "~Yapıştır";\ + Text[ hi-IN ] = "~छिपकाओ";\ + Text[ ar ] = "لصق~";\ + Text[ he ] = "‮הדבקה‬";\ + }; + + //------------------------------------------------------------------------------- + +Menu RID_POPUP_ROWHEADER +{ + ItemList = + { + PART1 + //------------------------------ + MenuItem { Separator = TRUE ; }; + //------------------------------ + MenuItem + { + Identifier = FID_ROW_HEIGHT ; + HelpId = FID_ROW_HEIGHT ; + /* ### ACHTUNG: Neuer Text in Resource? Zeilenhöhe... : Zeilenh÷he... */ + Text [ de ] = "Zeile~nhöhe..." ; + Text [ en-US ] = "Hei~ght..." ; + /* ### ACHTUNG: Neuer Text in Resource? Zeilenhöhe ändern : Zeilenh÷he õndern */ + Text [ x-comment ] = " "; + Text[ pt ] = "Altu~ra da linha..."; + Text[ ru ] = "Ð’Ñ‹Ñота Ñтроки..."; + Text[ el ] = "Ύψος γÏα~μμής..."; + Text[ nl ] = "~Rijhoogte..."; + Text[ fr ] = "Hauteur ~de ligne..."; + Text[ es ] = "~Altura de fila..."; + Text[ fi ] = "~Korkeus..."; + Text[ ca ] = "~Alçada..."; + Text[ it ] = "Altezza riga..."; + Text[ da ] = "Rækkehøjde..."; + Text[ sv ] = "R~adhöjd..."; + Text[ pl ] = "Wyso~kość..."; + Text[ pt-BR ] = "Al~tura..."; + Text[ th ] = "~ความสูง..."; + Text[ ja ] = "è¡Œã®é«˜ã•(~G)..."; + Text[ ko ] = "í–‰ 높ì´(~G)..."; + Text[ zh-CN ] = "行高(~G)..."; + Text[ zh-TW ] = "列高(~G)..."; + Text[ tr ] = "Yüksek~lik..."; + Text[ hi-IN ] = "ऊà¤~चाई..."; + Text[ ar ] = "ارتÙاع الصÙ..."; + Text[ he ] = "‮גובה...‬"; + }; + MenuItem + { + Identifier = FID_ROW_OPT_HEIGHT ; + HelpId = FID_ROW_OPT_HEIGHT ; + /* ### ACHTUNG: Neuer Text in Resource? Optimale Zeilenhöhe... : Optimale Zeilenh÷he... */ + Text [ de ] = "~Optimale Zeilenhöhe..." ; + Text [ en-US ] = "Optimal ~Row Height..." ; + /* ### ACHTUNG: Neuer Text in Resource? Optimale Zeilenhöhe einstellen : Optimale Zeilenh÷he einstellen */ + Text [ x-comment ] = " "; + Text[ pt ] = "~Optimizar altura da linha..."; + Text[ ru ] = "ÐžÐ¿Ñ‚Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð²Ñ‹Ñота Ñтроки..."; + Text[ el ] = "Î’Îλτιστ~ο Ïψος γÏαμμής..."; + Text[ nl ] = "~Optimale rijhoogte..."; + Text[ fr ] = "Hauteur de ligne ~optimale..."; + Text[ es ] = "~Optimar altura de fila..."; + Text[ fi ] = "~Optimaalinen rivikorkeus..."; + Text[ ca ] = "Alçada òptima de la ~fila..."; + Text[ it ] = "Altezza ottimale righe..."; + Text[ da ] = "Optimal rækkehøjde..."; + Text[ sv ] = "~Optimal radhöjd..."; + Text[ pl ] = "Optymalna wysokość ~wierszy..."; + Text[ pt-BR ] = "~Otimizar Altura da Linha..."; + Text[ th ] = "ความยาวà¹~ถวที่เหมาะที่สุด..."; + Text[ ja ] = "最é©ãªè¡Œã®é«˜ã•(~R)..."; + Text[ ko ] = "최ì í–‰ 높ì´(~R)..."; + Text[ zh-CN ] = "最佳高度(~R)..."; + Text[ zh-TW ] = "最é©åˆ—高(~R)..."; + Text[ tr ] = "Optimum ~satır yüksekliÄŸi..."; + Text[ hi-IN ] = "योगà¥à¤¯ ~पंकà¥à¤¤à¤¿ की ऊà¤à¤šà¤¾à¤ˆ..."; + Text[ ar ] = "...الارتÙاع الأمثل للصÙ"; + Text[ he ] = "~Optimale Zeilenhöhe..."; + }; + //------------------------------ + MenuItem { Separator = TRUE ; }; + //------------------------------ + MenuItem + { + Identifier = FID_INS_ROW ; + HelpId = FID_INS_ROW ; + /* ### ACHTUNG: Neuer Text in Resource? Zeilen einfügen : Zeilen einf³gen */ + Text [ de ] = "Zeilen ~einfügen" ; + Text [ en-US ] = "~Insert Rows" ; + /* ### ACHTUNG: Neuer Text in Resource? Ganze Zeilen einfügen : Ganze Zeilen einf³gen */ + Text [ x-comment ] = " "; + Text[ pt ] = "~Inserir linhas"; + Text[ ru ] = "Ð’Ñтавить Ñтроки"; + Text[ el ] = "~Εισαγωγή γÏαμμών"; + Text[ nl ] = "Rijen ~invoegen"; + Text[ fr ] = "I~nsérer des lignes"; + Text[ es ] = "~Insertar filas"; + Text[ fi ] = "~Lisää rivit"; + Text[ ca ] = "~Insereix files"; + Text[ it ] = "Inserisci righe"; + Text[ da ] = "Indsæt rækker"; + Text[ sv ] = "Infoga rad~er"; + Text[ pl ] = "W~staw wiersze"; + Text[ pt-BR ] = "~Inserir Linhas"; + Text[ th ] = "à¹~ทรà¸à¹à¸–ว"; + Text[ ja ] = "è¡Œã®æŒ¿å…¥(~I)"; + Text[ ko ] = "í–‰ 삽입(~I)"; + Text[ zh-CN ] = "æ’入行(~I)"; + Text[ zh-TW ] = "æ’入列(~I)"; + Text[ tr ] = "~Satır ekle"; + Text[ hi-IN ] = "पंकà¥à¤¤à¤¿à¤¯à¥‹à¤‚ को ~जोड़ो"; + Text[ ar ] = "إدراج أسطر"; + Text[ he ] = "Zeilen ~einfügen"; + }; + MenuItem + { + Identifier = SID_DEL_ROWS ; + HelpId = SID_DEL_ROWS ; + /* ### ACHTUNG: Neuer Text in Resource? Zeilen löschen : Zeilen l÷schen */ + Text [ de ] = "Zeilen ~löschen" ; + Text [ en-US ] = "~Delete Rows" ; + /* ### ACHTUNG: Neuer Text in Resource? Ganze Zeilen löschen : Ganze Zeilen l÷schen */ + Text [ x-comment ] = " "; + Text[ pt ] = "E~liminar linhas"; + Text[ ru ] = "Удалить Ñтроки"; + Text[ el ] = "ΔιαγÏαφή γÏαμμών"; + Text[ nl ] = "Rijen ~wissen"; + Text[ fr ] = "~Supprimer des lignes"; + Text[ es ] = "~Borrar filas"; + Text[ fi ] = "~Poista rivit"; + Text[ ca ] = "~Suprimeix les files"; + Text[ it ] = "Elimina righe"; + Text[ da ] = "Slet rækker"; + Text[ sv ] = "Radera ra~der"; + Text[ pl ] = "~UsuÅ„ wiersze"; + Text[ pt-BR ] = "~Excluir Linhas"; + Text[ th ] = "~ลบà¹à¸–ว"; + Text[ ja ] = "è¡Œã®å‰Šé™¤(~D)"; + Text[ ko ] = "í–‰ ì‚ì œ(~D)"; + Text[ zh-CN ] = "åˆ é™¤è¡Œ(~D)"; + Text[ zh-TW ] = "刪除列(~D)"; + Text[ tr ] = "~Satır sil"; + Text[ hi-IN ] = "पंकà¥à¤¤à¤¿à¤¯à¥‹à¤‚ को ~मिटाओ"; + Text[ ar ] = "Øذ٠أسطر"; + Text[ he ] = "Zeilen ~löschen"; + }; + MenuItem + { + Identifier = SID_DELETE ; + HelpId = SID_DELETE ; + /* ### ACHTUNG: Neuer Text in Resource? Inhalte l~öschen... : Inhalte l~÷schen... */ + Text [ de ] = "Inhalte l~öschen..." ; + Text [ en-US ] = "De~lete Contents..." ; + /* ### ACHTUNG: Neuer Text in Resource? Ausgewählte Inhalte löschen (Formeln, Formate etc.) : Ausgewõhlte Inhalte l÷schen (Formeln, Formate etc.) */ + Text [ x-comment ] = " "; + Text[ pt ] = "Eli~minar conteúdos..."; + Text[ ru ] = "Удалить Ñодержимое..."; + Text[ el ] = "ΔιαγÏα~φή πεÏιεχομÎνων..."; + Text[ nl ] = "~Inhoud wissen..."; + Text[ fr ] = "S~upprimer du contenu..."; + Text[ es ] = "~Borrar contenido..."; + Text[ fi ] = "~Poista sisältö..."; + Text[ ca ] = "Su~primeix el contingut..."; + Text[ it ] = "Canc~ella contenuti..."; + Text[ da ] = "Slet indhold..."; + Text[ sv ] = "Radera innehÃ¥~ll..."; + Text[ pl ] = "~UsuÅ„ zawartość..."; + Text[ pt-BR ] = "E~xcluir Conteúdo"; + Text[ th ] = "ล~บเนื้à¸à¸«à¸²..."; + Text[ ja ] = "内容ã®å‰Šé™¤(~L)..."; + Text[ ko ] = "ë‚´ìš© ì‚ì œ(~L)..."; + Text[ zh-CN ] = "åˆ é™¤å†…å®¹(~L)..."; + Text[ zh-TW ] = "刪除內容(~L)..."; + Text[ tr ] = "İçerik~leri sil..."; + Text[ hi-IN ] = "विषयों को मि~टाओ..."; + Text[ ar ] = "...ØØ°Ù Ù…Øتويات"; + Text[ he ] = "Inhalte l~öschen..."; + }; + //------------------------------ + MenuItem { Separator = TRUE ; }; + //------------------------------ + MenuItem + { + Identifier = FID_ROW_HIDE ; + HelpId = FID_ROW_HIDE ; + Text [ de ] = "~Ausblenden" ; + Text [ en-US ] = "~Hide" ; + Text [ x-comment ] = " "; + Text[ pt ] = "O~cultar"; + Text[ ru ] = "Скрыть"; + Text[ el ] = "~ΑπόκÏυψη"; + Text[ nl ] = "~Verbergen"; + Text[ fr ] = "M~asquer"; + Text[ es ] = "Ocultar"; + Text[ fi ] = "~Piilota"; + Text[ ca ] = "~Oculta"; + Text[ it ] = "Nascondi"; + Text[ da ] = "Skjul"; + Text[ sv ] = "~Dölj"; + Text[ pl ] = "~Ukryj"; + Text[ pt-BR ] = "O~cultar"; + Text[ th ] = "~ซ่à¸à¸™"; + Text[ ja ] = "表示ã—ãªã„(~H)"; + Text[ ko ] = "숨기기(~H)"; + Text[ zh-CN ] = "éšå…¥(~H)"; + Text[ zh-TW ] = "隱入(~H)"; + Text[ tr ] = "~Gizle"; + Text[ hi-IN ] = "~छिपाओ"; + Text[ ar ] = "إخÙاء"; + Text[ he ] = "~Ausblenden"; + }; + MenuItem + { + Identifier = FID_ROW_SHOW ; + HelpId = FID_ROW_SHOW ; + Text [ de ] = "Ein~blenden" ; + Text [ en-US ] = "~Show" ; + Text [ x-comment ] = " "; + Text[ pt ] = "~Mostrar"; + Text[ ru ] = "Показать"; + Text[ el ] = "Εμ~φάνιση"; + Text[ nl ] = "~Weergeven"; + Text[ fr ] = "~Afficher"; + Text[ es ] = "~Mostrar"; + Text[ fi ] = "~Näytä"; + Text[ ca ] = "~Mostra"; + Text[ it ] = "Mostra"; + Text[ da ] = "Vis"; + Text[ sv ] = "~Visa"; + Text[ pl ] = "~Pokaż"; + Text[ pt-BR ] = "~Mostrar"; + Text[ th ] = "à¹~สดง"; + Text[ ja ] = "表示ã™ã‚‹(~S)"; + Text[ ko ] = "표시(~S)"; + Text[ zh-CN ] = "显示(~S)"; + Text[ zh-TW ] = "顯示(~S)"; + Text[ tr ] = "~Göster"; + Text[ hi-IN ] = "~दिखाओ"; + Text[ ar ] = "إظهار"; + Text[ he ] = "Ein~blenden"; + }; + //------------------------------ + MenuItem { Separator = TRUE ; }; + //------------------------------ + PART2 + MenuItem + { + Identifier = FID_PASTE_CONTENTS ; + HelpId = FID_PASTE_CONTENTS ; + Text [ de ] = "In~halte einfügen..." ; + Text [ en-US ] = "P~aste Special..." ; + Text [ x-comment ] = " "; + Text[ pt ] = "Colar e~special..."; + Text[ ru ] = "Ð’Ñтавить как..."; + Text[ el ] = "Ειδική επικόλλ~ηση..."; + Text[ nl ] = "Plakken ~speciaal..."; + Text[ fr ] = "Colla~ge spécial..."; + Text[ es ] = "Peg~ado especial..."; + Text[ fi ] = "Liitä ~määräten..."; + Text[ ca ] = "Enganxament ~especial..."; + Text[ it ] = "Incolla ~speciale..."; + Text[ da ] = "Indsæt ind~hold..."; + Text[ sv ] = "Klistra in inne~hÃ¥ll..."; + Text[ pl ] = "Wklej specj~alnie..."; + Text[ pt-BR ] = "Colar ~Especial..."; + Text[ th ] = "วาง~พิเศษ..."; + Text[ ja ] = "å½¢å¼ã‚’é¸æŠžã—ã¦è²¼ã‚Šä»˜ã‘(~A)..."; + Text[ ko ] = "ì„ íƒí•˜ì—¬ 붙여넣기(~A)..."; + Text[ zh-CN ] = "粘贴内容(~A)..."; + Text[ zh-TW ] = "貼上內容(~A)..."; + Text[ tr ] = "Ö~zel yapıştır..."; + Text[ hi-IN ] = "विशेष को छि~पकाओ..."; + Text[ ar ] = "لصق خاص..."; + Text[ he ] = "‮הדבקה מיוחדת‬"; + }; + }; +}; + + //------------------------------------------------------------------- + +Menu RID_POPUP_COLHEADER +{ + ItemList = + { + PART1 + //------------------------------ + MenuItem { Separator = TRUE ; }; + //------------------------------ + MenuItem + { + Identifier = FID_COL_WIDTH ; + HelpId = FID_COL_WIDTH ; + Text [ de ] = "Spalte~nbreite..." ; + Text [ en-US ] = "Col~umn Width..." ; + /* ### ACHTUNG: Neuer Text in Resource? Spaltenbreite ändern : Spaltenbreite õndern */ + Text [ x-comment ] = " "; + Text[ pt ] = "~Largura da coluna..."; + Text[ ru ] = "Ширина Ñтолбцов..."; + Text[ el ] = "Πλάτος σ~τήλης..."; + Text[ nl ] = "~Kolombreedte..."; + Text[ fr ] = "L~argeur de colonne..."; + Text[ es ] = "~Ancho de columna..."; + Text[ fi ] = "~Sarakkeen leveys..."; + Text[ ca ] = "Amplada de la col~umna..."; + Text[ it ] = "Larghezza colonna..."; + Text[ da ] = "Kolonnebredde..."; + Text[ sv ] = "Kolum~nbredd..."; + Text[ pl ] = "Szerokość kol~umny..."; + Text[ pt-BR ] = "Larg~ura da Coluna..."; + Text[ th ] = "ความà¸à¸§à¹‰à¸²à¸‡à¸„à¸à¸¥à¸±à¸¡~น์..."; + Text[ ja ] = "列幅(~U)..."; + Text[ ko ] = "ì—´ 너비(~U)..."; + Text[ zh-CN ] = "列宽(~U)..."; + Text[ zh-TW ] = "欄寬(~U)..."; + Text[ tr ] = "Sü~tun geniÅŸliÄŸi..."; + Text[ hi-IN ] = "सà¥à¤¤à¤‚~ठचौड़ाई..."; + Text[ ar ] = "عرض الأعمدة..."; + Text[ he ] = "Spalte~nbreite..."; + }; + MenuItem + { + Identifier = FID_COL_OPT_WIDTH ; + HelpId = FID_COL_OPT_WIDTH ; + Text [ de ] = "~Optimale Spaltenbreite..." ; + Text [ en-US ] = "O~ptimal Column Width..." ; + Text [ x-comment ] = " "; + Text[ pt ] = "~Optimizar largura da coluna..."; + Text[ ru ] = "ÐžÐ¿Ñ‚Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° Ñтолбца..."; + Text[ el ] = "Î’Îλτιστ~ο πλάτος στήλης..."; + Text[ nl ] = "~Optimale kolombreedte..."; + Text[ fr ] = "Largeur de colonne optimale..."; + Text[ es ] = "~Optimar ancho de columna..."; + Text[ fi ] = "~Optimaalinen sarakkeen leveys..."; + Text[ ca ] = "Amplada ò~ptima de la columna..."; + Text[ it ] = "Larghezza ottimale colonna..."; + Text[ da ] = "Optimal kolonnebredde..."; + Text[ sv ] = "~Optimal kolumnbredd..."; + Text[ pl ] = "O~ptymalna szerokość kolumny..."; + Text[ pt-BR ] = "Otimizar Largura da Col~una..."; + Text[ th ] = "ความà¸à¸§à¹‰à¸²à¸‡à¸„à¸à¸¥à¸±à¸¡à¸™à¹Œ~ที่เหมาะที่สุด..."; + Text[ ja ] = "最é©ãªåˆ—å¹…(~P)..."; + Text[ ko ] = "최ì ì—´ 너비(~P)..."; + Text[ zh-CN ] = "最佳列宽(~P)..."; + Text[ zh-TW ] = "最é©æ¬„寬(~P)..."; + Text[ tr ] = "O~ptimum sütun geniÅŸliÄŸi..."; + Text[ hi-IN ] = "O~ptimal Column Width..."; + Text[ ar ] = "العرض الأمثل للعمود..."; + Text[ he ] = "~Optimale Spaltenbreite..."; + }; + //------------------------------ + MenuItem { Separator = TRUE ; }; + //------------------------------ + MenuItem + { + Identifier = FID_INS_COLUMN ; + HelpId = FID_INS_COLUMN ; + /* ### ACHTUNG: Neuer Text in Resource? Spalten einfügen : Spalten einf³gen */ + Text [ de ] = "Spalten ~einfügen" ; + Text [ en-US ] = "~Insert Columns" ; + /* ### ACHTUNG: Neuer Text in Resource? Ganze Spalten einfügen : Ganze Spalten einf³gen */ + Text [ x-comment ] = " "; + Text[ pt ] = "~Inserir colunas"; + Text[ ru ] = "Ð’Ñтавить Ñтолбцы"; + Text[ el ] = "~Εισαγωγή στηλών"; + Text[ nl ] = "~Kolommen invoegen"; + Text[ fr ] = "I~nsérer des colonnes"; + Text[ es ] = "~Insertar columnas"; + Text[ fi ] = "~Lisää sarakkeet"; + Text[ ca ] = "~Insereix columnes"; + Text[ it ] = "Inserisci colonne"; + Text[ da ] = "Indsæt kolonner"; + Text[ sv ] = "Infoga ~kolumner"; + Text[ pl ] = "W~staw kolumny"; + Text[ pt-BR ] = "~Inserir Colunas"; + Text[ th ] = "à¹~ทรà¸à¸„à¸à¸¥à¸±à¸¡à¸™à¹Œ"; + Text[ ja ] = "列ã®æŒ¿å…¥(~I)"; + Text[ ko ] = "ì—´ 삽입(~I)"; + Text[ zh-CN ] = "æ’入列(~I)"; + Text[ zh-TW ] = "æ’入欄(~I)"; + Text[ tr ] = "~Sütun ekle"; + Text[ hi-IN ] = "सà¥à¤¤à¤‚ठ~जोड़ो"; + Text[ ar ] = "إدراج أعمدة"; + Text[ he ] = "Spalten ~einfügen"; + }; + MenuItem + { + Identifier = SID_DEL_COLS ; + HelpId = SID_DEL_COLS ; + /* ### ACHTUNG: Neuer Text in Resource? Spalten löschen : Spalten l÷schen */ + Text [ de ] = "Spalten ~löschen" ; + Text [ en-US ] = "~Delete Columns" ; + /* ### ACHTUNG: Neuer Text in Resource? Ganze Spalten löschen : Ganze Spalten l÷schen */ + Text [ x-comment ] = " "; + Text[ pt ] = "Eliminar ~colunas"; + Text[ ru ] = "Удалить Ñтолбцы"; + Text[ el ] = "ΔιαγÏαφή στη~λών"; + Text[ nl ] = "K~olommen wissen"; + Text[ fr ] = "S~upprimer des colonnes"; + Text[ es ] = "~Borrar columnas"; + Text[ fi ] = "~Poista sarakkeet"; + Text[ ca ] = "~Suprimeix les columnes"; + Text[ it ] = "Elimina colonne"; + Text[ da ] = "Slet kolonner"; + Text[ sv ] = "Radera ko~lumner"; + Text[ pl ] = "~UsuÅ„ kolumny"; + Text[ pt-BR ] = "Exclui~r Colunas"; + Text[ th ] = "~ลบคà¸à¸¥à¸±à¸¡à¸™à¹Œ"; + Text[ ja ] = "列ã®å‰Šé™¤(~D)"; + Text[ ko ] = "ì—´ ì‚ì œ(~D)"; + Text[ zh-CN ] = "åˆ é™¤åˆ—(~D)"; + Text[ zh-TW ] = "刪除欄(~D)"; + Text[ tr ] = "~Sütun sil"; + Text[ hi-IN ] = "सà¥à¤¤à¤‚ठ~मिटाओ"; + Text[ ar ] = "Øذ٠أعمدة"; + Text[ he ] = "Spalten ~löschen"; + }; + MenuItem + { + Identifier = SID_DELETE ; + HelpId = SID_DELETE ; + /* ### ACHTUNG: Neuer Text in Resource? Inhalte l~öschen... : Inhalte l~÷schen... */ + Text [ de ] = "Inhalte l~öschen..." ; + Text [ en-US ] = "D~elete Contents..." ; + /* ### ACHTUNG: Neuer Text in Resource? Ausgewählte Inhalte löschen (Formeln, Formate etc.) : Ausgewõhlte Inhalte l÷schen (Formeln, Formate etc.) */ + Text [ x-comment ] = " "; + Text[ pt ] = "Eliminar co~nteúdos..."; + Text[ ru ] = "Удалить Ñодержимое..."; + Text[ el ] = "ΔιαγÏα~φή πεÏιεχομÎνων..."; + Text[ nl ] = "In~houd wissen..."; + Text[ fr ] = "~Supprimer du contenu..."; + Text[ es ] = "~Borrar contenido..."; + Text[ fi ] = "Pois~ta sisältö..."; + Text[ ca ] = "S~uprimeix el contingut..."; + Text[ it ] = "Can~cella contenuti..."; + Text[ da ] = "Slet indhold..."; + Text[ sv ] = "Radera ~innehÃ¥ll..."; + Text[ pl ] = "~UsuÅ„ zawartość..."; + Text[ pt-BR ] = "Excluir Co~nteúdo..."; + Text[ th ] = "ล~บเนื้à¸à¸«à¸²..."; + Text[ ja ] = "内容ã®å‰Šé™¤(~E)..."; + Text[ ko ] = "ë‚´ìš© ì‚ì œ(~E)..."; + Text[ zh-CN ] = "åˆ é™¤å†…å®¹(~E)..."; + Text[ zh-TW ] = "刪除內容(~E)..."; + Text[ tr ] = "Ä°~çerikleri sil..."; + Text[ hi-IN ] = "विषयों को मि~टाओ..."; + Text[ ar ] = "ØØ°Ù Ù…Øتويات..."; + Text[ he ] = "Inhalte l~öschen..."; + }; + //------------------------------ + MenuItem { Separator = TRUE ; }; + //------------------------------ + MenuItem + { + Identifier = FID_COL_HIDE ; + HelpId = FID_COL_HIDE ; + Text [ de ] = "~Ausblenden" ; + Text [ en-US ] = "~Hide" ; + Text [ x-comment ] = " "; + Text[ pt ] = "O~cultar"; + Text[ ru ] = "Скрыть"; + Text[ el ] = "~ΑπόκÏυψη"; + Text[ nl ] = "~Verbergen"; + Text[ fr ] = "~Masquer"; + Text[ es ] = "Ocultar"; + Text[ fi ] = "~Piilota"; + Text[ ca ] = "~Oculta"; + Text[ it ] = "Nascondi"; + Text[ da ] = "Skjul"; + Text[ sv ] = "~Dölj"; + Text[ pl ] = "~Ukryj"; + Text[ pt-BR ] = "Ocult~ar"; + Text[ th ] = "~ซ่à¸à¸™"; + Text[ ja ] = "表示ã—ãªã„(~H)"; + Text[ ko ] = "숨기기(~H)"; + Text[ zh-CN ] = "éšå…¥(~H)"; + Text[ zh-TW ] = "隱入(~H)"; + Text[ tr ] = "~Gizle"; + Text[ hi-IN ] = "~छिपाओ"; + Text[ ar ] = "إخÙاء"; + Text[ he ] = "~Ausblenden"; + }; + MenuItem + { + Identifier = FID_COL_SHOW ; + HelpId = FID_COL_SHOW ; + Text [ de ] = "Ein~blenden" ; + Text [ en-US ] = "~Show" ; + Text [ x-comment ] = " "; + Text[ pt ] = "~Mostrar"; + Text[ ru ] = "Показать"; + Text[ el ] = "Εμ~φάνιση"; + Text[ nl ] = "~Weergeven"; + Text[ fr ] = "A~fficher"; + Text[ es ] = "~Mostrar"; + Text[ fi ] = "~Näytä"; + Text[ ca ] = "~Mostra"; + Text[ it ] = "Mostra"; + Text[ da ] = "Vis"; + Text[ sv ] = "~Visa"; + Text[ pl ] = "~Pokaż"; + Text[ pt-BR ] = "Mo~strar"; + Text[ th ] = "à¹~สดง"; + Text[ ja ] = "表示ã™ã‚‹(~S)"; + Text[ ko ] = "표시(~S)"; + Text[ zh-CN ] = "显示(~S)"; + Text[ zh-TW ] = "顯示(~S)"; + Text[ tr ] = "~Göster"; + Text[ hi-IN ] = "~दिखाओ"; + Text[ ar ] = "إظهار"; + Text[ he ] = "Ein~blenden"; + }; + //------------------------------ + MenuItem { Separator = TRUE ; }; + //------------------------------ + PART2 + MenuItem + { + Identifier = FID_PASTE_CONTENTS ; + HelpId = FID_PASTE_CONTENTS ; + Text [ de ] = "In~halte einfügen..." ; + Text [ en-US ] = "Paste ~Special..." ; + Text [ x-comment ] = " "; + Text[ pt ] = "Colar e~special..."; + Text[ ru ] = "Ð’Ñтавить как..."; + Text[ el ] = "Ειδική επικόλλ~ηση..."; + Text[ nl ] = "Plakken ~speciaal..."; + Text[ fr ] = "Colla~ge spécial..."; + Text[ es ] = "Peg~ado especial..."; + Text[ fi ] = "Liitä ~määräten..."; + Text[ ca ] = "Enganxament ~especial..."; + Text[ it ] = "Incolla ~speciale..."; + Text[ da ] = "Indsæt ind~hold..."; + Text[ sv ] = "Klistra in inne~hÃ¥ll..."; + Text[ pl ] = "Wklej ~specjalnie..."; + Text[ pt-BR ] = "Colar ~Especial..."; + Text[ th ] = "วาง~พิเศษ..."; + Text[ ja ] = "å½¢å¼ã‚’é¸æŠžã—ã¦è²¼ã‚Šä»˜ã‘(~S)..."; + Text[ ko ] = "ì„ íƒí•˜ì—¬ 붙여넣기(~S)..."; + Text[ zh-CN ] = "粘贴内容(~S)..."; + Text[ zh-TW ] = "貼上內容(~S)..."; + Text[ tr ] = "~Özel yapıştır..."; + Text[ hi-IN ] = "~विशेष को छिपकाओ..."; + Text[ ar ] = "لصق خاص..."; + Text[ he ] = "‮הדבקה מיוחדת...‬"; + }; + }; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/binfilter/bf_sc/source/ui/src/sc_pseudo.src b/binfilter/bf_sc/source/ui/src/sc_pseudo.src new file mode 100644 index 000000000000..0c3bc01181cf --- /dev/null +++ b/binfilter/bf_sc/source/ui/src/sc_pseudo.src @@ -0,0 +1,252 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#define NO_LOCALIZE_EXPORT + + + + + + + + + + + + + + + + + +#include <bf_svx/svxids.hrc> + +/* +SfxSlotInfo SID_DRAW_LINE +{ + Slotname [ de ] = "ZeichnenLinie" ; + HelpText [ de ] = "Zeichnen einer Linie" ; + Slotname [ en-US ] = "DrawLine" ; + HelpText [ en-US ] = "Draw a line" ; + Slotname [ de ] = "ZeichnenLinie" ; +}; +SfxSlotInfo SID_DRAW_RECT +{ + Slotname [ de ] = "ZeichnenRechteck" ; + HelpText [ de ] = "Zeichnen eines Rechtecks" ; + Slotname [ en-US ] = "DrawRectangle" ; + HelpText [ en-US ] = "Draw a rectangle" ; + Slotname [ de ] = "ZeichnenRechteck" ; +}; +SfxSlotInfo SID_DRAW_ELLIPSE +{ + Slotname [ de ] = "ZeichnenEllipse" ; + HelpText [ de ] = "Zeichnen einer Ellipse" ; + Slotname [ en-US ] = "DrawEllipse" ; + HelpText [ en-US ] = "Draw ellipse" ; + Slotname [ de ] = "ZeichnenEllipse" ; +}; +SfxSlotInfo SID_DRAW_POLYGON +{ + Slotname [ de ] = "ZeichnenPolygon" ; + HelpText [ de ] = "Zeichnen eines Polygons" ; + Slotname [ en-US ] = "DrawPolygon" ; + HelpText [ en-US ] = "Draw a polygon" ; + Slotname [ de ] = "ZeichnenPolygon" ; +}; +SfxSlotInfo SID_DRAW_ARC +{ + Slotname [ de ] = "ZeichnenBogen" ; + HelpText [ de ] = "Zeichnen eines Kreisbogens" ; + Slotname [ en-US ] = "DrawArc" ; + HelpText [ en-US ] = "Draw an arc" ; + Slotname [ de ] = "ZeichnenBogen" ; +}; +SfxSlotInfo SID_DRAW_PIE +{ + Slotname [ de ] = "ZeichnenKreissegment" ; + HelpText [ de ] = "Zeichnen eines Kreissegments" ; + Slotname [ en-US ] = "DrawCirclePie" ; + HelpText [ en-US ] = "Draws Circle Pies" ; + Slotname [ de ] = "ZeichnenKreissegment" ; +}; +SfxSlotInfo SID_DRAW_CIRCLECUT +{ + Slotname [ de ] = "ZeichnenKreisabschnitt" ; + HelpText [ de ] = "Zeichnen eines Kreisabschnitts" ; + Slotname [ en-US ] = "DrawEllipseSection" ; + HelpText [ en-US ] = "Draw Circle Section" ; + Slotname [ de ] = "ZeichnenKreisabschnitt" ; +}; +SfxSlotInfo SID_DRAW_TEXT +{ + Slotname [ de ] = "ZeichnenText" ; + HelpText [ de ] = "Eingabe von Zeichentext" ; + Slotname [ en-US ] = "DrawText" ; + HelpText [ en-US ] = "Insert draw text" ; + Slotname [ de ] = "ZeichnenText" ; +}; +SfxSlotInfo SID_DRAW_CAPTION +{ + Slotname [ de ] = "ZeichnenLegende" ; + HelpText [ de ] = "Legende einfügen" ; + Slotname [ en-US ] = "DrawLegend" ; + HelpText [ en-US ] = "Insert a legend" ; + Slotname [ de ] = "ZeichnenLegende" ; +}; + + + + +SfxSlotInfo SID_INSERT_PUSHBUTTON +{ + Slotname [ de ] = "EinfügenPushbutton" ; + HelpText [ de ] = "Einfügen eines Pushbuttons" ; + Slotname [ en-US ] = "InsertPushButton" ; + HelpText [ en-US ] = "Insert a push button" ; + Slotname [ de ] = "EinfügenPushbutton" ; +}; +SfxSlotInfo SID_INSERT_CHECKBOX +{ + Slotname [ de ] = "EinfügenCheckbox" ; + HelpText [ de ] = "Einfügen einer Checkbox" ; + Slotname [ en-US ] = "InsertCheckbox" ; + HelpText [ en-US ] = "Insert a checkbox" ; + Slotname [ de ] = "EinfügenCheckbox" ; +}; +SfxSlotInfo SID_INSERT_RADIOBUTTON +{ + Slotname [ de ] = "EinfügenRadiobutton" ; + HelpText [ de ] = "Einfügen eines Radiobutton" ; + Slotname [ en-US ] = "InsertRadiobutton" ; + HelpText [ en-US ] = "Insert a radio button" ; + Slotname [ de ] = "EinfügenRadiobutton" ; +}; +SfxSlotInfo SID_INSERT_SPINBUTTON +{ + Slotname [ de ] = "EinfügenSpinbutton" ; + HelpText [ de ] = "Einfügen eines Spinbutton" ; + Slotname [ en-US ] = "InsertSpinbutton" ; + HelpText [ en-US ] = "Insert a spin button" ; + Slotname [ de ] = "EinfügenSpinbutton" ; +}; +SfxSlotInfo SID_INSERT_FIXEDTEXT +{ + Slotname [ de ] = "EinfügenFixedtext" ; + HelpText [ de ] = "Einfügen eines Fixedtexts" ; + Slotname [ en-US ] = "InsertFixedText" ; + HelpText [ en-US ] = "Insert a fixed text" ; + Slotname [ de ] = "EinfügenFixedtext" ; +}; +SfxSlotInfo SID_INSERT_GROUPBOX +{ + Slotname [ de ] = "EinfügenGroupbox" ; + HelpText [ de ] = "Einfügen einer Groupbox" ; + Slotname [ en-US ] = "InsertGroupbox" ; + HelpText [ en-US ] = "Insert a groupbox" ; + Slotname [ de ] = "EinfügenGroupbox" ; +}; + +SfxSlotInfo SID_INSERT_LISTBOX +{ + Slotname [ de ] = "EinfügenListbox" ; + HelpText [ de ] = "Einfügen einer Listbox" ; + Slotname [ en-US ] = "InsertListbox" ; + HelpText [ en-US ] = "Insert a listbox" ; + Slotname [ de ] = "EinfügenListbox" ; +}; +SfxSlotInfo SID_INSERT_COMBOBOX +{ + Slotname [ de ] = "EinfügenCombobox" ; + HelpText [ de ] = "Einfügen einer Combobox" ; + Slotname [ en-US ] = "InsertCombobox" ; + HelpText [ en-US ] = "Insert a combobox" ; + Slotname [ de ] = "EinfügenCombobox" ; +}; +SfxSlotInfo SID_INSERT_EDIT +{ + Slotname [ de ] = "EinfügenEdit" ; + HelpText [ de ] = "Einfügen eines Edits" ; + Slotname [ en-US ] = "InsertEdit" ; + HelpText [ en-US ] = "Insert an edit field" ; + Slotname [ de ] = "EinfügenEdit" ; +}; +SfxSlotInfo SID_INSERT_HSCROLLBAR +{ + Slotname [ de ] = "EinfügenHScrollbar" ; + HelpText [ de ] = "Einfügen eines horizontalen Scrollbars" ; + Slotname [ en-US ] = "InsertHScrollbar" ; + HelpText [ en-US ] = "Insert a horizontal scrollbar" ; + Slotname [ de ] = "EinfügenHScrollbar" ; +}; +SfxSlotInfo SID_INSERT_VSCROLLBAR +{ + Slotname [ de ] = "EinfügenVScrollbar" ; + HelpText [ de ] = "Einfügen eines vertikalen Scrollbars" ; + Slotname [ en-US ] = "InsertVScrollbar" ; + HelpText [ en-US ] = "Insert a vertical scrollbar" ; + Slotname [ de ] = "EinfügenVScrollbar" ; +}; +SfxSlotInfo SID_INSERT_PREVIEW +{ + Slotname [ de ] = "Preview" ; + HelpText [ de ] = "Preview" ; + Slotname [ en-US ] = "Preview" ; + HelpText [ en-US ] = "Preview" ; + Slotname [ de ] = "Preview" ; +}; + + + + +SfxSlotInfo SID_INSERT_URLBUTTON +{ + Slotname [ de ] = "EinfügenURLButton" ; + HelpText [ de ] = "Einfügen eines URL-Buttons" ; + Slotname [ en-US ] = "InsertURLButton" ; + HelpText [ en-US ] = "Insert a URL button" ; + Slotname [ de ] = "EinfügenURLButton" ; +}; +*/ + + + + + + + + + + + + + + + + + + + diff --git a/binfilter/bf_sc/source/ui/src/sc_sc.src b/binfilter/bf_sc/source/ui/src/sc_sc.src new file mode 100644 index 000000000000..dd443d6df892 --- /dev/null +++ b/binfilter/bf_sc/source/ui/src/sc_sc.src @@ -0,0 +1,94 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#define NO_LOCALIZE_EXPORT + + +#include "bf_sc.hrc" // -> #include <sfx.hrc> + + + + // Version und App-Titel------------------------------------------------------ + +String RID_BUILDVERSION +{ + Text = UPDVER ; +}; + +String RID_APPTITLE +{ + /* ### ACHTUNG: Neuer Text in Resource? StarCalc 4.0 : StarCalc 3.1 */ + Text [ de ] = "%PRODUCTNAME Calc" ; + Text [ en-US ] = "%PRODUCTNAME Calc" ; + Text [ x-comment ] = " "; + Text[ pt ] = "%PRODUCTNAME Calc"; + Text[ ru ] = "%PRODUCTNAME Calc"; + Text[ el ] = "%PRODUCTNAME Calc"; + Text[ nl ] = "%PRODUCTNAME Calc"; + Text[ fr ] = "%PRODUCTNAME Calc"; + Text[ es ] = "%PRODUCTNAME Calc"; + Text[ fi ] = "%PRODUCTNAME Calc"; + Text[ ca ] = "%PRODUCTNAME Calc"; + Text[ it ] = "%PRODUCTNAME Calc"; + Text[ da ] = "%PRODUCTNAME Calc"; + Text[ sv ] = "%PRODUCTNAME Calc"; + Text[ pl ] = "%PRODUCTNAME Calc"; + Text[ pt-BR ] = "%PRODUCTNAME Calc"; + Text[ th ] = "%PRODUCTNAME Calc"; + Text[ ja ] = "%PRODUCTNAME Calc"; + Text[ ko ] = "%PRODUCTNAME Calc"; + Text[ zh-CN ] = "%PRODUCTNAME Calc"; + Text[ zh-TW ] = "%PRODUCTNAME Calc"; + Text[ tr ] = "%PRODUCTNAME Calc"; + Text[ hi-IN ] = "%PRODUCTNAME गणना"; + Text[ ar ] = "%PRODUCTNAME Calc"; + Text[ he ] = "%PRODUCTNAME Calc"; +}; + + // About-Dialog -------------------------------------------------------------- + + // Icons & Bitmaps: ---------------------------------------------------------- + + + + + + + // ??? +String 30001 { Text = "Dummy1" ; }; +String 30002 { Text = "Dummy2" ; }; + + + + + + + + + + + + diff --git a/binfilter/bf_sc/source/ui/src/sc_scerrors.src b/binfilter/bf_sc/source/ui/src/sc_scerrors.src new file mode 100644 index 000000000000..01e3b559a119 --- /dev/null +++ b/binfilter/bf_sc/source/ui/src/sc_scerrors.src @@ -0,0 +1,530 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#define NO_LOCALIZE_EXPORT +#define __RSC +#include "scerrors.hxx" +#include "bf_sc.hrc" + +#ifndef _ERRCODE_HXX //autogen +#include <tools/errcode.hxx> +#endif + +#define SH_MAX 0x7fff + +Resource RID_ERRHDLSC +{ + //------------------------------------------------------------ + // ERRORS ----------------------------------------------------- + //------------------------------------------------------------ + String SCERR_IMPORT_CONNECT & SH_MAX + { + Text [ de ] = "Es konnte keine Verbindung zu der Datei hergestellt werden." ; + Text [ en-US ] = "Impossible to connect to the file." ; + Text [ x-comment ] = " "; + Text[ pt ] = "Não foi possÃvel estabelecer ligação com o ficheiro."; + Text[ ru ] = "Ðевозможно уÑтановить Ñоединение Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð¼."; + Text[ el ] = "Δεν ήταν δυνατόν να γίνει σÏνδεση με το αÏχείο."; + Text[ nl ] = "Er kan geen verbinding met het bestand tot stand worden gebracht."; + Text[ fr ] = "Impossible d'établir un lien avec le fichier."; + Text[ es ] = "No se pudo establecer conexión con el archivo."; + Text[ fi ] = "Tiedostoon yhdistäminen ei ole mahdollista."; + Text[ ca ] = "És impossible connectar-se al fitxer."; + Text[ it ] = "Impossibile stabilire il collegamento con il file"; + Text[ da ] = "Det var ikke muligt at oprette en forbindelse til filen."; + Text[ sv ] = "Det gick inte att upprätta en förbindelse till filen."; + Text[ pl ] = "Nie można utworzyć poÅ‚Ä…czenia z plikiem."; + Text[ pt-BR ] = "Não foi possÃvel conectar com o arquivo."; + Text[ th ] = "ติดต่à¸à¸à¸±à¸šà¹à¸Ÿà¹‰à¸¡à¹„ม่ได้"; + Text[ ja ] = "ファイルã¸ã®æŽ¥ç¶šã¯ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"; + Text[ ko ] = "파ì¼ë¡œ ì—°ê²°í• ìˆ˜ 없습니다."; + Text[ zh-CN ] = "æ— æ³•è¿žæŽ¥è¿™ä¸ªæ–‡ä»¶ã€‚"; + Text[ zh-TW ] = "無法連çµé€™å€‹æª”案。"; + Text[ tr ] = "Dosya ile baÄŸlantı oluÅŸturulamadı."; + Text[ hi-IN ] = "फाइल को कनेकà¥à¤Ÿ करना असंà¤à¤µ है ।"; + Text[ ar ] = "تعذر الاتصال بالملÙ."; + Text[ he ] = "Es konnte keine Verbindung zu der Datei hergestellt werden."; + }; + String SCERR_IMPORT_OPEN & SH_MAX + { + /* ### ACHTUNG: Neuer Text in Resource? Die Datei konnte nicht geöffnet werden. : Die Datei konnte nicht ge÷ffnet werden. */ + Text [ de ] = "Die Datei konnte nicht geöffnet werden." ; + Text [ en-US ] = "File could not be opened." ; + Text [ x-comment ] = " "; + Text[ pt ] = "ImpossÃvel abrir o ficheiro."; + Text[ ru ] = "Ðевозможно открыть файл."; + Text[ el ] = "Δεν ήταν δυνατόν να ανοιχθεί το αÏχείο."; + Text[ nl ] = "Het bestand kan niet worden geopend."; + Text[ fr ] = "Impossible d'ouvrir le fichier."; + Text[ es ] = "No se pudo abrir el archivo."; + Text[ fi ] = "Tiedostoa ei voitu avata."; + Text[ ca ] = "No s'ha pogut obrir el fitxer."; + Text[ it ] = "Impossibile aprire il file."; + Text[ da ] = "Det var ikke muligt at Ã¥bne filen."; + Text[ sv ] = "Filen kunde inte öppnas."; + Text[ pl ] = "Nie można otworzyć pliku."; + Text[ pt-BR ] = "Não foi possÃvel abrir o arquivo."; + Text[ th ] = "ไม่สามารถเปิดà¹à¸Ÿà¹‰à¸¡à¹„ด้"; + Text[ ja ] = "ファイルを開ãã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"; + Text[ ko ] = "파ì¼ì„ 열지 못했습니다."; + Text[ zh-CN ] = "æ— æ³•æ‰“å¼€è¿™ä¸ªæ–‡ä»¶ã€‚"; + Text[ zh-TW ] = "無法開啟這個檔案。"; + Text[ tr ] = "Dosya açılamadı."; + Text[ hi-IN ] = "फाइल को नहीं खोल सकते है ।"; + Text[ ar ] = "تعذر ÙØªØ Ø§Ù„Ù…Ù„Ù."; + Text[ he ] = "Die Datei konnte nicht geöffnet werden."; + }; + String SCERR_IMPORT_UNKNOWN & SH_MAX + { + Text [ de ] = "Ein unbekannter Fehler ist aufgetreten." ; + Text [ en-US ] = "An unknown error has occurred." ; + Text [ x-comment ] = " "; + Text[ pt ] = "Surgiu um erro desconhecido."; + Text[ ru ] = "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°."; + Text[ el ] = "ΠαÏουσιάστηκε άγνωστο σφάλμα."; + Text[ nl ] = "Er is een onbekende fout opgetreden"; + Text[ fr ] = "Une erreur inconnue est survenue."; + Text[ es ] = "Ha ocurrido un error desconocido."; + Text[ fi ] = "Ilmeni tuntematon virhe."; + Text[ ca ] = "S'ha produït un error desconegut."; + Text[ it ] = "Si è verificato un errore non definito."; + Text[ da ] = "Der opstod en ukendt fejl."; + Text[ sv ] = "Det har uppstÃ¥tt ett okänt fel."; + Text[ pl ] = "WystÄ…piÅ‚ nieznany bÅ‚Ä…d."; + Text[ pt-BR ] = "Ocorreu um erro desconhecido."; + Text[ th ] = "เà¸à¸´à¸”ความผิดพลาดที่ไม่รู้จัà¸"; + Text[ ja ] = "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"; + Text[ ko ] = "ì•Œ 수 없는 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."; + Text[ zh-CN ] = "å‘生一个ä¸æ˜Žçš„错误。"; + Text[ zh-TW ] = "發生一個ä¸æ˜Žçš„錯誤。"; + Text[ tr ] = "Bilinmeyen hata oluÅŸtu."; + Text[ hi-IN ] = "अजà¥à¤žà¤¾à¤¤ पà¥à¤°à¤•à¤¾à¤° का गलती घटित हà¥à¤† ।"; + Text[ ar ] = "Øدث خطأ غير معروÙ."; + Text[ he ] = "Ein unbekannter Fehler ist aufgetreten."; + }; + String SCERR_IMPORT_FORMAT & SH_MAX + { + Text [ de ] = "Fehler in Dateistruktur beim Importieren." ; + Text [ en-US ] = "Error in file structure while importing." ; + Text [ x-comment ] = " "; + Text[ pt ] = "Erro na estrutura do ficheiro ao importar."; + Text[ ru ] = "Ошибка Ñтруктуры файла при оÑущеÑтвлении импорта."; + Text[ el ] = "Σφάλμα στη δομή του αÏχείου κατά την εισαγωγή."; + Text[ nl ] = "Fout in bestandstructuur bij importeren"; + Text[ fr ] = "Erreur dans la structure du fichier lors de l'import."; + Text[ es ] = "Error en la estructura del archivo al importar."; + Text[ fi ] = "Virhe tiedostorakenteessa tietoja tuotaessa."; + Text[ ca ] = "S'ha produït un error en l'estructura del fitxer durant la importació."; + Text[ it ] = "Errore nella struttura del file durante l'importazione"; + Text[ da ] = "Fejl i filstrukturen ved import."; + Text[ sv ] = "Fel i filstruktur vid import."; + Text[ pl ] = "BÅ‚Ä…d w strukturze pliku podczas importowania."; + Text[ pt-BR ] = "Erro na estrutura do arquivo ao importar."; + Text[ th ] = "ข้à¸à¸œà¸´à¸”พลาดในโครงสร้างà¹à¸Ÿà¹‰à¸¡à¸‚ณะนำเข้า"; + Text[ ja ] = "インãƒãƒ¼ãƒˆæ™‚ã®ãƒ•ã‚¡ã‚¤ãƒ«æ§‹é€ ã§ã®ã‚¨ãƒ©ãƒ¼ã€‚"; + Text[ ko ] = "ê°€ì ¸ì˜¤ê¸° 실행 중 íŒŒì¼ êµ¬ì¡°ì—ì„œ 오류"; + Text[ zh-CN ] = "在输入时å‘生文件结构错误。"; + Text[ zh-TW ] = "匯入時發生檔案çµæ§‹éŒ¯èª¤ã€‚"; + Text[ tr ] = "İçe aktarma iÅŸleminde dosya yapısında hata."; + Text[ hi-IN ] = "आयात करने के समय फाइल बनावट में गलती ।"; + Text[ ar ] = "Øدث خطأ ÙÙŠ بنية المل٠أثناء الاستيراد."; + Text[ he ] = "Fehler in Dateistruktur beim Importieren."; + }; + String SCERR_IMPORT_NI & SH_MAX + { + /* ### ACHTUNG: Neuer Text in Resource? Für diesen Dateityp ist kein Filter implementiert. : F³r diesen Dateityp ist kein Filter implementiert. */ + Text [ de ] = "Für diesen Dateityp ist kein Filter implementiert." ; + Text [ en-US ] = "There is no filter available for this file type." ; + Text [ x-comment ] = " "; + Text[ pt ] = "Não há filtro implementado para este tipo de ficheiro."; + Text[ ru ] = "Ðет фильтра Ð´Ð»Ñ Ñтого типа файла."; + Text[ el ] = "Δεν υπάÏχει φίλτÏο διαθÎσιμο για αυτόν τον Ï„Ïπο αÏχείων."; + Text[ nl ] = "Voor dit bestandstype is geen filter beschikbaar."; + Text[ fr ] = "Aucun filtre disponible pour ce type de fichier."; + Text[ es ] = "Para este tipo de archivo no hay ningún filtro implementado."; + Text[ fi ] = "Tälle tiedostotyypille ei ole suodatusta."; + Text[ ca ] = "No hi ha cap filtre disponible per a aquest tipus de fitxer."; + Text[ it ] = "Per questo tipo di file non è stato implementato nessun filtro"; + Text[ da ] = "Der er ikke implementeret et filter til denne filtype."; + Text[ sv ] = "Inget filter är implementerat för denna filtyp."; + Text[ pl ] = "Dla tego typu pliku nie jest dostÄ™pny żaden filtr."; + Text[ pt-BR ] = "Não há filtro disponÃvel para este tipo de arquivo."; + Text[ th ] = "ไม่มีตัวà¸à¸£à¸à¸‡à¸—ี่ใช้ได้สำหรับชนิดà¹à¸Ÿà¹‰à¸¡à¸™à¸µà¹‰"; + Text[ ja ] = "ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ç¨®é¡žã«ã¯ãƒ•ã‚£ãƒ«ã‚¿ãŒå®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“。"; + Text[ ko ] = "ì´ íŒŒì¼ í˜•ì‹ì— ì‚¬ìš©í• í•„í„°ê°€ 없습니다."; + Text[ zh-CN ] = "ç›®å‰è¿˜ä¸èƒ½ä¸ºè¿™ä¸ªæ–‡ä»¶ç±»åž‹æä¾›ç›é€‰åŠŸèƒ½ã€‚"; + Text[ zh-TW ] = "ç›®å‰é‚„ä¸èƒ½ç‚ºé€™å€‹æª”案類型æ供篩é¸åŠŸèƒ½ã€‚"; + Text[ tr ] = "Bu dosya tipi için filtre mevcut deÄŸil."; + Text[ hi-IN ] = "इस फाइल वरà¥à¤— केलिठकोई फिलà¥à¤Ÿà¤° उपलबà¥à¤§ नहीं है ।"; + Text[ ar ] = "لم يتم تنÙيذ Ùلتر لهذا النوع من الملÙات."; + Text[ he ] = "Für diesen Dateityp ist kein Filter implementiert."; + }; + String SCERR_IMPORT_8K_LIMIT & SH_MAX + { + /* ### ACHTUNG: Neuer Text in Resource? Die Datei enthält Daten unterhalb von Zeile 8192 und kann daher nicht gelesen werden. : Die Datei enthõlt Daten unterhalb von Zeile 8192 und kann daher nicht gelesen werden. */ + Text [ de ] = "Die Datei enthält Daten unterhalb von Zeile 8192 und kann daher nicht gelesen werden." ; + Text [ en-US ] = "The file contains data after row 8192 and therefore can not be read." ; + Text [ x-comment ] = " "; + Text[ pt ] = "O ficheiro contém dados abaixo da linha 8192 e não pode ser lido."; + Text[ ru ] = "Ðевозможно прочеÑÑ‚ÑŒ файл, так как в нем ÑодержатÑÑ Ð´Ð°Ð½Ð½Ñ‹Ðµ, находÑщиеÑÑ Ð½Ð¸Ð¶Ðµ Ñтроки 8192."; + Text[ el ] = "Δεν είναι δυνατόν να γίνει ανάγνωση του αÏχείου επειδή πεÏιÎχει δεδομÎνα πλÎον των 8192 γÏαμμών."; + Text[ nl ] = "In het bestand komen beneden regel 8192 gegevens voor en het kan daarom niet worden gelezen."; + Text[ fr ] = "Le fichier ne peut pas être lu car il contient des données au delà de la ligne 8192."; + Text[ es ] = "El archivo contiene datos por debajo de la fila 8192, por lo que no puede ser leÃdo."; + Text[ fi ] = "Tässä tiedostossa on tietoja rivin 8192 jälkeen, joten tiedostoa ei voida lukea."; + Text[ ca ] = "El fitxer conté dades més enllà de la fila 8192 i, per tant, no es pot llegir."; + Text[ it ] = "Impossibile leggere il file in quanto contiene dei dati al di sotto della riga 8192."; + Text[ da ] = "Filen indeholder data nedenfor række 8192 og kan derfor ikke læses."; + Text[ sv ] = "Filen innehÃ¥ller data under rad 8192 och kan därför inte läsas."; + Text[ pl ] = "Plik zawiera dane po wierszu 8192 i z tego powodu nie może zostać odczytany."; + Text[ pt-BR ] = "O arquivo contém dados além da linha 8192 e não pode ser lido."; + Text[ th ] = "à¹à¸Ÿà¹‰à¸¡à¸¡à¸µà¸‚้à¸à¸¡à¸¹à¸¥à¸«à¸¥à¸±à¸‡à¹à¸–ว 8192 à¹à¸¥à¸°à¹€à¸™à¸·à¹ˆà¸à¸‡à¸ˆà¸²à¸à¹„ม่สามารถà¸à¹ˆà¸²à¸™à¹„ด้"; + Text[ ja ] = "ファイル㯠8192行目ã®ä¸‹ã«ãƒ‡ãƒ¼ã‚¿ã‚’å«ã‚“ã§ã„ã‚‹ãŸã‚ã€èªã¿å–ã‚Šã§ãã¾ã›ã‚“。"; + Text[ ko ] = "파ì¼ì€ 8192 í–‰ ì´í›„ì˜ ë°ì´í„°ë¥¼ í¬í•¨í•˜ê³ 있어 ì½ì„ 수 없습니다."; + Text[ zh-CN ] = "这个文件å«æœ‰è¡Œæ•°8192之下的数æ®ï¼Œå› æ¤æ— 法读出。"; + Text[ zh-TW ] = "這個檔案å«æœ‰åˆ—數8192ä¹‹ä¸‹çš„æ•¸æ“šï¼Œå› æ¤ç„¡æ³•è®€å‡ºã€‚"; + Text[ tr ] = "Dosya, 8192 satırı altında veri bulunduÄŸu için okununamıyor."; + Text[ hi-IN ] = "फाइल में ड़ॉटा 8192 पंकà¥à¤¤à¤¿ के बाद है और इसलिठपढ़ नहीं सकते है ।"; + Text[ ar ] = "ÙŠØتوي المل٠على بيانات أسÙÙ„ الص٠8192ØŒ لهذا لا يمكن قراءته."; + Text[ he ] = "Die Datei enthält Daten unterhalb von Zeile 8192 und kann daher nicht gelesen werden."; + }; + String SCERR_IMPORT_FILE_ROWCOL & SH_MAX + { + Text [ de ] = "Formatfehler in Teildokument $(ARG1) an Position $(ARG2)(Zeile,Spalte) in der Datei entdeckt" ; + Text [ en-US ] = "Format error discovered in the file in sub-document $(ARG1) at $(ARG2)(row,col)"; + Text [ x-comment ] = "shou; should be the same text like in the writer"; + Text[ pt ] = "Erro de formato no sub-documento $(ARG1) do ficheiro, na posição $(ARG2)(linha,coluna)"; + Text[ ru ] = "Ошибка формата файла в поддокументе $(ARG1) в позиции $(ARG2)(Ñтрока,Ñтолбец)."; + Text[ el ] = "Εντοπίστηκε Îνα σφάλμα μοÏφοποίησης του αÏχείου στο τμήμα κειμÎνου $(ARG1) στη θÎση $(ARG2)(γÏαμμή, στήλη)"; + Text[ nl ] = "Indelingsfout in subdocument $(ARG1) op positie $(ARG2)(rij,kolom)"; + Text[ fr ] = "Erreur de format dans le sous-document $(ARG1) du fichier, position $(ARG2)(ligne,colonne)."; + Text[ es ] = "En el documento parcial $(ARG1) del archivo existe un error de formato en la posición $(ARG2)(fila,columna)"; + Text[ fi ] = "Tiedoston aliasiakirjan $(ARG1) kohdassa $(ARG2)(rivi,sarake) havaittiin muotoiluvirhe."; + Text[ ca ] = "Error en el format del subdocument $(ARG1) a $(ARG2)(fila,columna)"; + Text[ it ] = "Errore di formato nel sottodocumento $(ARG1) del file nel punto $(ARG2)(riga,colonna)"; + Text[ da ] = "Der er konstateret formatfejl i underdokumentet $(ARG1) pÃ¥ position $(ARG2)(linje,kolonne) i filen"; + Text[ sv ] = "Det har upptäckts formatfel i filen, deldokument $(ARG1), position $(ARG2)(rad,kolumn)"; + Text[ pl ] = "Wykryto bÅ‚Ä…d formatowania w pliku dokumentu podrzÄ™dnego $(ARG1) na pozycji $(ARG2) (wiersz, kolumna)"; + Text[ pt-BR ] = "Foi descoberto um erro no formato do arquivo do sub-documento $(ARG1) em $(ARG2)(lin,col)"; + Text[ th ] = "Format error discovered in the file in sub-document $(ARG1) at $(ARG2)(row,col)"; + Text[ ja ] = "ファイルã®éƒ¨åˆ†ãƒ‰ã‚ュメント $(ARG1)ã®$(ARG2)(è¡Œã€åˆ—)ã«æ›¸å¼ã‚¨ãƒ©ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚"; + Text[ ko ] = "파ì¼ì˜ $(ARG2)(í–‰, ì—´)ìœ„ì¹˜ì— ìžˆëŠ” 부분 문서 $(ARG1)ì—ì„œ ì„œì‹ ì˜¤ë¥˜ë¥¼ 발견했습니다."; + Text[ zh-CN ] = "在文件的å文档$(ARG1)内的 $(ARG2)(è¡Œ,列)处å‘çŽ°æ ¼å¼é”™è¯¯"; + Text[ zh-TW ] = "發ç¾æª”案的å文件$(ARG1)å…§å«æ ¼å¼éŒ¯èª¤ï¼Œä½ç½®åœ¨ $(ARG2)(è¡Œ,欄)"; + Text[ tr ] = "Alt metin $(ARG1) içerisinde $(ARG2)(satır,sütun) da dosya format hatası"; + Text[ hi-IN ] = "अधीन-लेखपतà¥à¤° $(ARG1) में $(ARG2)(पंकà¥à¤¤à¤¿,सà¥à¤¤à¤‚à¤) सà¥à¤¥à¤¾à¤¨ पर फाइल में रचना का गलती पà¥à¤°à¤•à¤Ÿ हà¥à¤† ।"; + Text[ ar ] = "File format error in sub-document $(ARG1) at $(ARG2)(row,col)"; + Text[ he ] = "Formatfehler in Teildokument $(ARG1) an Position $(ARG2)(Zeile,Spalte) in der Datei entdeckt"; + }; + String SCERR_IMPORT_FORMAT_ROWCOL & SH_MAX + { + Text [ de ] = "Formatfehler an Position $(ARG1)(Zeile,Spalte) in der Datei entdeckt" ; + Text [ en-US ] = "File format error found at $(ARG1)(row,col)" ; + Text [ x-comment ] = "shou; should be the same text like in the writer"; + Text[ pt ] = "Descoberto erro de formato na posição $(ARG1)(linha, coluna) do ficheiro"; + Text[ ru ] = "Ошибка формата файла в позиции $(ARG1)(Ñтрока,Ñтолбец)."; + Text[ el ] = "Î’ÏÎθηκε σφάλμα μοÏφοποίησης στη θÎση $(ARG1)(γÏαμμή,στήλη) του αÏχείο"; + Text[ nl ] = "Indelingsfout op positie $(ARG1)(cel,kolom)"; + Text[ fr ] = "Erreur de format dans le fichier, position $(ARG1)(ligne,colonne)."; + Text[ es ] = "Se ha descubierto un error de formato en el archivo en la posición $(ARG1)(fila,columna)"; + Text[ fi ] = "Tiedostomuotovirhe ilmeni kohteessa $(ARG1)(rivi,sarake)."; + Text[ ca ] = "Error en el format del fitxer a la posició $(ARG1)(fila,columna)"; + Text[ it ] = "È stato trovato un errore di formato nel file alla posizione $(ARG1)(riga, colonna)"; + Text[ da ] = "Der er konstateret formatfejl i filen pÃ¥ position $(ARG1)(linje,kolonne)"; + Text[ sv ] = "Formatfel upptäckt i filen vid position $(ARG1)(rad,kolumn)"; + Text[ pl ] = "Znaleziono bÅ‚Ä…d w formacie pliku na pozycji $(ARG1) (wiersz, kolumna)"; + Text[ pt-BR ] = "Ocorreu um erro de formato de arquivo em $(ARG1)(linha,coluna)"; + Text[ th ] = "File format error found at $(ARG1)(row,col)"; + Text[ ja ] = "ファイル㮠$(ARG1)(è¡Œã€åˆ—)ã«æ›¸å¼ã‚¨ãƒ©ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚"; + Text[ ko ] = "$(ARG1)(í–‰,ì—´)ì—ì„œ íŒŒì¼ í˜•ì‹ ì˜¤ë¥˜ë¥¼ 발견했습니다."; + Text[ zh-CN ] = "在文件的 $(ARG1)(行,列)处å‘çŽ°æ ¼å¼é”™è¯¯"; + Text[ zh-TW ] = "檔案å«æœ‰æ ¼å¼éŒ¯èª¤ï¼Œä½ç½®åœ¨ $(ARG1)(行,欄)"; + Text[ tr ] = "$(ARG1)(row,col) 'de dosya biçimi hatası bulundu"; + Text[ hi-IN ] = "$(ARG2)(पंकà¥à¤¤à¤¿,सà¥à¤¤à¤‚à¤) में फाइल रचना का गलती हà¥à¤† ।"; + Text[ ar ] = "تم اكتشا٠خطأ ÙÙŠ الموضع $(ARG1)(سطر،عمود) ÙÙŠ الملÙ"; + Text[ he ] = "Formatfehler an Position $(ARG1)(Zeile,Spalte) in der Datei entdeckt"; + }; + + // Export ---------------------------------------------------- + //------------------------------------------------------------ + // WARNINGS --------------------------------------------------- + //------------------------------------------------------------ + String SCWARN_IMPORT_RANGE_OVERFLOW & SH_MAX + { + /* ### ACHTUNG: Neuer Text in Resource? Die Maximalanzahl von Zeilen wurde überschritten. Überzählige Zeilen wurden nicht mitimportiert! : Die Maximalanzahl von Zeilen wurde ³berschritten. šberzõhlige Zeilen wurden nicht mitimportiert! */ + Text [ de ] = "Die Maximalanzahl von Zeilen wurde überschritten. Ãœberzählige Zeilen wurden nicht mitimportiert!" ; + Text [ en-US ] = "The maximum number of rows has been exceeded. Excess rows were not imported!" ; + Text [ x-comment ] = " "; + Text[ pt ] = "O número máximo de linhas foi ultrapassado! As linhas em excesso não foram importadas!"; + Text[ ru ] = "МакÑимальное чиÑло Ñтрок превышено .Строки, превышающие заданное чиÑло, не были импортированы!"; + Text[ el ] = "Έγινε Ï…Ï€ÎÏβαση του μÎγιστου αÏÎ¹Î¸Î¼Î¿Ï Î³Ïαμμών. Δεν θα γίνει εισαγωγή των γÏαμμών που ξεπεÏνοÏν το ÏŒÏιο!"; + Text[ nl ] = "Het maximale aantal regels is overschreden. Het teveel aan regels is niet geïmporteerd!"; + Text[ fr ] = "Le nombre de lignes maximum a été dépassé. Le surplus n'a pas pu être importé !"; + Text[ es ] = "Se ha excedido la cantidad máxima de filas. ¡Las filas adicionales no se importaron!"; + Text[ fi ] = "Rivien enimmäismäärä ylittyi. Ylimääräisiä rivejä ei viety."; + Text[ ca ] = "S'ha excedit el nombre mà xim de files. Les files sobrants no s'han importat!"; + Text[ it ] = "Il numero massimo di righe è stato superato. le righe in eccesso non sono state importate!"; + Text[ da ] = "Det maksimale antal rækker blev overskredet. De overtallige rækker blev ikke importeret!"; + Text[ sv ] = "Det maximala antalet rader överskreds. Överblivna rader importerades inte!"; + Text[ pl ] = "ZostaÅ‚a przekroczona maksymalna liczba wierszy. Nadmiarowe wiersze nie bÄ™dÄ… importowane!"; + Text[ pt-BR ] = "O número máximo de linhas foi ultrapassado! As linhas em excesso não foram importadas!"; + Text[ th ] = "เà¸à¸´à¸™à¸ˆà¸³à¸™à¸§à¸™à¹à¸–วที่มาà¸à¸—ี่สุด ไม่นำเข้าà¹à¸–วที่เà¸à¸´à¸™!"; + Text[ ja ] = "è¡Œã®æœ€é«˜æ•°ã‚’超ãˆã¦ã„ã¾ã™ã€‚éŽå‰°ã®è¡Œã¯ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚"; + Text[ ko ] = "í–‰ì˜ ìµœëŒ€ìˆ˜ë¥¼ 초과했습니다. ì´ˆê³¼ëœ í–‰ì€ ê°€ì ¸ì˜¤ì§€ 않았습니다."; + Text[ zh-CN ] = "超过行数最高é™åº¦ã€‚超过的行ä¸ä¼šè¢«è¾“å…¥ï¼"; + Text[ zh-TW ] = "超éŽåˆ—數最高é™åº¦ã€‚超éŽçš„列ä¸æœƒè¢«åŒ¯å…¥ï¼"; + Text[ tr ] = "Azami satır sayısı aşıldı. Fazla satırlar içe aktarılmadı!"; + Text[ hi-IN ] = "पंकà¥à¤¤à¤¿à¤¯à¥‹à¤‚ की संखà¥à¤¯à¤¾ अधिकतम संखà¥à¤¯à¤¾ के सीमा से बाहर है । सीमा के बाहर का पंकà¥à¤¤à¤¿à¤¯à¥‹à¤‚ को आयात नहीं कर सकते है!"; + Text[ ar ] = "تم تخطي العدد الأقصى للصÙÙˆÙ. لهذا لم يتم استيراد الصÙو٠الزائدة!"; + Text[ he ] = "Die Maximalanzahl von Zeilen wurde überschritten. Ãœberzählige Zeilen wurden nicht mitimportiert"; + }; + String SCWARN_IMPORT_ROW_OVERFLOW & SH_MAX + { + Text [ de ] = "Die Daten konnten nicht vollständig geladen werden, da die maximale Anzahl von Tabellenzeilen überschritten wurde." ; + Text [ en-US ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded." ; + Text[ pt ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ ru ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ el ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ nl ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ fr ] = "Impossible de charger la totalité des données : dépassement du nombre maximal de lignes par feuille."; + Text[ es ] = "Los datos no se pudieron cargar por completo por haberse excedido el número máximo de filas por hoja. "; + Text[ fi ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ ca ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ it ] = "Impossibile caricare completamente i dati in quanto il numero di colonne supera il massimo consentito."; + Text[ da ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ sv ] = "Det gick inte att ladda data fullständigt eftersom det maximala antalet rader per tabell har överskridits."; + Text[ pl ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ pt-BR ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ th ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ ja ] = "シート内ã®è¡Œæ•°ãŒæœ€å¤§æ•°ã‚’超ãˆãŸãŸã‚ã€ãƒ‡ãƒ¼ã‚¿ã®ä¸€éƒ¨ã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"; + Text[ ko ] = "í•œ 시트 당 í–‰ì˜ ìµœëŒ€ì¹˜ê°€ 초과ë˜ì—ˆê¸° ë•Œë¬¸ì— ë°ì´í„°ë¥¼ ì™„ì „í•˜ê²Œ ë¡œë”©í• ìˆ˜ 없습니다."; + Text[ zh-CN ] = "æ— æ³•å®Œå…¨è£…è½½æ•°æ®ï¼Œå› 为已ç»è¶…è¿‡è¡¨æ ¼è¡Œçš„æœ€å¤§æ•°ç›®ã€‚"; + Text[ zh-TW ] = "由於超éŽæ¯å¼µå·¥ä½œè¡¨çš„最大列數,無法完全載入資料。"; + Text[ tr ] = "Veri tam olarak yüklenemeyecek, çünkü her ÅŸablona ait azami satır sayısı aşıldı."; + Text[ hi-IN ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ ar ] = "The data could not be loaded completely because the maximum number of rows per sheet was exceeded."; + Text[ he ] = "Die Daten konnten nicht vollständig geladen werden, da die maximale Anzahl von Tabellenzeilen überschritten wurde."; + }; + String SCWARN_IMPORT_COLUMN_OVERFLOW & SH_MAX + { + Text [ de ] = "Die Daten konnten nicht vollständig geladen werden, da die maximale Anzahl von Tabellenspalten überschritten wurde." ; + Text [ en-US ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded." ; + Text[ pt ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ ru ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ el ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ nl ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ fr ] = "Impossible de charger la totalité des données : dépassement du nombre maximal de colonnes par feuille."; + Text[ es ] = "Los datos no se han podido cargar por completo por haberse excedido el número máximo de columnas por hoja. "; + Text[ fi ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ ca ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ it ] = "Impossibile caricare completamente i dati in quanto il numero delle colonne per pagina supera il massimo consentito."; + Text[ da ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ sv ] = "Det gick inte att ladda data fullständigt eftersom det maximala antalet kolumner per tabell har överskridits."; + Text[ pl ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ pt-BR ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ th ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ ja ] = "シート内ã®åˆ—æ•°ãŒæœ€å¤§æ•°ã‚’超ãˆãŸãŸã‚ã€ãƒ‡ãƒ¼ã‚¿ã®ä¸€éƒ¨ã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"; + Text[ ko ] = "í•œ 시트 당 ì—´ì˜ ìµœëŒ€ì¹˜ê°€ 초과ë˜ì—ˆê¸° ë•Œë¬¸ì— ë°ì´í„°ë¥¼ ì™„ì „í•˜ê²Œ ë¡œë”©í• ìˆ˜ 없습니다."; + Text[ zh-CN ] = "æ— æ³•å®Œå…¨è£…è½½æ•°æ®ï¼Œå› 为已ç»è¶…è¿‡è¡¨æ ¼åˆ—çš„æœ€å¤§æ•°ç›®ã€‚"; + Text[ zh-TW ] = "由於超éŽæ¯å¼µå·¥ä½œè¡¨çš„最大欄數,無法完全載入資料。"; + Text[ tr ] = "Veri tam olarak yüklenemiyor, çünkü sayfa başına sutün sayısı aşıldı."; + Text[ hi-IN ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ ar ] = "The data could not be loaded completely because the maximum number of columns per sheet was exceeded."; + Text[ he ] = "Die Daten konnten nicht vollständig geladen werden, da die maximale Anzahl von Tabellenspalten überschritten wurde."; + }; + String SCWARN_IMPORT_SHEET_OVERFLOW & SH_MAX + { + Text [ de ] = "Einige Tabellen konnten nicht geladen werden, da die maximale Anzahl von Tabellen überschritten wurde." ; + Text [ en-US ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded." ; + Text[ pt ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ ru ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ el ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ nl ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ fr ] = "Impossible de charger la totalité des feuilles : dépassement du nombre maximal de feuilles."; + Text[ es ] = "Algunas hojas no se han podido cargar por completo por haberse excedido el número máximo de hojas."; + Text[ fi ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ ca ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ it ] = "Impossibile caricare tutte le tabelle in quanto superano il numero massimo consentito."; + Text[ da ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ sv ] = "Det gick inte att ladda en del tabeller eftersom det maximala antalet tabeller har överskridits."; + Text[ pl ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ pt-BR ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ th ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ ja ] = "シートã®æ•°ãŒæœ€å¤§æ•°ã‚’超ãˆãŸãŸã‚ã€ã„ãã¤ã‹ã®ã‚·ãƒ¼ãƒˆã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"; + Text[ ko ] = "ì‹œíŠ¸ì˜ ìµœëŒ€ì¹˜ê°€ 초과ë˜ì—ˆê¸° ë•Œë¬¸ì— ì‹œíŠ¸ 중 ëª‡ê°€ì§€ëŠ”ë¡œë”©í• ìˆ˜ 없습니다."; + Text[ zh-CN ] = "æ— æ³•å®Œå…¨è£…è½½æ•°æ®ï¼Œå› 为已ç»è¶…è¿‡è¡¨æ ¼çš„æœ€å¤§æ•°ç›®ã€‚"; + Text[ zh-TW ] = "由於超éŽå·¥ä½œè¡¨çš„最大數,有些工作表無法載入。"; + Text[ tr ] = "Bazı sayfalar, azami sayfa sınırı aşıldığından yüklenemeyecektir."; + Text[ hi-IN ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ ar ] = "Some sheets could not be loaded because the maximum number of sheets was exceeded."; + Text[ he ] = "Einige Tabellen konnten nicht geladen werden, da die maximale Anzahl von Tabellen überschritten wurde."; + }; + String SCWARN_CORE_HARD_RECALC & SH_MAX + { + /* ### ACHTUNG: Neuer Text in Resource? Dokument zu komplex für automatische Berechnung. Neuberechnung mit F9. : Dokument zu komplex f³r automatische Berechnung. Neuberechnung mit F9. */ + Text [ de ] = "Dokument zu komplex für automatische Berechnung. Neuberechnung mit F9." ; + Text [ en-US ] = "Document too complex for automatic calculation. Press F9 to recalculate." ; + Text [ x-comment ] = " "; + Text[ pt ] = "O documento é demasiado complexo para o cálculo automático. Calcular de novo com F9."; + Text[ ru ] = "Документ Ñлишком Ñложный Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑких вычиÑлений. Ð”Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ð³Ð¾ вычиÑÐ»ÐµÐ½Ð¸Ñ Ð½Ð°Ð¶Ð¼Ð¸Ñ‚Ðµ F9."; + Text[ el ] = "Το ÎγγÏαφο είναι υπεÏβολικά πεÏίπλοκο για αυτόματο υπολογισμό. Πατήστε το πλήκτÏο F9 για να εκτελεστεί ξανά ο υπολογισμός."; + Text[ nl ] = "Document te gecompliceerd voor automatische berekening"; + Text[ fr ] = "Document trop complexe pour le calcul automatique. Pour calculer à nouveau, appuyez sur F9."; + Text[ es ] = "Documento demasiado complejo para el cálculo automático. Pulse F9 para volver a calcular."; + Text[ fi ] = "Tiedosto on liian monimutkainen automaattista laskentaa varten. Laske tiedot uudelleen painamalla F9."; + Text[ ca ] = "El document és massa complex per al cà lcul automà tic. Premeu F9 per recalcular."; + Text[ it ] = "Documento troppo complesso per il calcolo automatico. Premete F9 per effettuare un nuovo calcolo."; + Text[ da ] = "Dokumentet er for komplekst til automatisk beregning. Genberegning med F9."; + Text[ sv ] = "Dokumentet är för komplext för en automatisk beräkning. Ny beräkning med F9."; + Text[ pl ] = "Dokument jest zbyt zÅ‚ożony dla automatycznego obliczania. Aby obliczyć ponownie, naciÅ›nij klawisz F9."; + Text[ pt-BR ] = "O documento é muito complexo para o cálculo automático. Pressione F9 para recalcular."; + Text[ th ] = "เà¸à¸à¸ªà¸²à¸£à¸‹à¸±à¸šà¸‹à¹‰à¸à¸™à¹€à¸à¸´à¸™à¹„ปที่จะคำนวณà¸à¸±à¸•à¹‚นมัติ. à¸à¸”ปุ่ม F9 เพื่à¸à¸„ำนวณใหม่"; + Text[ ja ] = "自動計算ã«ã¯ã€ãƒ‰ã‚ュメントãŒè¤‡é›‘ã™ãŽã¾ã™ã€‚F9 を押ã—ã¦å†è¨ˆç®—ã—ã¾ã™ã€‚"; + Text[ ko ] = "문서가 ìžë™ ê³„ì‚°ì„ í•˜ê¸°ì—” 너무 복잡합니다. F9를 누르셔서 재 계산하ì‹ì‹œì˜¤."; + Text[ zh-CN ] = "文档过于å¤åˆï¼Œæ— 法执行自动è¿ç®—功能。请按击 F9, é‡æ–°è¿ç®—。"; + Text[ zh-TW ] = "文件éŽæ–¼è¤‡åˆï¼Œç„¡æ³•åŸ·è¡Œè‡ªå‹•é‹ç®—功能。請按 F9 ,é‡æ–°é‹ç®—。"; + Text[ tr ] = "Belge, otomatik hesaplama için fazla karmaşık. Yeniden hesaplatmak için F9 tuÅŸuna basın."; + Text[ hi-IN ] = "सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ गणना करने केलिठलेखपतà¥à¤° बहà¥à¤¤ कठिन है । पà¥à¤¨à¤ƒ गणना करने केलिठF9 को दबाइठ।"; + Text[ ar ] = "المستند معقد جداً بØيث لا يمكن إجراء الØساب تلقائياً. الرجاء الضغط على F9 لإعادة الØساب."; + Text[ he ] = "Dokument zu komplex für automatische Berechnung. Neuberechnung mit F9."; + }; + String SCWARN_EXPORT_MAXROW & SH_MAX + { + /* ### ACHTUNG: Neuer Text in Resource? Das Dokument enthält mehr Zeilen, als das Ausgabeformat unterstützt.\nÜberzählige Zeilen wurden nicht gespeichert. : Das Dokument enthõlt mehr Zeilen, als das Ausgabeformat unterst³tzt.\nšberzõhlige Zeilen wurden nicht gespeichert. */ + Text [ de ] = "Das Dokument enthält mehr Zeilen, als das Ausgabeformat unterstützt.\nÃœberzählige Zeilen wurden nicht gespeichert." ; + Text [ en-US ] = "The document contains more rows than supported in the selected format.\nAdditional rows were not saved." ; + Text [ x-comment ] = " "; + Text[ pt ] = "O documento contém mais linhas do que as previstas para o formato correspondente.\nAs linhas em excesso não foram guardadas."; + Text[ ru ] = "Документ Ñодержит больше Ñтрок, чем поддерживаетÑÑ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼ форматом.\nСтроки, превышающие заданное чиÑло, не были Ñохранены."; + Text[ el ] = "Το ÎγγÏαφο πεÏιÎχει πεÏισσότεÏες γÏαμμÎÏ‚ από ότι υποστηÏίζει η μοÏφή \nεξαγωγής. Οι πλεονάζουσες γÏαμμÎÏ‚ δεν αποθηκεÏτηκαν."; + Text[ nl ] = "Het document bevat teveel regels voor dit formaat.\nDeze zijn niet opgeslagen."; + Text[ fr ] = "Le document comporte plus de lignes que le format n'en supporte.\nLes lignes en surplus n'ont pas été enregistrées."; + Text[ es ] = "El documento contiene más filas de las que el formato seleccionado admite.\nLas filas adicionales no se guardaron."; + Text[ fi ] = "Asiakirjassa on enemmän rivejä kuin mitä valittu muoto tukee.\nYlimääräisiä rivejä ei tallennettu."; + Text[ ca ] = "El document conté més files de les que permet el format seleccionat.\nLes files addicionals no s'han desat."; + Text[ it ] = "Il documento contiene più righe di quelle supportate dal formato di uscita.\nLe righe in eccesso non sono state salvate."; + Text[ da ] = "Dokumentet indeholder flere rækker end output-formatet understøtter.\nDe overtallige rækker blev ikke gemt."; + Text[ sv ] = "Dokumentet innehÃ¥ller mer rader än vad som understöds av utmatningsformatet.\nÖvertaliga rader sparades inte."; + Text[ pl ] = "Dokument zawiera wiÄ™cej wierszy niż zezwala na to wybrany format. \nDodatkowe wiersze nie bÄ™dÄ… obsÅ‚ugiwane."; + Text[ pt-BR ] = "O documento contém mais linhas do que as previstas para o formato selecionado.\nAs linhas em excesso não foram salvas."; + Text[ th ] = "เà¸à¸à¸ªà¸²à¸£à¸¡à¸µà¹à¸–วมาà¸à¸à¸§à¹ˆà¸²à¸—ี่สนับสนุนในรูปà¹à¸šà¸šà¸—ี่เลืà¸à¸.\nไม่ได้บันทึà¸à¹à¸–วที่เพิ่มมา"; + Text[ ja ] = "ドã‚ュメントã¯ã€ã‚¢ã‚¦ãƒˆãƒ—ットã™ã‚‹å°åˆ·æ›¸å¼ã§æ”¯æ´ã§ãる行数を越ãˆã¦ã„ã¾ã™ã€‚\néŽå‰°ã®è¡Œã¯ä¿å˜ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚"; + Text[ ko ] = "ì„ íƒëœ ì„œì‹ì—ì„œ 지ì›í• 수 있는 것보다 ë” ë§Žì€ í–‰ì´ ë¬¸ì„œì— í¬í•¨ë˜ì–´ 있습니다.\n초과 í–‰ì€ ì €ìž¥í•˜ì§€ 않습니다."; + Text[ zh-CN ] = "整个文档å«æœ‰çš„行数超过打å°æ ¼å¼æ”¯æŒçš„范围。\n超过的行ä¸ä¼šè¢«å˜ç›˜ã€‚"; + Text[ zh-TW ] = "這個文件å«æœ‰çš„列數超éŽåˆ—å°æ ¼å¼æ”¯æŒçš„範åœã€‚\n超éŽçš„列ä¸æœƒè¢«å„²å˜ã€‚"; + Text[ tr ] = "Belge, çıktı formatının desteklediÄŸinden çok satır içeriyor.\nFazla gelen satırlar kaydedilmedi."; + Text[ hi-IN ] = "चà¥à¤¨à¥‡ हà¥à¤ रचना का लेखपतà¥à¤° में समरà¥à¤¥à¤¨ करने से अधिक पंकà¥à¤¤à¤¿à¤¯à¤¾à¤ है ।\nअधिकतर पंकà¥à¤¤à¤¿à¤¯à¥‹à¤‚ को संचित नहीं किया जाà¤à¤—ा ।"; + Text[ ar ] = "ÙŠØتوي المستند على عدد من الصÙÙˆÙ ÙŠÙوق العدد الذي يمكن للتنسيق المØدد دعمه.\nلم يتم ØÙظ الصÙو٠الزائدة."; + Text[ he ] = "Das Dokument enthält mehr Zeilen, als das Ausgabeformat unterstützt.\nÃœberzählige Zeilen wurden nicht gespeichert."; + }; + String SCWARN_IMPORT_INFOLOST & SH_MAX + { + /* ### ACHTUNG: Neuer Text in Resource? Das Dokument enthält Informationen, die dieser Programmversion unbekannt sind.\nBei erneutem Speichern gehen diese Informationen verloren! : Das Dokument enthõlt Informationen, die dieser Programmversion unbekannt sind.\nBei erneutem Speichern gehen diese Informationen verloren! */ + Text [ de ] = "Das Dokument enthält Informationen, die dieser Programmversion unbekannt sind.\nBei erneutem Speichern gehen diese Informationen verloren!" ; + Text [ en-US ] = "The document contains information not recognized by this program version.\nResaving the document will delete this information!" ; + Text [ x-comment ] = " "; + Text[ pt ] = "O documento contém informações desconhecidas para esta versão do programa.\nAo guardar novamente perderá estas informações!"; + Text[ ru ] = "Документ Ñодержит ÑведениÑ, не раÑпознанные Ñтой верÑии программы.\nПри повторном Ñохранении Ñта Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ утерÑна!"; + Text[ el ] = "Το ÎγγÏαφο πεÏιÎχει πληÏοφοÏίες οι οποίες είναι άγνωστες για αυτή τη Îκδοση του \nÏ€ÏογÏάμματος. Οι πληÏοφοÏίες αυτÎÏ‚ θα χαθοÏν αν επαναλαμβ "; + Text[ nl ] = "Het document bevat gegevens die voor deze programmaversie onbekend zijn.\nAls u opnieuw opslaat, gaan deze verloren!"; + Text[ fr ] = "Le document contient des informations inconnues de cette version du programme.\nCes informations seront perdues lors d'un nouvel enregistrement !"; + Text[ es ] = "El documento contiene información desconocida para la versión de este programa.\n¡Al volver a guardar se perderá esta información!"; + Text[ fi ] = "Asiakirjassa on tietoja, joita tämä ohjelmaversio ei tunnista.\nJos asiakirja tallennetaan uudelleen, nämä tiedot häviävät."; + Text[ ca ] = "El document conté informació que aquesta versió del programa no reconeix.\nSi es torna a desar el document, aquesta informació es perdrà ."; + Text[ it ] = "Il documento contiene informazioni sconosciute alla versione corrente del programma.\nCon un nuovo salvataggio le informazioni andranno perse!"; + Text[ da ] = "Dokumentet indeholder informationer, som denne programversion ikke kan genkende.\nHvis du gemmer dokumentet igen, vil disse informationer gÃ¥ tabt."; + Text[ sv ] = "Dokumentet innehÃ¥ller information som denna programversion inte känner igen.\nOm du sparar igen gÃ¥r den här informationen förlorad!"; + Text[ pl ] = "Dokument zawiera informacje, które sÄ… nierozpoznawane przez tÄ™ wersjÄ™ programu.\nPrzy ponownym zapisie zostanÄ… usuniÄ™te!"; + Text[ pt-BR ] = "O documento contém informações desconhecidas para esta versão do programa.\nAo salvar novamente estas informações serão perdidas!"; + Text[ th ] = "เà¸à¸à¸ªà¸²à¸£à¸¡à¸µà¸‚้à¸à¸¡à¸¹à¸¥à¸—ี่ไม่ได้จดจำด้วยโปรà¹à¸à¸£à¸¡à¹€à¸§à¸à¸£à¹Œà¸Šà¸±à¹ˆà¸™à¸™à¸µà¹‰.\nà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¹€à¸à¸à¸ªà¸²à¸£à¸à¸µà¸à¸„รั้งจะลบข้à¸à¸¡à¸¹à¸¥à¸™à¸µà¹‰!"; + Text[ ja ] = "ドã‚ュメントã«ã¯ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯èªçŸ¥ã§ããªã„æƒ…å ±ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚\nä¿å˜ã—ãªãŠã™ã¨ã€ã“ã®æƒ…å ±ã¯å¤±ã‚ã‚Œã¾ã™ã€‚"; + Text[ ko ] = "문서ì—는 ì´ í”„ë¡œê·¸ëž¨ì˜ ë²„ì „ìœ¼ë¡œ ì¸ì‹ë˜ì§€ 않는 ì •ë³´ê°€ í¬í•¨ë˜ì–´ 있습니다.\n다시 ì €ìž¥ ì‹œì— ì´ ì •ë³´ëŠ” ìƒì‹¤ë©ë‹ˆë‹¤."; + Text[ zh-CN ] = "这个程åºæ— 法处ç†è¿™ä¸ªæ–‡æ¡£ä¸ä¸æ˜Žçš„ä¿¡æ¯ã€‚\n在é‡æ–°å˜ç›˜æ—¶ä¼šæŸå¤±è¿™äº›ä¿¡æ¯ï¼"; + Text[ zh-TW ] = "這個程åºç„¡æ³•è™•ç†é€™å€‹æ–‡ä»¶ä¸ä¸æ˜Žçš„資訊。\n在é‡æ–°å„²å˜æ™‚這些資訊會æµå¤±ï¼"; + Text[ tr ] = "Belgede, bu program sürümünde bilinmeyen bilgiler mevcut.\nBu bilgiler, yeniden kayıtta kaybolacak!"; + Text[ hi-IN ] = "लेखपतà¥à¤° में जो सूचना है वह इस पà¥à¤°à¥‹à¤—à¥à¤°à¤¾à¤®à¥ आवृतà¥à¤¤à¤¿ से पहचान ने योगà¥à¤¯ नहीं है ।\nपà¥à¤¨à¤ƒ संचित करने से लेखपतà¥à¤° इस सूचना को मिटाता है!"; + Text[ ar ] = "ÙŠØتوي المستند على معلومات غريبة على إصدار البرنامج هذا.\nهذه البيانات سو٠تضيع عند إعادة ØÙظ المستند!"; + Text[ he ] = "Das Dokument enthält Informationen, die dieser Programmversion unbekannt sind.\nBei erneutem Speichern gehen diese Informationen verloren"; + }; + String SCWARN_IMPORT_FILE_ROWCOL & SH_MAX + { + Text [ de ] = "Formatfehler in Teildokument $(ARG1) an Position $(ARG2)(Zeile,Spalte) in der Datei entdeckt" ; + Text [ en-US ] = "Format error discovered in the file in sub-document $(ARG1) at $(ARG2)(row,col)"; + Text [ x-comment ] = "shou; should be the same text like in the writer"; + Text[ pt ] = "Erro de formato no sub-documento $(ARG1) do ficheiro, na posição(ARG2)(linha,coluna)"; + Text[ ru ] = "Ошибка формата файла в поддокументе $(ARG1) в позиции $(ARG2)(Ñтрока,Ñтолбец)."; + Text[ el ] = "Εντοπίστηκε σφάλμα μοÏφοποίησης στο αÏχείο στο τμήμα κειμÎνου $(ARG1) στη θÎση $(ARG2)(γÏαμμή,στήλη)"; + Text[ nl ] = "Indelingsfout in subdocument $(ARG1) op positie $(ARG2)(rij,kolom)"; + Text[ fr ] = "Erreur de format dans le sous-document $(ARG1) du fichier, position $(ARG2)(ligne,colonne)."; + Text[ es ] = "En el documento parcial $(ARG1) del archivo existe un error de formato en la posición $(ARG2)(fila,columna)"; + Text[ fi ] = "Tiedoston aliasiakirjan $(ARG1) kohdassa $(ARG2)(rivi,sarake) havaittiin muotoiluvirhe."; + Text[ ca ] = "Error de format en el document $(ARG1) a $(ARG2)(fila,columna)"; + Text[ it ] = "Errore di formato nel sottodocumento $(ARG1) del file nel punto $(ARG2)(riga,colonna)"; + Text[ da ] = "Der er konstateret formatfejl i underdokumentet $(ARG1) pÃ¥ position $(ARG2)(linje,kolonne) i filen"; + Text[ sv ] = "Det har upptäckts formatfel i filen, deldokument $(ARG1), position $(ARG2)(rad,kolumn)"; + Text[ pl ] = "Wykryto bÅ‚Ä…d formatowania w pliku dokumentu podrzÄ™dnego $(ARG1) na pozycji $(ARG2) (wiersz, kolumna)"; + Text[ pt-BR ] = "Foi descoberto um erro de formato no arquivo do sub-documento $(ARG1) em $(ARG2)(lin,col)"; + Text[ th ] = "Format error discovered in the file in sub-document $(ARG1) at $(ARG2)(row,col)"; + Text[ ja ] = "ファイルã®éƒ¨åˆ†ãƒ‰ã‚ュメント $(ARG1)ã® $(ARG2)(è¡Œã€åˆ—)ã«æ›¸å¼ã‚¨ãƒ©ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚"; + Text[ ko ] = "파ì¼ì˜ $(ARG2)(í–‰,ì—´) ìœ„ì¹˜ì— ìžˆëŠ” 부분 문서 $(ARG1)ì—ì„œ ì„œì‹ ì˜¤ë¥˜ë¥¼ 발견했습니다."; + Text[ zh-CN ] = "在文件的å文档$(ARG1)内的 $(ARG2)(è¡Œ,列)处å‘çŽ°æ ¼å¼é”™è¯¯"; + Text[ zh-TW ] = "發ç¾æª”案的å文件$(ARG1)å…§å«æ ¼å¼éŒ¯èª¤ï¼Œä½ç½®åœ¨ $(ARG2)(è¡Œ,欄)"; + Text[ tr ] = "Alt metin $(ARG1) içerisinde $(ARG2)(satır,sütun) da dosya format hatası"; + Text[ hi-IN ] = "अधीन-लेखपतà¥à¤° $(ARG1) में $(ARG2)(पंकà¥à¤¤à¤¿,सà¥à¤¤à¤‚à¤) सà¥à¤¥à¤¾à¤¨ पर फाइल में रचना का गलती पà¥à¤°à¤•à¤Ÿ हà¥à¤† ।"; + Text[ ar ] = "File format error in sub-document $(ARG1) at $(ARG2)(row,col)"; + Text[ he ] = "Formatfehler in Teildokument $(ARG1) an Position $(ARG2)(Zeile,Spalte) in der Datei entdeckt"; + }; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/binfilter/bf_sc/source/ui/src/sc_scstring.src b/binfilter/bf_sc/source/ui/src/sc_scstring.src new file mode 100644 index 000000000000..8565441751e4 --- /dev/null +++ b/binfilter/bf_sc/source/ui/src/sc_scstring.src @@ -0,0 +1,1708 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#define NO_LOCALIZE_EXPORT + +#include "bf_sc.hrc" // -> #include <sfx.hrc> + + // Strings fuer Interface-Namen ------------------------------------------ + +String SCSTR_APPLICATION +{ + Text [ de ] = "%PRODUCTNAME Calc 6.0" ; + Text [ en-US ] = "%PRODUCTNAME Calc 6.0"; + Text [ x-comment ] = " "; + Text[ pt ] = "%PRODUCTNAME Calc 6.0"; + Text[ ru ] = "%PRODUCTNAME Calc 6.0"; + Text[ el ] = "%PRODUCTNAME Calc 6.0"; + Text[ nl ] = "%PRODUCTNAME Calc 6.0"; + Text[ fr ] = "%PRODUCTNAME Calc 6.0"; + Text[ es ] = "%PRODUCTNAME Calc 6.0"; + Text[ fi ] = "%PRODUCTNAME Calc 6.0"; + Text[ ca ] = "%PRODUCTNAME Calc 6.0"; + Text[ it ] = "%PRODUCTNAME Calc 6.0"; + Text[ da ] = "%PRODUCTNAME Calc 6.0"; + Text[ sv ] = "%PRODUCTNAME Calc 6.0"; + Text[ pl ] = "%PRODUCTNAME Calc 6.0"; + Text[ pt-BR ] = "%PRODUCTNAME Calc 6.0"; + Text[ th ] = "%PRODUCTNAME Calc 6.0"; + Text[ ja ] = "%PRODUCTNAME Calc 6.0"; + Text[ ko ] = "%PRODUCTNAME Calc 6.0"; + Text[ zh-CN ] = "%PRODUCTNAME Calc 6.0"; + Text[ zh-TW ] = "%PRODUCTNAME Calc 6.0"; + Text[ tr ] = "%PRODUCTNAME Calc 6.0"; + Text[ hi-IN ] = "%PRODUCTNAME गणना 6.0"; + Text[ ar ] = "%PRODUCTNAME Calc 6.0"; + Text[ he ] = "%PRODUCTNAME Calc 6.0"; +}; +String SCSTR_50_APPLICATION +{ + Text [ de ] = "StarCalc 5.0" ; + Text [ en-US ] = "StarCalc 5.0" ; + Text [ x-comment ] = " "; + Text[ pt ] = "StarCalc 5.0"; + Text[ ru ] = "StarCalc 5.0"; + Text[ el ] = "StarCalc 5.0"; + Text[ nl ] = "StarCalc 5.0"; + Text[ fr ] = "StarCalc 5.0"; + Text[ es ] = "StarCalc 5.0"; + Text[ fi ] = "StarCalc 5.0"; + Text[ ca ] = "StarCalc 5.0"; + Text[ it ] = "StarCalc 5.0"; + Text[ da ] = "StarCalc 5.0"; + Text[ sv ] = "StarCalc 5.0"; + Text[ pl ] = "StarCalc 5.0"; + Text[ pt-BR ] = "StarCalc 5.0"; + Text[ th ] = "StarCalc 5.0"; + Text[ ja ] = "StarCalc 5.0"; + Text[ ko ] = "StarCalc 5.0"; + Text[ zh-CN ] = "StarCalc 5.0"; + Text[ zh-TW ] = "StarCalc 5.0"; + Text[ tr ] = "StarCalc 5.0"; + Text[ hi-IN ] = "StarCalc 5.0"; + Text[ ar ] = "StarCalc 5.0"; + Text[ he ] = "StarCalc 5.0"; +}; +String SCSTR_40_APPLICATION +{ + Text [ de ] = "StarCalc 4.0" ; + Text [ en-US ] = "StarCalc 4.0" ; + Text [ x-comment ] = " "; + Text[ pt ] = "StarCalc 4.0"; + Text[ ru ] = "StarCalc 4.0"; + Text[ el ] = "StarCalc 4.0"; + Text[ nl ] = "Star Calc 4.0"; + Text[ fr ] = "StarCalc 4.0"; + Text[ es ] = "StarCalc 4.0"; + Text[ fi ] = "StarCalc 4.0"; + Text[ ca ] = "StarCalc 4.0"; + Text[ it ] = "StarCalc 4.0"; + Text[ da ] = "StarCalc 4.0"; + Text[ sv ] = "StarCalc 4.0"; + Text[ pl ] = "StarCalc 4.0"; + Text[ pt-BR ] = "StarCalc 4.0"; + Text[ th ] = "StarCalc 4.0"; + Text[ ja ] = "StarCalc 4.0"; + Text[ ko ] = "StarCalc 4.0"; + Text[ zh-CN ] = "StarCalc 4.0"; + Text[ zh-TW ] = "StarCalc 4.0"; + Text[ tr ] = "StarCalc 4.0"; + Text[ hi-IN ] = "StarCalc 4.0"; + Text[ ar ] = "Star Calc 4.0"; + Text[ he ] = "StarCalc 4.0"; +}; +String SCSTR_30_APPLICATION +{ + Text [ de ] = "StarCalc 3.0" ; + Text [ en-US ] = "StarCalc 3.0" ; + Text [ x-comment ] = " "; + Text[ pt ] = "StarCalc 3.0"; + Text[ ru ] = "StarCalc 3.0"; + Text[ el ] = "Star Calc 3.0"; + Text[ nl ] = "StarCalc 3.0"; + Text[ fr ] = "StarCalc 3.0"; + Text[ es ] = "StarCalc 3.0"; + Text[ fi ] = "StarCalc 3.0"; + Text[ ca ] = "StarCalc 3.0"; + Text[ it ] = "StarCalc 3.0"; + Text[ da ] = "StarCalc 3.0"; + Text[ sv ] = "StarCalc 3.0"; + Text[ pl ] = "StarCalc 3.0"; + Text[ pt-BR ] = "StarCalc 3.0"; + Text[ th ] = "StarCalc 3.0"; + Text[ ja ] = "StarCalc 3.0"; + Text[ ko ] = "StarCalc 3.0"; + Text[ zh-CN ] = "StarCalc 3.0"; + Text[ zh-TW ] = "StarCalc 3.0"; + Text[ tr ] = "StarCalc 3.0"; + Text[ hi-IN ] = "StarCalc 3.0"; + Text[ ar ] = "Star Calc 3.0"; + Text[ he ] = "StarCalc 3.0"; +}; +String SCSTR_LONG_SCDOC_NAME +{ + Text [ de ] = "%PRODUCTNAME 6.0 Tabelle" ; + Text [ en-US ] = "%PRODUCTNAME 6.0 Spreadsheet"; + Text [ x-comment ] = " "; + Text[ pt ] = "%PRODUCTNAME 6.0 Folha de cálculo"; + Text[ ru ] = "ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° %PRODUCTNAME 6.0"; + Text[ el ] = "%PRODUCTNAME 6.0 Πίνακας"; + Text[ nl ] = "%PRODUCTNAME 6.0 werkblad"; + Text[ fr ] = "%PRODUCTNAME 6.0 Classeur"; + Text[ es ] = "%PRODUCTNAME 6.0 Hoja de cálculo"; + Text[ fi ] = "%PRODUCTNAME 6.0 -laskentataulukko"; + Text[ ca ] = "%PRODUCTNAME 6.0 Full de cà lcul"; + Text[ it ] = "Tabella %PRODUCTNAME 6.0"; + Text[ da ] = "%PRODUCTNAME 6.0-tabel"; + Text[ sv ] = "%PRODUCTNAME 6.0 tabell"; + Text[ pl ] = "%PRODUCTNAME 6.0 - Arkusz kalkulacyjny"; + Text[ pt-BR ] = "Planilha de Cálculo %PRODUCTNAME 6.0"; + Text[ th ] = "à¸à¸£à¸°à¸”าษคำนวณ %PRODUCTNAME 6.0 "; + Text[ ja ] = "%PRODUCTNAME 6.0 表計算"; + Text[ ko ] = "%PRODUCTNAME 6.0 ìŠ¤í”„ë ˆë“œì‹œíŠ¸"; + Text[ zh-CN ] = "%PRODUCTNAME 6.0 工作表"; + Text[ zh-TW ] = "%PRODUCTNAME 6.0 工作表"; + Text[ tr ] = "%PRODUCTNAME 6.0 Hesap Tablosu"; + Text[ hi-IN ] = "%PRODUCTNAME 6.0 सà¥à¤ªà¥à¤°à¥‡à¤¡à¤¶à¥€à¤Ÿà¥"; + Text[ ar ] = "جدول %PRODUCTNAME 6.0"; + Text[ he ] = "%PRODUCTNAME 6.0 Tabelle"; +}; +String SCSTR_50_LONG_DOCNAME +{ + Text [ de ] = "%PRODUCTNAME 5.0 Tabelle" ; + Text [ en-US ] = "%PRODUCTNAME 5.0 Spreadsheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "%PRODUCTNAME 5.0 Folha de cálculo"; + Text[ ru ] = "ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° %PRODUCTNAME 5.0"; + Text[ el ] = "%PRODUCTNAME 5.0 - Πίνακας"; + Text[ nl ] = "%PRODUCTNAME 5.0 werkblad"; + Text[ fr ] = "%PRODUCTNAME 5.0 Classeur"; + Text[ es ] = "%PRODUCTNAME 5.0 - Hoja de cálculo"; + Text[ fi ] = "%PRODUCTNAME 5.0 -laskentataulukko"; + Text[ ca ] = "%PRODUCTNAME 5.0 Full de cà lcul"; + Text[ it ] = "Tabella %PRODUCTNAME 5.0"; + Text[ da ] = "%PRODUCTNAME 5.0-tabel"; + Text[ sv ] = "%PRODUCTNAME 5.0 tabell"; + Text[ pl ] = "%PRODUCTNAME 5.0 - Arkusz kalkulacyjny"; + Text[ pt-BR ] = "Planilha de Cálculo %PRODUCTNAME 5.0"; + Text[ th ] = "à¸à¸£à¸°à¸”าษคำนวณ %PRODUCTNAME 5.0 "; + Text[ ja ] = "%PRODUCTNAME 5.0 表計算"; + Text[ ko ] = "%PRODUCTNAME Calc 5.0 ìŠ¤í”„ë ˆë“œì‹œíŠ¸"; + Text[ zh-CN ] = "%PRODUCTNAME 5.0 工作表"; + Text[ zh-TW ] = "%PRODUCTNAME 5.0 工作表"; + Text[ tr ] = "%PRODUCTNAME 5.0 Hesap Tablosu"; + Text[ hi-IN ] = "%PRODUCTNAME 5.0 सà¥à¤ªà¥à¤°à¥‡à¤¡à¤¶à¥€à¤Ÿà¥"; + Text[ ar ] = "جدول %PRODUCTNAME 5.0"; + Text[ he ] = "%PRODUCTNAME 5.0 Tabelle"; +}; +String SCSTR_40_LONG_DOCNAME +{ + Text [ de ] = "%PRODUCTNAME 4.0 Tabelle" ; + Text [ en-US ] = "%PRODUCTNAME 4.0 Spreadsheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "%PRODUCTNAME 4.0 Folha de cálculo"; + Text[ ru ] = "ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° %PRODUCTNAME 4.0"; + Text[ el ] = "%PRODUCTNAME 4.0 - Πίνακας"; + Text[ nl ] = "%PRODUCTNAME 4.0 Werkblad"; + Text[ fr ] = "%PRODUCTNAME 4.0 Classeur"; + Text[ es ] = "%PRODUCTNAME 4.0 - Hoja de cálculo"; + Text[ fi ] = "%PRODUCTNAME 4.0 -laskentataulukko"; + Text[ ca ] = "%PRODUCTNAME 4.0 Full de cà lcul"; + Text[ it ] = "Foglio elettronico %PRODUCTNAME 4.0"; + Text[ da ] = "StarCalc 4.0 regneark"; + Text[ sv ] = "%PRODUCTNAME 4.0 tabell"; + Text[ pl ] = "%PRODUCTNAME 4.0 - Arkusz kalkulacyjny"; + Text[ pt-BR ] = "Planilha de cálculo %PRODUCTNAME 4.0"; + Text[ th ] = "à¸à¸£à¸°à¸”าษคำนวณ %PRODUCTNAME 4.0 "; + Text[ ja ] = "%PRODUCTNAME 4.0 表計算"; + Text[ ko ] = "%PRODUCTNAME 4.0 ìŠ¤í”„ë ˆë“œì‹œíŠ¸"; + Text[ zh-CN ] = "%PRODUCTNAME 4.0 工作表"; + Text[ zh-TW ] = "%PRODUCTNAME 4.0 工作表"; + Text[ tr ] = "%PRODUCTNAME 4.0 Hesap Tablosu"; + Text[ hi-IN ] = "%PRODUCTNAME 4.0 सà¥à¤ªà¥à¤°à¥‡à¤¡à¤¶à¥€à¤Ÿà¥"; + Text[ ar ] = "جدول %PRODUCTNAME 4.0"; + Text[ he ] = "%PRODUCTNAME 4.0 Tabelle"; +}; +String SCSTR_30_LONG_DOCNAME +{ + Text [ de ] = "StarCalc 3.0 Tabelle" ; + Text [ en-US ] = "StarCalc 3.0 Spreadsheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "StarCalc 3.0 - Folha de cálculo"; + Text[ ru ] = "ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° StarCalc 3.0"; + Text[ el ] = "StarCalc 3.0 - Πίνακας"; + Text[ nl ] = "StarCalc 3.0 werkblad"; + Text[ fr ] = "StarCalc 3.0 Classeur"; + Text[ es ] = "StarCalc 3.0 - Hoja de cálculo"; + Text[ fi ] = "StarCalc 3.0 -laskentataulukko"; + Text[ ca ] = "Full de cà lcul StarCalc 3.0"; + Text[ it ] = "Foglio elettronico StarCalc 3.0"; + Text[ da ] = "StarCalc 3.0 regneark"; + Text[ sv ] = "StarCalc 3.0 tabell"; + Text[ pl ] = "Arkusz kalkulacyjny StarCalc 3.0"; + Text[ pt-BR ] = "StarCalc 3.0 Planilha de Cálculo"; + Text[ th ] = "à¸à¸£à¸°à¸”าษคำนวณ StarCalc 3.0 "; + Text[ ja ] = "StarCalc 3.0 表計算"; + Text[ ko ] = "StarCalc 3.0 ìŠ¤í”„ë ˆë“œì‹œíŠ¸"; + Text[ zh-CN ] = "StaCalc 3.0 工作表"; + Text[ zh-TW ] = "StarCalc 3.0 工作表"; + Text[ tr ] = "StarCalc 3.0 Hesap Tablosu"; + Text[ hi-IN ] = "StarCalc 3.0 सà¥à¤ªà¥à¤°à¥‡à¤¡à¤¶à¥€à¤Ÿà¥"; + Text[ ar ] = "جدول Star Calc 3.0"; + Text[ he ] = "StarCalc 3.0 Tabelle"; +}; +String SCSTR_SHORT_SCDOC_NAME +{ + Text [ de ] = "Tabelle" ; + Text [ en-US ] = "Spreadsheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Folha de cálculo"; + Text[ ru ] = "ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°"; + Text[ el ] = "Πίνακας"; + Text[ nl ] = "Werkblad"; + Text[ fr ] = "Feuille de calcul"; + Text[ es ] = "Hoja de cálculo"; + Text[ fi ] = "Laskentataulukko"; + Text[ ca ] = "Full de cà lcul"; + Text[ it ] = "Foglio di calcolo"; + Text[ da ] = "Regneark"; + Text[ sv ] = "Tabell"; + Text[ pl ] = "Arkusz kalkulacyjny"; + Text[ pt-BR ] = "Planilha de Cálculo"; + Text[ th ] = "à¸à¸£à¸°à¸”าษคำนวณ"; + Text[ ja ] = "表"; + Text[ ko ] = "ìŠ¤í”„ë ˆë“œì‹œíŠ¸"; + Text[ zh-CN ] = "工作表"; + Text[ zh-TW ] = "工作表"; + Text[ tr ] = "Gesap Tablosu"; + Text[ hi-IN ] = "सà¥à¤ªà¥à¤°à¥‡à¤¡à¤¶à¥€à¤Ÿà¥"; + Text[ ar ] = "الجدول"; + Text[ he ] = "‮גליון ××œ×§×˜×¨×•× ×™â€¬"; +}; +String SCSTR_HUMAN_SCDOC_NAME +{ + Text [ de ] = "Tabelle" ; + Text [ en-US ] = "Spreadsheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Folha de cálculo"; + Text[ ru ] = "ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°"; + Text[ el ] = "Πίνακας"; + Text[ nl ] = "Werkblad"; + Text[ fr ] = "Feuille de calcul"; + Text[ es ] = "Hoja de cálculo"; + Text[ fi ] = "Laskentataulukko"; + Text[ ca ] = "Full de cà lcul"; + Text[ it ] = "Foglio di calcolo"; + Text[ da ] = "Regneark"; + Text[ sv ] = "Tabell"; + Text[ pl ] = "Arkusz kalkulacyjny"; + Text[ pt-BR ] = "Planilha de Cálculo"; + Text[ th ] = "à¸à¸£à¸°à¸”าษคำนวณ"; + Text[ ja ] = "表"; + Text[ ko ] = "ìŠ¤í”„ë ˆë“œì‹œíŠ¸"; + Text[ zh-CN ] = "工作表"; + Text[ zh-TW ] = "工作表"; + Text[ tr ] = "Hesap Tablosu"; + Text[ hi-IN ] = "सà¥à¤ªà¥à¤°à¥‡à¤¡à¤¶à¥€à¤Ÿà¥"; + Text[ ar ] = "الجدول"; + Text[ he ] = "‮גליון ××œ×§×˜×¨×•× ×™â€¬"; +}; + +String SCSTR_DOCSHELL +{ + Text [ de ] = "Tabelle" ; + Text [ en-US ] = "Sheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Folha"; + Text[ ru ] = "ЛиÑÑ‚"; + Text[ el ] = "ΦÏλλο"; + Text[ nl ] = "Werkblad"; + Text[ fr ] = "Feuille"; + Text[ es ] = "Hoja"; + Text[ fi ] = "Taulukko"; + Text[ ca ] = "Full"; + Text[ it ] = "Tabella"; + Text[ da ] = "Ark"; + Text[ sv ] = "Tabell"; + Text[ pl ] = "Arkusz"; + Text[ pt-BR ] = "Planilha"; + Text[ th ] = "à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表"; + Text[ ko ] = "시트"; + Text[ zh-CN ] = "工作表"; + Text[ zh-TW ] = "工作表"; + Text[ tr ] = "Tablo"; + Text[ hi-IN ] = "शीटà¥"; + Text[ ar ] = "الجدول"; + Text[ he ] = "Tabelle"; +}; + +String SCSTR_TABVIEWSHELL +{ + Text [ de ] = "Zellen" ; + Text [ en-US ] = "Cells" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Células"; + Text[ ru ] = "Ячейки"; + Text[ el ] = "Κελιά"; + Text[ nl ] = "Cellen"; + Text[ fr ] = "Cellules"; + Text[ es ] = "Celdas"; + Text[ fi ] = "Solut"; + Text[ ca ] = "Cel.les"; + Text[ it ] = "Celle"; + Text[ da ] = "Celler"; + Text[ sv ] = "Celler"; + Text[ pl ] = "Komórki"; + Text[ pt-BR ] = "Células"; + Text[ th ] = "เซลล์"; + Text[ ja ] = "セル"; + Text[ ko ] = "ì…€"; + Text[ zh-CN ] = "å•å…ƒæ ¼"; + Text[ zh-TW ] = "儲å˜æ ¼"; + Text[ tr ] = "Hücre"; + Text[ hi-IN ] = "कोषà¥à¤ ें"; + Text[ ar ] = "الخلايا"; + Text[ he ] = "Zellen"; +}; + +String SCSTR_CELLSHELL +{ + Text [ de ] = "Zellfunktionen" ; + Text [ en-US ] = "Functions for Cells"; + Text [ x-comment ] = " "; + Text[ pt ] = "Funções de células"; + Text[ ru ] = "Функции Ñчеек"; + Text[ el ] = "ΛειτουÏγίες κελιών"; + Text[ nl ] = "Celfuncties"; + Text[ fr ] = "Fonctions de cellule"; + Text[ es ] = "Funciones de celda"; + Text[ fi ] = "Solujen funktiot"; + Text[ ca ] = "Funcions de cel.la"; + Text[ it ] = "Funzione delle celle"; + Text[ da ] = "Cellefunktioner"; + Text[ sv ] = "Cellfunktioner"; + Text[ pl ] = "Funkcje komórek"; + Text[ pt-BR ] = "Funções para células"; + Text[ th ] = "ฟังà¸à¹Œà¸Šà¸±à¹ˆà¸™à¸ªà¸³à¸«à¸£à¸±à¸šà¹€à¸‹à¸¥à¸¥à¹Œ"; + Text[ ja ] = "セルã®é–¢æ•°"; + Text[ ko ] = "ì…€ 기능"; + Text[ zh-CN ] = "å•å…ƒæ ¼å‡½æ•°"; + Text[ zh-TW ] = "儲å˜æ ¼åŠŸèƒ½"; + Text[ tr ] = "Hücre iÅŸlevi"; + Text[ hi-IN ] = "कोषà¥à¤ ों केलिठफ़ंकà¥à¤¶à¤¨à¥à¤¸"; + Text[ ar ] = "مهام الخلايا"; + Text[ he ] = "Zellfunktionen"; +}; + +String SCSTR_FORMATSHELL +{ + Text [ de ] = "Zellformate" ; + Text [ en-US ] = "Formats for Cells"; + Text [ x-comment ] = " "; + Text[ pt ] = "Formatos de células"; + Text[ ru ] = "Форматы Ñчеек"; + Text[ el ] = "ΜοÏφÎÏ‚ κελιών"; + Text[ nl ] = "Celformaten"; + Text[ fr ] = "Formats de cellule"; + Text[ es ] = "Formatos de celda"; + Text[ fi ] = "Solujen muodot"; + Text[ ca ] = "Formats de les cel.les"; + Text[ it ] = "Formato delle celle"; + Text[ da ] = "Celleformater"; + Text[ sv ] = "Cellformat"; + Text[ pl ] = "Formaty komórek"; + Text[ pt-BR ] = "Formatos para Células"; + Text[ th ] = "รูปà¹à¸šà¸šà¸ªà¸³à¸«à¸£à¸±à¸šà¹€à¸‹à¸¥à¸¥à¹Œ"; + Text[ ja ] = "セルã®æ›¸å¼"; + Text[ ko ] = "ì…€ ì„œì‹"; + Text[ zh-CN ] = "å•å…ƒæ ¼æ ¼å¼"; + Text[ zh-TW ] = "儲å˜æ ¼æ ¼å¼"; + Text[ tr ] = "Hücre formatı"; + Text[ hi-IN ] = "कोषà¥à¤ ों केलिठरचना"; + Text[ ar ] = "تنسيقات الخلايا"; + Text[ he ] = "Zellformate"; +}; + + +String SCSTR_DRAWSHELL +{ + Text [ de ] = "Grafikobjekte" ; + Text [ en-US ] = "Graphics objects" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Objectos gráficos"; + Text[ ru ] = "ГрафичеÑкие объекты"; + Text[ el ] = "Αντικείμενα γÏαφικών"; + Text[ nl ] = "Grafische objecten"; + Text[ fr ] = "Objets graphiques"; + Text[ es ] = "Objetos gráficos"; + Text[ fi ] = "Grafiikkaobjektit"; + Text[ ca ] = "Objectes grà fics"; + Text[ it ] = "Oggetti grafici"; + Text[ da ] = "Grafiske objekter"; + Text[ sv ] = "Grafikobjekt"; + Text[ pl ] = "Obiekty graficzne"; + Text[ pt-BR ] = "Objetos de figuras"; + Text[ th ] = "วัตถุà¸à¸£à¸²à¸Ÿà¸´à¸„"; + Text[ ja ] = "図形æ画オブジェクト"; + Text[ ko ] = "그림 개체"; + Text[ zh-CN ] = "图形对象"; + Text[ zh-TW ] = "圖形物件"; + Text[ tr ] = "Grafik nesnesi"; + Text[ hi-IN ] = "सà¥à¤šà¤¿à¤¤à¥à¤° वसà¥à¤¤à¥"; + Text[ ar ] = "كائنات صورة"; + Text[ he ] = "Grafikobjekte"; +}; + +String SCSTR_DRAWTEXTSHELL +{ + Text [ de ] = "Textobjekte" ; + Text [ en-US ] = "Text objects" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Objectos de texto"; + Text[ ru ] = "ТекÑтовые объекты"; + Text[ el ] = "Αντικείμενα κειμÎνου"; + Text[ nl ] = "Tekstobjecten"; + Text[ fr ] = "Objets de texte"; + Text[ es ] = "Objetos de texto"; + Text[ fi ] = "Tekstiobjektit"; + Text[ ca ] = "Objectes de text"; + Text[ it ] = "Oggetti di testo"; + Text[ da ] = "Tekstobjekter"; + Text[ sv ] = "Textobjekt"; + Text[ pl ] = "Obiekty tekstowe"; + Text[ pt-BR ] = "Objetos de texto"; + Text[ th ] = "วัตถุข้à¸à¸„วาม"; + Text[ ja ] = "テã‚ストオブジェクト"; + Text[ ko ] = "í…스트 개체"; + Text[ zh-CN ] = "æ–‡å—对象"; + Text[ zh-TW ] = "æ–‡å—物件"; + Text[ tr ] = "Metin nesnesi"; + Text[ hi-IN ] = "टेकà¥à¤¸à¥à¤Ÿà¥ वसà¥à¤¤à¥"; + Text[ ar ] = "كائنات النص"; + Text[ he ] = "Textobjekte"; +}; + +String SCSTR_DRAWFORMSHELL +{ + Text [ de ] = "Formularobjekte" ; + Text [ en-US ] = "Form objects"; + Text [ x-comment ] = " "; + Text[ pt ] = "Objectos de formulário"; + Text[ ru ] = "Объекты форм"; + Text[ el ] = "Αντικείμενα φόÏμας"; + Text[ nl ] = "Formulierobjecten"; + Text[ fr ] = "Objets de formulaire"; + Text[ es ] = "Objetos de formulario"; + Text[ fi ] = "Lomakeobjektit"; + Text[ ca ] = "Objectes del formulari"; + Text[ it ] = "Oggetti per formulario"; + Text[ da ] = "Formularobjekter"; + Text[ sv ] = "Formulärobjekt"; + Text[ pl ] = "Obiekty formularza"; + Text[ pt-BR ] = "Objetos de formulário"; + Text[ th ] = "จาà¸à¸§à¸±à¸•à¸–ุ"; + Text[ ja ] = "フォームオブジェクト"; + Text[ ko ] = "ì–‘ì‹ ê°œì²´"; + Text[ zh-CN ] = "表å•å¯¹è±¡"; + Text[ zh-TW ] = "表單物件"; + Text[ tr ] = "Form nesnesi"; + Text[ hi-IN ] = "फ़ॉरà¥à¤® वसà¥à¤¤à¥"; + Text[ ar ] = "كائنات الاستمارة"; + Text[ he ] = "Formularobjekte"; +}; + +String SCSTR_CHARTSHELL +{ + Text [ de ] = "Chart-Objekte" ; + Text [ en-US ] = "Chart objects"; + Text[ pt ] = "Objectos de gráficos"; + Text[ ru ] = "Объекты диаграммы"; + Text[ el ] = "Αντικείμενα διαγÏάμματος"; + Text[ nl ] = "Chart-objecten"; + Text[ fr ] = "Objets de diagramme"; + Text[ es ] = "Objetos de diagrama"; + Text[ fi ] = "Kaavio-objektit"; + Text[ ca ] = "Objectes del diagrama"; + Text[ it ] = "Diagrammi"; + Text[ da ] = "Diagram-objekter"; + Text[ sv ] = "Chart-objekt"; + Text[ pl ] = "Obiekty wykresu"; + Text[ pt-BR ] = "Objetos de gráficos"; + Text[ th ] = "วัตถุà¹à¸œà¸™à¸ ูมิ"; + Text[ ja ] = "グラフオブジェクト"; + Text[ ko ] = "차트 개체"; + Text[ zh-CN ] = "图表对象"; + Text[ zh-TW ] = "圖表物件"; + Text[ tr ] = "Åžema nesnesi"; + Text[ hi-IN ] = "चारà¥à¤Ÿ वसà¥à¤¤à¥"; + Text[ ar ] = "كائنات الرسم البياني"; + Text[ he ] = "Chart-Objekte"; +}; + +String SCSTR_OLEOBJECTSHELL +{ + Text [ de ] = "OLE-Objekte" ; + Text [ en-US ] = "OLE objects"; + Text [ x-comment ] = " "; + Text[ pt ] = "Objectos OLE"; + Text[ ru ] = "OLE объекты"; + Text[ el ] = "Αντικείμενα OLE"; + Text[ nl ] = "OLE-objecten"; + Text[ fr ] = "Objets OLE"; + Text[ es ] = "Objetos OLE"; + Text[ fi ] = "OLE-objektit"; + Text[ ca ] = "Objectes OLE"; + Text[ it ] = "Oggetti OLE"; + Text[ da ] = "OLE-objekter"; + Text[ sv ] = "OLE-objekt"; + Text[ pl ] = "Obiekty OLE"; + Text[ pt-BR ] = "Objetos OLE"; + Text[ th ] = "วัตถุ OLE "; + Text[ ja ] = "OLE オブジェクト"; + Text[ ko ] = "OLE 개체"; + Text[ zh-CN ] = "OLE 对象"; + Text[ zh-TW ] = "OLE 物价"; + Text[ tr ] = "OLE nesnesi"; + Text[ hi-IN ] = "OLE वसà¥à¤¤à¥"; + Text[ ar ] = "كائنات OLE"; + Text[ he ] = "OLE-Objekte"; +}; + +String SCSTR_GRAPHICSHELL +{ + Text [ de ] = "Grafik" ; + Text [ en-US ] = "Graphics"; + Text[ pt ] = "Imagem"; + Text[ ru ] = "ГрафичеÑкие объекты"; + Text[ el ] = "ΓÏαφικό"; + Text[ nl ] = "Afbeeldingen"; + Text[ fr ] = "Image"; + Text[ es ] = "Imagen"; + Text[ fi ] = "Grafiikka"; + Text[ ca ] = "Grà fics"; + Text[ it ] = "Immagine"; + Text[ da ] = "Grafik"; + Text[ sv ] = "Grafik"; + Text[ pl ] = "Grafika"; + Text[ pt-BR ] = "Figuras"; + Text[ th ] = "à¸à¸£à¸²à¸Ÿà¸´à¸„"; + Text[ ja ] = "図"; + Text[ ko ] = "그림"; + Text[ zh-CN ] = "图形"; + Text[ zh-TW ] = "圖形"; + Text[ tr ] = "Grafik"; + Text[ hi-IN ] = "सà¥à¤šà¤¿à¤¤à¥à¤°"; + Text[ ar ] = "صورة"; + Text[ he ] = "‮גרפיקה‬"; +}; +String SCSTR_PAGEBREAKSHELL +{ + Text [ de ] = "Seitenumbruch" ; + Text [ en-US ] = "Pagebreak"; + Text [ x-comment ] = " "; + Text[ pt ] = "Quebra de página"; + Text[ ru ] = "Разрыв Ñтраницы"; + Text[ el ] = "Αλλαγή σελίδας"; + Text[ nl ] = "Pagina-einde"; + Text[ fr ] = "Saut de page"; + Text[ es ] = "Salto de página"; + Text[ fi ] = "Sivunvaihto"; + Text[ ca ] = "Salt de pà gina"; + Text[ it ] = "Interruzione di pagina"; + Text[ da ] = "Sideskift"; + Text[ sv ] = "Sidbrytning"; + Text[ pl ] = "PodziaÅ‚ strony"; + Text[ pt-BR ] = "Quebra de página"; + Text[ th ] = "ตัวà¹à¸šà¹ˆà¸‡à¸«à¸™à¹‰à¸²"; + Text[ ja ] = "改ページ"; + Text[ ko ] = "페ì´ì§€ 나누기"; + Text[ zh-CN ] = "æ¢é¡µ"; + Text[ zh-TW ] = "æ›é "; + Text[ tr ] = "Sayfa sonu"; + Text[ hi-IN ] = "पृषà¥à¤ खणà¥à¤¡à¤¨"; + Text[ ar ] = "Ùاصل صÙØات"; + Text[ he ] = "Seitenumbruch"; +}; + +String SCSTR_EDITSHELL +{ + Text [ de ] = "Textbearbeitung" ; + Text [ en-US ] = "Text editing" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Edição de texto"; + Text[ ru ] = "Редактирование текÑта"; + Text[ el ] = "ΕπεξεÏγασία κειμÎνου"; + Text[ nl ] = "Tekstbewerking"; + Text[ fr ] = "Édition de texte"; + Text[ es ] = "Edición de texto"; + Text[ fi ] = "Tekstin muokkaus"; + Text[ ca ] = "Edició del text"; + Text[ it ] = "Modifica testo"; + Text[ da ] = "Tekstredigering"; + Text[ sv ] = "Textredigering"; + Text[ pl ] = "Edytowanie tekstu"; + Text[ pt-BR ] = "Edição de texto"; + Text[ th ] = "à¹à¸à¹‰à¹„ขข้à¸à¸„วาม"; + Text[ ja ] = "テã‚ストã®ç·¨é›†"; + Text[ ko ] = "í…스트 편집"; + Text[ zh-CN ] = "æ–‡å—编辑"; + Text[ zh-TW ] = "æ–‡å—編輯"; + Text[ tr ] = "Metin düzenleme"; + Text[ hi-IN ] = "टेकà¥à¤¸à¥à¤Ÿà¥ संपादन"; + Text[ ar ] = "تØرير النص"; + Text[ he ] = "Textbearbeitung"; +}; + +String SCSTR_PREVIEWSHELL +{ + Text [ de ] = "Druckvorschau" ; + Text [ en-US ] = "Print Preview" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Visualizar impressão"; + Text[ ru ] = "Предварительный проÑмотр печати"; + Text[ el ] = "Î Ïοεπισκόπηση εκτÏπωσης"; + Text[ nl ] = "Afdrukvoorbeeld"; + Text[ fr ] = "Aperçu"; + Text[ es ] = "Presentación preliminar"; + Text[ fi ] = "Tulostuksen esikatselu"; + Text[ ca ] = "Exemple d'impressió"; + Text[ it ] = "Anteprima stampa"; + Text[ da ] = "Udskriftsvisning"; + Text[ sv ] = "Skärmutskrift"; + Text[ pl ] = "PodglÄ…d wydruku"; + Text[ pt-BR ] = "Visualizar Impressão"; + Text[ th ] = "à¹à¸ªà¸”งตัวà¸à¸¢à¹ˆà¸²à¸‡à¸à¹ˆà¸à¸™à¸žà¸´à¸¡à¸žà¹Œ"; + Text[ ja ] = "å°åˆ·ãƒ—レビュー"; + Text[ ko ] = "ì¸ì‡„ 미리 보기"; + Text[ zh-CN ] = "打å°é¢„览"; + Text[ zh-TW ] = "列å°æª¢è¦–"; + Text[ tr ] = "Yazıcı önizleme"; + Text[ hi-IN ] = "छपाई पूरà¥à¤µà¤¦à¥ƒà¤¶à¥à¤¯"; + Text[ ar ] = "معاينة قبل الطباعة"; + Text[ he ] = "Druckvorschau"; +}; + +String SCSTR_PIVOTSHELL +{ + Text [ de ] = "Datenpilot-Tabellen" ; + Text [ en-US ] = "Data Pilot Tables" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Tabelas do Piloto de Dados"; + Text[ ru ] = "ЛиÑÑ‚Ñ‹ Ñводной таблицы"; + Text[ el ] = "Πίνακες πιλότου δεδομÎνων"; + Text[ nl ] = "DataPiloot-tabellen"; + Text[ fr ] = "Tables du pilote de données"; + Text[ es ] = "Tablas del piloto de datos"; + Text[ fi ] = "Tietotaulukoiden ohjaus"; + Text[ ca ] = "Taules del DataPilot"; + Text[ it ] = "Tabelle DataPilot"; + Text[ da ] = "DataPilot-tabeller"; + Text[ sv ] = "Datapilottabeller"; + Text[ pl ] = "Tabele Pilota danych"; + Text[ pt-BR ] = "Tabelas Dinâmicas"; + Text[ th ] = "ตาราง Data Pilot"; + Text[ ja ] = "データパイãƒãƒƒãƒˆã®è¡¨"; + Text[ ko ] = "ë°ì´í„° 파ì¼ëŸ¿ í‘œ"; + Text[ zh-CN ] = "æ•°æ®åŠ©ç†å·¥ä½œè¡¨"; + Text[ zh-TW ] = "資料助ç†å·¥ä½œè¡¨"; + Text[ tr ] = "Veri pilotu tablosu"; + Text[ hi-IN ] = "ड़ॉटा पैलटॠसारणी"; + Text[ ar ] = "جداول مرشد البيانات"; + Text[ he ] = "Datenpilot-Tabellen"; +}; + +String SCSTR_AUDITSHELL +{ + /* ### ACHTUNG: Neuer Text in Resource? Detektiv-Füll-Modus : Detektiv-F³ll-Modus */ + Text [ de ] = "Detektiv-Füll-Modus" ; + Text [ en-US ] = "Detective Fill Mode" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Modo preenchimento de auditoria"; + Text[ ru ] = "Режим заливки завиÑимоÑтей"; + Text[ el ] = "Κατάσταση γεμίσματος ανιχνευτή"; + Text[ nl ] = "Detective opvulmodus"; + Text[ fr ] = "Mode Remplissage d'audit"; + Text[ es ] = "Modo Detective de relleno"; + Text[ fi ] = "Jäljityksen täyttötila"; + Text[ ca ] = "Mode d'emplenament Detective"; + Text[ it ] = "Modo di riempimento detective"; + Text[ da ] = "Detektiv-fyldmodus"; + Text[ sv ] = "Detektiv-fyllningsläge"; + Text[ pl ] = "Tryb wypeÅ‚niania detektywa"; + Text[ pt-BR ] = "Modo de Preenchimento do Auditor"; + Text[ th ] = "โหมดเติมà¹à¸šà¸šà¸•à¸£à¸§à¸ˆà¸«à¸²"; + Text[ ja ] = "トレース実行モード"; + Text[ ko ] = "추ì 채우기 모드"; + Text[ zh-CN ] = "侦探-充填模å¼"; + Text[ zh-TW ] = "åµæŽ¢-填入模å¼"; + Text[ tr ] = "Dedektif doldurma kipi"; + Text[ hi-IN ] = "डिटेकà¥à¤Ÿà¤¿à¤µ à¤à¤°à¤¨à¥‡ का पà¥à¤°à¤•à¤¾à¤°"; + Text[ ar ] = "وضع تعبئة المخبر"; + Text[ he ] = "Detektiv-Füll-Modus"; +}; + + // ----------------------------------------------------------------------- + +String STR_OPT_ROWHEIGHT +{ + Text [ de ] = "Extra" ; + Text [ en-US ] = "Add" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Adicionar"; + Text[ ru ] = "Добавить"; + Text[ el ] = "Î Ïόσθετα"; + Text[ nl ] = "Extra"; + Text[ fr ] = "Extra"; + Text[ es ] = "Añadir"; + Text[ fi ] = "Lisää"; + Text[ ca ] = "Afegeix"; + Text[ it ] = "Extra"; + Text[ da ] = "Tilføj"; + Text[ sv ] = "Extra"; + Text[ pl ] = "Dodaj"; + Text[ pt-BR ] = "Adicionar"; + Text[ th ] = "เพิ่ม"; + Text[ ja ] = "詳細è¨å®š"; + Text[ ko ] = "추가"; + Text[ zh-CN ] = "é™„åŠ "; + Text[ zh-TW ] = "é™„åŠ "; + Text[ tr ] = "Ekle"; + Text[ hi-IN ] = "जोड़ो"; + Text[ ar ] = "إضاÙÙŠ"; + Text[ he ] = "‮הוספה‬"; +}; +String STR_ROWHEIGHT_TITLE +{ + /* ### ACHTUNG: Neuer Text in Resource? Zeilenhöhe : Zeilenh÷he */ + Text [ de ] = "Zeilenhöhe" ; + Text [ en-US ] = "Row Height" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Altura da linha"; + Text[ ru ] = "Ð’Ñ‹Ñота Ñтроки"; + Text[ el ] = "Ύψος γÏαμμής"; + Text[ nl ] = "Rijhoogte"; + Text[ fr ] = "Hauteur de ligne"; + Text[ es ] = "Altura de fila"; + Text[ fi ] = "Rivin korkeus"; + Text[ ca ] = "Alçada de la fila"; + Text[ it ] = "Altezza riga"; + Text[ da ] = "Rækkehøjde"; + Text[ sv ] = "Radhöjd"; + Text[ pl ] = "Wysokość wierszy"; + Text[ pt-BR ] = "Altura da Linha"; + Text[ th ] = "ความยาวà¹à¸–ว"; + Text[ ja ] = "è¡Œã®é«˜ã•"; + Text[ ko ] = "í–‰ 높ì´"; + Text[ zh-CN ] = "行高"; + Text[ zh-TW ] = "列高"; + Text[ tr ] = "Satır yüksekliÄŸi"; + Text[ hi-IN ] = "पंकà¥à¤¤à¤¿ ऊà¤à¤šà¤¾à¤ˆ"; + Text[ ar ] = "ارتÙاع الصÙ"; + Text[ he ] = "‮גובה שורה‬"; +}; +String STR_OPT_ROWHEIGHT_TITLE +{ + /* ### ACHTUNG: Neuer Text in Resource? Optimale Zeilenhöhe : Optimale Zeilenh÷he */ + Text [ de ] = "Optimale Zeilenhöhe" ; + Text [ en-US ] = "Optimal Row Height" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Optimizar altura da linha"; + Text[ ru ] = "ÐžÐ¿Ñ‚Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð²Ñ‹Ñота Ñтроки"; + Text[ el ] = "Î’Îλτιστο Ïψος γÏαμμής"; + Text[ nl ] = "Optimale rijhoogte"; + Text[ fr ] = "Hauteur de ligne optimale"; + Text[ es ] = "Altura óptima de fila"; + Text[ fi ] = "Optimaalinen rivikorkeus"; + Text[ ca ] = "Alçada òptima de la fila"; + Text[ it ] = "Altezza riga ottimale"; + Text[ da ] = "Optimal rækkehøjde"; + Text[ sv ] = "Optimal radhöjd"; + Text[ pl ] = "Optymalna wysokość wierszy"; + Text[ pt-BR ] = "Otimizar Altura da Linha"; + Text[ th ] = "ความยาวà¹à¸–วที่เหมาะที่สุด"; + Text[ ja ] = "最é©ãªè¡Œã®é«˜ã•"; + Text[ ko ] = "최ì ì˜ í–‰ 높ì´"; + Text[ zh-CN ] = "最佳行高"; + Text[ zh-TW ] = "最é©åˆ—高"; + Text[ tr ] = "En uygun satır yüksekliÄŸi"; + Text[ hi-IN ] = "Optimal Row Height"; + Text[ ar ] = "الارتÙاع الأمثل للصÙ"; + Text[ he ] = "‮גובה שורה מיטבי‬"; +}; +String STR_COLWIDTH +{ + Text [ de ] = "Breite" ; + Text [ en-US ] = "Width" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Largura"; + Text[ ru ] = "Ширина"; + Text[ el ] = "Πλάτος"; + Text[ nl ] = "Breedte"; + Text[ fr ] = "Largeur"; + Text[ es ] = "Ancho"; + Text[ fi ] = "Leveys"; + Text[ ca ] = "Amplada"; + Text[ it ] = "Larghezza"; + Text[ da ] = "Bredde"; + Text[ sv ] = "Bredd"; + Text[ pl ] = "Szerokość"; + Text[ pt-BR ] = "Largura"; + Text[ th ] = "ความà¸à¸§à¹‰à¸²à¸‡"; + Text[ ja ] = "å¹…"; + Text[ ko ] = "너비"; + Text[ zh-CN ] = "宽度"; + Text[ zh-TW ] = "寬度"; + Text[ tr ] = "GeniÅŸlik"; + Text[ hi-IN ] = "चौड़ाई"; + Text[ ar ] = "العرض"; + Text[ he ] = "‮רוחב‬"; +}; +String STR_OPT_COLWIDTH +{ + Text [ de ] = "Extra" ; + Text [ en-US ] = "Add" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Adicionar"; + Text[ ru ] = "Добавить"; + Text[ el ] = "Î Ïόσθετα"; + Text[ nl ] = "Extra"; + Text[ fr ] = "Extra"; + Text[ es ] = "Añadir"; + Text[ fi ] = "Lisää"; + Text[ ca ] = "Afegeix"; + Text[ it ] = "Extra"; + Text[ da ] = "Tilføj"; + Text[ sv ] = "Extra"; + Text[ pl ] = "Dodaj"; + Text[ pt-BR ] = "Adicionar"; + Text[ th ] = "เพิ่ม"; + Text[ ja ] = "詳細è¨å®š"; + Text[ ko ] = "추가"; + Text[ zh-CN ] = "é™„åŠ "; + Text[ zh-TW ] = "é™„åŠ "; + Text[ tr ] = "Ekle"; + Text[ hi-IN ] = "जोड़ो"; + Text[ ar ] = "إضاÙÙŠ"; + Text[ he ] = "‮הוספה‬"; +}; +String STR_COLWIDTH_TITLE +{ + Text [ de ] = "Spaltenbreite" ; + Text [ en-US ] = "Column Width" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Largura da coluna"; + Text[ ru ] = "Ширина Ñтолбца"; + Text[ el ] = "Πλάτος στήλης"; + Text[ nl ] = "Kolombreedte"; + Text[ fr ] = "Largeur de colonne"; + Text[ es ] = "Ancho de columna"; + Text[ fi ] = "Sarakkeen leveys"; + Text[ ca ] = "Amplada de la columna"; + Text[ it ] = "Larghezza colonna"; + Text[ da ] = "Kolonnebredde"; + Text[ sv ] = "Kolumnbredd"; + Text[ pl ] = "Szerokość kolumny"; + Text[ pt-BR ] = "Largura da Coluna"; + Text[ th ] = "ความà¸à¸§à¹‰à¸²à¸‡à¸„à¸à¸¥à¸±à¸¡à¸™à¹Œ"; + Text[ ja ] = "列幅"; + Text[ ko ] = "ì—´ 너비"; + Text[ zh-CN ] = "列宽"; + Text[ zh-TW ] = "欄寬"; + Text[ tr ] = "Sütun geniÅŸliÄŸi"; + Text[ hi-IN ] = "सà¥à¤¤à¤‚ठचौड़ाई"; + Text[ ar ] = "عرض الأعمدة"; + Text[ he ] = "Spaltenbreite"; +}; +String STR_OPT_COLWIDTH_TITLE +{ + Text [ de ] = "Optimale Spaltenbreite" ; + Text [ en-US ] = "Optimal Column Width" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Optimizar largura da coluna"; + Text[ ru ] = "ÐžÐ¿Ñ‚Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° колонки"; + Text[ el ] = "Î’Îλτιστο πλάτος στήλης"; + Text[ nl ] = "Optimale kolombreedte"; + Text[ fr ] = "Largeur de colonne optimale"; + Text[ es ] = "Ancho de columna óptimo"; + Text[ fi ] = "Optimaalinen palstaleveys"; + Text[ ca ] = "Amplada òptima de la columna"; + Text[ it ] = "Larghezza colonna ottimale"; + Text[ da ] = "Optimal kolonnebredde"; + Text[ sv ] = "Optimal kolumnbredd"; + Text[ pl ] = "Optymalna szerokość kolumn"; + Text[ pt-BR ] = "Otimizar Largura da Coluna"; + Text[ th ] = "ความà¸à¸§à¹‰à¸²à¸‡à¸„à¸à¸¥à¸±à¸¡à¸™à¹Œà¸—ี่เหมาะที่สุด"; + Text[ ja ] = "最é©ãªåˆ—å¹…"; + Text[ ko ] = "최ì ì˜ ì—´ 너비"; + Text[ zh-CN ] = "最佳列宽"; + Text[ zh-TW ] = "最é©æ¬„寬"; + Text[ tr ] = "En uygun sütun geniÅŸliÄŸi"; + Text[ hi-IN ] = "योगà¥à¤¯ सà¥à¤¤à¤‚ठचौड़ाई"; + Text[ ar ] = "العرض الأمثل للأعمدة"; + Text[ he ] = "‮רוחב טור מיטבי‬"; +}; +String SCSTR_NONAME +{ + Text [ de ] = "unbenannt" ; + Text [ en-US ] = "unnamed" ; + Text [ x-comment ] = " "; + Text[ pt ] = "sem nome"; + Text[ ru ] = "без имени"; + Text[ el ] = "Δίχως όνομα"; + Text[ nl ] = "naamloos"; + Text[ fr ] = "Sans nom"; + Text[ es ] = "Sin nombre"; + Text[ fi ] = "nimetön"; + Text[ ca ] = "sense nom"; + Text[ it ] = "Senza nome"; + Text[ da ] = "ikke-navngivet"; + Text[ sv ] = "namnlös"; + Text[ pl ] = "bez nazwy"; + Text[ pt-BR ] = "sem nome"; + Text[ th ] = "ไม่มีชื่à¸"; + Text[ ja ] = "ç„¡é¡Œ"; + Text[ ko ] = "ì´ë¦„ ì—†ìŒ"; + Text[ zh-CN ] = "未命å"; + Text[ zh-TW ] = "未命å"; + Text[ tr ] = "bilinmeyen"; + Text[ hi-IN ] = "नाम रहित"; + Text[ ar ] = "بدون عنوان"; + Text[ he ] = "unbenannt"; +}; + + +String SCSTR_SHOWTABLE +{ + Text [ de ] = "Tabelle einblenden" ; + Text [ en-US ] = "Show Sheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Mostrar folha"; + Text[ ru ] = "Показать лиÑÑ‚"; + Text[ el ] = "Εμφάνιση πίνακα"; + Text[ nl ] = "Werkblad weergeven"; + Text[ fr ] = "Afficher la feuille"; + Text[ es ] = "Mostrar hoja"; + Text[ fi ] = "Näytä taulukko"; + Text[ ca ] = "Mostra el full"; + Text[ it ] = "Mostra tabella"; + Text[ da ] = "Vis ark"; + Text[ sv ] = "Visa tabell"; + Text[ pl ] = "Pokaż arkusz"; + Text[ pt-BR ] = "Mostrar Planilha"; + Text[ th ] = "à¹à¸ªà¸”งà¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表ã®è¡¨ç¤º"; + Text[ ko ] = "시트 표시"; + Text[ zh-CN ] = "显示工作表"; + Text[ zh-TW ] = "顯示工作表"; + Text[ tr ] = "Tabloyu görüntüle"; + Text[ hi-IN ] = "शीटॠको दिखाओ"; + Text[ ar ] = "إظهار الجدول"; + Text[ he ] = "Tabelle einblenden"; +}; +String SCSTR_HIDDENTABLES +{ + Text [ de ] = "Ausgeblendete Tabellen" ; + Text [ en-US ] = "Hidden Sheets" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Folhas de cálculo ocultas"; + Text[ ru ] = "Скрытые лиÑÑ‚Ñ‹"; + Text[ el ] = "ΚÏυφοί πίνακες"; + Text[ nl ] = "Verborgen werkbladen"; + Text[ fr ] = "Feuilles masquées"; + Text[ es ] = "Hojas ocultas"; + Text[ fi ] = "Piilotetut taulukot"; + Text[ ca ] = "Fulls ocults"; + Text[ it ] = "Tabelle nascoste"; + Text[ da ] = "Skjulte ark"; + Text[ sv ] = "Dolda tabeller"; + Text[ pl ] = "Ukryte arkusze"; + Text[ pt-BR ] = "Planilhas Ocultas"; + Text[ th ] = "ซ่à¸à¸™à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "éžè¡¨ç¤ºã®è¡¨"; + Text[ ko ] = "숨겨진 시트"; + Text[ zh-CN ] = "éšå…¥çš„工作表"; + Text[ zh-TW ] = "隱入的工作表"; + Text[ tr ] = "GizlenmiÅŸ tablolar"; + Text[ hi-IN ] = "छिपाया हà¥à¤† शीटà¥"; + Text[ ar ] = "الجداول المخÙية"; + Text[ he ] = "Ausgeblendete Tabellen"; +}; +String SCSTR_TABLE +{ + Text [ de ] = "Tabelle" ; + Text [ en-US ] = "Sheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Folha"; + Text[ ru ] = "ЛиÑÑ‚"; + Text[ el ] = "ΦÏλλο"; + Text[ nl ] = "Werkblad"; + Text[ fr ] = "Feuille"; + Text[ es ] = "Hoja"; + Text[ fi ] = "Taulukko"; + Text[ ca ] = "Full"; + Text[ it ] = "Tabella"; + Text[ da ] = "Ark"; + Text[ sv ] = "Tabell"; + Text[ pl ] = "Arkusz"; + Text[ pt-BR ] = "Planilha"; + Text[ th ] = "à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表"; + Text[ ko ] = "시트"; + Text[ zh-CN ] = "工作表"; + Text[ zh-TW ] = "工作表"; + Text[ tr ] = "Tablo"; + Text[ hi-IN ] = "शीटà¥"; + Text[ ar ] = "الجدول"; + Text[ he ] = "Tabelle"; +}; +String SCSTR_INSTABLE +{ + /* ### ACHTUNG: Neuer Text in Resource? Tabelle einfügen : Tabelle einf³gen */ + Text [ de ] = "Tabelle einfügen" ; + Text [ en-US ] = "Insert Sheet" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Inserir folha"; + Text[ ru ] = "Ð’Ñтавить лиÑÑ‚"; + Text[ el ] = "Εισαγωγή πίνακα"; + Text[ nl ] = "Werkblad invoegen"; + Text[ fr ] = "Insérer des feuilles"; + Text[ es ] = "Insertar hoja"; + Text[ fi ] = "Lisää taulukko"; + Text[ ca ] = "Insereix un full"; + Text[ it ] = "Inserisci tabella"; + Text[ da ] = "Indsæt ark"; + Text[ sv ] = "Infoga tabell"; + Text[ pl ] = "Wstaw arkusz"; + Text[ pt-BR ] = "Inserir Planilha"; + Text[ th ] = "à¹à¸—รà¸à¹à¸œà¹ˆà¸™à¸‡à¸²à¸™"; + Text[ ja ] = "表ã®æŒ¿å…¥"; + Text[ ko ] = "시트 삽입"; + Text[ zh-CN ] = "æ’入工作表"; + Text[ zh-TW ] = "æ’入工作表"; + Text[ tr ] = "Tablo ekle"; + Text[ hi-IN ] = "शीटॠजोड़ो"; + Text[ ar ] = "إدراج جدول"; + Text[ he ] = "Tabelle einfügen"; +}; + + // Attribute + +String SCSTR_HOR_JUSTIFY_LEFT +{ + Text [ de ] = "Ausrichtung nach links" ; + Text [ en-US ] = "Align left" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Ajustar à esquerda"; + Text[ ru ] = "Выравнивание по левому краю"; + Text[ el ] = "Στοίχιση αÏιστεÏά"; + Text[ nl ] = "Linkslijnend"; + Text[ fr ] = "Alignement à gauche"; + Text[ es ] = "Alinear a la izquierda"; + Text[ fi ] = "Tasaa vasemmalle"; + Text[ ca ] = "Alinea a l'esquerra"; + Text[ it ] = "Allinea a sinistra"; + Text[ da ] = "Venstrejusteret"; + Text[ sv ] = "Vänsterjustera"; + Text[ pl ] = "Wyrównaj do lewej"; + Text[ pt-BR ] = "Alinhar à esquerda"; + Text[ th ] = "จัดตำà¹à¸«à¸™à¹ˆà¸‡à¸‹à¹‰à¸²à¸¢"; + Text[ ja ] = "å·¦æƒãˆ"; + Text[ ko ] = "왼쪽 맞춤"; + Text[ zh-CN ] = "å‘左对é½"; + Text[ zh-TW ] = "å‘å·¦å°é½Š"; + Text[ tr ] = "Sola hizala"; + Text[ hi-IN ] = "बायाठओर पंकà¥à¤¤à¤¿à¤•à¤°à¤£"; + Text[ ar ] = "Ù…Øاذاة إلى اليسار"; + Text[ he ] = "Ausrichtung nach links"; +}; +String SCSTR_HOR_JUSTIFY_CENTER +{ + Text [ de ] = "Horizontal zentriert" ; + Text [ en-US ] = "Centered horizontally" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Centrado na horizontal"; + Text[ ru ] = "Горизонтально по центру"; + Text[ el ] = "ΚεντÏαÏισμÎνα οÏιζόντια"; + Text[ nl ] = "Horizontaal gecentreerd"; + Text[ fr ] = "Centré horizontalement"; + Text[ es ] = "Centrado horizontalmente"; + Text[ fi ] = "Keskitetty vaakataso"; + Text[ ca ] = "Centrat horitzontalment"; + Text[ it ] = "Centra in senso orizzontale"; + Text[ da ] = "Vandret centreret"; + Text[ sv ] = "Horisontellt centrerad"; + Text[ pl ] = "PoÅ›rodku w poziomie"; + Text[ pt-BR ] = "Centralizado na horizontal"; + Text[ th ] = "à¹à¸™à¸§à¸™à¸à¸™à¸•à¸£à¸‡à¸à¸¥à¸²à¸‡"; + Text[ ja ] = "横ä½ç½®ã«ä¸å¤®æƒãˆ"; + Text[ ko ] = "수í‰ìœ¼ë¡œ 가운ë°"; + Text[ zh-CN ] = "水平居ä¸"; + Text[ zh-TW ] = "水平置ä¸"; + Text[ tr ] = "Yatay ortala"; + Text[ hi-IN ] = "समतल पà¥à¤°à¤•à¤¾à¤° से केनà¥à¤¦à¥à¤°à¤¿à¤¤"; + Text[ ar ] = "موسط Ø£Ùقيا"; + Text[ he ] = "Horizontal zentriert"; +}; +String SCSTR_HOR_JUSTIFY_RIGHT +{ + Text [ de ] = "Ausrichtung nach rechts" ; + Text [ en-US ] = "Align right" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Ajustar à direita"; + Text[ ru ] = "Выравнивание по правому краю"; + Text[ el ] = "Στοίχιση δεξιά"; + Text[ nl ] = "Rechtslijnend"; + Text[ fr ] = "Aligner à droite"; + Text[ es ] = "Alinear a la derecha"; + Text[ fi ] = "Tasaa oikealle"; + Text[ ca ] = "Alinea a la dreta"; + Text[ it ] = "Allinea a destra"; + Text[ da ] = "Højrejusteret"; + Text[ sv ] = "Högerjustera"; + Text[ pl ] = "Wyrównaj do prawej"; + Text[ pt-BR ] = "Alinhar à direita"; + Text[ th ] = "จัดตำà¹à¸«à¸™à¹ˆà¸‡à¸‚วา"; + Text[ ja ] = "å³æƒãˆ"; + Text[ ko ] = "오른쪽 맞춤"; + Text[ zh-CN ] = "å‘å³å¯¹é½"; + Text[ zh-TW ] = "å‘å³å°é½Š"; + Text[ tr ] = "SaÄŸa hizala"; + Text[ hi-IN ] = "दाहिनी ओर पंकà¥à¤¤à¤¿à¤•à¤°à¤£"; + Text[ ar ] = "Ù…Øاذاة إلى اليمين"; + Text[ he ] = "Ausrichtung nach rechts"; +}; +String SCSTR_HOR_JUSTIFY_BLOCK +{ + Text [ de ] = "Blockausrichtung" ; + Text [ en-US ] = "Justify" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Justificar"; + Text[ ru ] = "По ширине"; + Text[ el ] = "ΠλήÏης στοίχιση"; + Text[ nl ] = "Uitgevuld"; + Text[ fr ] = "Justifier"; + Text[ es ] = "Justificado"; + Text[ fi ] = "Tasaa"; + Text[ ca ] = "Justifica"; + Text[ it ] = "Giustificato"; + Text[ da ] = "Lige margener"; + Text[ sv ] = "Marginaljustering"; + Text[ pl ] = "Do lewej i prawej"; + Text[ pt-BR ] = "Justificar"; + Text[ th ] = "ชิดขà¸à¸š"; + Text[ ja ] = "両端æƒãˆ"; + Text[ ko ] = "양쪽 맞춤"; + Text[ zh-CN ] = "å·¦å³å¯¹é½"; + Text[ zh-TW ] = "å·¦å³å°é½Š"; + Text[ tr ] = "Ä°ki yana yasla"; + Text[ hi-IN ] = "वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ करो"; + Text[ ar ] = "ضبط"; + Text[ he ] = "Blockausrichtung"; +}; +String SCSTR_HOR_JUSTIFY_REPEAT +{ + Text [ de ] = "Ausrichtung wiederholen" ; + Text [ en-US ] = "Repeat alignment" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Repetir alinhamento"; + Text[ ru ] = "Повторить выравнивание"; + Text[ el ] = "Επανάληψη στοίχισης"; + Text[ nl ] = "Uitlijnen herhalen"; + Text[ fr ] = "Répéter l'alignement"; + Text[ es ] = "Repetir alineación"; + Text[ fi ] = "Toista tasaus"; + Text[ ca ] = "Repeteix l'alineació"; + Text[ it ] = "Ripeti allineamento"; + Text[ da ] = "Gentag justeringen"; + Text[ sv ] = "Upprepa justering"; + Text[ pl ] = "Powtórz wyrównanie"; + Text[ pt-BR ] = "Repetir alinhamento"; + Text[ th ] = "จัดตำà¹à¸«à¸™à¹ˆà¸‡à¸‹à¹‰à¸³"; + Text[ ja ] = "é…ç½®ã®ãƒªãƒ”ート"; + Text[ ko ] = "맞춤 반복"; + Text[ zh-CN ] = "é‡æ–°å¯¹é½"; + Text[ zh-TW ] = "é‡æ–°å°é½Š"; + Text[ tr ] = "Hizalamayı yinele"; + Text[ hi-IN ] = "पंकà¥à¤¤à¤¿à¤•à¤°à¤£ दà¥à¤¹à¤°à¤¾à¤¨à¤¾"; + Text[ ar ] = "تكرار المØاذاة"; + Text[ he ] = "Ausrichtung wiederholen"; +}; +String SCSTR_HOR_JUSTIFY_STANDARD +{ + Text [ de ] = "Horizontale Ausrichtung Standard" ; + Text [ en-US ] = "Horizontal alignment default" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Ajuste padrão na horizontal"; + Text[ ru ] = "Горизонтальное выравнивание (Ñтандарт)"; + Text[ el ] = "Î Ïοεπιλογή: ΟÏιζόντια στοίχιση"; + Text[ nl ] = "Standaard horizontaal uitlijnen"; + Text[ fr ] = "Alignement horizontal par défaut"; + Text[ es ] = "Alineación horizontal preterminada"; + Text[ fi ] = "Vaakatasaus oletuksena"; + Text[ ca ] = "Alineament horitzontal per defecte"; + Text[ it ] = "Allineamento standard orizzontale"; + Text[ da ] = "Standard vandret justering"; + Text[ sv ] = "Horisontell justering standard"; + Text[ pl ] = "DomyÅ›lne wyrównanie w poziomie"; + Text[ pt-BR ] = "Alinhamento horizontal padrão"; + Text[ th ] = "ค่าเริ่มต้นà¸à¸²à¸£à¸ˆà¸±à¸”ตำà¹à¸«à¸™à¹ˆà¸‡à¹à¸™à¸§à¸™à¸à¸™"; + Text[ ja ] = "標準横ä½ç½®"; + Text[ ko ] = "기본 ìˆ˜í‰ ë§žì¶¤"; + Text[ zh-CN ] = "æ°´å¹³å¯¹é½ æ ‡å‡†"; + Text[ zh-TW ] = "æ°´å¹³å°é½Š 標準"; + Text[ tr ] = "Standart yatay hizalama"; + Text[ hi-IN ] = "अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤à¤¿ में समतल पंकà¥à¤¤à¤¿à¤•à¤°à¤£"; + Text[ ar ] = "Ù…Øاذاة Ø£Ùقية اÙتراضية"; + Text[ he ] = "Horizontale Ausrichtung Standard"; +}; +String SCSTR_VER_JUSTIFY_TOP +{ + Text [ de ] = "Ausrichtung nach oben" ; + Text [ en-US ] = "Align to top" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Ajustar para cima"; + Text[ ru ] = "Выравнивание по верхнему краю"; + Text[ el ] = "Στοίχιση πάνω"; + Text[ nl ] = "Op bovenkant uitlijnen"; + Text[ fr ] = "Alignement au bord supérieur"; + Text[ es ] = "Alinear hacia arriba"; + Text[ fi ] = "Tasaa ylös"; + Text[ ca ] = "Alinea a la part superior"; + Text[ it ] = "Allinea in alto"; + Text[ da ] = "Juster opad"; + Text[ sv ] = "Justera uppÃ¥t"; + Text[ pl ] = "Wyrównaj do góry"; + Text[ pt-BR ] = "Alinhar por cima"; + Text[ th ] = "จัดตำà¹à¸«à¸™à¹ˆà¸‡à¸Šà¸´à¸”ด้านบน"; + Text[ ja ] = "上æƒãˆ"; + Text[ ko ] = "ìœ„ì— ë§žì¶¤"; + Text[ zh-CN ] = "å‘上对é½"; + Text[ zh-TW ] = "å‘上å°é½Š"; + Text[ tr ] = "Yukarı hizala"; + Text[ hi-IN ] = "ऊपर केलिठपंकà¥à¤¤à¤¿à¤•à¤°à¤£"; + Text[ ar ] = "Ù…Øاذاة إلى أعلى"; + Text[ he ] = "Ausrichtung nach oben"; +}; +String SCSTR_VER_JUSTIFY_CENTER +{ + Text [ de ] = "Vertikal zentriert" ; + Text [ en-US ] = "Centered vertically" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Centrado na vertical"; + Text[ ru ] = "Вертикально по центру"; + Text[ el ] = "ΚεντÏαÏισμÎνα κατακόÏυφα"; + Text[ nl ] = "Verticaal gecentreerd"; + Text[ fr ] = "Centré verticalement"; + Text[ es ] = "Centrado verticalmente"; + Text[ fi ] = "Keskitetty pystytasossa"; + Text[ ca ] = "Centrat verticalment"; + Text[ it ] = "Centra in verticale"; + Text[ da ] = "Lodret centreret"; + Text[ sv ] = "Vertikalt centrerad"; + Text[ pl ] = "PoÅ›rodku w pionie"; + Text[ pt-BR ] = "Centralizado na vertical"; + Text[ th ] = "à¹à¸™à¸§à¸•à¸±à¹‰à¸‡à¸•à¸£à¸‡à¸à¸¥à¸²à¸‡"; + Text[ ja ] = "上下ã«ä¸å¤®æƒãˆ"; + Text[ ko ] = "수ì§ìœ¼ë¡œ 가운ë°"; + Text[ zh-CN ] = "åž‚ç›´å±…ä¸"; + Text[ zh-TW ] = "åž‚ç›´ç½®ä¸"; + Text[ tr ] = "Dikey ortala"; + Text[ hi-IN ] = "लंबरूप पà¥à¤°à¤•à¤¾à¤° से केनà¥à¤¦à¥à¤°à¤¿à¤¤"; + Text[ ar ] = "موسط عموديا"; + Text[ he ] = "Vertikal zentriert"; +}; +String SCSTR_VER_JUSTIFY_BOTTOM +{ + Text [ de ] = "Ausrichtung nach unten" ; + Text [ en-US ] = "Align to bottom" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Ajustar para baixo"; + Text[ ru ] = "Выравнивание по нижнему краю"; + Text[ el ] = "Στοίχιση Ï€Ïος τα κάτω"; + Text[ nl ] = "Op onderkant uitlijnen"; + Text[ fr ] = "Alignement en bas"; + Text[ es ] = "Alinear hacia abajo"; + Text[ fi ] = "Tasaa alareunaan"; + Text[ ca ] = "Alinea a la part inferior"; + Text[ it ] = "Allinea in basso"; + Text[ da ] = "Juster nedad"; + Text[ sv ] = "Justera nedÃ¥t"; + Text[ pl ] = "Wyrównaj do doÅ‚u"; + Text[ pt-BR ] = "Alinhar por baixo"; + Text[ th ] = "จัดตำà¹à¸«à¸™à¹ˆà¸‡à¸Šà¸´à¸”ด้านล่าง"; + Text[ ja ] = "下æƒãˆ"; + Text[ ko ] = "아래 맞춤"; + Text[ zh-CN ] = "å‘下对é½"; + Text[ zh-TW ] = "å‘下å°é½Š"; + Text[ tr ] = "AÅŸağı hizala"; + Text[ hi-IN ] = "तल केलिठपंकà¥à¤¤à¤¿à¤•à¤°à¤£"; + Text[ ar ] = "Ù…Øاذاة إلى أسÙÙ„"; + Text[ he ] = "Ausrichtung nach unten"; +}; +String SCSTR_VER_JUSTIFY_STANDARD +{ + Text [ de ] = "Vertikale Ausrichtung Standard" ; + Text [ en-US ] = "Vertical alignment default" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Ajustar padrão na vertical"; + Text[ ru ] = "Выравнивание по вертикали (Ñтандарт)"; + Text[ el ] = "Î Ïοεπιλογή: ΚατακόÏυφη στοίχιση"; + Text[ nl ] = "Standaard verticaal uitlijnen"; + Text[ fr ] = "Alignement vertical par défaut"; + Text[ es ] = "Alineación vertical predeterminada"; + Text[ fi ] = "Pystytasaus oletuksena"; + Text[ ca ] = "Alineament vertical per defecte"; + Text[ it ] = "Allineamento verticale standard"; + Text[ da ] = "Standard lodret justering"; + Text[ sv ] = "Vertikal justering standard"; + Text[ pl ] = "DomyÅ›lne wyrównanie w pionie"; + Text[ pt-BR ] = "Alinhamento vertical padrão"; + Text[ th ] = "ค่าเริ่มต้นà¸à¸²à¸£à¸ˆà¸±à¸”ตำà¹à¸«à¸™à¹ˆà¸‡à¹à¸™à¸§à¸•à¸±à¹‰à¸‡"; + Text[ ja ] = "標準上下æƒãˆ"; + Text[ ko ] = "기본 ìˆ˜ì§ ë§žì¶¤"; + Text[ zh-CN ] = "åž‚ç›´å¯¹é½ æ ‡å‡†"; + Text[ zh-TW ] = "åž‚ç›´å°é½Š 標準"; + Text[ tr ] = "Standart dikey hizalama"; + Text[ hi-IN ] = "अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤à¤¿ में लंबरूप पंकà¥à¤¤à¤¿à¤•à¤°à¤£"; + Text[ ar ] = "Ù…Øاذاة رأسية اÙتراضية"; + Text[ he ] = "Vertikale Ausrichtung Standard"; +}; + + +String SCSTR_WRONGPASSWORD +{ + Text [ de ] = "Falsches Kennwort" ; + Text [ en-US ] = "Incorrect Password" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Senha incorrecta"; + Text[ ru ] = "Ðеправильный пароль"; + Text[ el ] = "ΕσφαλμÎνος κωδικός Ï€Ïόσβασης"; + Text[ nl ] = "Dit wachtwoord is niet correct."; + Text[ fr ] = "Mot de passe incorrect"; + Text[ es ] = "Contraseña incorrecta"; + Text[ fi ] = "Väärä salasana"; + Text[ ca ] = "Contrasenya incorrecta"; + Text[ it ] = "Password errata"; + Text[ da ] = "Forkert adgangskode"; + Text[ sv ] = "Felaktigt lösenord"; + Text[ pl ] = "NieprawidÅ‚owe hasÅ‚o"; + Text[ pt-BR ] = "Senha Incorreta"; + Text[ th ] = "รหัสผ่านไม่ภูà¸à¸•à¹‰à¸à¸‡"; + Text[ ja ] = "æ£ã—ããªã„パスワード"; + Text[ ko ] = "옳지 ì•Šì€ ì•”í˜¸"; + Text[ zh-CN ] = "密ç æ— æ•ˆ"; + Text[ zh-TW ] = "密碼無效"; + Text[ tr ] = "Åžifre yanlış"; + Text[ hi-IN ] = "गलत कूटशबà¥à¤¦"; + Text[ ar ] = "كلمة سر غير صØÙŠØØ©"; + Text[ he ] = "Falsches Kennwort"; +}; + + + + +String SCSTR_CHAR_ATTRS +{ + Text [ de ] = "Zeichenattribute" ; + Text [ en-US ] = "Font Attributes" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Atributos de caracteres"; + Text[ ru ] = "Ðтрибуты шрифта"; + Text[ el ] = "Ιδιότητες χαÏακτήÏων"; + Text[ nl ] = "Schriftteken-attributen"; + Text[ fr ] = "Attributs de caractères"; + Text[ es ] = "Atributos de caracteres"; + Text[ fi ] = "Fonttimääritteet"; + Text[ ca ] = "Atributs de la lletra"; + Text[ it ] = "Attributi carattere"; + Text[ da ] = "Tegnattributter"; + Text[ sv ] = "Teckenattribut"; + Text[ pl ] = "Atrybuty czcionki"; + Text[ pt-BR ] = "Atributos da Fonte"; + Text[ th ] = "คุณลัà¸à¸©à¸“ะตัวà¸à¸±à¸à¸©à¸£"; + Text[ ja ] = "æ–‡å—ã®å±žæ€§"; + Text[ ko ] = "글꼴 ì†ì„±"; + Text[ zh-CN ] = "å—符属性"; + Text[ zh-TW ] = "å—元屬性"; + Text[ tr ] = "Yazıtipi öznitelikleri"; + Text[ hi-IN ] = "फ़ॉनà¥à¤Ÿ à¤à¤Ÿà¥à¤°à¤¿à¤¬à¥à¤¯à¥‚टà¥à¤¸"; + Text[ ar ] = "سمات الخط"; + Text[ he ] = "Zeichenattribute"; +}; + + + +String SCSTR_CFG_APP +{ + Text [ de ] = "Systemoptionen" ; + Text [ en-US ] = "System Options" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Opções do sistema"; + Text[ ru ] = "Параметры ÑиÑтемы"; + Text[ el ] = "ΕπιλογÎÏ‚ συστήματος"; + Text[ nl ] = "Systeemopties"; + Text[ fr ] = "Options de système"; + Text[ es ] = "Opciones del sistema"; + Text[ fi ] = "Järjestelmäasetukset"; + Text[ ca ] = "Opcions del sistema"; + Text[ it ] = "Opzioni di sistema"; + Text[ da ] = "Systemindstillinger"; + Text[ sv ] = "Systemalternativ"; + Text[ pl ] = "Opcje systemu"; + Text[ pt-BR ] = "Opções do Sistema"; + Text[ th ] = "ตัวเลืà¸à¸à¸£à¸°à¸šà¸š"; + Text[ ja ] = "システムオプション"; + Text[ ko ] = "시스템 옵션"; + Text[ zh-CN ] = "系统选项"; + Text[ zh-TW ] = "系統é¸é …"; + Text[ tr ] = "Sistem seçenekleri"; + Text[ hi-IN ] = "सिसà¥à¤Ÿà¤® विकलà¥à¤ª"; + Text[ ar ] = "خيارات النظام"; + Text[ he ] = "Systemoptionen"; +}; + +String SCSTR_CFG_DOC +{ + Text [ de ] = "Dokumentoptionen" ; + Text [ en-US ] = "Document Options" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Opções do documento"; + Text[ ru ] = "Параметры документа"; + Text[ el ] = "ΕπιλογÎÏ‚ εγγÏάφου"; + Text[ nl ] = "Documentopties"; + Text[ fr ] = "Options de document"; + Text[ es ] = "Opciones del documento"; + Text[ fi ] = "Asiakirja-asetukset"; + Text[ ca ] = "Opcions del document"; + Text[ it ] = "Opzioni di documento"; + Text[ da ] = "Dokumentindstillinger"; + Text[ sv ] = "Dokumentalternativ"; + Text[ pl ] = "Opcje dokumentu"; + Text[ pt-BR ] = "Opções do Documento"; + Text[ th ] = "ตัวเลืà¸à¸à¹€à¸à¸à¸ªà¸²à¸£"; + Text[ ja ] = "ドã‚ュメントオプション"; + Text[ ko ] = "문서 옵션"; + Text[ zh-CN ] = "文档选项"; + Text[ zh-TW ] = "文件é¸é …"; + Text[ tr ] = "Belge seçenekleri"; + Text[ hi-IN ] = "लेखपतà¥à¤° विकलà¥à¤ª"; + Text[ ar ] = "خيارات المستند"; + Text[ he ] = "Dokumentoptionen"; +}; + +String SCSTR_CFG_VIEW +{ + Text [ de ] = "Ansichtoptionen" ; + Text [ en-US ] = "View Options" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Opções de visualização"; + Text[ ru ] = "Параметры вида"; + Text[ el ] = "ΕπιλογÎÏ‚ Ï€Ïοβολής"; + Text[ nl ] = "Beeldschermopties"; + Text[ fr ] = "Options d'affichage"; + Text[ es ] = "Opciones de visualización"; + Text[ fi ] = "Näyttöasetukset"; + Text[ ca ] = "Opcions de visualització"; + Text[ it ] = "Opzioni vista"; + Text[ da ] = "Visningsindstillinger"; + Text[ sv ] = "Vyalternativ"; + Text[ pl ] = "Opcje widoku"; + Text[ pt-BR ] = "Opções de Visualização"; + Text[ th ] = "ตัวเลืà¸à¸à¸¡à¸¸à¸¡à¸¡à¸à¸‡"; + Text[ ja ] = "表示オプション"; + Text[ ko ] = "보기 옵션"; + Text[ zh-CN ] = "视图选项"; + Text[ zh-TW ] = "檢視é¸é …"; + Text[ tr ] = "Görünüm seçenekleri"; + Text[ hi-IN ] = "दृशà¥à¤¯ विकलà¥à¤ª"; + Text[ ar ] = "خيارات العرض"; + Text[ he ] = "Ansichtoptionen"; +}; + +String SCSTR_CFG_INPUT +{ + Text [ de ] = "Eingabeoptionen" ; + Text [ en-US ] = "Input Options" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Opções de entrada"; + Text[ ru ] = "Параметры ввода"; + Text[ el ] = "ΕπιλογÎÏ‚ εισαγωγής"; + Text[ nl ] = "Invoeropties"; + Text[ fr ] = "Options de saisie"; + Text[ es ] = "Opciones de entrada"; + Text[ fi ] = "Syöttöasetukset"; + Text[ ca ] = "Opcions d'entrada"; + Text[ it ] = "Opzioni di digitazione"; + Text[ da ] = "Inputindstillinger"; + Text[ sv ] = "Inmatningsalternativ"; + Text[ pl ] = "Opcje wejÅ›cia"; + Text[ pt-BR ] = "Opções de Entrada"; + Text[ th ] = "ตัวเลืà¸à¸à¸‚้à¸à¸¡à¸¹à¸¥à¹€à¸‚้า"; + Text[ ja ] = "入力オプション"; + Text[ ko ] = "ìž…ë ¥ 옵션"; + Text[ zh-CN ] = "输入选项"; + Text[ zh-TW ] = "輸入é¸é …"; + Text[ tr ] = "GiriÅŸ seçenekleri"; + Text[ hi-IN ] = "इनपà¥à¤Ÿ विकलà¥à¤ª"; + Text[ ar ] = "خصائص الإدخال"; + Text[ he ] = "Eingabeoptionen"; +}; + +String SCSTR_CFG_SPELLCHECK +{ + Text [ de ] = "Rechtschreiboptionen" ; + Text [ en-US ] = "Spelling Options" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Opções de ortografia"; + Text[ ru ] = "Параметры орфографии"; + Text[ el ] = "ΕπιλογÎÏ‚ οÏθογÏαφίας"; + Text[ nl ] = "Spellingopties"; + Text[ fr ] = "Options Orthographe"; + Text[ es ] = "Opciones de ortografÃa"; + Text[ fi ] = "Oikeinkirjoituksen asetukset"; + Text[ ca ] = "Opcions de la verificació ortogrà fica"; + Text[ it ] = "Opzioni controllo ortografico"; + Text[ da ] = "Stavekontrol-indstillinger"; + Text[ sv ] = "Rättstavningsalternativ"; + Text[ pl ] = "Opcje pisowni"; + Text[ pt-BR ] = "Opções de Ortografia"; + Text[ th ] = "ตัวเลืà¸à¸à¸à¸²à¸£à¸ªà¸°à¸à¸”"; + Text[ ja ] = "スペルãƒã‚§ãƒƒã‚¯ã®ã‚ªãƒ—ション"; + Text[ ko ] = "맞춤법 옵션"; + Text[ zh-CN ] = "拼写检查选项"; + Text[ zh-TW ] = "拼寫檢查é¸é …"; + Text[ tr ] = "Yazım seçenekleri"; + Text[ hi-IN ] = "अकà¥à¤·à¤° विकलà¥à¤ª"; + Text[ ar ] = "خيارات التدقيق الإملائي"; + Text[ he ] = "Rechtschreiboptionen"; +}; + +String SCSTR_CFG_PRINT +{ + Text [ de ] = "Druckoptionen" ; + Text [ en-US ] = "Print Options" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Opções de impressão"; + Text[ ru ] = "Параметры печати"; + Text[ el ] = "ΕπιλογÎÏ‚ εκτÏπωσης"; + Text[ nl ] = "Afdrukopties"; + Text[ fr ] = "Options d'impression"; + Text[ es ] = "Opciones de impresión"; + Text[ fi ] = "Tulostusasetukset"; + Text[ ca ] = "Opcions d'impressió"; + Text[ it ] = "Opzioni di stampa"; + Text[ da ] = "Udskriftsindstillinger"; + Text[ sv ] = "Utskriftsalternativ"; + Text[ pl ] = "Opcje wydruku"; + Text[ pt-BR ] = "Opções de Impressão"; + Text[ th ] = "ตัวเลืà¸à¸à¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œ"; + Text[ ja ] = "å°åˆ·ã‚ªãƒ—ション"; + Text[ ko ] = "ì¸ì‡„ 옵션"; + Text[ zh-CN ] = "打å°é€‰é¡¹"; + Text[ zh-TW ] = "列å°é¸é …"; + Text[ tr ] = "Yazdırma seçenekleri"; + Text[ hi-IN ] = "छपाई विकलà¥à¤ª"; + Text[ ar ] = "خيارات الطباعة"; + Text[ he ] = "Druckoptionen"; +}; + +String SCSTR_CFG_NAVIPI +{ + Text [ de ] = "Navigator-Einstellungen" ; + Text [ en-US ] = "Navigator Settings" ; + Text [ x-comment ] = " "; + Text[ pt ] = "Parâmetros - Navegador"; + Text[ ru ] = "ÐаÑтройки Ðавигатора"; + Text[ el ] = "Ρυθμίσεις Navigator"; + Text[ nl ] = "Navigator-instellingen"; + Text[ fr ] = "Paramètres du Navigateur"; + Text[ es ] = "Configuración del Navegador"; + Text[ fi ] = "Etsimen asetukset"; + Text[ ca ] = "Parà metres del navegador"; + Text[ it ] = "Impostazioni navigatore"; + Text[ da ] = "Navigator-indstillinger"; + Text[ sv ] = "Navigatorinställningar"; + Text[ pl ] = "Ustawienia nawigatora"; + Text[ pt-BR ] = "Configurações do Navegador"; + Text[ th ] = "ตั้งค่าตัวนำทาง"; + Text[ ja ] = "ナビゲータã®è¨å®š"; + Text[ ko ] = "네비게ì´í„° ì„¤ì •"; + Text[ zh-CN ] = "设定助手"; + Text[ zh-TW ] = "è¨å®šåŠ©æ‰‹"; + Text[ tr ] = "Taratıcı ayarları"; + Text[ hi-IN ] = "नॉविगेटर निरà¥à¤§à¤¾à¤°à¤£"; + Text[ ar ] = "إعدادات الناÙيجيتور"; + Text[ he ] = "Navigator-Einstellungen"; +}; + + + // fuer Dialoge: + + + + + + +//! the graphics filter error strings should be moved to svx or offapp! + + +// #98185# + +// Select tables dialog title + +// Select tables dialog listbox + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/binfilter/bf_sc/source/ui/unoobj/makefile.mk b/binfilter/bf_sc/source/ui/unoobj/makefile.mk new file mode 100644 index 000000000000..dea87484e189 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/makefile.mk @@ -0,0 +1,81 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +EXTERNAL_WARNINGS_NOT_ERRORS := TRUE +PRJ=..$/..$/..$/.. +BFPRJ=..$/..$/.. + +PRJNAME=binfilter +TARGET=sc_unoobj + +NO_HIDS=TRUE + +ENABLE_EXCEPTIONS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk +.INCLUDE : $(BFPRJ)$/util$/makefile.pmk +INC+= -I$(PRJ)$/inc$/bf_sc +# --- Files -------------------------------------------------------- + +SLOFILES = \ + $(SLO)$/sc_docuno.obj \ + $(SLO)$/sc_servuno.obj \ + $(SLO)$/sc_defltuno.obj \ + $(SLO)$/sc_drdefuno.obj \ + $(SLO)$/sc_cellsuno.obj \ + $(SLO)$/sc_textuno.obj \ + $(SLO)$/sc_notesuno.obj \ + $(SLO)$/sc_cursuno.obj \ + $(SLO)$/sc_fielduno.obj \ + $(SLO)$/sc_miscuno.obj \ + $(SLO)$/sc_optuno.obj \ + $(SLO)$/sc_appluno.obj \ + $(SLO)$/sc_funcuno.obj \ + $(SLO)$/sc_nameuno.obj \ + $(SLO)$/sc_datauno.obj \ + $(SLO)$/sc_dapiuno.obj \ + $(SLO)$/sc_chartuno.obj \ + $(SLO)$/sc_shapeuno.obj \ + $(SLO)$/sc_pageuno.obj \ + $(SLO)$/sc_forbiuno.obj \ + $(SLO)$/sc_styleuno.obj \ + $(SLO)$/sc_afmtuno.obj \ + $(SLO)$/sc_fmtuno.obj \ + $(SLO)$/sc_linkuno.obj \ + $(SLO)$/sc_targuno.obj \ + $(SLO)$/sc_convuno.obj \ + $(SLO)$/sc_editsrc.obj \ + $(SLO)$/sc_confuno.obj \ + $(SLO)$/sc_filtuno.obj \ + $(SLO)$/sc_unodoc.obj + +# --- Tagets ------------------------------------------------------- + +.INCLUDE : target.mk + diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_afmtuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_afmtuno.cxx new file mode 100644 index 000000000000..2b9a207649d7 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_afmtuno.cxx @@ -0,0 +1,825 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "unowids.hxx" + +#include <rtl/uuid.h> + +#include <com/sun/star/table/CellVertJustify.hpp> +#include <com/sun/star/table/CellHoriJustify.hpp> +#include <com/sun/star/table/CellOrientation.hpp> +#include <com/sun/star/awt/XFont.hpp> + +#include "afmtuno.hxx" +#include "miscuno.hxx" +#include "autoform.hxx" +#include <vcl/svapp.hxx> +#include "scdll.hxx" +#include "unonames.hxx" +#include "cellsuno.hxx" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +// ein AutoFormat hat immer 16 Eintraege +#define SC_AF_FIELD_COUNT 16 + +//------------------------------------------------------------------------ + +// AutoFormat-Map nur fuer PropertySetInfo, ohne Which-IDs + +const SfxItemPropertyMap* lcl_GetAutoFormatMap() +{ + static SfxItemPropertyMap aAutoFormatMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_INCBACK), 0, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_INCBORD), 0, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_INCFONT), 0, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_INCJUST), 0, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_INCNUM), 0, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_INCWIDTH), 0, &::getBooleanCppuType(), 0, 0 }, + {0,0,0,0} + }; + return aAutoFormatMap_Impl; +} + +//! Zahlformat (String/Language) ??? (in XNumberFormat nur ReadOnly) +//! table::TableBorder ??!? + +const SfxItemPropertyMap* lcl_GetAutoFieldMap() +{ + static SfxItemPropertyMap aAutoFieldMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT, &::getBooleanCppuType(), 0, MID_CROSSED_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &::getCppuType((const sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &::getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &::getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &::getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &::getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &::getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &::getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &::getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &::getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &::getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &::getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &::getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &::getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &::getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &::getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &::getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &::getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT, &::getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT, &::getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &::getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE, &::getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE, &::getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &::getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE, &::getCppuType((const sal_Int16*)0), 0, MID_UNDERLINE }, + {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &::getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT, &::getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT, &::getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &::getCppuType((const table::CellHoriJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_ORIENTATION, &::getCppuType((const table::CellOrientation*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &::getCppuType((const table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &::getCppuType((const table::CellVertJustify*)0), 0, 0 }, + {0,0,0,0} + }; + return aAutoFieldMap_Impl; +} + +//------------------------------------------------------------------------ + +#define SCAUTOFORMATSOBJ_SERVICE "com.sun.star.sheet.TableAutoFormats" + +SC_SIMPLE_SERVICE_INFO( ScAutoFormatFieldObj, "ScAutoFormatFieldObj", "com.sun.star.sheet.TableAutoFormatField" ) +SC_SIMPLE_SERVICE_INFO( ScAutoFormatObj, "ScAutoFormatObj", "com.sun.star.sheet.TableAutoFormat" ) +SC_SIMPLE_SERVICE_INFO( ScAutoFormatsObj, "ScAutoFormatsObj", SCAUTOFORMATSOBJ_SERVICE ) + +//------------------------------------------------------------------------ + +sal_Bool lcl_FindAutoFormatIndex( const ScAutoFormat& rFormats, const String& rName, sal_uInt16& rOutIndex ) +{ + String aEntryName; + sal_uInt16 nCount = rFormats.GetCount(); + for( sal_uInt16 nPos=0; nPos<nCount; nPos++ ) + { + ScAutoFormatData* pEntry = rFormats[nPos]; + pEntry->GetName( aEntryName ); + if ( aEntryName == rName ) + { + rOutIndex = nPos; + return sal_True; + } + } + return sal_False; // is nich +} + +//------------------------------------------------------------------------ + +ScAutoFormatsObj::ScAutoFormatsObj() +{ + //! Dieses Objekt darf es nur einmal geben, und es muss an den Auto-Format-Daten + //! bekannt sein, damit Aenderungen gebroadcasted werden koennen +} + +ScAutoFormatsObj::~ScAutoFormatsObj() +{ +} + +// stuff for exService_... + +uno::Reference<uno::XInterface> SAL_CALL ScAutoFormatsObj_CreateInstance( + const uno::Reference<lang::XMultiServiceFactory>& ) +{ + SolarMutexGuard aGuard; + SC_DLL()->Load(); // load module + static uno::Reference< uno::XInterface > xInst = (::cppu::OWeakObject*) new ScAutoFormatsObj; + return xInst; +} + +::rtl::OUString ScAutoFormatsObj::getImplementationName_Static() +{ + return ::rtl::OUString::createFromAscii( "stardiv.StarCalc.ScAutoFormatsObj" ); +} + +uno::Sequence< ::rtl::OUString> ScAutoFormatsObj::getSupportedServiceNames_Static() +{ + uno::Sequence< ::rtl::OUString> aRet(1); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCAUTOFORMATSOBJ_SERVICE ); + return aRet; +} + +// XTableAutoFormats + +ScAutoFormatObj* ScAutoFormatsObj::GetObjectByIndex_Impl(sal_uInt16 nIndex) +{ + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + if (pFormats && nIndex < pFormats->GetCount()) + return new ScAutoFormatObj(nIndex); + + return NULL; // falscher Index +} + +ScAutoFormatObj* ScAutoFormatsObj::GetObjectByName_Impl(const ::rtl::OUString& aName) +{ + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + if (pFormats) + { + String aString = aName; + sal_uInt16 nIndex; + if (lcl_FindAutoFormatIndex( *pFormats, aString, nIndex )) + return GetObjectByIndex_Impl(nIndex); + } + return NULL; +} + +// container::XNameContainer + +void SAL_CALL ScAutoFormatsObj::insertByName( const ::rtl::OUString& aName, const uno::Any& aElement ) + throw(lang::IllegalArgumentException, container::ElementExistException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + sal_Bool bDone = sal_False; + // Reflection muss nicht uno::XInterface sein, kann auch irgendein Interface sein... + uno::Reference< uno::XInterface > xInterface; + if ( aElement >>= xInterface ) + { + ScAutoFormatObj* pFormatObj = ScAutoFormatObj::getImplementation( xInterface ); + if ( pFormatObj && !pFormatObj->IsInserted() ) // noch nicht eingefuegt? + { + String aNameStr = aName; + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + + sal_uInt16 nDummy; + if (pFormats && !lcl_FindAutoFormatIndex( *pFormats, aNameStr, nDummy )) + { + ScAutoFormatData* pNew = new ScAutoFormatData(); + pNew->SetName( aNameStr ); + + if (pFormats->Insert( pNew )) + { + //! Notify fuer andere Objekte + pFormats->Save(); // sofort speichern + + sal_uInt16 nNewIndex; + if (lcl_FindAutoFormatIndex( *pFormats, aNameStr, nNewIndex )) + { + pFormatObj->InitFormat( nNewIndex ); // kann jetzt benutzt werden + bDone = sal_True; + } + } + else + { + delete pNew; + DBG_ERROR("AutoFormat konnte nicht eingefuegt werden"); + throw uno::RuntimeException(); + } + } + else + { + throw container::ElementExistException(); + } + } + } + + if (!bDone) + { + // other errors are handled above + throw lang::IllegalArgumentException(); + } +} + +void SAL_CALL ScAutoFormatsObj::replaceByName( const ::rtl::OUString& aName, const uno::Any& aElement ) + throw(lang::IllegalArgumentException, container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + //! zusammenfassen? + removeByName( aName ); + insertByName( aName, aElement ); +} + +void SAL_CALL ScAutoFormatsObj::removeByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameStr = aName; + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + + sal_uInt16 nIndex; + if (pFormats && lcl_FindAutoFormatIndex( *pFormats, aNameStr, nIndex )) + { + pFormats->AtFree( nIndex ); + + //! Notify fuer andere Objekte + pFormats->Save(); // sofort speichern + } + else + { + throw container::NoSuchElementException(); + } +} + +// container::XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScAutoFormatsObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.TableAutoFormatEnumeration"))); +} + +// container::XIndexAccess + +sal_Int32 SAL_CALL ScAutoFormatsObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + if (pFormats) + return pFormats->GetCount(); + + return 0; +} + +uno::Any SAL_CALL ScAutoFormatsObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference< container::XNamed > xFormat = GetObjectByIndex_Impl((sal_uInt16)nIndex); + uno::Any aAny; + if (xFormat.is()) + aAny <<= xFormat; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScAutoFormatsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ::getCppuType((const uno::Reference< container::XNamed >*)0); // muss zu getByIndex passen +} + +sal_Bool SAL_CALL ScAutoFormatsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +// container::XNameAccess + +uno::Any SAL_CALL ScAutoFormatsObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference< container::XNamed > xFormat = GetObjectByName_Impl(aName); + uno::Any aAny; + if (xFormat.is()) + aAny <<= xFormat; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScAutoFormatsObj::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + if (pFormats) + { + String aName; + sal_uInt16 nCount = pFormats->GetCount(); + uno::Sequence< ::rtl::OUString> aSeq(nCount); + ::rtl::OUString* pAry = aSeq.getArray(); + for (sal_uInt16 i=0; i<nCount; i++) + { + (*pFormats)[i]->GetName(aName); + pAry[i] = aName; + } + return aSeq; + } + return uno::Sequence< ::rtl::OUString>(0); +} + +sal_Bool SAL_CALL ScAutoFormatsObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + if (pFormats) + { + String aString = aName; + sal_uInt16 nDummy; + return lcl_FindAutoFormatIndex( *pFormats, aString, nDummy ); + } + return sal_False; +} + +//------------------------------------------------------------------------ + +ScAutoFormatObj::ScAutoFormatObj(sal_uInt16 nIndex) : + aPropSet( lcl_GetAutoFormatMap() ), + nFormatIndex( nIndex ) +{ + //! Listening !!! +} + +ScAutoFormatObj::~ScAutoFormatObj() +{ + // Wenn ein AutoFormat-Objekt losgelassen wird, werden eventuelle Aenderungen + // gespeichert, damit sie z.B. im Writer sichtbar sind + + if (IsInserted()) + { + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + if ( pFormats && pFormats->IsSaveLater() ) + pFormats->Save(); + + // Save() setzt SaveLater Flag zurueck + } +} + +void ScAutoFormatObj::InitFormat( sal_uInt16 nNewIndex ) +{ + DBG_ASSERT( nFormatIndex == SC_AFMTOBJ_INVALID, "ScAutoFormatObj::InitFormat mehrfach" ); + nFormatIndex = nNewIndex; + //! Listening !!! +} + +// XUnoTunnel + +sal_Int64 SAL_CALL ScAutoFormatObj::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return 0; +} + +// static +const uno::Sequence<sal_Int8>& ScAutoFormatObj::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScAutoFormatObj* ScAutoFormatObj::getImplementation( + const uno::Reference<uno::XInterface> xObj ) +{ + ScAutoFormatObj* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScAutoFormatObj*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +void ScAutoFormatObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // spaeter... +} + +// XTableAutoFormat + +ScAutoFormatFieldObj* ScAutoFormatObj::GetObjectByIndex_Impl(sal_uInt16 nIndex) +{ + if ( IsInserted() && nIndex < SC_AF_FIELD_COUNT ) + return new ScAutoFormatFieldObj( nFormatIndex, nIndex ); + + return NULL; +} + +// container::XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScAutoFormatObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.TableAutoFormatEnumeration"))); +} + +// container::XIndexAccess + +sal_Int32 SAL_CALL ScAutoFormatObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (IsInserted()) + return SC_AF_FIELD_COUNT; // immer 16 Elemente + else + return 0; +} + +uno::Any SAL_CALL ScAutoFormatObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( nIndex < 0 || nIndex >= getCount() ) + throw lang::IndexOutOfBoundsException(); + + uno::Any aAny; + if (IsInserted()) + { + uno::Reference< beans::XPropertySet > xField = GetObjectByIndex_Impl((sal_uInt16)nIndex); + aAny <<= xField; + } + return aAny; +} + +uno::Type SAL_CALL ScAutoFormatObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ::getCppuType((const uno::Reference< beans::XPropertySet >*)0); // muss zu getByIndex passen +} + +sal_Bool SAL_CALL ScAutoFormatObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +// container::XNamed + +::rtl::OUString SAL_CALL ScAutoFormatObj::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + if (pFormats && IsInserted() && nFormatIndex < pFormats->GetCount()) + { + String aName; + (*pFormats)[nFormatIndex]->GetName(aName); + return aName; + } + return ::rtl::OUString(); +} + +void SAL_CALL ScAutoFormatObj::setName( const ::rtl::OUString& aNewName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNewString = aNewName; + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + + sal_uInt16 nDummy; + if (pFormats && IsInserted() && nFormatIndex < pFormats->GetCount() && + !lcl_FindAutoFormatIndex( *pFormats, aNewString, nDummy )) + { + ScAutoFormatData* pData = (*pFormats)[nFormatIndex]; + DBG_ASSERT(pData,"AutoFormat Daten nicht da"); + + ScAutoFormatData* pNew = new ScAutoFormatData(*pData); + pNew->SetName( aNewString ); + + pFormats->AtFree( nFormatIndex ); + if (pFormats->Insert( pNew )) + { + nFormatIndex = pFormats->IndexOf( pNew ); // ist evtl. anders einsortiert... + + //! Notify fuer andere Objekte + pFormats->SetSaveLater(sal_True); + } + else + { + delete pNew; + DBG_ERROR("AutoFormat konnte nicht eingefuegt werden"); + nFormatIndex = 0; //! alter Index ist ungueltig + } + } + else + { + // not inserted or name exists + throw uno::RuntimeException(); + } +} + +// beans::XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScAutoFormatObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference< beans::XPropertySetInfo > aRef = new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScAutoFormatObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + if (pFormats && IsInserted() && nFormatIndex < pFormats->GetCount()) + { + ScAutoFormatData* pData = (*pFormats)[nFormatIndex]; + DBG_ASSERT(pData,"AutoFormat Daten nicht da"); + + String aPropString = aPropertyName; + sal_Bool bBool; + if (aPropString.EqualsAscii( SC_UNONAME_INCBACK ) && (aValue >>= bBool)) + pData->SetIncludeBackground( bBool ); + else if (aPropString.EqualsAscii( SC_UNONAME_INCBORD ) && (aValue >>= bBool)) + pData->SetIncludeFrame( bBool ); + else if (aPropString.EqualsAscii( SC_UNONAME_INCFONT ) && (aValue >>= bBool)) + pData->SetIncludeFont( bBool ); + else if (aPropString.EqualsAscii( SC_UNONAME_INCJUST ) && (aValue >>= bBool)) + pData->SetIncludeJustify( bBool ); + else if (aPropString.EqualsAscii( SC_UNONAME_INCNUM ) && (aValue >>= bBool)) + pData->SetIncludeValueFormat( bBool ); + else if (aPropString.EqualsAscii( SC_UNONAME_INCWIDTH ) && (aValue >>= bBool)) + pData->SetIncludeWidthHeight( bBool ); + + // else Fehler + + //! Notify fuer andere Objekte + pFormats->SetSaveLater(sal_True); + } +} + +uno::Any SAL_CALL ScAutoFormatObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Any aAny; + + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + if (pFormats && IsInserted() && nFormatIndex < pFormats->GetCount()) + { + ScAutoFormatData* pData = (*pFormats)[nFormatIndex]; + DBG_ASSERT(pData,"AutoFormat Daten nicht da"); + + sal_Bool bValue; + sal_Bool bError = sal_False; + + String aPropString = aPropertyName; + if (aPropString.EqualsAscii( SC_UNONAME_INCBACK )) + bValue = pData->GetIncludeBackground(); + else if (aPropString.EqualsAscii( SC_UNONAME_INCBORD )) + bValue = pData->GetIncludeFrame(); + else if (aPropString.EqualsAscii( SC_UNONAME_INCFONT )) + bValue = pData->GetIncludeFont(); + else if (aPropString.EqualsAscii( SC_UNONAME_INCJUST )) + bValue = pData->GetIncludeJustify(); + else if (aPropString.EqualsAscii( SC_UNONAME_INCNUM )) + bValue = pData->GetIncludeValueFormat(); + else if (aPropString.EqualsAscii( SC_UNONAME_INCWIDTH )) + bValue = pData->GetIncludeWidthHeight(); + else + bError = sal_True; // unbekannte Property + + if (!bError) + aAny <<= bValue; + } + + return aAny; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScAutoFormatObj ) + +//------------------------------------------------------------------------ + +ScAutoFormatFieldObj::ScAutoFormatFieldObj(sal_uInt16 nFormat, sal_uInt16 nField) : + aPropSet( lcl_GetAutoFieldMap() ), + nFormatIndex( nFormat ), + nFieldIndex( nField ) +{ + //! Listening !!! +} + +ScAutoFormatFieldObj::~ScAutoFormatFieldObj() +{ +} + +void ScAutoFormatFieldObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // spaeter... +} + +// beans::XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScAutoFormatFieldObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference< beans::XPropertySetInfo > aRef = new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScAutoFormatFieldObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + String aPropString = aPropertyName; + const SfxItemPropertyMap* pMap = + SfxItemPropertyMap::GetByName( lcl_GetAutoFieldMap(), aPropString ); + + if ( pMap && pMap->nWID && pFormats && nFormatIndex < pFormats->GetCount() ) + { + ScAutoFormatData* pData = (*pFormats)[nFormatIndex]; + + if ( IsScItemWid( pMap->nWID ) ) + { + const SfxPoolItem* pItem = pData->GetItem( nFieldIndex, pMap->nWID ); + if (pItem) + { + SfxPoolItem* pNewItem = pItem->Clone(); + sal_Bool bDone = pNewItem->PutValue( aValue, pMap->nMemberId ); + if (bDone) + { + pData->PutItem( nFieldIndex, *pNewItem ); + + //! Notify fuer andere Objekte? + pFormats->SetSaveLater(sal_True); + } + delete pNewItem; + } + } + else + { + switch (pMap->nWID) + { + case SC_WID_UNO_TBLBORD: + { + table::TableBorder aBorder; + if ( aValue >>= aBorder ) // empty = nothing to do + { + SvxBoxItem aOuter(ATTR_BORDER); + SvxBoxInfoItem aInner(ATTR_BORDER_INNER); + ScHelperFunctions::FillBoxItems( aOuter, aInner, aBorder ); + pData->PutItem( nFieldIndex, aOuter ); + + //! Notify fuer andere Objekte? + pFormats->SetSaveLater(sal_True); + } + } + break; + } + } + } +} + +uno::Any SAL_CALL ScAutoFormatFieldObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Any aVal; + + ScAutoFormat* pFormats = ScGlobal::GetAutoFormat(); + String aPropString = aPropertyName; + const SfxItemPropertyMap* pMap = + SfxItemPropertyMap::GetByName( lcl_GetAutoFieldMap(), aPropString ); + + if ( pMap && pMap->nWID && pFormats && nFormatIndex < pFormats->GetCount() ) + { + const ScAutoFormatData* pData = (*pFormats)[nFormatIndex]; + + if ( IsScItemWid( pMap->nWID ) ) + { + const SfxPoolItem* pItem = pData->GetItem( nFieldIndex, pMap->nWID ); + if (pItem) + pItem->QueryValue( aVal, pMap->nMemberId ); + } + else + { + switch (pMap->nWID) + { + case SC_WID_UNO_TBLBORD: + { + const SfxPoolItem* pItem = pData->GetItem(nFieldIndex, ATTR_BORDER); + if (pItem) + { + SvxBoxItem aOuter(*(static_cast<const SvxBoxItem*>(pItem))); + SvxBoxInfoItem aInner(ATTR_BORDER_INNER); + + table::TableBorder aBorder; + ScHelperFunctions::FillTableBorder( aBorder, aOuter, aInner ); + aVal <<= aBorder; + } + } + break; + } + } + } + + return aVal; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScAutoFormatFieldObj ) + +//------------------------------------------------------------------------ + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_appluno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_appluno.cxx new file mode 100644 index 000000000000..c821f835a5de --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_appluno.cxx @@ -0,0 +1,1006 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <cppuhelper/factory.hxx> +#include <osl/diagnose.h> +#include <bf_sfx2/app.hxx> + +#include "appluno.hxx" +#include "afmtuno.hxx" +#include "funcuno.hxx" +#include "filtuno.hxx" +#include "miscuno.hxx" +#include "scmod.hxx" +#include "appoptio.hxx" +#include "inputopt.hxx" +#include "printopt.hxx" +#include "userlist.hxx" +#include "bf_sc.hrc" // VAR_ARGS +#include <vcl/svapp.hxx> +#include "unonames.hxx" + +#include <com/sun/star/sheet/FunctionArgument.hpp> +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +// Calc document +extern uno::Sequence< ::rtl::OUString > SAL_CALL ScDocument_getSupportedServiceNames() throw(); +extern ::rtl::OUString SAL_CALL ScDocument_getImplementationName() throw(); +extern uno::Reference< uno::XInterface > SAL_CALL ScDocument_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ); + +// Calc XML import +extern uno::Sequence< ::rtl::OUString > SAL_CALL ScXMLImport_getSupportedServiceNames() throw(); +extern ::rtl::OUString SAL_CALL ScXMLImport_getImplementationName() throw(); +extern uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ); +extern uno::Sequence< ::rtl::OUString > SAL_CALL ScXMLImport_Meta_getSupportedServiceNames() throw(); +extern ::rtl::OUString SAL_CALL ScXMLImport_Meta_getImplementationName() throw(); +extern uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Meta_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ); +extern uno::Sequence< ::rtl::OUString > SAL_CALL ScXMLImport_Styles_getSupportedServiceNames() throw(); +extern ::rtl::OUString SAL_CALL ScXMLImport_Styles_getImplementationName() throw(); +extern uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Styles_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ); +extern uno::Sequence< ::rtl::OUString > SAL_CALL ScXMLImport_Content_getSupportedServiceNames() throw(); +extern ::rtl::OUString SAL_CALL ScXMLImport_Content_getImplementationName() throw(); +extern uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Content_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ); +extern uno::Sequence< ::rtl::OUString > SAL_CALL ScXMLImport_Settings_getSupportedServiceNames() throw(); +extern ::rtl::OUString SAL_CALL ScXMLImport_Settings_getImplementationName() throw(); +extern uno::Reference< uno::XInterface > SAL_CALL ScXMLImport_Settings_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ); + +// Calc XML export +extern uno::Sequence< ::rtl::OUString > SAL_CALL ScXMLExport_getSupportedServiceNames() throw(); +extern ::rtl::OUString SAL_CALL ScXMLExport_getImplementationName() throw(); +extern uno::Reference< uno::XInterface > SAL_CALL ScXMLExport_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ); +extern uno::Sequence< ::rtl::OUString > SAL_CALL ScXMLExport_Meta_getSupportedServiceNames() throw(); +extern ::rtl::OUString SAL_CALL ScXMLExport_Meta_getImplementationName() throw(); +extern uno::Reference< uno::XInterface > SAL_CALL ScXMLExport_Meta_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ); +extern uno::Sequence< ::rtl::OUString > SAL_CALL ScXMLExport_Styles_getSupportedServiceNames() throw(); +extern ::rtl::OUString SAL_CALL ScXMLExport_Styles_getImplementationName() throw(); +extern uno::Reference< uno::XInterface > SAL_CALL ScXMLExport_Styles_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ); +extern uno::Sequence< ::rtl::OUString > SAL_CALL ScXMLExport_Content_getSupportedServiceNames() throw(); +extern ::rtl::OUString SAL_CALL ScXMLExport_Content_getImplementationName() throw(); +extern uno::Reference< uno::XInterface > SAL_CALL ScXMLExport_Content_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ); +extern uno::Sequence< ::rtl::OUString > SAL_CALL ScXMLExport_Settings_getSupportedServiceNames() throw(); +extern ::rtl::OUString SAL_CALL ScXMLExport_Settings_getImplementationName() throw(); +extern uno::Reference< uno::XInterface > SAL_CALL ScXMLExport_Settings_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ); + +//------------------------------------------------------------------------ + +// Anzahl der Funktionen, die als zuletzt benutzt gespeichert werden +//! Define mit funcpage.hxx und dwfunctr.hxx zusammenfassen !!! +#define LRU_MAX 10 + +// Spezial-Werte fuer Zoom +//! irgendwo zentral +#define SC_ZOOMVAL_OPTIMAL (-1) +#define SC_ZOOMVAL_WHOLEPAGE (-2) +#define SC_ZOOMVAL_PAGEWIDTH (-3) + +// Anzahl der PropertyValues in einer Function-Description +#define SC_FUNCDESC_PROPCOUNT 5 + +//------------------------------------------------------------------------ + +// alles ohne Which-ID, Map nur fuer PropertySetInfo + +const SfxItemPropertyMap* lcl_GetSettingsPropertyMap() +{ + static SfxItemPropertyMap aSettingsPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_DOAUTOCP), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_ENTERED), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_EXPREF), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_EXTFMT), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_LINKUPD), 0, &getCppuType((sal_Int16*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_MARKHDR), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_METRIC), 0, &getCppuType((sal_Int16*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_MOVEDIR), 0, &getCppuType((sal_Int16*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_MOVESEL), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_PRALLSH), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_PREMPTY), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_RANGEFIN), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_SCALE), 0, &getCppuType((sal_Int16*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_STBFUNC), 0, &getCppuType((sal_Int16*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_ULISTS), 0, &getCppuType((uno::Sequence< ::rtl::OUString>*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_PRMETRICS),0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_USETABCOL),0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_REPLWARN), 0, &getBooleanCppuType(), 0}, + {0,0,0,0} + }; + return aSettingsPropertyMap_Impl; +} + +//------------------------------------------------------------------------ + +#define SCFUNCTIONLISTOBJ_SERVICE "com.sun.star.sheet.FunctionDescriptions" +#define SCRECENTFUNCTIONSOBJ_SERVICE "com.sun.star.sheet.RecentFunctions" +#define SCSPREADSHEETSETTINGS_SERVICE "com.sun.star.sheet.GlobalSheetSettings" + +SC_SIMPLE_SERVICE_INFO( ScFunctionListObj, "ScFunctionListObj", SCFUNCTIONLISTOBJ_SERVICE ) +SC_SIMPLE_SERVICE_INFO( ScRecentFunctionsObj, "ScRecentFunctionsObj", SCRECENTFUNCTIONSOBJ_SERVICE ) +SC_SIMPLE_SERVICE_INFO( ScSpreadsheetSettings, "ScSpreadsheetSettings", SCSPREADSHEETSETTINGS_SERVICE ) + +//------------------------------------------------------------------------ + +void lcl_WriteInfo( registry::XRegistryKey* pRegistryKey, + const ::rtl::OUString& rImplementationName, + const uno::Sequence< ::rtl::OUString >& rServices ) + throw( registry::InvalidRegistryException ) +{ + ::rtl::OUString aImpl = ::rtl::OUString::createFromAscii( "/" ); + aImpl += rImplementationName; + aImpl += ::rtl::OUString::createFromAscii( "/UNO/SERVICES" ); + uno::Reference<registry::XRegistryKey> xNewKey = pRegistryKey->createKey(aImpl); + + const ::rtl::OUString* pArray = rServices.getConstArray(); + for( sal_Int32 i = 0; i < rServices.getLength(); i++ ) + xNewKey->createKey( pArray[i]); +} + +extern "C" { + +void SAL_CALL component_getImplementationEnvironment( + const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv ) +{ + *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; +} + +sal_Bool SAL_CALL component_writeInfo( + void * pServiceManager, registry::XRegistryKey * pRegistryKey ) +{ + if (pRegistryKey) + { + try + { + lcl_WriteInfo( pRegistryKey, + ScSpreadsheetSettings::getImplementationName_Static(), + ScSpreadsheetSettings::getSupportedServiceNames_Static() ); + + lcl_WriteInfo( pRegistryKey, + ScRecentFunctionsObj::getImplementationName_Static(), + ScRecentFunctionsObj::getSupportedServiceNames_Static() ); + + lcl_WriteInfo( pRegistryKey, + ScFunctionListObj::getImplementationName_Static(), + ScFunctionListObj::getSupportedServiceNames_Static() ); + + lcl_WriteInfo( pRegistryKey, + ScAutoFormatsObj::getImplementationName_Static(), + ScAutoFormatsObj::getSupportedServiceNames_Static() ); + + lcl_WriteInfo( pRegistryKey, + ScFunctionAccess::getImplementationName_Static(), + ScFunctionAccess::getSupportedServiceNames_Static() ); + + lcl_WriteInfo( pRegistryKey, + ScFilterOptionsObj::getImplementationName_Static(), + ScFilterOptionsObj::getSupportedServiceNames_Static() ); + + lcl_WriteInfo( pRegistryKey, + ScXMLImport_getImplementationName(), + ScXMLImport_getSupportedServiceNames() ); + + lcl_WriteInfo( pRegistryKey, + ScXMLImport_Meta_getImplementationName(), + ScXMLImport_Meta_getSupportedServiceNames() ); + + lcl_WriteInfo( pRegistryKey, + ScXMLImport_Styles_getImplementationName(), + ScXMLImport_Styles_getSupportedServiceNames() ); + + lcl_WriteInfo( pRegistryKey, + ScXMLImport_Content_getImplementationName(), + ScXMLImport_Content_getSupportedServiceNames() ); + + lcl_WriteInfo( pRegistryKey, + ScXMLImport_Settings_getImplementationName(), + ScXMLImport_Settings_getSupportedServiceNames() ); + + lcl_WriteInfo( pRegistryKey, + ScXMLExport_getImplementationName(), + ScXMLExport_getSupportedServiceNames() ); + + lcl_WriteInfo( pRegistryKey, + ScXMLExport_Meta_getImplementationName(), + ScXMLExport_Meta_getSupportedServiceNames() ); + + lcl_WriteInfo( pRegistryKey, + ScXMLExport_Styles_getImplementationName(), + ScXMLExport_Styles_getSupportedServiceNames() ); + + lcl_WriteInfo( pRegistryKey, + ScXMLExport_Content_getImplementationName(), + ScXMLExport_Content_getSupportedServiceNames() ); + + lcl_WriteInfo( pRegistryKey, + ScXMLExport_Settings_getImplementationName(), + ScXMLExport_Settings_getSupportedServiceNames() ); + + lcl_WriteInfo( pRegistryKey, + ScDocument_getImplementationName(), + ScDocument_getSupportedServiceNames() ); + + return sal_True; + } + catch (registry::InvalidRegistryException&) + { + OSL_ENSURE( sal_False, "### InvalidRegistryException!" ); + } + } + return sal_False; +} + +void * SAL_CALL component_getFactory( + const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey ) +{ + if (!pServiceManager) + return NULL; + + uno::Reference<lang::XSingleServiceFactory> xFactory; + ::rtl::OUString aImpl = ::rtl::OUString::createFromAscii(pImplName); + + if ( aImpl == ScSpreadsheetSettings::getImplementationName_Static() ) + xFactory = cppu::createOneInstanceFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScSpreadsheetSettings::getImplementationName_Static(), + ScSpreadsheetSettings_CreateInstance, + ScSpreadsheetSettings::getSupportedServiceNames_Static() ); + + if ( aImpl == ScRecentFunctionsObj::getImplementationName_Static() ) + xFactory = cppu::createOneInstanceFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScRecentFunctionsObj::getImplementationName_Static(), + ScRecentFunctionsObj_CreateInstance, + ScRecentFunctionsObj::getSupportedServiceNames_Static() ); + + if ( aImpl == ScFunctionListObj::getImplementationName_Static() ) + xFactory = cppu::createOneInstanceFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScFunctionListObj::getImplementationName_Static(), + ScFunctionListObj_CreateInstance, + ScFunctionListObj::getSupportedServiceNames_Static() ); + + if ( aImpl == ScAutoFormatsObj::getImplementationName_Static() ) + xFactory = cppu::createOneInstanceFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScAutoFormatsObj::getImplementationName_Static(), + ScAutoFormatsObj_CreateInstance, + ScAutoFormatsObj::getSupportedServiceNames_Static() ); + + if ( aImpl == ScFunctionAccess::getImplementationName_Static() ) + xFactory = cppu::createOneInstanceFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScFunctionAccess::getImplementationName_Static(), + ScFunctionAccess_CreateInstance, + ScFunctionAccess::getSupportedServiceNames_Static() ); + + if ( aImpl == ScFilterOptionsObj::getImplementationName_Static() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScFilterOptionsObj::getImplementationName_Static(), + ScFilterOptionsObj_CreateInstance, + ScFilterOptionsObj::getSupportedServiceNames_Static() ); + + if ( aImpl == ScXMLImport_getImplementationName() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScXMLImport_getImplementationName(), + ScXMLImport_createInstance, + ScXMLImport_getSupportedServiceNames() ); + + if ( aImpl == ScXMLImport_Meta_getImplementationName() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScXMLImport_Meta_getImplementationName(), + ScXMLImport_Meta_createInstance, + ScXMLImport_Meta_getSupportedServiceNames() ); + + if ( aImpl == ScXMLImport_Styles_getImplementationName() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScXMLImport_Styles_getImplementationName(), + ScXMLImport_Styles_createInstance, + ScXMLImport_Styles_getSupportedServiceNames() ); + + if ( aImpl == ScXMLImport_Content_getImplementationName() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScXMLImport_Content_getImplementationName(), + ScXMLImport_Content_createInstance, + ScXMLImport_Content_getSupportedServiceNames() ); + + if ( aImpl == ScXMLImport_Settings_getImplementationName() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScXMLImport_Settings_getImplementationName(), + ScXMLImport_Settings_createInstance, + ScXMLImport_Settings_getSupportedServiceNames() ); + + if ( aImpl == ScXMLExport_getImplementationName() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScXMLExport_getImplementationName(), + ScXMLExport_createInstance, + ScXMLExport_getSupportedServiceNames() ); + + if ( aImpl == ScXMLExport_Meta_getImplementationName() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScXMLExport_Meta_getImplementationName(), + ScXMLExport_Meta_createInstance, + ScXMLExport_Meta_getSupportedServiceNames() ); + + if ( aImpl == ScXMLExport_Styles_getImplementationName() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScXMLExport_Styles_getImplementationName(), + ScXMLExport_Styles_createInstance, + ScXMLExport_Styles_getSupportedServiceNames() ); + + if ( aImpl == ScXMLExport_Content_getImplementationName() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScXMLExport_Content_getImplementationName(), + ScXMLExport_Content_createInstance, + ScXMLExport_Content_getSupportedServiceNames() ); + + if ( aImpl == ScXMLExport_Settings_getImplementationName() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScXMLExport_Settings_getImplementationName(), + ScXMLExport_Settings_createInstance, + ScXMLExport_Settings_getSupportedServiceNames() ); + + if ( aImpl == ScDocument_getImplementationName() ) + xFactory = cppu::createSingleFactory( + reinterpret_cast<lang::XMultiServiceFactory*>(pServiceManager), + ScDocument_getImplementationName(), + ScDocument_createInstance, + ScDocument_getSupportedServiceNames() ); + + + void* pRet = NULL; + if (xFactory.is()) + { + xFactory->acquire(); + pRet = xFactory.get(); + } + return pRet; +} + +} // extern C + +//------------------------------------------------------------------------ + +ScSpreadsheetSettings::ScSpreadsheetSettings() : + aPropSet( lcl_GetSettingsPropertyMap() ) +{ +} + +ScSpreadsheetSettings::~ScSpreadsheetSettings() +{ +} + +uno::Reference<uno::XInterface> SAL_CALL ScSpreadsheetSettings_CreateInstance( + const uno::Reference<lang::XMultiServiceFactory>& rSMgr ) +{ + SolarMutexGuard aGuard; + SC_DLL()->Load(); // load module + static uno::Reference<uno::XInterface> xInst = (cppu::OWeakObject*)new ScSpreadsheetSettings(); + return xInst; +} + +::rtl::OUString ScSpreadsheetSettings::getImplementationName_Static() +{ + return ::rtl::OUString::createFromAscii( "stardiv.StarCalc.ScSpreadsheetSettings" ); +} + +uno::Sequence< ::rtl::OUString> ScSpreadsheetSettings::getSupportedServiceNames_Static() +{ + uno::Sequence< ::rtl::OUString> aRet(1); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCSPREADSHEETSETTINGS_SERVICE ); + return aRet; +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScSpreadsheetSettings::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScSpreadsheetSettings::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString = aPropertyName; + + ScModule* pScMod = SC_MOD(); + ScAppOptions aAppOpt = pScMod->GetAppOptions(); + ScInputOptions aInpOpt = pScMod->GetInputOptions(); + BOOL bSaveApp = FALSE; + BOOL bSaveInp = FALSE; + // print options aren't loaded until needed + + if (aString.EqualsAscii( SC_UNONAME_DOAUTOCP )) + { + aAppOpt.SetAutoComplete( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + bSaveApp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_ENTERED )) + { + aInpOpt.SetEnterEdit( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + bSaveInp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_EXPREF )) + { + aInpOpt.SetExpandRefs( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + bSaveInp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_EXTFMT )) + { + aInpOpt.SetExtendFormat( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + bSaveInp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_LINKUPD )) + { + aAppOpt.SetLinkMode( (ScLkUpdMode) ScUnoHelpFunctions::GetInt16FromAny( aValue ) ); + bSaveApp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_MARKHDR )) + { + aInpOpt.SetMarkHeader( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + bSaveInp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_MOVESEL )) + { + aInpOpt.SetMoveSelection( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + bSaveInp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_RANGEFIN )) + { + aInpOpt.SetRangeFinder( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + bSaveInp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_USETABCOL )) + { + aInpOpt.SetUseTabCol( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + bSaveInp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_PRMETRICS )) + { + aInpOpt.SetTextWysiwyg( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + bSaveInp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_REPLWARN )) + { + aInpOpt.SetReplaceCellsWarn( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + bSaveInp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_METRIC )) + { + aAppOpt.SetAppMetric( (FieldUnit) ScUnoHelpFunctions::GetInt16FromAny( aValue ) ); + bSaveApp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_MOVEDIR )) + { + aInpOpt.SetMoveDir( ScUnoHelpFunctions::GetInt16FromAny( aValue ) ); + bSaveInp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_SCALE )) + { + short nVal = ScUnoHelpFunctions::GetInt16FromAny( aValue ); + if ( nVal < 0 ) + { + SvxZoomType eType = SVX_ZOOM_PERCENT; + switch (nVal) + { + case SC_ZOOMVAL_OPTIMAL: eType = SVX_ZOOM_OPTIMAL; break; + case SC_ZOOMVAL_WHOLEPAGE: eType = SVX_ZOOM_WHOLEPAGE; break; + case SC_ZOOMVAL_PAGEWIDTH: eType = SVX_ZOOM_PAGEWIDTH; break; + } + aAppOpt.SetZoomType( eType ); + } + else if ( nVal >= MINZOOM && nVal <= MAXZOOM ) + { + aAppOpt.SetZoom( nVal ); + aAppOpt.SetZoomType( SVX_ZOOM_PERCENT ); + } + bSaveApp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_STBFUNC )) + { + aAppOpt.SetStatusFunc( ScUnoHelpFunctions::GetInt16FromAny( aValue ) ); + bSaveApp = TRUE; + } + else if (aString.EqualsAscii( SC_UNONAME_ULISTS )) + { + ScUserList* pUserList = ScGlobal::GetUserList(); + uno::Sequence< ::rtl::OUString> aSeq; + if ( pUserList && ( aValue >>= aSeq ) ) + { + // es wird direkt die "lebende" Liste veraendert, + // mehr tut ScGlobal::SetUserList auch nicht + + pUserList->FreeAll(); // alle Eintraege raus + USHORT nCount = (USHORT)aSeq.getLength(); + const ::rtl::OUString* pAry = aSeq.getConstArray(); + for (USHORT i=0; i<nCount; i++) + { + String aEntry = pAry[i]; + ScUserListData* pData = new ScUserListData(aEntry); + if (!pUserList->Insert(pData)) // hinten anhaengen + delete pData; // sollte nicht vorkommen + } + bSaveApp = TRUE; // Liste wird mit den App-Optionen gespeichert + } + } + else if (aString.EqualsAscii( SC_UNONAME_PRALLSH )) + { + ScPrintOptions aPrintOpt = pScMod->GetPrintOptions(); + aPrintOpt.SetAllSheets( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + pScMod->SetPrintOptions( aPrintOpt ); + } + else if (aString.EqualsAscii( SC_UNONAME_PREMPTY )) + { + ScPrintOptions aPrintOpt = pScMod->GetPrintOptions(); + aPrintOpt.SetSkipEmpty( !ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); // reversed + pScMod->SetPrintOptions( aPrintOpt ); + SFX_APP()->Broadcast( SfxSimpleHint( SID_SCPRINTOPTIONS ) ); // update previews + } + + if ( bSaveApp ) + pScMod->SetAppOptions( aAppOpt ); + if ( bSaveInp ) + pScMod->SetInputOptions( aInpOpt ); +} + +uno::Any SAL_CALL ScSpreadsheetSettings::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString = aPropertyName; + uno::Any aRet; + + ScModule* pScMod = SC_MOD(); + ScAppOptions aAppOpt = pScMod->GetAppOptions(); + ScInputOptions aInpOpt = pScMod->GetInputOptions(); + // print options aren't loaded until needed + + if (aString.EqualsAscii( SC_UNONAME_DOAUTOCP )) ScUnoHelpFunctions::SetBoolInAny( aRet, aAppOpt.GetAutoComplete() ); + else if (aString.EqualsAscii( SC_UNONAME_ENTERED )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetEnterEdit() ); + else if (aString.EqualsAscii( SC_UNONAME_EXPREF )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetExpandRefs() ); + else if (aString.EqualsAscii( SC_UNONAME_EXTFMT )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetExtendFormat() ); + else if (aString.EqualsAscii( SC_UNONAME_LINKUPD )) aRet <<= (sal_Int16) aAppOpt.GetLinkMode(); + else if (aString.EqualsAscii( SC_UNONAME_MARKHDR )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetMarkHeader() ); + else if (aString.EqualsAscii( SC_UNONAME_MOVESEL )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetMoveSelection() ); + else if (aString.EqualsAscii( SC_UNONAME_RANGEFIN )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetRangeFinder() ); + else if (aString.EqualsAscii( SC_UNONAME_USETABCOL )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetUseTabCol() ); + else if (aString.EqualsAscii( SC_UNONAME_PRMETRICS )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetTextWysiwyg() ); + else if (aString.EqualsAscii( SC_UNONAME_REPLWARN )) ScUnoHelpFunctions::SetBoolInAny( aRet, aInpOpt.GetReplaceCellsWarn() ); + else if (aString.EqualsAscii( SC_UNONAME_METRIC )) aRet <<= (sal_Int16) aAppOpt.GetAppMetric(); + else if (aString.EqualsAscii( SC_UNONAME_MOVEDIR )) aRet <<= (sal_Int16) aInpOpt.GetMoveDir(); + else if (aString.EqualsAscii( SC_UNONAME_STBFUNC )) aRet <<= (sal_Int16) aAppOpt.GetStatusFunc(); + else if (aString.EqualsAscii( SC_UNONAME_SCALE )) + { + INT16 nZoomVal = 0; + switch ( aAppOpt.GetZoomType() ) + { + case SVX_ZOOM_PERCENT: nZoomVal = aAppOpt.GetZoom(); break; + case SVX_ZOOM_OPTIMAL: nZoomVal = SC_ZOOMVAL_OPTIMAL; break; + case SVX_ZOOM_WHOLEPAGE: nZoomVal = SC_ZOOMVAL_WHOLEPAGE; break; + case SVX_ZOOM_PAGEWIDTH: nZoomVal = SC_ZOOMVAL_PAGEWIDTH; break; + } + aRet <<= (sal_Int16) nZoomVal; + } + else if (aString.EqualsAscii( SC_UNONAME_ULISTS )) + { + ScUserList* pUserList = ScGlobal::GetUserList(); + if (pUserList) + { + USHORT nCount = pUserList->GetCount(); + uno::Sequence< ::rtl::OUString> aSeq(nCount); + ::rtl::OUString* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + { + String aEntry = (*pUserList)[i]->GetString(); + pAry[i] = aEntry; + } + aRet <<= aSeq; + } + } + else if (aString.EqualsAscii( SC_UNONAME_PRALLSH )) + ScUnoHelpFunctions::SetBoolInAny( aRet, pScMod->GetPrintOptions().GetAllSheets() ); + else if (aString.EqualsAscii( SC_UNONAME_PREMPTY )) + ScUnoHelpFunctions::SetBoolInAny( aRet, !pScMod->GetPrintOptions().GetSkipEmpty() ); // reversed + + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScSpreadsheetSettings ) + +//------------------------------------------------------------------------ + +ScRecentFunctionsObj::ScRecentFunctionsObj() +{ +} + +ScRecentFunctionsObj::~ScRecentFunctionsObj() +{ +} + +// stuff for exService_... + +uno::Reference<uno::XInterface> SAL_CALL ScRecentFunctionsObj_CreateInstance( + const uno::Reference<lang::XMultiServiceFactory>& rSMgr ) +{ + SolarMutexGuard aGuard; + SC_DLL()->Load(); // load module + static uno::Reference<uno::XInterface> xInst = (cppu::OWeakObject*)new ScRecentFunctionsObj(); + return xInst; +} + +::rtl::OUString ScRecentFunctionsObj::getImplementationName_Static() +{ + return ::rtl::OUString::createFromAscii( "stardiv.StarCalc.ScRecentFunctionsObj" ); +} + +uno::Sequence< ::rtl::OUString> ScRecentFunctionsObj::getSupportedServiceNames_Static() +{ + uno::Sequence< ::rtl::OUString> aRet(1); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCRECENTFUNCTIONSOBJ_SERVICE ); + return aRet; +} + +// XRecentFunctions + +uno::Sequence<sal_Int32> SAL_CALL ScRecentFunctionsObj::getRecentFunctionIds() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScAppOptions& rOpt = SC_MOD()->GetAppOptions(); + USHORT nCount = rOpt.GetLRUFuncListCount(); + const USHORT* pFuncs = rOpt.GetLRUFuncList(); + if (pFuncs) + { + uno::Sequence<sal_Int32> aSeq(nCount); + sal_Int32* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + pAry[i] = pFuncs[i]; + return aSeq; + } + return uno::Sequence<sal_Int32>(0); +} + +void SAL_CALL ScRecentFunctionsObj::setRecentFunctionIds( + const uno::Sequence<sal_Int32>& aRecentFunctionIds ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nCount = (USHORT) Min( aRecentFunctionIds.getLength(), (INT32) LRU_MAX ); + const INT32* pAry = aRecentFunctionIds.getConstArray(); + + USHORT* pFuncs = nCount ? new USHORT[nCount] : NULL; + for (USHORT i=0; i<nCount; i++) + pFuncs[i] = (USHORT)pAry[i]; //! auf gueltige Werte testen? + + ScModule* pScMod = SC_MOD(); + ScAppOptions aNewOpts(pScMod->GetAppOptions()); + aNewOpts.SetLRUFuncList(pFuncs, nCount); + pScMod->SetAppOptions(aNewOpts); + + pScMod->RecentFunctionsChanged(); // update function list child window + + delete[] pFuncs; +} + +sal_Int32 SAL_CALL ScRecentFunctionsObj::getMaxRecentFunctions() throw(uno::RuntimeException) +{ + return LRU_MAX; +} + +//------------------------------------------------------------------------ + +ScFunctionListObj::ScFunctionListObj() +{ +} + +ScFunctionListObj::~ScFunctionListObj() +{ +} + +// stuff for exService_... + +uno::Reference<uno::XInterface> SAL_CALL ScFunctionListObj_CreateInstance( + const uno::Reference<lang::XMultiServiceFactory>& rSMgr ) +{ + SolarMutexGuard aGuard; + SC_DLL()->Load(); // load module + static uno::Reference<uno::XInterface> xInst = (cppu::OWeakObject*)new ScFunctionListObj(); + return xInst; +} + +::rtl::OUString ScFunctionListObj::getImplementationName_Static() +{ + return ::rtl::OUString::createFromAscii( "stardiv.StarCalc.ScFunctionListObj" ); +} + +uno::Sequence< ::rtl::OUString> ScFunctionListObj::getSupportedServiceNames_Static() +{ + uno::Sequence< ::rtl::OUString> aRet(1); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCFUNCTIONLISTOBJ_SERVICE ); + return aRet; +} + + +void lcl_FillSequence( uno::Sequence<beans::PropertyValue>& rSequence, const ScFuncDesc& rDesc ) +{ + DBG_ASSERT( rSequence.getLength() == SC_FUNCDESC_PROPCOUNT, "Falscher Count" ); + + beans::PropertyValue* pArray = rSequence.getArray(); + + pArray[0].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_ID ); + pArray[0].Value <<= (sal_Int32) rDesc.nFIndex; + + pArray[1].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_CATEGORY ); + pArray[1].Value <<= (sal_Int32) rDesc.nCategory; + + pArray[2].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_NAME ); + if (rDesc.pFuncName) + pArray[2].Value <<= ::rtl::OUString( *rDesc.pFuncName ); + + pArray[3].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_DESCRIPTION ); + if (rDesc.pFuncDesc) + pArray[3].Value <<= ::rtl::OUString( *rDesc.pFuncDesc ); + + pArray[4].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_ARGUMENTS ); + if (rDesc.aDefArgNames && rDesc.aDefArgDescs && rDesc.aDefArgOpt ) + { + USHORT nCount = rDesc.nArgCount; + if (nCount >= VAR_ARGS) nCount = nCount-VAR_ARGS+1; + + uno::Sequence<sheet::FunctionArgument> aArgSeq(nCount); + sheet::FunctionArgument* pArgAry = aArgSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + { + String aArgName; + if (rDesc.aDefArgNames[i]) aArgName = *rDesc.aDefArgNames[i]; + String aArgDesc; + if (rDesc.aDefArgDescs[i]) aArgDesc = *rDesc.aDefArgDescs[i]; + sheet::FunctionArgument aArgument; + aArgument.Name = aArgName; + aArgument.Description = aArgDesc; + aArgument.IsOptional = rDesc.aDefArgOpt[i]; + pArgAry[i] = aArgument; + } + pArray[4].Value <<= aArgSeq; + } +} + +// XFunctionDescriptions + +uno::Sequence<beans::PropertyValue> SAL_CALL ScFunctionListObj::getById( sal_Int32 nId ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList(); + if ( pFuncList ) + { + USHORT nCount = (USHORT)pFuncList->GetCount(); + for (USHORT nIndex=0; nIndex<nCount; nIndex++) + { + const ScFuncDesc* pDesc = pFuncList->GetFunction(nIndex); + if ( pDesc && pDesc->nFIndex == nId ) + { + uno::Sequence<beans::PropertyValue> aSeq( SC_FUNCDESC_PROPCOUNT ); + lcl_FillSequence( aSeq, *pDesc ); + return aSeq; + } + } + + throw lang::IllegalArgumentException(); // not found + } + else + throw uno::RuntimeException(); // should not happen + + return uno::Sequence<beans::PropertyValue>(0); +} + +// XNameAccess + +uno::Any SAL_CALL ScFunctionListObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameStr = aName; + const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList(); + if ( pFuncList ) + { + USHORT nCount = (USHORT)pFuncList->GetCount(); + for (USHORT nIndex=0; nIndex<nCount; nIndex++) + { + const ScFuncDesc* pDesc = pFuncList->GetFunction(nIndex); + //! Case-insensitiv ??? + if ( pDesc && pDesc->pFuncName && aNameStr == *pDesc->pFuncName ) + { + uno::Sequence<beans::PropertyValue> aSeq( SC_FUNCDESC_PROPCOUNT ); + lcl_FillSequence( aSeq, *pDesc ); + uno::Any aAny; + aAny <<= aSeq; + return aAny; + } + } + + throw container::NoSuchElementException(); // not found + } + else + throw uno::RuntimeException(); // should not happen + + return uno::Any(); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScFunctionListObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nCount = 0; + const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList(); + if ( pFuncList ) + nCount = (USHORT)pFuncList->GetCount(); + return nCount; +} + +uno::Any SAL_CALL ScFunctionListObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList(); + if ( pFuncList ) + { + if ( nIndex >= 0 && nIndex < (sal_Int32)pFuncList->GetCount() ) + { + const ScFuncDesc* pDesc = pFuncList->GetFunction(nIndex); + if ( pDesc ) + { + uno::Sequence<beans::PropertyValue> aSeq( SC_FUNCDESC_PROPCOUNT ); + lcl_FillSequence( aSeq, *pDesc ); + uno::Any aAny; + aAny <<= aSeq; + return aAny; + } + } + + throw lang::IndexOutOfBoundsException(); // illegal index + } + else + throw uno::RuntimeException(); // should not happen + + return uno::Any(); +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScFunctionListObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.FunctionDescriptionEnumeration"))); +} + +// XElementAccess + +uno::Type SAL_CALL ScFunctionListObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Sequence<beans::PropertyValue>*)0); +} + +sal_Bool SAL_CALL ScFunctionListObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() > 0 ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScFunctionListObj::getElementNames() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList(); + if ( pFuncList ) + { + USHORT nCount = (USHORT)pFuncList->GetCount(); + uno::Sequence< ::rtl::OUString> aSeq(nCount); + ::rtl::OUString* pAry = aSeq.getArray(); + for (USHORT nIndex=0; nIndex<nCount; nIndex++) + { + const ScFuncDesc* pDesc = pFuncList->GetFunction(nIndex); + if ( pDesc && pDesc->pFuncName ) + pAry[nIndex] = *pDesc->pFuncName; + } + return aSeq; + } + return uno::Sequence< ::rtl::OUString>(0); +} + +sal_Bool SAL_CALL ScFunctionListObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameStr = aName; + const ScFunctionList* pFuncList = ScGlobal::GetStarCalcFunctionList(); + if ( pFuncList ) + { + USHORT nCount = (USHORT)pFuncList->GetCount(); + for (USHORT nIndex=0; nIndex<nCount; nIndex++) + { + const ScFuncDesc* pDesc = pFuncList->GetFunction(nIndex); + //! Case-insensitiv ??? + if ( pDesc && pDesc->pFuncName && aNameStr == *pDesc->pFuncName ) + return TRUE; + } + } + return FALSE; +} + +//------------------------------------------------------------------------ + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_cellsuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_cellsuno.cxx new file mode 100644 index 000000000000..48ab97fa1473 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_cellsuno.cxx @@ -0,0 +1,8468 @@ +/* -*- 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. + * + ************************************************************************/ + + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <com/sun/star/beans/PropertyAttribute.hpp> + +#include "scitems.hxx" +#include <bf_svx/eeitem.hxx> +#define ITEMID_FIELD EE_FEATURE_FIELD + + + +#include <bf_svtools/poolitem.hxx> + +#include <bf_svx/itemdata.hxx> + +#include <tools/date.hxx> + +#include <tools/time.hxx> + +#include <vcl/svapp.hxx> +#include <bf_svx/flditem.hxx> +#include <bf_svx/langitem.hxx> +#include <bf_svx/linkmgr.hxx> +#include <bf_svx/svdpage.hxx> +#include <bf_sch/memchrt.hxx> +#include <bf_svtools/zformat.hxx> +#include <rtl/uuid.h> +#include <float.h> // DBL_MIN + +#include <com/sun/star/awt/XBitmap.hpp> +#include <com/sun/star/util/CellProtection.hpp> +#include <com/sun/star/table/CellHoriJustify.hpp> +#include <com/sun/star/table/CellOrientation.hpp> +#include <com/sun/star/table/CellVertJustify.hpp> +#include <com/sun/star/table/ShadowFormat.hpp> +#include <com/sun/star/sheet/CellFlags.hpp> +#include <com/sun/star/sheet/FormulaResult.hpp> + +#include "autoform.hxx" +#include "cursuno.hxx" +#include "textuno.hxx" +#include "editsrc.hxx" +#include "notesuno.hxx" +#include "fielduno.hxx" +#include "docuno.hxx" // ScTableColumnsObj etc +#include "datauno.hxx" +#include "dapiuno.hxx" +#include "chartuno.hxx" +#include "fmtuno.hxx" +#include "miscuno.hxx" +#include "convuno.hxx" +#include "targuno.hxx" +#include "docsh.hxx" +#include "patattr.hxx" +#include "docpool.hxx" +#include "docfunc.hxx" +#include "dbdocfun.hxx" +#include "olinefun.hxx" +#include "hints.hxx" +#include "cell.hxx" +#include "undotab.hxx" +#include "stlsheet.hxx" +#include "dbcolect.hxx" +#include "attrib.hxx" +#include "chartarr.hxx" +#include "chartlis.hxx" +#include "drwlayer.hxx" +#include "printfun.hxx" +#include "prnsave.hxx" +#include "tablink.hxx" +#include "dociter.hxx" +#include "validat.hxx" +#include "bf_sc.hrc" +#include <vcl/svapp.hxx> +#include "cellform.hxx" +#include "globstr.hrc" +#include "unonames.hxx" +#include "styleuno.hxx" +#include "rangeseq.hxx" +#include "unowids.hxx" + +#ifndef __SGI_STL_LIST +#include <list> +#endif + +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +//! ScLinkListener in anderes File verschieben !!! + +class ScLinkListener : public SfxListener +{ + Link aLink; +public: + ScLinkListener(const Link& rL) : aLink(rL) {} + virtual ~ScLinkListener(); + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); +}; + + +class ScNamedEntry +{ + String aName; + ScRange aRange; + +public: + ScNamedEntry(const String& rN, const ScRange& rR) : + aName(rN), aRange(rR) {} + + const String& GetName() const { return aName; } + const ScRange& GetRange() const { return aRange; } +}; + + +//------------------------------------------------------------------------ + +// Die Namen in den Maps muessen (nach strcmp) sortiert sein! +//! statt Which-ID 0 special IDs verwenden, und nicht ueber Namen vergleichen !!!!!!!!! + +// Left/Right/Top/BottomBorder are mapped directly to the core items, +// not collected/applied to the borders of a range -> ATTR_BORDER can be used directly + +const SfxItemPropertyMap* lcl_GetCellsPropertyMap() +{ + static SfxItemPropertyMap aCellsPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, + {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, + {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_UNDERLINE }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_UL_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_UL_HASCOLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, + {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_ORIENTATION, &getCppuType((table::CellOrientation*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS + {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, + {0,0,0,0} + }; + return aCellsPropertyMap_Impl; +} + +// CellRange enthaelt alle Eintraege von Cells, zusaetzlich eigene Eintraege +// mit Which-ID 0 (werden nur fuer getPropertySetInfo benoetigt). + +const SfxItemPropertyMap* lcl_GetRangePropertyMap() +{ + static SfxItemPropertyMap aRangePropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, + {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, + {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_UNDERLINE }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_UL_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_UL_HASCOLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, + {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_ORIENTATION, &getCppuType((table::CellOrientation*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS + {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, + {0,0,0,0} + }; + return aRangePropertyMap_Impl; +} + +// Cell enthaelt alle Eintraege von CellRange, zusaetzlich eigene Eintraege +// mit Which-ID 0 (werden nur fuer getPropertySetInfo benoetigt). + +const SfxItemPropertyMap* lcl_GetCellPropertyMap() +{ + static SfxItemPropertyMap aCellPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, + {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, + {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_UNDERLINE }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_UL_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_UL_HASCOLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_FORMLOC), SC_WID_UNO_FORMLOC, &getCppuType((::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_FORMRT), SC_WID_UNO_FORMRT, &getCppuType((table::CellContentType*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, + {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_ORIENTATION, &getCppuType((table::CellOrientation*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS + {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, + {0,0,0,0} + }; + return aCellPropertyMap_Impl; +} + +// Column und Row enthalten alle Eintraege von CellRange, zusaetzlich eigene Eintraege +// mit Which-ID 0 (werden nur fuer getPropertySetInfo benoetigt). + +const SfxItemPropertyMap* lcl_GetColumnPropertyMap() +{ + static SfxItemPropertyMap aColumnPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, + {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, + {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_UNDERLINE }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_UL_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_UL_HASCOLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, + {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, +// {MAP_CHAR_LEN(SC_UNONAME_CELLFILT), SC_WID_UNO_CELLFILT,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_MANPAGE), SC_WID_UNO_MANPAGE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_NEWPAGE), SC_WID_UNO_NEWPAGE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVIS), SC_WID_UNO_CELLVIS, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_OWIDTH), SC_WID_UNO_OWIDTH, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_ORIENTATION, &getCppuType((table::CellOrientation*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS + {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLWID), SC_WID_UNO_CELLWID, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, + {0,0,0,0} + }; + return aColumnPropertyMap_Impl; +} + +const SfxItemPropertyMap* lcl_GetRowPropertyMap() +{ + static SfxItemPropertyMap aRowPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, + {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, + {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_UNDERLINE }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_UL_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_UL_HASCOLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLHGT), SC_WID_UNO_CELLHGT, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, + {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {MAP_CHAR_LEN(SC_UNONAME_CELLFILT), SC_WID_UNO_CELLFILT,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_MANPAGE), SC_WID_UNO_MANPAGE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_NEWPAGE), SC_WID_UNO_NEWPAGE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVIS), SC_WID_UNO_CELLVIS, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_OHEIGHT), SC_WID_UNO_OHEIGHT, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_ORIENTATION, &getCppuType((table::CellOrientation*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS + {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, + {0,0,0,0} + }; + return aRowPropertyMap_Impl; +} + +const SfxItemPropertyMap* lcl_GetSheetPropertyMap() +{ + static SfxItemPropertyMap aSheetPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, + {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, + {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_UNDERLINE }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_UL_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_UL_HASCOLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, + {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVIS), SC_WID_UNO_CELLVIS, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_LINKDISPBIT), SC_WID_UNO_LINKDISPBIT,&getCppuType((uno::Reference<awt::XBitmap>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNO_LINKDISPNAME), SC_WID_UNO_LINKDISPNAME,&getCppuType((::rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_ORIENTATION, &getCppuType((table::CellOrientation*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PAGESTL), SC_WID_UNO_PAGESTL, &getCppuType((::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS + {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, + {0,0,0,0} + }; + return aSheetPropertyMap_Impl; +} + +const SfxItemPropertyMap* lcl_GetEditPropertyMap() +{ + static SfxItemPropertyMap aEditPropertyMap_Impl[] = + { + SVX_UNOEDIT_CHAR_PROPERTIES, + SVX_UNOEDIT_FONT_PROPERTIES, + SVX_UNOEDIT_PARA_PROPERTIES, + SVX_UNOEDIT_NUMBERING_PROPERTIE, // for completeness of service ParagraphProperties + {MAP_CHAR_LEN(SC_UNONAME_TEXTUSER), EE_CHAR_XMLATTRIBS, &getCppuType((const uno::Reference< container::XNameContainer >*)0), 0, 0}, + {MAP_CHAR_LEN(SC_UNONAME_USERDEF), EE_PARA_XMLATTRIBS, &getCppuType((const uno::Reference< container::XNameContainer >*)0), 0, 0}, + {0,0,0,0} + }; + return aEditPropertyMap_Impl; +} + + +//------------------------------------------------------------------------ + +//! diese Funktionen in einen allgemeinen Header verschieben +inline long TwipsToHMM(long nTwips) { return (nTwips * 127 + 36) / 72; } +inline long HMMToTwips(long nHMM) { return (nHMM * 72 + 63) / 127; } + +//------------------------------------------------------------------------ + +#define SCCHARPROPERTIES_SERVICE "com.sun.star.style.CharacterProperties" +#define SCPARAPROPERTIES_SERVICE "com.sun.star.style.ParagraphProperties" +#define SCCELLPROPERTIES_SERVICE "com.sun.star.table.CellProperties" +#define SCCELLRANGE_SERVICE "com.sun.star.table.CellRange" +#define SCCELL_SERVICE "com.sun.star.table.Cell" +#define SCSHEETCELLRANGES_SERVICE "com.sun.star.sheet.SheetCellRanges" +#define SCSHEETCELLRANGE_SERVICE "com.sun.star.sheet.SheetCellRange" +#define SCSPREADSHEET_SERVICE "com.sun.star.sheet.Spreadsheet" +#define SCSHEETCELL_SERVICE "com.sun.star.sheet.SheetCell" + +SC_SIMPLE_SERVICE_INFO( ScCellFormatsEnumeration, "ScCellFormatsEnumeration", "com.sun.star.sheet.CellFormatRangesEnumeration" ) +SC_SIMPLE_SERVICE_INFO( ScCellFormatsObj, "ScCellFormatsObj", "com.sun.star.sheet.CellFormatRanges" ) +SC_SIMPLE_SERVICE_INFO( ScUniqueCellFormatsEnumeration, "ScUniqueCellFormatsEnumeration", "com.sun.star.sheet.UniqueCellFormatRangesEnumeration" ) +SC_SIMPLE_SERVICE_INFO( ScUniqueCellFormatsObj, "ScUniqueCellFormatsObj", "com.sun.star.sheet.UniqueCellFormatRanges" ) +SC_SIMPLE_SERVICE_INFO( ScCellRangesBase, "ScCellRangesBase", "stardiv.unknown" ) +SC_SIMPLE_SERVICE_INFO( ScCellsEnumeration, "ScCellsEnumeration", "com.sun.star.sheet.CellsEnumeration" ) +SC_SIMPLE_SERVICE_INFO( ScCellsObj, "ScCellsObj", "com.sun.star.sheet.Cells" ) +SC_SIMPLE_SERVICE_INFO( ScTableColumnObj, "ScTableColumnObj", "com.sun.star.table.TableColumn" ) +SC_SIMPLE_SERVICE_INFO( ScTableRowObj, "ScTableRowObj", "com.sun.star.table.TableRow" ) + +//------------------------------------------------------------------------ + +SV_IMPL_PTRARR( XPropertyChangeListenerArr_Impl, XPropertyChangeListenerPtr ); +SV_IMPL_PTRARR( ScNamedEntryArr_Impl, ScNamedEntryPtr ); + +//------------------------------------------------------------------------ + +#ifdef DBG_UTIL +#define TEST_PROPERTY_MAPS +#endif + +#ifdef TEST_PROPERTY_MAPS + +void lcl_TestMap( const SfxItemPropertyMap* pMap ) +{ + while ( pMap->pName ) + { + const SfxItemPropertyMap* pNext = pMap + 1; + if ( pNext->pName ) + { + int nDiff = strcmp( pMap->pName, pNext->pName ); + if ( nDiff >= 0 ) + { + ByteString aErr("Reihenfolge: "); + aErr += pMap->pName; + aErr += '/'; + aErr += pNext->pName; + DBG_ERROR( aErr.GetBuffer() ); + } + } + pMap = pNext; + } +} + +struct ScPropertyTester +{ + ScPropertyTester(); +}; + +//extern const SfxItemPropertyMap* lcl_GetCellStyleMap(); +//extern const SfxItemPropertyMap* lcl_GetPageStyleMap(); +//extern const SfxItemPropertyMap* lcl_GetHeaderStyleMap(); +//extern const SfxItemPropertyMap* lcl_GetFooterStyleMap(); + +ScPropertyTester::ScPropertyTester() +{ + lcl_TestMap( lcl_GetCellsPropertyMap() ); + lcl_TestMap( lcl_GetRangePropertyMap() ); + lcl_TestMap( lcl_GetCellPropertyMap() ); + lcl_TestMap( lcl_GetColumnPropertyMap() ); + lcl_TestMap( lcl_GetRowPropertyMap() ); + lcl_TestMap( lcl_GetSheetPropertyMap() ); + +// lcl_TestMap( lcl_GetCellStyleMap() ); +// lcl_TestMap( lcl_GetPageStyleMap() ); +// lcl_TestMap( lcl_GetHeaderStyleMap() ); +// lcl_TestMap( lcl_GetFooterStyleMap() ); +} + +ScPropertyTester aPropertyTester; + +#endif + +//------------------------------------------------------------------------ + +//! ScLinkListener in anderes File verschieben !!! + +ScLinkListener::~ScLinkListener() +{ +} + +void ScLinkListener::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + aLink.Call( (SfxHint*)&rHint ); +} + +//------------------------------------------------------------------------ + +void lcl_CopyProperties( beans::XPropertySet& rDest, beans::XPropertySet& rSource ) +{ + uno::Reference<beans::XPropertySetInfo> xInfo = rSource.getPropertySetInfo(); + if (xInfo.is()) + { + uno::Sequence<beans::Property> aSeq = xInfo->getProperties(); + const beans::Property* pAry = aSeq.getConstArray(); + ULONG nCount = aSeq.getLength(); + for (ULONG i=0; i<nCount; i++) + { + ::rtl::OUString aName = pAry[i].Name; + rDest.setPropertyValue( aName, rSource.getPropertyValue( aName ) ); + } + } +} + +USHORT lcl_FirstTab( const ScRangeList& rRanges ) +{ + DBG_ASSERT(rRanges.Count() >= 1, "was fuer Ranges ?!?!"); + const ScRange* pFirst = rRanges.GetObject(0); + if (pFirst) + return pFirst->aStart.Tab(); + + return 0; // soll nicht sein +} + +//------------------------------------------------------------------------ + +ScSubTotalFunc lcl_SummaryToSubTotal( sheet::GeneralFunction eSummary ) +{ + ScSubTotalFunc eSubTotal; + switch (eSummary) + { + case sheet::GeneralFunction_SUM: + eSubTotal = SUBTOTAL_FUNC_SUM; + break; + case sheet::GeneralFunction_COUNT: + eSubTotal = SUBTOTAL_FUNC_CNT2; + break; + case sheet::GeneralFunction_AVERAGE: + eSubTotal = SUBTOTAL_FUNC_AVE; + break; + case sheet::GeneralFunction_MAX: + eSubTotal = SUBTOTAL_FUNC_MAX; + break; + case sheet::GeneralFunction_MIN: + eSubTotal = SUBTOTAL_FUNC_MIN; + break; + case sheet::GeneralFunction_PRODUCT: + eSubTotal = SUBTOTAL_FUNC_PROD; + break; + case sheet::GeneralFunction_COUNTNUMS: + eSubTotal = SUBTOTAL_FUNC_CNT; + break; + case sheet::GeneralFunction_STDEV: + eSubTotal = SUBTOTAL_FUNC_STD; + break; + case sheet::GeneralFunction_STDEVP: + eSubTotal = SUBTOTAL_FUNC_STDP; + break; + case sheet::GeneralFunction_VAR: + eSubTotal = SUBTOTAL_FUNC_VAR; + break; + case sheet::GeneralFunction_VARP: + eSubTotal = SUBTOTAL_FUNC_VARP; + break; + + case sheet::GeneralFunction_NONE: + case sheet::GeneralFunction_AUTO: + default: + eSubTotal = SUBTOTAL_FUNC_NONE; + break; + } + return eSubTotal; +} + +//------------------------------------------------------------------------ + +const SvxBorderLine* ScHelperFunctions::GetBorderLine( SvxBorderLine& rLine, const table::BorderLine& rStruct ) +{ + // Calc braucht Twips, im Uno-Struct sind 1/100mm + + rLine.SetOutWidth( (USHORT)HMMToTwips( rStruct.OuterLineWidth ) ); + rLine.SetInWidth( (USHORT)HMMToTwips( rStruct.InnerLineWidth ) ); + rLine.SetDistance( (USHORT)HMMToTwips( rStruct.LineDistance ) ); + rLine.SetColor( ColorData( rStruct.Color ) ); + + if ( rLine.GetOutWidth() || rLine.GetInWidth() || rLine.GetDistance() ) + return &rLine; + else + return NULL; +} + +void ScHelperFunctions::FillBoxItems( SvxBoxItem& rOuter, SvxBoxInfoItem& rInner, const table::TableBorder& rBorder ) +{ + SvxBorderLine aLine; + rOuter.SetDistance( (USHORT)HMMToTwips( rBorder.Distance ) ); + rOuter.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.TopLine ), BOX_LINE_TOP ); + rOuter.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.BottomLine ), BOX_LINE_BOTTOM ); + rOuter.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.LeftLine ), BOX_LINE_LEFT ); + rOuter.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.RightLine ), BOX_LINE_RIGHT ); + rInner.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.HorizontalLine ), BOXINFO_LINE_HORI ); + rInner.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.VerticalLine ), BOXINFO_LINE_VERT ); + rInner.SetValid( VALID_TOP, rBorder.IsTopLineValid ); + rInner.SetValid( VALID_BOTTOM, rBorder.IsBottomLineValid ); + rInner.SetValid( VALID_LEFT, rBorder.IsLeftLineValid ); + rInner.SetValid( VALID_RIGHT, rBorder.IsRightLineValid ); + rInner.SetValid( VALID_HORI, rBorder.IsHorizontalLineValid ); + rInner.SetValid( VALID_VERT, rBorder.IsVerticalLineValid ); + rInner.SetValid( VALID_DISTANCE, rBorder.IsDistanceValid ); + rInner.SetTable( TRUE ); +} + +void ScHelperFunctions::FillBorderLine( table::BorderLine& rStruct, const SvxBorderLine* pLine ) +{ + if (pLine) + { + rStruct.Color = pLine->GetColor().GetColor(); + rStruct.InnerLineWidth = (sal_Int16)TwipsToHMM( pLine->GetInWidth() ); + rStruct.OuterLineWidth = (sal_Int16)TwipsToHMM( pLine->GetOutWidth() ); + rStruct.LineDistance = (sal_Int16)TwipsToHMM( pLine->GetDistance() ); + } + else + rStruct.Color = rStruct.InnerLineWidth = + rStruct.OuterLineWidth = rStruct.LineDistance = 0; +} + +void ScHelperFunctions::FillTableBorder( table::TableBorder& rBorder, + const SvxBoxItem& rOuter, const SvxBoxInfoItem& rInner ) +{ + ScHelperFunctions::FillBorderLine( rBorder.TopLine, rOuter.GetTop() ); + ScHelperFunctions::FillBorderLine( rBorder.BottomLine, rOuter.GetBottom() ); + ScHelperFunctions::FillBorderLine( rBorder.LeftLine, rOuter.GetLeft() ); + ScHelperFunctions::FillBorderLine( rBorder.RightLine, rOuter.GetRight() ); + ScHelperFunctions::FillBorderLine( rBorder.HorizontalLine, rInner.GetHori() ); + ScHelperFunctions::FillBorderLine( rBorder.VerticalLine, rInner.GetVert() ); + + rBorder.Distance = rOuter.GetDistance(); + rBorder.IsTopLineValid = rInner.IsValid(VALID_TOP); + rBorder.IsBottomLineValid = rInner.IsValid(VALID_BOTTOM); + rBorder.IsLeftLineValid = rInner.IsValid(VALID_LEFT); + rBorder.IsRightLineValid = rInner.IsValid(VALID_RIGHT); + rBorder.IsHorizontalLineValid = rInner.IsValid(VALID_HORI); + rBorder.IsVerticalLineValid = rInner.IsValid(VALID_VERT); + rBorder.IsDistanceValid = rInner.IsValid(VALID_DISTANCE); +} + +//------------------------------------------------------------------------ + +//! lcl_ApplyBorder nach docfunc verschieben! + +void ScHelperFunctions::ApplyBorder( ScDocShell* pDocShell, const ScRangeList& rRanges, + const SvxBoxItem& rOuter, const SvxBoxInfoItem& rInner ) +{ + ScDocument* pDoc = pDocShell->GetDocument(); + ULONG nCount = rRanges.Count(); + ULONG i; + for (i=0; i<nCount; i++) + { + ScRange aRange = *rRanges.GetObject(i); + USHORT nTab = aRange.aStart.Tab(); + + ScMarkData aMark; + aMark.SetMarkArea( aRange ); + aMark.SelectTable( nTab, TRUE ); + + pDoc->ApplySelectionFrame( aMark, &rOuter, &rInner ); + // RowHeight bei Umrandung alleine nicht noetig + } + + for (i=0; i<nCount; i++) + pDocShell->PostPaint( *rRanges.GetObject(i), PAINT_GRID, SC_PF_LINES | SC_PF_TESTMERGE ); + + pDocShell->SetDocumentModified(); +} + +//! move lcl_PutDataArray to docfunc? +//! merge loop with ScFunctionAccess::callFunction + +BOOL lcl_PutDataArray( ScDocShell& rDocShell, const ScRange& rRange, + const uno::Sequence< uno::Sequence<uno::Any> >& aData ) +{ +// BOOL bApi = TRUE; + + ScDocument* pDoc = rDocShell.GetDocument(); + USHORT nTab = rRange.aStart.Tab(); + USHORT nStartCol = rRange.aStart.Col(); + USHORT nStartRow = rRange.aStart.Row(); + USHORT nEndCol = rRange.aEnd.Col(); + USHORT nEndRow = rRange.aEnd.Row(); + + if ( !pDoc->IsBlockEditable( nTab, nStartCol,nStartRow, nEndCol,nEndRow ) ) + { + //! error message + return FALSE; + } + + long nCols = 0; + long nRows = aData.getLength(); + const uno::Sequence<uno::Any>* pArray = aData.getConstArray(); + if ( nRows ) + nCols = pArray[0].getLength(); + + if ( nCols != nEndCol-nStartCol+1 || nRows != nEndRow-nStartRow+1 ) + { + //! error message? + return FALSE; + } + + pDoc->DeleteAreaTab( nStartCol, nStartRow, nEndCol, nEndRow, nTab, IDF_CONTENTS ); + + BOOL bError = FALSE; + USHORT nDocRow = nStartRow; + for (long nRow=0; nRow<nRows; nRow++) + { + const uno::Sequence<uno::Any>& rColSeq = pArray[nRow]; + if ( rColSeq.getLength() == nCols ) + { + USHORT nDocCol = nStartCol; + const uno::Any* pColArr = rColSeq.getConstArray(); + for (long nCol=0; nCol<nCols; nCol++) + { + const uno::Any& rElement = pColArr[nCol]; + uno::TypeClass eElemClass = rElement.getValueTypeClass(); + if ( eElemClass == uno::TypeClass_VOID ) + { + // void = "no value" + pDoc->SetError( nDocCol, nDocRow, nTab, NOVALUE ); + } + else if ( eElemClass == uno::TypeClass_BYTE || + eElemClass == uno::TypeClass_SHORT || + eElemClass == uno::TypeClass_UNSIGNED_SHORT || + eElemClass == uno::TypeClass_LONG || + eElemClass == uno::TypeClass_UNSIGNED_LONG || + eElemClass == uno::TypeClass_FLOAT || + eElemClass == uno::TypeClass_DOUBLE ) + { + // #87871# accept integer types because Basic passes a floating point + // variable as byte, short or long if it's an integer number. + double fVal; + rElement >>= fVal; + pDoc->SetValue( nDocCol, nDocRow, nTab, fVal ); + } + else if ( eElemClass == uno::TypeClass_STRING ) + { + ::rtl::OUString aUStr; + rElement >>= aUStr; + if ( aUStr.getLength() ) + pDoc->PutCell( nDocCol, nDocRow, nTab, new ScStringCell( aUStr ) ); + } + else + bError = TRUE; // invalid type + + ++nDocCol; + } + } + else + bError = TRUE; // wrong size + + ++nDocRow; + } + + BOOL bHeight = rDocShell.AdjustRowHeight( nStartRow, nEndRow, nTab ); + + if (!bHeight) + rDocShell.PostPaint( rRange, PAINT_GRID ); // AdjustRowHeight may have painted already + + rDocShell.SetDocumentModified(); + + return !bError; +} + +BOOL lcl_PutFormulaArray( ScDocShell& rDocShell, const ScRange& rRange, + const uno::Sequence< uno::Sequence< ::rtl::OUString> >& aData ) +{ +// BOOL bApi = TRUE; + + ScDocument* pDoc = rDocShell.GetDocument(); + USHORT nTab = rRange.aStart.Tab(); + USHORT nStartCol = rRange.aStart.Col(); + USHORT nStartRow = rRange.aStart.Row(); + USHORT nEndCol = rRange.aEnd.Col(); + USHORT nEndRow = rRange.aEnd.Row(); + + if ( !pDoc->IsBlockEditable( nTab, nStartCol,nStartRow, nEndCol,nEndRow ) ) + { + //! error message + return FALSE; + } + + long nCols = 0; + long nRows = aData.getLength(); + const uno::Sequence< ::rtl::OUString>* pArray = aData.getConstArray(); + if ( nRows ) + nCols = pArray[0].getLength(); + + if ( nCols != nEndCol-nStartCol+1 || nRows != nEndRow-nStartRow+1 ) + { + //! error message? + return FALSE; + } + + pDoc->DeleteAreaTab( nStartCol, nStartRow, nEndCol, nEndRow, nTab, IDF_CONTENTS ); + + ScDocFunc aFunc( rDocShell ); // for InterpretEnglishString + + BOOL bError = FALSE; + USHORT nDocRow = nStartRow; + for (long nRow=0; nRow<nRows; nRow++) + { + const uno::Sequence< ::rtl::OUString>& rColSeq = pArray[nRow]; + if ( rColSeq.getLength() == nCols ) + { + USHORT nDocCol = nStartCol; + const ::rtl::OUString* pColArr = rColSeq.getConstArray(); + for (long nCol=0; nCol<nCols; nCol++) + { + String aText = pColArr[nCol]; + ScAddress aPos( nDocCol, nDocRow, nTab ); + ScBaseCell* pNewCell = aFunc.InterpretEnglishString( aPos, aText ); + pDoc->PutCell( aPos, pNewCell ); + + ++nDocCol; + } + } + else + bError = TRUE; // wrong size + + ++nDocRow; + } + + BOOL bHeight = rDocShell.AdjustRowHeight( nStartRow, nEndRow, nTab ); + + if (!bHeight) + rDocShell.PostPaint( rRange, PAINT_GRID ); // AdjustRowHeight may have painted already + + rDocShell.SetDocumentModified(); + + return !bError; +} + +// used in ScCellRangeObj::getFormulaArray and ScCellObj::GetInputString_Impl +String lcl_GetInputString( ScDocShell* pDocSh, const ScAddress& rPosition, BOOL bEnglish ) +{ + String aVal; + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + ScBaseCell* pCell = pDoc->GetCell( rPosition ); + if ( pCell && pCell->GetCellType() != CELLTYPE_NOTE ) + { + CellType eType = pCell->GetCellType(); + if ( eType == CELLTYPE_FORMULA ) + { + ScFormulaCell* pForm = (ScFormulaCell*)pCell; + if (bEnglish) + pForm->GetEnglishFormula( aVal ); + else + pForm->GetFormula( aVal ); + } + else + { + SvNumberFormatter* pFormatter = bEnglish ? ScGlobal::GetEnglishFormatter() : + pDoc->GetFormatTable(); + // Since the English formatter was constructed with + // LANGUAGE_ENGLISH_US the "General" format has index key 0, + // we don't have to query. + sal_uInt32 nNumFmt = bEnglish ? +// pFormatter->GetStandardIndex(LANGUAGE_ENGLISH_US) : + 0 : + pDoc->GetNumberFormat( rPosition ); + + if ( eType == CELLTYPE_EDIT ) + { + // GetString an der EditCell macht Leerzeichen aus Umbruechen, + // hier werden die Umbrueche aber gebraucht + const EditTextObject* pData = ((ScEditCell*)pCell)->GetData(); + if (pData) + { + EditEngine& rEngine = pDoc->GetEditEngine(); + rEngine.SetText( *pData ); + aVal = rEngine.GetText( LINEEND_LF ); + } + } + else + ScCellFormat::GetInputString( pCell, nNumFmt, aVal, *pFormatter ); + + // ggf. ein ' davorhaengen wie in ScTabViewShell::UpdateInputHandler + if ( eType == CELLTYPE_STRING || eType == CELLTYPE_EDIT ) + { + double fDummy; + sal_Bool bIsNumberFormat(pFormatter->IsNumberFormat(aVal, nNumFmt, fDummy)); + if ( bIsNumberFormat ) + aVal.Insert('\'',0); + else if ( aVal.Len() && aVal.GetChar(0) == '\'' ) + { + // if the string starts with a "'", add another one because setFormula + // strips one (like text input, except for "text" number formats) + if ( bEnglish || ( pFormatter->GetType(nNumFmt) != NUMBERFORMAT_TEXT ) ) + aVal.Insert('\'',0); + } + } + } + } + } + return aVal; +} + +//------------------------------------------------------------------------ + +ScCellRangesBase::ScCellRangesBase(ScDocShell* pDocSh, const ScRange& rR) : + pDocShell( pDocSh ), + aPropSet(lcl_GetCellsPropertyMap()), + bChartColAsHdr( FALSE ), + bChartRowAsHdr( FALSE ), + bCursorOnly( FALSE ), + pCurrentFlat( NULL ), + pCurrentDeep( NULL ), + pCurrentDataSet( NULL ), + pValueListener( NULL ), + bValueChangePosted( FALSE ), + pMarkData( NULL ), + aValueListeners( 0 ) +{ + ScRange aCellRange = rR; + aCellRange.Justify(); + aRanges.Append( aCellRange ); + + if (pDocShell) // Null, wenn per createInstance erzeugt... + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScCellRangesBase::ScCellRangesBase(ScDocShell* pDocSh, const ScRangeList& rR) : + pDocShell( pDocSh ), + aRanges( rR ), + aPropSet(lcl_GetCellsPropertyMap()), + bChartColAsHdr( FALSE ), + bChartRowAsHdr( FALSE ), + bCursorOnly( FALSE ), + pCurrentFlat( NULL ), + pCurrentDeep( NULL ), + pCurrentDataSet( NULL ), + pValueListener( NULL ), + bValueChangePosted( FALSE ), + pMarkData( NULL ), + aValueListeners( 0 ) +{ + if (pDocShell) // Null, wenn per createInstance erzeugt... + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScCellRangesBase::~ScCellRangesBase() +{ + // #107294# call RemoveUnoObject first, so no notification can happen + // during ForgetCurrentAttrs + + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); + + ForgetCurrentAttrs(); + + delete pValueListener; + + //! XChartDataChangeEventListener abmelden ?? + //! (ChartCollection haelt dann auch dieses Objekt fest!) +} + +void ScCellRangesBase::ForgetCurrentAttrs() +{ + delete pCurrentFlat; + delete pCurrentDeep; + delete pCurrentDataSet; + delete pMarkData; + pCurrentFlat = NULL; + pCurrentDeep = NULL; + pCurrentDataSet = NULL; + pMarkData = NULL; +} + +const ScPatternAttr* ScCellRangesBase::GetCurrentAttrsFlat() +{ + // get and cache direct cell attributes for this object's range + + if ( !pCurrentFlat && pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + pCurrentFlat = pDoc->CreateSelectionPattern( *GetMarkData(), FALSE ); + } + return pCurrentFlat; +} + +const ScPatternAttr* ScCellRangesBase::GetCurrentAttrsDeep() +{ + // get and cache cell attributes (incl. styles) for this object's range + + if ( !pCurrentDeep && pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + pCurrentDeep = pDoc->CreateSelectionPattern( *GetMarkData(), TRUE ); + } + return pCurrentDeep; +} + +SfxItemSet* ScCellRangesBase::GetCurrentDataSet() +{ + if(!pCurrentDataSet) + { + const ScPatternAttr* pPattern = GetCurrentAttrsDeep(); + if ( pPattern ) + { + // Dontcare durch Default ersetzen, damit man immer eine Reflection hat + pCurrentDataSet = new SfxItemSet( pPattern->GetItemSet() ); + pCurrentDataSet->ClearInvalidItems(); + } + } + return pCurrentDataSet; +} + +const ScMarkData* ScCellRangesBase::GetMarkData() +{ + if (!pMarkData) + { + pMarkData = new ScMarkData(); + pMarkData->MarkFromRangeList( aRanges, FALSE ); + } + return pMarkData; +} + +void ScCellRangesBase::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; + + if ( aRanges.UpdateReference( rRef.GetMode(), pDocShell->GetDocument(), rRef.GetRange(), + rRef.GetDx(), rRef.GetDy(), rRef.GetDz() ) ) + { + if (rRef.GetMode() == URM_INSDEL && + aRanges.Count() == 1 && + ScTableSheetObj::getImplementation( (cppu::OWeakObject*)this )) + { + // #101755#; the range size of a sheet does not change + ScRange* pR = aRanges.First(); + if (pR) + { + pR->aStart.SetCol(0); + pR->aStart.SetRow(0); + pR->aEnd.SetCol(MAXCOL); + pR->aEnd.SetRow(MAXROW); + } + } + RefChanged(); + } + } + else if ( rHint.ISA( SfxSimpleHint ) ) + { + ULONG nId = ((const SfxSimpleHint&)rHint).GetId(); + if ( nId == SFX_HINT_DYING ) + { + ForgetCurrentAttrs(); + pDocShell = NULL; // invalid + } + else if ( nId == SFX_HINT_DATACHANGED ) + { + // document content changed -> forget cached attributes + ForgetCurrentAttrs(); + } + } +} + +void ScCellRangesBase::RefChanged() +{ + //! XChartDataChangeEventListener anpassen + + //! Test !!! + + if ( pValueListener && aValueListeners.Count() != 0 ) + { + pValueListener->EndListeningAll(); + + ScDocument* pDoc = pDocShell->GetDocument(); + ULONG nCount = aRanges.Count(); + for (ULONG i=0; i<nCount; i++) + pDoc->StartListeningArea( *aRanges.GetObject(i), pValueListener ); + } + //! Test !!! + + ForgetCurrentAttrs(); +} + +ScDocument* ScCellRangesBase::GetDocument() const +{ + if (pDocShell) + return pDocShell->GetDocument(); + else + return NULL; +} + +void ScCellRangesBase::InitInsertRange(ScDocShell* pDocSh, const ScRange& rR) +{ + if ( !pDocShell && pDocSh ) + { + pDocShell = pDocSh; + + ScRange aCellRange = rR; + aCellRange.Justify(); + aRanges.RemoveAll(); + aRanges.Append( aCellRange ); + + pDocShell->GetDocument()->AddUnoObject(*this); + + RefChanged(); // Range im Range-Objekt anpassen + } +} + +void ScCellRangesBase::AddRange(const ScRange& rRange, const sal_Bool bMergeRanges) +{ + if (bMergeRanges) + aRanges.Join(rRange); + else + aRanges.Append(rRange); + RefChanged(); +} + +void ScCellRangesBase::SetNewRange(const ScRange& rNew) +{ + ScRange aCellRange = rNew; + aCellRange.Justify(); + + aRanges.RemoveAll(); + aRanges.Append( aCellRange ); + RefChanged(); +} + +void ScCellRangesBase::SetNewRanges(const ScRangeList& rNew) +{ + aRanges = rNew; + RefChanged(); +} + +uno::Any SAL_CALL ScCellRangesBase::queryInterface( const uno::Type& rType ) + throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( beans::XPropertySet ) + SC_QUERYINTERFACE( beans::XMultiPropertySet ) + SC_QUERYINTERFACE( beans::XPropertyState ) + SC_QUERYINTERFACE( sheet::XSheetOperation ) + SC_QUERYINTERFACE( chart::XChartDataArray ) + SC_QUERYINTERFACE( chart::XChartData ) + SC_QUERYINTERFACE( util::XIndent ) + SC_QUERYINTERFACE( sheet::XCellRangesQuery ) + SC_QUERYINTERFACE( sheet::XFormulaQuery ) + SC_QUERYINTERFACE( util::XReplaceable ) + SC_QUERYINTERFACE( util::XSearchable ) + SC_QUERYINTERFACE( lang::XServiceInfo ) + SC_QUERYINTERFACE( lang::XUnoTunnel ) + SC_QUERYINTERFACE( lang::XTypeProvider ) + + return OWeakObject::queryInterface( rType ); +} + +void SAL_CALL ScCellRangesBase::acquire() throw() +{ + OWeakObject::acquire(); +} + +void SAL_CALL ScCellRangesBase::release() throw() +{ + OWeakObject::release(); +} + +uno::Sequence<uno::Type> SAL_CALL ScCellRangesBase::getTypes() throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + aTypes.realloc(12); + uno::Type* pPtr = aTypes.getArray(); + pPtr[0] = getCppuType((const uno::Reference<beans::XPropertySet>*)0); + pPtr[1] = getCppuType((const uno::Reference<beans::XMultiPropertySet>*)0); + pPtr[2] = getCppuType((const uno::Reference<beans::XPropertyState>*)0); + pPtr[3] = getCppuType((const uno::Reference<sheet::XSheetOperation>*)0); + pPtr[4] = getCppuType((const uno::Reference<chart::XChartDataArray>*)0); + pPtr[5] = getCppuType((const uno::Reference<util::XIndent>*)0); + pPtr[6] = getCppuType((const uno::Reference<sheet::XCellRangesQuery>*)0); + pPtr[7] = getCppuType((const uno::Reference<sheet::XFormulaQuery>*)0); + pPtr[8] = getCppuType((const uno::Reference<util::XReplaceable>*)0); + pPtr[9] = getCppuType((const uno::Reference<lang::XServiceInfo>*)0); + pPtr[10] = getCppuType((const uno::Reference<lang::XUnoTunnel>*)0); + pPtr[11]= getCppuType((const uno::Reference<lang::XTypeProvider>*)0); + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScCellRangesBase::getImplementationId() + throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +// --- + +void ScCellRangesBase::PaintRanges_Impl( USHORT nPart ) +{ + ULONG nCount = aRanges.Count(); + for (ULONG i=0; i<nCount; i++) + pDocShell->PostPaint( *aRanges.GetObject(i), nPart ); +} + +// XSheetOperation + +double SAL_CALL ScCellRangesBase::computeFunction( sheet::GeneralFunction nFunction ) + throw(uno::Exception, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScMarkData aMark(*GetMarkData()); + aMark.MarkToSimple(); + if (!aMark.IsMarked()) + aMark.SetMarkNegative(TRUE); // um Dummy Position angeben zu koennen + + ScAddress aDummy; // wenn nicht Marked, ignoriert wegen Negative + double fVal; + ScSubTotalFunc eFunc = lcl_SummaryToSubTotal( nFunction ); + ScDocument* pDoc = pDocShell->GetDocument(); + if ( !pDoc->GetSelectionFunction( eFunc, aDummy, aMark, fVal ) ) + { + throw uno::RuntimeException(); //! own exception? + } + + return fVal; +} + +void SAL_CALL ScCellRangesBase::clearContents( sal_Int32 nContentFlags ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( aRanges.Count() ) + { + // only for clearContents: EDITATTR is only used if no contents are deleted + USHORT nDelFlags = nContentFlags & IDF_ALL; + if ( ( nContentFlags & IDF_EDITATTR ) && ( nContentFlags & IDF_CONTENTS ) == 0 ) + nDelFlags |= IDF_EDITATTR; + + ScDocFunc aFunc(*pDocShell); + aFunc.DeleteContents( *GetMarkData(), nDelFlags, TRUE, TRUE ); + } + // sonst ist nichts zu tun +} + +// XPropertyState + +const SfxItemPropertyMap* ScCellRangesBase::GetItemPropertyMap() +{ + return lcl_GetCellsPropertyMap(); +} + +const SfxItemPropertyMap* lcl_GetPropertyWhich( const SfxItemPropertyMap* pMap, const ::rtl::OUString& rName, + USHORT& rItemWhich ) +{ + // Which-ID des betroffenen Items, auch wenn das Item die Property + // nicht alleine behandeln kann + + const SfxItemPropertyMap* pRetMap = SfxItemPropertyMap::GetByName( pMap, rName ); + if ( pRetMap ) + { + if ( IsScItemWid( pRetMap->nWID ) ) + rItemWhich = pRetMap->nWID; + else + switch ( pRetMap->nWID ) + { + case SC_WID_UNO_TBLBORD: + rItemWhich = ATTR_BORDER; + break; + case SC_WID_UNO_CONDFMT: + case SC_WID_UNO_CONDLOC: + case SC_WID_UNO_CONDXML: + rItemWhich = ATTR_CONDITIONAL; + break; + case SC_WID_UNO_VALIDAT: + case SC_WID_UNO_VALILOC: + case SC_WID_UNO_VALIXML: + rItemWhich = ATTR_VALIDDATA; + break; + } + } + + return pRetMap; +} + +beans::PropertyState ScCellRangesBase::GetOnePropertyState( USHORT nItemWhich, const SfxItemPropertyMap* pMap ) +{ + beans::PropertyState eRet = beans::PropertyState_DIRECT_VALUE; + if ( nItemWhich ) // item wid (from map or special case) + { + // For items that contain several properties (like background), + // "ambiguous" is returned too often here + + // for PropertyState, don't look at styles + const ScPatternAttr* pPattern = GetCurrentAttrsFlat(); + if ( pPattern ) + { + SfxItemState eState = pPattern->GetItemSet().GetItemState( nItemWhich, FALSE ); + + // if no rotate value is set, look at orientation + //! also for a fixed value of 0 (in case orientation is ambiguous)? + if ( nItemWhich == ATTR_ROTATE_VALUE && eState == SFX_ITEM_DEFAULT ) + eState = pPattern->GetItemSet().GetItemState( ATTR_ORIENTATION, FALSE ); + + if ( nItemWhich == ATTR_VALUE_FORMAT && eState == SFX_ITEM_DEFAULT ) + eState = pPattern->GetItemSet().GetItemState( ATTR_LANGUAGE_FORMAT, FALSE ); + + if ( eState == SFX_ITEM_SET ) + eRet = beans::PropertyState_DIRECT_VALUE; + else if ( eState == SFX_ITEM_DEFAULT ) + eRet = beans::PropertyState_DEFAULT_VALUE; + else if ( eState == SFX_ITEM_DONTCARE ) + eRet = beans::PropertyState_AMBIGUOUS_VALUE; + else + DBG_ERROR("unbekannter ItemState"); + } + } + else if ( pMap ) + { + if ( pMap->nWID == SC_WID_UNO_CHCOLHDR || pMap->nWID == SC_WID_UNO_CHROWHDR ) + eRet = beans::PropertyState_DIRECT_VALUE; + else if ( pMap->nWID == SC_WID_UNO_CELLSTYL ) + { + // a style is always set, there's no default state + const ScStyleSheet* pStyle = pDocShell->GetDocument()->GetSelectionStyle(*GetMarkData()); + if (pStyle) + eRet = beans::PropertyState_DIRECT_VALUE; + else + eRet = beans::PropertyState_AMBIGUOUS_VALUE; + } + else if ( pMap->nWID == SC_WID_UNO_NUMRULES ) + eRet = beans::PropertyState_DEFAULT_VALUE; // numbering rules are always default + } + return eRet; +} + +beans::PropertyState SAL_CALL ScCellRangesBase::getPropertyState( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( aRanges.Count() == 0 ) + throw uno::RuntimeException(); + + const SfxItemPropertyMap* pMap = GetItemPropertyMap(); // from derived class + USHORT nItemWhich = 0; + pMap = lcl_GetPropertyWhich( pMap, aPropertyName, nItemWhich ); + return GetOnePropertyState( nItemWhich, pMap ); +} + +uno::Sequence<beans::PropertyState> SAL_CALL ScCellRangesBase::getPropertyStates( + const uno::Sequence< ::rtl::OUString>& aPropertyNames ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class + + const ::rtl::OUString* pNames = aPropertyNames.getConstArray(); + uno::Sequence<beans::PropertyState> aRet(aPropertyNames.getLength()); + beans::PropertyState* pStates = aRet.getArray(); + const SfxItemPropertyMap* pMap = pPropertyMap; + for(INT32 i = 0; i < aPropertyNames.getLength(); i++) + { + USHORT nItemWhich = 0; + pMap = lcl_GetPropertyWhich(pMap, aPropertyNames[i], nItemWhich); + pStates[i] = GetOnePropertyState(nItemWhich, pMap); + if (!pMap) + pMap = pPropertyMap; + else + pMap++; + } + return aRet; +} + +void SAL_CALL ScCellRangesBase::setPropertyToDefault( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell ) + { + const SfxItemPropertyMap* pMap = lcl_GetCellsPropertyMap(); + USHORT nItemWhich = 0; + pMap = lcl_GetPropertyWhich(pMap, aPropertyName, nItemWhich); + + if ( nItemWhich ) // item wid (from map or special case) + { + if ( aRanges.Count() ) // leer = nichts zu tun + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDocFunc aFunc(*pDocShell); + + //! Bei Items, die mehrere Properties enthalten (z.B. Hintergrund) + //! wird hier zuviel zurueckgesetzt + + //! for ATTR_ROTATE_VALUE, also reset ATTR_ORIENTATION? + + USHORT aWIDs[3]; + aWIDs[0] = nItemWhich; + if ( nItemWhich == ATTR_VALUE_FORMAT ) + { + aWIDs[1] = ATTR_LANGUAGE_FORMAT; // #67847# language for number formats + aWIDs[2] = 0; + } + else + aWIDs[1] = 0; + aFunc.ClearItems( *GetMarkData(), aWIDs, TRUE ); + } + } + else if ( pMap ) + { + if ( pMap->nWID == SC_WID_UNO_CHCOLHDR ) + bChartColAsHdr = FALSE; + else if ( pMap->nWID == SC_WID_UNO_CHROWHDR ) + bChartRowAsHdr = FALSE; + else if ( pMap->nWID == SC_WID_UNO_CELLSTYL ) + { + ScDocFunc aFunc(*pDocShell); + aFunc.ApplyStyle( *GetMarkData(), ScGlobal::GetRscString(STR_STYLENAME_STANDARD), TRUE, TRUE ); + } + } + } +} + +uno::Any SAL_CALL ScCellRangesBase::getPropertyDefault( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + //! mit getPropertyValue zusammenfassen + + SolarMutexGuard aGuard; + uno::Any aAny; + + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + const SfxItemPropertyMap* pMap = + SfxItemPropertyMap::GetByName( lcl_GetCellsPropertyMap(), aPropertyName ); + if ( pMap ) + { + if ( IsScItemWid( pMap->nWID ) ) + { + const ScPatternAttr* pPattern = pDoc->GetDefPattern(); + if ( pPattern ) + { + const SfxItemSet& rSet = pPattern->GetItemSet(); + + switch ( pMap->nWID ) // fuer Item-Spezial-Behandlungen + { + case ATTR_VALUE_FORMAT: + // default has no language set + aAny <<= (sal_Int32)( ((const SfxUInt32Item&)rSet.Get(pMap->nWID)).GetValue() ); + break; + case ATTR_INDENT: + aAny <<= (sal_Int16)( TwipsToHMM(((const SfxUInt16Item&) + rSet.Get(pMap->nWID)).GetValue()) ); + break; + default: + aPropSet.getPropertyValue(aPropertyName, rSet, aAny); + } + } + } + else + switch ( pMap->nWID ) + { + case SC_WID_UNO_CHCOLHDR: + case SC_WID_UNO_CHROWHDR: + ScUnoHelpFunctions::SetBoolInAny( aAny, FALSE ); + break; + case SC_WID_UNO_CELLSTYL: + aAny <<= ::rtl::OUString( ScStyleNameConversion::DisplayToProgrammaticName( + ScGlobal::GetRscString(STR_STYLENAME_STANDARD), SFX_STYLE_FAMILY_PARA ) ); + break; + case SC_WID_UNO_TBLBORD: + { + const ScPatternAttr* pPattern = pDoc->GetDefPattern(); + if ( pPattern ) + { + table::TableBorder aBorder; + ScHelperFunctions::FillTableBorder( aBorder, + (const SvxBoxItem&)pPattern->GetItem(ATTR_BORDER), + (const SvxBoxInfoItem&)pPattern->GetItem(ATTR_BORDER_INNER) ); + aAny <<= aBorder; + } + } + break; + case SC_WID_UNO_CONDFMT: + case SC_WID_UNO_CONDLOC: + case SC_WID_UNO_CONDXML: + { + BOOL bEnglish = ( pMap->nWID != SC_WID_UNO_CONDLOC ); + BOOL bXML = ( pMap->nWID == SC_WID_UNO_CONDXML ); + + uno::Reference<sheet::XSheetConditionalEntries> xObj = + new ScTableConditionalFormat( pDoc, 0, bEnglish, bXML ); + aAny <<= xObj; + } + break; + case SC_WID_UNO_VALIDAT: + case SC_WID_UNO_VALILOC: + case SC_WID_UNO_VALIXML: + { + BOOL bEnglish = ( pMap->nWID != SC_WID_UNO_VALILOC ); + BOOL bXML = ( pMap->nWID == SC_WID_UNO_VALIXML ); + + uno::Reference<beans::XPropertySet> xObj = + new ScTableValidationObj( pDoc, 0, bEnglish, bXML ); + aAny <<= xObj; + } + break; + case SC_WID_UNO_NUMRULES: + { + uno::Reference<container::XIndexReplace> xObj = ScStyleObj::CreateEmptyNumberingRules(); + aAny <<= xObj; + } + break; + } + } + } + + return aAny; +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScCellRangesBase::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + + +void lcl_SetCellProperty( const SfxItemPropertyMap& rMap, const uno::Any& rValue, + ScPatternAttr& rPattern, ScDocument* pDoc, + USHORT& rFirstItemId, USHORT& rSecondItemId ) +{ + rFirstItemId = rMap.nWID; + rSecondItemId = 0; + + SfxItemSet& rSet = rPattern.GetItemSet(); + switch ( rMap.nWID ) + { + case ATTR_VALUE_FORMAT: + { + // #67847# language for number formats + SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); + ULONG nOldFormat = ((const SfxUInt32Item&)rSet.Get( ATTR_VALUE_FORMAT )).GetValue(); + LanguageType eOldLang = ((const SvxLanguageItem&)rSet.Get( ATTR_LANGUAGE_FORMAT )).GetLanguage(); + nOldFormat = pFormatter->GetFormatForLanguageIfBuiltIn( nOldFormat, eOldLang ); + + sal_Int32 nIntVal; + if ( rValue >>= nIntVal ) + { + ULONG nNewFormat = (ULONG)nIntVal; + rSet.Put( SfxUInt32Item( ATTR_VALUE_FORMAT, nNewFormat ) ); + + const SvNumberformat* pNewEntry = pFormatter->GetEntry( nNewFormat ); + LanguageType eNewLang = + pNewEntry ? pNewEntry->GetLanguage() : LANGUAGE_DONTKNOW; + if ( eNewLang != eOldLang && eNewLang != LANGUAGE_DONTKNOW ) + { + rSet.Put( SvxLanguageItem( eNewLang, ATTR_LANGUAGE_FORMAT ) ); + + // #40606# if only language is changed, + // don't touch number format attribute + ULONG nNewMod = nNewFormat % SV_COUNTRY_LANGUAGE_OFFSET; + if ( nNewMod == ( nOldFormat % SV_COUNTRY_LANGUAGE_OFFSET ) && + nNewMod <= SV_MAX_ANZ_STANDARD_FORMATE ) + { + rFirstItemId = 0; // don't use ATTR_VALUE_FORMAT value + } + + rSecondItemId = ATTR_LANGUAGE_FORMAT; + } + } + } + break; + case ATTR_INDENT: + { + sal_Int16 nIntVal; + if ( rValue >>= nIntVal ) + rSet.Put( SfxUInt16Item( rMap.nWID, (USHORT)HMMToTwips(nIntVal) ) ); + } + break; + case ATTR_ROTATE_VALUE: + { + sal_Int32 nRotVal; + if ( rValue >>= nRotVal ) + { + // stored value is always between 0 and 360 deg. + nRotVal %= 36000; + if ( nRotVal < 0 ) + nRotVal += 36000; + + // always set rotation value and orientation + + SvxCellOrientation eOrient = SVX_ORIENTATION_STANDARD; + BOOL bSetOrient = TRUE; + + SvxCellOrientation eOld = (SvxCellOrientation) + ((const SvxOrientationItem&)rSet.Get(ATTR_ORIENTATION)). + GetValue(); + + // #103272#; don't overwrite stacked orientation + if ( eOld == SVX_ORIENTATION_STACKED ) + bSetOrient = FALSE; + else if ( nRotVal == 9000 ) + eOrient = SVX_ORIENTATION_BOTTOMTOP; + else if ( nRotVal == 27000 ) + eOrient = SVX_ORIENTATION_TOPBOTTOM; + + rSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, nRotVal ) ); + if (bSetOrient) + { + rSet.Put( SvxOrientationItem( eOrient, ATTR_ORIENTATION ) ); + rSecondItemId = ATTR_ORIENTATION; + } + } + } + break; + default: + { + SfxItemPropertySet aPropSet( lcl_GetCellsPropertyMap() ); + aPropSet.setPropertyValue(rMap, rValue, rSet); + } + } +} + +void SAL_CALL ScCellRangesBase::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( !pDocShell || aRanges.Count() == 0 ) + throw uno::RuntimeException(); + + const SfxItemPropertyMap* pMap = GetItemPropertyMap(); // from derived class + pMap = SfxItemPropertyMap::GetByName( pMap, aPropertyName ); + if ( !pMap ) + throw beans::UnknownPropertyException(); + + SetOnePropertyValue( pMap, aValue ); +} + +void ScCellRangesBase::SetOnePropertyValue( const SfxItemPropertyMap* pMap, const uno::Any& aValue ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + if ( pMap ) + { + if ( IsScItemWid( pMap->nWID ) ) + { + if ( aRanges.Count() ) // leer = nichts zu tun + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDocFunc aFunc(*pDocShell); + + // Fuer Teile von zusammengesetzten Items mit mehreren Properties (z.B. Hintergrund) + // muss vorher das alte Item aus dem Dokument geholt werden + //! Das kann hier aber nicht erkannt werden + //! -> eigenes Flag im PropertyMap-Eintrag, oder was ??? + //! Item direkt von einzelner Position im Bereich holen? + // ClearInvalidItems, damit auf jeden Fall ein Item vom richtigen Typ da ist + + ScPatternAttr aPattern( *GetCurrentAttrsDeep() ); + SfxItemSet& rSet = aPattern.GetItemSet(); + rSet.ClearInvalidItems(); + + USHORT nFirstItem, nSecondItem; + lcl_SetCellProperty( *pMap, aValue, aPattern, pDoc, nFirstItem, nSecondItem ); + + for (USHORT nWhich = ATTR_PATTERN_START; nWhich <= ATTR_PATTERN_END; nWhich++) + if ( nWhich != nFirstItem && nWhich != nSecondItem ) + rSet.ClearItem(nWhich); + + aFunc.ApplyAttributes( *GetMarkData(), aPattern, TRUE, TRUE ); + } + } + else // implemented here + switch ( pMap->nWID ) + { + case SC_WID_UNO_CHCOLHDR: + // chart header flags are set for this object, not stored with document + bChartColAsHdr = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + break; + case SC_WID_UNO_CHROWHDR: + bChartRowAsHdr = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + break; + case SC_WID_UNO_CELLSTYL: + { + ::rtl::OUString aStrVal; + aValue >>= aStrVal; + String aString = ScStyleNameConversion::ProgrammaticToDisplayName( + aStrVal, SFX_STYLE_FAMILY_PARA ); + ScDocFunc aFunc(*pDocShell); + aFunc.ApplyStyle( *GetMarkData(), aString, TRUE, TRUE ); + } + break; + case SC_WID_UNO_TBLBORD: + { + table::TableBorder aBorder; + if ( aRanges.Count() && ( aValue >>= aBorder ) ) // empty = nothing to do + { + SvxBoxItem aOuter(ATTR_BORDER); + SvxBoxInfoItem aInner(ATTR_BORDER_INNER); + ScHelperFunctions::FillBoxItems( aOuter, aInner, aBorder ); + + ScHelperFunctions::ApplyBorder( pDocShell, aRanges, aOuter, aInner ); //! docfunc + } + } + break; + case SC_WID_UNO_CONDFMT: + case SC_WID_UNO_CONDLOC: + case SC_WID_UNO_CONDXML: + { + BOOL bEnglish = ( pMap->nWID != SC_WID_UNO_CONDLOC ); + BOOL bXML = ( pMap->nWID == SC_WID_UNO_CONDXML ); + + uno::Reference<sheet::XSheetConditionalEntries> xInterface; + if ( aRanges.Count() && ( aValue >>= xInterface ) ) // leer = nichts zu tun + { + ScTableConditionalFormat* pFormat = + ScTableConditionalFormat::getImplementation( xInterface ); + if (pFormat) + { + ScDocument* pDoc = pDocShell->GetDocument(); + + ScConditionalFormat aNew( 0, pDoc ); // Index wird beim Einfuegen gesetzt + pFormat->FillFormat( aNew, pDoc, bEnglish, bXML ); + ULONG nIndex = pDoc->AddCondFormat( aNew ); + + ScDocFunc aFunc(*pDocShell); + + ScPatternAttr aPattern( pDoc->GetPool() ); + aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_CONDITIONAL, nIndex ) ); + aFunc.ApplyAttributes( *GetMarkData(), aPattern, TRUE, TRUE ); + } + } + } + break; + case SC_WID_UNO_VALIDAT: + case SC_WID_UNO_VALILOC: + case SC_WID_UNO_VALIXML: + { + BOOL bEnglish = ( pMap->nWID != SC_WID_UNO_VALILOC ); + BOOL bXML = ( pMap->nWID == SC_WID_UNO_VALIXML ); + + uno::Reference<beans::XPropertySet> xInterface; + if ( aRanges.Count() && ( aValue >>= xInterface ) ) // leer = nichts zu tun + { + ScTableValidationObj* pValidObj = + ScTableValidationObj::getImplementation( xInterface ); + if (pValidObj) + { + ScDocument* pDoc = pDocShell->GetDocument(); + + ScValidationData* pNewData = + pValidObj->CreateValidationData( pDoc, bEnglish, bXML ); + ULONG nIndex = pDoc->AddValidationEntry( *pNewData ); + delete pNewData; + + ScDocFunc aFunc(*pDocShell); + + ScPatternAttr aPattern( pDoc->GetPool() ); + aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_VALIDDATA, nIndex ) ); + aFunc.ApplyAttributes( *GetMarkData(), aPattern, TRUE, TRUE ); + } + } + } + break; + // SC_WID_UNO_NUMRULES is ignored... + } + } +} + +uno::Any SAL_CALL ScCellRangesBase::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( !pDocShell || aRanges.Count() == 0 ) + throw uno::RuntimeException(); + + const SfxItemPropertyMap* pMap = GetItemPropertyMap(); // from derived class + pMap = SfxItemPropertyMap::GetByName( pMap, aPropertyName ); + if ( !pMap ) + throw beans::UnknownPropertyException(); + + uno::Any aAny; + GetOnePropertyValue( pMap, aAny ); + return aAny; +} + +void ScCellRangesBase::GetOnePropertyValue( const SfxItemPropertyMap* pMap, + uno::Any& rAny ) + throw(uno::RuntimeException) +{ + if ( pMap ) + { + if ( IsScItemWid( pMap->nWID ) ) + { + SfxItemSet* pDataSet = GetCurrentDataSet(); + if ( pDataSet ) + { + switch ( pMap->nWID ) // fuer Item-Spezial-Behandlungen + { + case ATTR_VALUE_FORMAT: + { + ScDocument* pDoc = pDocShell->GetDocument(); + ULONG nOldFormat = ((const SfxUInt32Item&) + pDataSet->Get( ATTR_VALUE_FORMAT )).GetValue(); + LanguageType eOldLang = ((const SvxLanguageItem&) + pDataSet->Get( ATTR_LANGUAGE_FORMAT )).GetLanguage(); + nOldFormat = pDoc->GetFormatTable()-> + GetFormatForLanguageIfBuiltIn( nOldFormat, eOldLang ); + rAny <<= (sal_Int32)( nOldFormat ); + } + break; + case ATTR_INDENT: + rAny <<= (sal_Int16)( TwipsToHMM(((const SfxUInt16Item&) + pDataSet->Get(pMap->nWID)).GetValue()) ); + break; + case ATTR_ROTATE_VALUE: + { + // if value is 0 and orientation topbottom or bottomtop, + // adjust value + + sal_Int32 nRotVal = ((const SfxInt32Item&) + pDataSet->Get(ATTR_ROTATE_VALUE)).GetValue(); + if ( nRotVal == 0 ) + { + SvxCellOrientation eOrient = (SvxCellOrientation) + ((const SvxOrientationItem&)pDataSet->Get(ATTR_ORIENTATION)). + GetValue(); + if ( eOrient == SVX_ORIENTATION_BOTTOMTOP ) + nRotVal = 9000; + else if ( eOrient == SVX_ORIENTATION_TOPBOTTOM ) + nRotVal = 27000; + } + rAny <<= nRotVal; + } + break; + default: + aPropSet.getPropertyValue(*pMap, *pDataSet, rAny); + } + } + } + else // implemented here + switch ( pMap->nWID ) + { + case SC_WID_UNO_CHCOLHDR: + ScUnoHelpFunctions::SetBoolInAny( rAny, bChartColAsHdr ); + break; + case SC_WID_UNO_CHROWHDR: + ScUnoHelpFunctions::SetBoolInAny( rAny, bChartRowAsHdr ); + break; + case SC_WID_UNO_CELLSTYL: + { + String aStyleName; + const ScStyleSheet* pStyle = pDocShell->GetDocument()->GetSelectionStyle(*GetMarkData()); + if (pStyle) + aStyleName = pStyle->GetName(); + rAny <<= ::rtl::OUString( ScStyleNameConversion::DisplayToProgrammaticName( + aStyleName, SFX_STYLE_FAMILY_PARA ) ); + } + break; + case SC_WID_UNO_TBLBORD: + { + //! loop throgh all ranges + const ScRange* pFirst = aRanges.GetObject(0); + if (pFirst) + { + SvxBoxItem aOuter(ATTR_BORDER); + SvxBoxInfoItem aInner(ATTR_BORDER_INNER); + + ScDocument* pDoc = pDocShell->GetDocument(); + ScMarkData aMark; + aMark.SetMarkArea( *pFirst ); + aMark.SelectTable( pFirst->aStart.Tab(), TRUE ); + pDoc->GetSelectionFrame( aMark, aOuter, aInner ); + + table::TableBorder aBorder; + ScHelperFunctions::FillTableBorder( aBorder, aOuter, aInner ); + rAny <<= aBorder; + } + } + break; + case SC_WID_UNO_CONDFMT: + case SC_WID_UNO_CONDLOC: + case SC_WID_UNO_CONDXML: + { + BOOL bEnglish = ( pMap->nWID != SC_WID_UNO_CONDLOC ); + BOOL bXML = ( pMap->nWID == SC_WID_UNO_CONDXML ); + + const ScPatternAttr* pPattern = GetCurrentAttrsDeep(); + if ( pPattern ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ULONG nIndex = ((const SfxUInt32Item&) + pPattern->GetItem(ATTR_CONDITIONAL)).GetValue(); + uno::Reference<sheet::XSheetConditionalEntries> xObj = + new ScTableConditionalFormat( pDoc, nIndex, bEnglish, bXML ); + rAny <<= xObj; + } + } + break; + case SC_WID_UNO_VALIDAT: + case SC_WID_UNO_VALILOC: + case SC_WID_UNO_VALIXML: + { + BOOL bEnglish = ( pMap->nWID != SC_WID_UNO_VALILOC ); + BOOL bXML = ( pMap->nWID == SC_WID_UNO_VALIXML ); + + const ScPatternAttr* pPattern = GetCurrentAttrsDeep(); + if ( pPattern ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ULONG nIndex = ((const SfxUInt32Item&) + pPattern->GetItem(ATTR_VALIDDATA)).GetValue(); + uno::Reference<beans::XPropertySet> xObj = + new ScTableValidationObj( pDoc, nIndex, bEnglish, bXML ); + rAny <<= xObj; + } + } + break; + case SC_WID_UNO_NUMRULES: + { + // always return empty numbering rules object + uno::Reference<container::XIndexReplace> xObj = ScStyleObj::CreateEmptyNumberingRules(); + rAny <<= xObj; + } + break; + } + } +} + +void SAL_CALL ScCellRangesBase::addPropertyChangeListener( const ::rtl::OUString& aPropertyName, + const uno::Reference<beans::XPropertyChangeListener>& aListener) + throw(beans::UnknownPropertyException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( aRanges.Count() == 0 ) + throw uno::RuntimeException(); + + //! Test !!!!! + if (String(aPropertyName).EqualsAscii( "Test" )) + { + uno::Reference<beans::XPropertyChangeListener> *pObj = + new uno::Reference<beans::XPropertyChangeListener>( aListener ); + aValueListeners.Insert( pObj, aValueListeners.Count() ); + + if ( aValueListeners.Count() == 1 ) + { + if (!pValueListener) + pValueListener = new ScLinkListener( LINK( this, ScCellRangesBase, ValueListenerHdl ) ); + + ScDocument* pDoc = pDocShell->GetDocument(); + ULONG nCount = aRanges.Count(); + for (ULONG i=0; i<nCount; i++) + pDoc->StartListeningArea( *aRanges.GetObject(i), pValueListener ); + + acquire(); // nicht verlieren (eine Ref fuer alle Listener) + } + + return; + } + //! Test !!!!! + + DBG_ERROR("not implemented"); +} + +void SAL_CALL ScCellRangesBase::removePropertyChangeListener( const ::rtl::OUString& aPropertyName, + const uno::Reference<beans::XPropertyChangeListener>& aListener) + throw(beans::UnknownPropertyException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( aRanges.Count() == 0 ) + throw uno::RuntimeException(); + + //! Test !!!!! + if (String(aPropertyName).EqualsAscii( "Test" )) + { + acquire(); // falls fuer Listener die letzte Ref existiert - wird unten freigegeben + + USHORT nCount = aValueListeners.Count(); + for ( USHORT n=nCount; n--; ) + { + uno::Reference<beans::XPropertyChangeListener> *pObj = aValueListeners[n]; + if ( *pObj == aListener ) + { + aValueListeners.DeleteAndDestroy( n ); + + if ( aValueListeners.Count() == 0 ) + { + if (pValueListener) + pValueListener->EndListeningAll(); + + release(); // Listener-Ref freigeben + } + + break; + } + } + + release(); // damit kann dieses Objekt geloescht werden + return; + } + //! Test !!!!! + + DBG_ERROR("not implemented"); +} + +void SAL_CALL ScCellRangesBase::addVetoableChangeListener( const ::rtl::OUString&, + const uno::Reference<beans::XVetoableChangeListener>&) + throw(beans::UnknownPropertyException, + lang::WrappedTargetException, uno::RuntimeException) +{ + DBG_ERROR("not implemented"); +} + +void SAL_CALL ScCellRangesBase::removeVetoableChangeListener( const ::rtl::OUString&, + const uno::Reference<beans::XVetoableChangeListener>&) + throw(beans::UnknownPropertyException, + lang::WrappedTargetException, uno::RuntimeException) +{ + DBG_ERROR("not implemented"); +} + +// XMultiPropertySet + +void SAL_CALL ScCellRangesBase::setPropertyValues( const uno::Sequence< ::rtl::OUString >& aPropertyNames, + const uno::Sequence< uno::Any >& aValues ) + throw (beans::PropertyVetoException, + lang::IllegalArgumentException, + lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class + + sal_Int32 nCount(aPropertyNames.getLength()); + sal_Int32 nValues(aValues.getLength()); + if (nCount != nValues) + throw lang::IllegalArgumentException(); + + if ( pDocShell && nCount ) + { + SfxItemPropertySet aPropSet( pPropertyMap ); + + ScDocument* pDoc = pDocShell->GetDocument(); + ScPatternAttr* pOldPattern = NULL; + ScPatternAttr* pNewPattern = NULL; + + const ::rtl::OUString* pNames = aPropertyNames.getConstArray(); + const uno::Any* pValues = aValues.getConstArray(); + const SfxItemPropertyMap* pMap = pPropertyMap; + for(sal_Int32 i = 0; i < nCount; i++) + { + pMap = SfxItemPropertyMap::GetByName( pPropertyMap, pNames[i] ); + if ( pMap ) + { + if ( IsScItemWid( pMap->nWID ) ) // can be handled by SfxItemPropertySet + { + if ( !pOldPattern ) + { + pOldPattern = new ScPatternAttr( *GetCurrentAttrsDeep() ); + pOldPattern->GetItemSet().ClearInvalidItems(); + pNewPattern = new ScPatternAttr( pDoc->GetPool() ); + } + + // collect items in pNewPattern, apply with one call after the loop + + USHORT nFirstItem, nSecondItem; + lcl_SetCellProperty( *pMap, pValues[i], *pOldPattern, pDoc, nFirstItem, nSecondItem ); + + // put only affected items into new set + if ( nFirstItem ) + pNewPattern->GetItemSet().Put( pOldPattern->GetItemSet().Get( nFirstItem ) ); + if ( nSecondItem ) + pNewPattern->GetItemSet().Put( pOldPattern->GetItemSet().Get( nSecondItem ) ); + } + else + { + // call virtual method to set a single property + SetOnePropertyValue( pMap, pValues[i] ); + } + + pMap++; + } + else + pMap = pPropertyMap; + } + + if ( pNewPattern && aRanges.Count() ) + { + ScDocFunc aFunc(*pDocShell); + aFunc.ApplyAttributes( *GetMarkData(), *pNewPattern, TRUE, TRUE ); + } + + delete pNewPattern; + delete pOldPattern; + } +} + +uno::Sequence<uno::Any> SAL_CALL ScCellRangesBase::getPropertyValues( + const uno::Sequence< ::rtl::OUString >& aPropertyNames ) + throw (uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class + + const ::rtl::OUString* pNames = aPropertyNames.getConstArray(); + uno::Sequence<uno::Any> aRet(aPropertyNames.getLength()); + uno::Any* pProperties = aRet.getArray(); + const SfxItemPropertyMap* pMap = pPropertyMap; + for(INT32 i = 0; i < aPropertyNames.getLength(); i++) + { + USHORT nItemWhich = 0; + pMap = SfxItemPropertyMap::GetByName( pMap, aPropertyNames[i] ); + GetOnePropertyValue( pMap, pProperties[i] ); + if (!pMap) + pMap = pPropertyMap; + else + pMap++; + } + return aRet; +} + +void SAL_CALL ScCellRangesBase::addPropertiesChangeListener( const uno::Sequence< ::rtl::OUString >& aPropertyNames, + const uno::Reference< beans::XPropertiesChangeListener >& xListener ) + throw (uno::RuntimeException) +{ + DBG_ERROR("not implemented"); +} + +void SAL_CALL ScCellRangesBase::removePropertiesChangeListener( const uno::Reference< beans::XPropertiesChangeListener >& xListener ) + throw (uno::RuntimeException) +{ + DBG_ERROR("not implemented"); +} + +void SAL_CALL ScCellRangesBase::firePropertiesChangeEvent( const uno::Sequence< ::rtl::OUString >& aPropertyNames, + const uno::Reference< beans::XPropertiesChangeListener >& xListener ) + throw (uno::RuntimeException) +{ + DBG_ERROR("not implemented"); +} + +//! Test !!! + +IMPL_LINK( ScCellRangesBase, ValueListenerHdl, SfxHint*, pHint ) +{ + if ( pDocShell && pHint && pHint->ISA( SfxSimpleHint ) && + ((const SfxSimpleHint*)pHint)->GetId() & (SC_HINT_DATACHANGED | SC_HINT_DYING) ) + { + // nicht doppelt notifien, wenn sich mehrere Formeln im Bereich aendern... + + if ( aValueListeners.Count() && !bValueChangePosted ) + { + // Die Listener koennen nur asynchron benachrichtigt werden, weil im + // Formel-Broadcast auf keinen Fall Reschedule gerufen werden darf + + beans::PropertyChangeEvent* pEvent = new beans::PropertyChangeEvent; + pEvent->Source = (cppu::OWeakObject*)this; + pEvent->PropertyName = ::rtl::OUString::createFromAscii( "Test" ); + pEvent->Further = FALSE; + pEvent->PropertyHandle = -1; + pEvent->OldValue = uno::Any(); + pEvent->NewValue = uno::Any(); + + // Die Ref im Event-Objekt haelt dieses Objekt fest + // Das Event-Objekt wird im Link-Handler geloescht + + bValueChangePosted = TRUE; + Application::PostUserEvent( LINK( this, ScCellRangesBase, ValueChanged ), pEvent ); + } + } + return 0; +} + +// ValueChanged wird asynchron gerufen + +IMPL_LINK( ScCellRangesBase, ValueChanged, beans::PropertyChangeEvent*, pEvent ) +{ + if ( pEvent ) + { + if ( pDocShell ) + for ( USHORT n=0; n<aValueListeners.Count(); n++ ) + (*aValueListeners[n])->propertyChange( *pEvent ); + + bValueChangePosted = FALSE; + + delete pEvent; // damit kann auch dieses Objekt geloescht werden + } + return 0; +} + +//! Test !!!!! + +// XIndent + +void SAL_CALL ScCellRangesBase::decrementIndent() throw(::com::sun::star::uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell && aRanges.Count() ) // leer = nichts zu tun + { + ScDocFunc aFunc(*pDocShell); + //#97041#; put only MultiMarked ScMarkData in ChangeIndent + ScMarkData aMarkData(*GetMarkData()); + aMarkData.MarkToMulti(); + aFunc.ChangeIndent( aMarkData, FALSE, TRUE ); + } +} + +void SAL_CALL ScCellRangesBase::incrementIndent() throw(::com::sun::star::uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell && aRanges.Count() ) // leer = nichts zu tun + { + ScDocFunc aFunc(*pDocShell); + //#97041#; put only MultiMarked ScMarkData in ChangeIndent + ScMarkData aMarkData(*GetMarkData()); + aMarkData.MarkToMulti(); + aFunc.ChangeIndent( aMarkData, TRUE, TRUE ); + } +} + +// XChartData + +SchMemChart* ScCellRangesBase::CreateMemChart_Impl() const +{ + if ( pDocShell && aRanges.Count() ) + { + ScRangeListRef xChartRanges; + if ( aRanges.Count() == 1 ) + { + // ganze Tabelle sinnvoll begrenzen (auf belegten Datenbereich) + // (nur hier, Listener werden auf den ganzen Bereich angemeldet) + //! direkt testen, ob es ein ScTableSheetObj ist? + + ScRange* pRange = aRanges.GetObject(0); + if ( pRange->aStart.Col() == 0 && pRange->aEnd.Col() == MAXCOL && + pRange->aStart.Row() == 0 && pRange->aEnd.Row() == MAXROW ) + { + USHORT nTab = pRange->aStart.Tab(); + + USHORT nStartX, nStartY; // Anfang holen + if (!pDocShell->GetDocument()->GetDataStart( nTab, nStartX, nStartY )) + nStartX = nStartY = 0; + + USHORT nEndX, nEndY; // Ende holen + if (!pDocShell->GetDocument()->GetTableArea( nTab, nEndX, nEndY )) + nEndX = nEndY = 0; + + xChartRanges = new ScRangeList; + xChartRanges->Append( ScRange( nStartX, nStartY, nTab, nEndX, nEndY, nTab ) ); + } + } + if (!xChartRanges.Is()) // sonst Ranges direkt uebernehmen + xChartRanges = new ScRangeList(aRanges); + ScChartArray aArr( pDocShell->GetDocument(), xChartRanges, String() ); + + // RowAsHdr = ColHeaders und umgekehrt + aArr.SetHeaders( bChartRowAsHdr, bChartColAsHdr ); + + return aArr.CreateMemChart(); + } + return NULL; +} + +uno::Sequence< uno::Sequence<double> > SAL_CALL ScCellRangesBase::getData() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SchMemChart* pMemChart = CreateMemChart_Impl(); + if ( pMemChart ) + { + short nColCount = pMemChart->GetColCount(); + short nRowCount = pMemChart->GetRowCount(); + + uno::Sequence< uno::Sequence<double> > aRowSeq( nRowCount ); + uno::Sequence<double>* pRowAry = aRowSeq.getArray(); + for (short nRow = 0; nRow < nRowCount; nRow++) + { + uno::Sequence<double> aColSeq( nColCount ); + double* pColAry = aColSeq.getArray(); + for (short nCol = 0; nCol < nColCount; nCol++) + pColAry[nCol] = pMemChart->GetData( nCol, nRow ); + + pRowAry[nRow] = aColSeq; + } + + delete pMemChart; + return aRowSeq; + } + + return uno::Sequence< uno::Sequence<double> >(0); +} + +ScRangeListRef ScCellRangesBase::GetLimitedChartRanges_Impl( long nDataColumns, long nDataRows ) const +{ + if ( aRanges.Count() == 1 ) + { + ScRange* pRange = aRanges.GetObject(0); + if ( pRange->aStart.Col() == 0 && pRange->aEnd.Col() == MAXCOL && + pRange->aStart.Row() == 0 && pRange->aEnd.Row() == MAXROW ) + { + // if aRanges is a complete sheet, limit to given size + + USHORT nTab = pRange->aStart.Tab(); + + long nEndColumn = nDataColumns - 1 + ( bChartColAsHdr ? 1 : 0 ); + if ( nEndColumn < 0 ) + nEndColumn = 0; + if ( nEndColumn > MAXCOL ) + nEndColumn = MAXCOL; + + long nEndRow = nDataRows - 1 + ( bChartRowAsHdr ? 1 : 0 ); + if ( nEndRow < 0 ) + nEndRow = 0; + if ( nEndRow > MAXROW ) + nEndRow = MAXROW; + + ScRangeListRef xChartRanges = new ScRangeList; + xChartRanges->Append( ScRange( 0, 0, nTab, (USHORT)nEndColumn, (USHORT)nEndRow, nTab ) ); + return xChartRanges; + } + } + + return new ScRangeList(aRanges); // as-is +} + +void SAL_CALL ScCellRangesBase::setData( const uno::Sequence< uno::Sequence<double> >& aData ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + long nRowCount = aData.getLength(); + long nColCount = nRowCount ? aData[0].getLength() : 0; + ScRangeListRef xChartRanges = GetLimitedChartRanges_Impl( nColCount, nRowCount ); + if ( pDocShell && xChartRanges.Is() ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScChartArray aArr( pDoc, xChartRanges, String() ); + aArr.SetHeaders( bChartRowAsHdr, bChartColAsHdr ); // RowAsHdr = ColHeaders + const ScChartPositionMap* pPosMap = aArr.GetPositionMap(); + if (pPosMap) + { + if ( pPosMap->GetColCount() == nColCount && + pPosMap->GetRowCount() == nRowCount ) + { + for (long nRow=0; nRow<nRowCount; nRow++) + { + const uno::Sequence<double>& rRowSeq = aData[nRow]; + const double* pArray = rRowSeq.getConstArray(); + nColCount = rRowSeq.getLength(); + for (long nCol=0; nCol<nColCount; nCol++) + { + const ScAddress* pPos = pPosMap->GetPosition( (USHORT)nCol, (USHORT)nRow ); + if (pPos) + { + double fVal = pArray[nCol]; + if ( fVal == DBL_MIN ) + pDoc->PutCell( *pPos, NULL ); // empty cell + else + pDoc->SetValue( pPos->Col(), pPos->Row(), pPos->Tab(), pArray[nCol] ); + } + } + } + + //! undo + PaintRanges_Impl( PAINT_GRID ); + pDocShell->SetDocumentModified(); + ForceChartListener_Impl(); // call listeners for this object synchronously + bDone = TRUE; + } + } + } + + if (!bDone) + throw uno::RuntimeException(); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScCellRangesBase::getRowDescriptions() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SchMemChart* pMemChart = CreateMemChart_Impl(); + if ( pMemChart ) + { + short nRowCount = pMemChart->GetRowCount(); + uno::Sequence< ::rtl::OUString> aSeq( nRowCount ); + ::rtl::OUString* pAry = aSeq.getArray(); + for (short nRow = 0; nRow < nRowCount; nRow++) + pAry[nRow] = pMemChart->GetRowText(nRow); + + delete pMemChart; + return aSeq; + } + return uno::Sequence< ::rtl::OUString>(0); +} + +void SAL_CALL ScCellRangesBase::setRowDescriptions( + const uno::Sequence< ::rtl::OUString>& aRowDescriptions ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if ( bChartColAsHdr ) + { + long nRowCount = aRowDescriptions.getLength(); + ScRangeListRef xChartRanges = GetLimitedChartRanges_Impl( 1, nRowCount ); + if ( pDocShell && xChartRanges.Is() ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScChartArray aArr( pDoc, xChartRanges, String() ); + aArr.SetHeaders( bChartRowAsHdr, bChartColAsHdr ); // RowAsHdr = ColHeaders + const ScChartPositionMap* pPosMap = aArr.GetPositionMap(); + if (pPosMap) + { + if ( pPosMap->GetRowCount() == nRowCount ) + { + const ::rtl::OUString* pArray = aRowDescriptions.getConstArray(); + for (long nRow=0; nRow<nRowCount; nRow++) + { + const ScAddress* pPos = pPosMap->GetRowHeaderPosition( (USHORT)nRow ); + if (pPos) + { + String aStr = pArray[nRow]; + if ( aStr.Len() ) + pDoc->PutCell( *pPos, new ScStringCell( aStr ) ); + else + pDoc->PutCell( *pPos, NULL ); // empty cell + } + } + + //! undo + PaintRanges_Impl( PAINT_GRID ); + pDocShell->SetDocumentModified(); + ForceChartListener_Impl(); // call listeners for this object synchronously + bDone = TRUE; + } + } + } + } + + if (!bDone) + throw uno::RuntimeException(); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScCellRangesBase::getColumnDescriptions() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SchMemChart* pMemChart = CreateMemChart_Impl(); + if ( pMemChart ) + { + short nColCount = pMemChart->GetColCount(); + uno::Sequence< ::rtl::OUString> aSeq( nColCount ); + ::rtl::OUString* pAry = aSeq.getArray(); + for (short nCol = 0; nCol < nColCount; nCol++) + pAry[nCol] = pMemChart->GetColText(nCol); + + delete pMemChart; + return aSeq; + } + return uno::Sequence< ::rtl::OUString>(0); +} + +void SAL_CALL ScCellRangesBase::setColumnDescriptions( + const uno::Sequence< ::rtl::OUString>& aColumnDescriptions ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if ( bChartRowAsHdr ) + { + long nColCount = aColumnDescriptions.getLength(); + ScRangeListRef xChartRanges = GetLimitedChartRanges_Impl( nColCount, 1 ); + if ( pDocShell && xChartRanges.Is() ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScChartArray aArr( pDoc, xChartRanges, String() ); + aArr.SetHeaders( bChartRowAsHdr, bChartColAsHdr ); // RowAsHdr = ColHeaders + const ScChartPositionMap* pPosMap = aArr.GetPositionMap(); + if (pPosMap) + { + if ( pPosMap->GetColCount() == nColCount ) + { + const ::rtl::OUString* pArray = aColumnDescriptions.getConstArray(); + for (long nCol=0; nCol<nColCount; nCol++) + { + const ScAddress* pPos = pPosMap->GetColHeaderPosition( (USHORT)nCol ); + if (pPos) + { + String aStr = pArray[nCol]; + if ( aStr.Len() ) + pDoc->PutCell( *pPos, new ScStringCell( aStr ) ); + else + pDoc->PutCell( *pPos, NULL ); // empty cell + } + } + + //! undo + PaintRanges_Impl( PAINT_GRID ); + pDocShell->SetDocumentModified(); + ForceChartListener_Impl(); // call listeners for this object synchronously + bDone = TRUE; + } + } + } + } + + if (!bDone) + throw uno::RuntimeException(); +} + +void ScCellRangesBase::ForceChartListener_Impl() +{ + // call Update immediately so the caller to setData etc. can + // regognize the listener call + + if ( pDocShell ) + { + ScChartListenerCollection* pColl = pDocShell->GetDocument()->GetChartListenerCollection(); + if ( pColl ) + { + USHORT nCollCount = pColl->GetCount(); + for ( USHORT nIndex = 0; nIndex < nCollCount; nIndex++ ) + { + ScChartListener* pChartListener = (ScChartListener*)pColl->At(nIndex); + if ( pChartListener && + pChartListener->GetUnoSource() == static_cast<chart::XChartData*>(this) && + pChartListener->IsDirty() ) + pChartListener->Update(); + } + } + } +} + +String lcl_UniqueName( StrCollection& rColl, const String& rPrefix ) +{ + long nNumber = 1; + USHORT nCollCount = rColl.GetCount(); + while (TRUE) + { + String aName = rPrefix; + aName += String::CreateFromInt32( nNumber ); + BOOL bFound = FALSE; + for (USHORT i=0; i<nCollCount; i++) + if ( rColl[i]->GetString() == aName ) + { + bFound = TRUE; + break; + } + if (!bFound) + return aName; + ++nNumber; + } +} + +void SAL_CALL ScCellRangesBase::addChartDataChangeEventListener( const uno::Reference< + chart::XChartDataChangeEventListener >& aListener ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell && aRanges.Count() ) + { + //! auf doppelte testen? + + ScDocument* pDoc = pDocShell->GetDocument(); + ScRangeListRef aRangesRef( new ScRangeList(aRanges) ); + ScChartListenerCollection* pColl = pDoc->GetChartListenerCollection(); + String aName = lcl_UniqueName( *pColl, + String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("__Uno")) ); + ScChartListener* pListener = new ScChartListener( aName, pDoc, aRangesRef ); + pListener->SetUno( aListener, this ); + pColl->Insert( pListener ); + pListener->StartListeningTo(); + } +} + +void SAL_CALL ScCellRangesBase::removeChartDataChangeEventListener( const uno::Reference< + chart::XChartDataChangeEventListener >& aListener ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell && aRanges.Count() ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScChartListenerCollection* pColl = pDoc->GetChartListenerCollection(); + pColl->FreeUno( aListener, this ); + } +} + +double SAL_CALL ScCellRangesBase::getNotANumber() throw(::com::sun::star::uno::RuntimeException) +{ + // im ScChartArray wird DBL_MIN verwendet, weil das Chart es so will + return DBL_MIN; +} + +sal_Bool SAL_CALL ScCellRangesBase::isNotANumber( double nNumber ) throw(uno::RuntimeException) +{ + // im ScChartArray wird DBL_MIN verwendet, weil das Chart es so will + return (nNumber == DBL_MIN); +} + +// XCellRangesQuery + +uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryVisibleCells() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + //! fuer alle Tabellen getrennt, wenn Markierungen pro Tabelle getrennt sind! + USHORT nTab = lcl_FirstTab(aRanges); + + ScMarkData aMarkData(*GetMarkData()); + + ScDocument* pDoc = pDocShell->GetDocument(); + for (USHORT nCol=0; nCol<=MAXCOL; nCol++) + if (pDoc->GetColFlags(nCol,nTab) & CR_HIDDEN) + aMarkData.SetMultiMarkArea( ScRange( nCol,0,nTab, nCol,MAXROW,nTab ), FALSE ); + + //! nur bis zur letzten selektierten Zeile testen? + for (USHORT nRow=0; nRow<=MAXROW; nRow++) + if (pDoc->GetRowFlags(nRow,nTab) & CR_HIDDEN) + { + USHORT nHiddenCount = pDoc->GetHiddenRowCount( nRow, nTab ); + DBG_ASSERT(nHiddenCount, "huch?"); + USHORT nLast = nRow + nHiddenCount - 1; + aMarkData.SetMultiMarkArea( ScRange( 0,nRow,nTab, MAXCOL,nLast,nTab ), FALSE ); + nRow = nLast; // +1 wird hinterher addiert + } + + ScRangeList aNewRanges; + aMarkData.FillRangeListWithMarks( &aNewRanges, FALSE ); + return new ScCellRangesObj( pDocShell, aNewRanges ); + } + + return NULL; +} + +uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryEmptyCells() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + + ScMarkData aMarkData(*GetMarkData()); + + // belegte Zellen wegmarkieren + ULONG nCount = aRanges.Count(); + for (ULONG i=0; i<nCount; i++) + { + ScRange aRange = *aRanges.GetObject(i); + + ScCellIterator aIter( pDoc, aRange ); + ScBaseCell* pCell = aIter.GetFirst(); + while (pCell) + { + // Notizen zaehlen als nicht-leer + if ( pCell->GetCellType() != CELLTYPE_NOTE || pCell->GetNotePtr() ) + aMarkData.SetMultiMarkArea( + ScRange( aIter.GetCol(), aIter.GetRow(), aIter.GetTab() ), + FALSE ); + + pCell = aIter.GetNext(); + } + } + + ScRangeList aNewRanges; + // IsMultiMarked reicht hier nicht (wird beim deselektieren nicht zurueckgesetzt) + if (aMarkData.HasAnyMultiMarks()) + aMarkData.FillRangeListWithMarks( &aNewRanges, FALSE ); + + return new ScCellRangesObj( pDocShell, aNewRanges ); // aNewRanges kann leer sein + } + + return NULL; +} + +uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryContentCells( + sal_Int16 nContentFlags ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + + ScMarkData aMarkData; + + // passende Zellen selektieren + ULONG nCount = aRanges.Count(); + for (ULONG i=0; i<nCount; i++) + { + ScRange aRange = *aRanges.GetObject(i); + + ScCellIterator aIter( pDoc, aRange ); + ScBaseCell* pCell = aIter.GetFirst(); + while (pCell) + { + BOOL bAdd = FALSE; + if ( pCell->GetNotePtr() && ( nContentFlags & sheet::CellFlags::ANNOTATION ) ) + bAdd = TRUE; + else + switch ( pCell->GetCellType() ) + { + case CELLTYPE_STRING: + case CELLTYPE_EDIT: + if ( nContentFlags & sheet::CellFlags::STRING ) + bAdd = TRUE; + break; + case CELLTYPE_FORMULA: + if ( nContentFlags & sheet::CellFlags::FORMULA ) + bAdd = TRUE; + break; + case CELLTYPE_VALUE: + if ( (nContentFlags & (sheet::CellFlags::VALUE|sheet::CellFlags::DATETIME)) + == (sheet::CellFlags::VALUE|sheet::CellFlags::DATETIME) ) + bAdd = TRUE; + else + { + // Date/Time Erkennung + + ULONG nIndex = (ULONG)((SfxUInt32Item*)pDoc->GetAttr( + aIter.GetCol(), aIter.GetRow(), aIter.GetTab(), + ATTR_VALUE_FORMAT ))->GetValue(); + short nTyp = pDoc->GetFormatTable()->GetType(nIndex); + if ((nTyp == NUMBERFORMAT_DATE) || (nTyp == NUMBERFORMAT_TIME) || + (nTyp == NUMBERFORMAT_DATETIME)) + { + if ( nContentFlags & sheet::CellFlags::DATETIME ) + bAdd = TRUE; + } + else + { + if ( nContentFlags & sheet::CellFlags::VALUE ) + bAdd = TRUE; + } + } + break; + } + + if (bAdd) + aMarkData.SetMultiMarkArea( + ScRange( aIter.GetCol(), aIter.GetRow(), aIter.GetTab() ), + TRUE ); + + pCell = aIter.GetNext(); + } + } + + ScRangeList aNewRanges; + if (aMarkData.IsMultiMarked()) + aMarkData.FillRangeListWithMarks( &aNewRanges, FALSE ); + + return new ScCellRangesObj( pDocShell, aNewRanges ); // aNewRanges kann leer sein + } + + return NULL; +} + +uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryFormulaCells( + sal_Int32 nResultFlags ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + + ScMarkData aMarkData; + + // passende Zellen selektieren + ULONG nCount = aRanges.Count(); + for (ULONG i=0; i<nCount; i++) + { + ScRange aRange = *aRanges.GetObject(i); + + ScCellIterator aIter( pDoc, aRange ); + ScBaseCell* pCell = aIter.GetFirst(); + while (pCell) + { + if (pCell->GetCellType() == CELLTYPE_FORMULA) + { + ScFormulaCell* pFCell = (ScFormulaCell*)pCell; + BOOL bAdd = FALSE; + if (pFCell->GetErrCode()) + { + if ( nResultFlags & sheet::FormulaResult::ERROR ) + bAdd = TRUE; + } + else if (pFCell->IsValue()) + { + if ( nResultFlags & sheet::FormulaResult::VALUE ) + bAdd = TRUE; + } + else // String + { + if ( nResultFlags & sheet::FormulaResult::STRING ) + bAdd = TRUE; + } + + if (bAdd) + aMarkData.SetMultiMarkArea( + ScRange( aIter.GetCol(), aIter.GetRow(), aIter.GetTab() ), + TRUE ); + } + + pCell = aIter.GetNext(); + } + } + + ScRangeList aNewRanges; + if (aMarkData.IsMultiMarked()) + aMarkData.FillRangeListWithMarks( &aNewRanges, FALSE ); + + return new ScCellRangesObj( pDocShell, aNewRanges ); // aNewRanges kann leer sein + } + + return NULL; +} + +uno::Reference<sheet::XSheetCellRanges> ScCellRangesBase::QueryDifferences_Impl( + const table::CellAddress& aCompare, BOOL bColumnDiff) +{ + if (pDocShell) + { + ULONG nRangeCount = aRanges.Count(); + ULONG i; + ScDocument* pDoc = pDocShell->GetDocument(); + ScMarkData aMarkData; + + USHORT nCmpPos = bColumnDiff ? (USHORT)aCompare.Row : (USHORT)aCompare.Column; + + // zuerst alles selektieren, wo ueberhaupt etwas in der Vergleichsspalte steht + // (fuer gleiche Zellen wird die Selektion im zweiten Schritt aufgehoben) + + USHORT nTab = lcl_FirstTab(aRanges); //! fuer alle Tabellen, wenn Markierungen pro Tabelle! + ScRange aCmpRange, aCellRange; + if (bColumnDiff) + aCmpRange = ScRange( 0,nCmpPos,nTab, MAXCOL,nCmpPos,nTab ); + else + aCmpRange = ScRange( nCmpPos,0,nTab, nCmpPos,MAXROW,nTab ); + ScCellIterator aCmpIter( pDoc, aCmpRange ); + ScBaseCell* pCmpCell = aCmpIter.GetFirst(); + while (pCmpCell) + { + if (pCmpCell->GetCellType() != CELLTYPE_NOTE) + { + USHORT nCellPos = bColumnDiff ? aCmpIter.GetCol() : aCmpIter.GetRow(); + if (bColumnDiff) + aCellRange = ScRange( nCellPos,0,nTab, nCellPos,MAXROW,nTab ); + else + aCellRange = ScRange( 0,nCellPos,nTab, MAXCOL,nCellPos,nTab ); + + for (i=0; i<nRangeCount; i++) + { + ScRange aRange = *aRanges.GetObject(i); + if ( aRange.Intersects( aCellRange ) ) + { + if (bColumnDiff) + { + aRange.aStart.SetCol(nCellPos); + aRange.aEnd.SetCol(nCellPos); + } + else + { + aRange.aStart.SetRow(nCellPos); + aRange.aEnd.SetRow(nCellPos); + } + aMarkData.SetMultiMarkArea( aRange ); + } + } + } + pCmpCell = aCmpIter.GetNext(); + } + + // alle nichtleeren Zellen mit der Vergleichsspalte vergleichen und entsprechend + // selektieren oder aufheben + + ScAddress aCmpAddr; + for (i=0; i<nRangeCount; i++) + { + ScRange aRange = *aRanges.GetObject(i); + + ScCellIterator aIter( pDoc, aRange ); + ScBaseCell* pCell = aIter.GetFirst(); + while (pCell) + { + if (bColumnDiff) + aCmpAddr = ScAddress( aIter.GetCol(), nCmpPos, aIter.GetTab() ); + else + aCmpAddr = ScAddress( nCmpPos, aIter.GetRow(), aIter.GetTab() ); + const ScBaseCell* pCmpCell = pDoc->GetCell( aCmpAddr ); + + ScRange aCellRange( aIter.GetCol(), aIter.GetRow(), aIter.GetTab() ); + if ( !ScBaseCell::CellEqual( pCell, pCmpCell ) ) + aMarkData.SetMultiMarkArea( aCellRange ); + else + aMarkData.SetMultiMarkArea( aCellRange, FALSE ); // aufheben + + pCell = aIter.GetNext(); + } + } + + ScRangeList aNewRanges; + if (aMarkData.IsMultiMarked()) + aMarkData.FillRangeListWithMarks( &aNewRanges, FALSE ); + + return new ScCellRangesObj( pDocShell, aNewRanges ); // aNewRanges kann leer sein + } + return NULL; +} + +uno::Reference<sheet::XSheetCellRanges > SAL_CALL ScCellRangesBase::queryColumnDifferences( + const table::CellAddress& aCompare ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return QueryDifferences_Impl( aCompare, TRUE ); +} + +uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryRowDifferences( + const table::CellAddress& aCompare ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return QueryDifferences_Impl( aCompare, FALSE ); +} + +uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryIntersection( + const table::CellRangeAddress& aRange ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRange aMask( (USHORT)aRange.StartColumn, (USHORT)aRange.StartRow, aRange.Sheet, + (USHORT)aRange.EndColumn, (USHORT)aRange.EndRow, aRange.Sheet ); + + ScRangeList aNew; + ULONG nCount = aRanges.Count(); + for (ULONG i=0; i<nCount; i++) + { + ScRange aTemp = *aRanges.GetObject(i); + if ( aTemp.Intersects( aMask ) ) + aNew.Join( ScRange( Max( aTemp.aStart.Col(), aMask.aStart.Col() ), + Max( aTemp.aStart.Row(), aMask.aStart.Row() ), + Max( aTemp.aStart.Tab(), aMask.aStart.Tab() ), + Min( aTemp.aEnd.Col(), aMask.aEnd.Col() ), + Min( aTemp.aEnd.Row(), aMask.aEnd.Row() ), + Min( aTemp.aEnd.Tab(), aMask.aEnd.Tab() ) ) ); + } + + return new ScCellRangesObj( pDocShell, aNew ); // kann leer sein +} + +// XFormulaQuery + +uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryPrecedents( + sal_Bool bRecursive ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + + ScRangeList aNewRanges = aRanges; + BOOL bFound; + do + { + bFound = FALSE; + + // #97205# aMarkData uses aNewRanges, not aRanges, so GetMarkData can't be used + ScMarkData aMarkData; + aMarkData.MarkFromRangeList( aNewRanges, FALSE ); + aMarkData.MarkToMulti(); // needed for IsAllMarked + + ULONG nCount = aNewRanges.Count(); + for (USHORT nR=0; nR<nCount; nR++) + { + ScRange aRange = *aNewRanges.GetObject(nR); + ScCellIterator aIter( pDoc, aRange ); + ScBaseCell* pCell = aIter.GetFirst(); + while (pCell) + { + if ( pCell->GetCellType() == CELLTYPE_FORMULA ) + { + ScFormulaCell* pFCell = (ScFormulaCell*) pCell; + + ScDetectiveRefIter aIter( pFCell ); + ScTripel aRefStart; + ScTripel aRefEnd; + while ( aIter.GetNextRef( aRefStart, aRefEnd ) ) + { + ScRange aRefRange( aRefStart, aRefEnd ); + if ( bRecursive && !bFound && !aMarkData.IsAllMarked( aRefRange ) ) + bFound = TRUE; + aMarkData.SetMultiMarkArea( aRefRange, TRUE ); + } + } + pCell = aIter.GetNext(); + } + } + + aMarkData.FillRangeListWithMarks( &aNewRanges, TRUE ); + } + while ( bRecursive && bFound ); + + return new ScCellRangesObj( pDocShell, aNewRanges ); + } + + return NULL; +} + +uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryDependents( + sal_Bool bRecursive ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + + ScRangeList aNewRanges = aRanges; + BOOL bFound; + do + { + bFound = FALSE; + ULONG nRangesCount = aNewRanges.Count(); + + // #97205# aMarkData uses aNewRanges, not aRanges, so GetMarkData can't be used + ScMarkData aMarkData; + aMarkData.MarkFromRangeList( aNewRanges, FALSE ); + aMarkData.MarkToMulti(); // needed for IsAllMarked + + USHORT nTab = lcl_FirstTab(aNewRanges); //! alle Tabellen + + ScCellIterator aCellIter( pDoc, 0,0, nTab, MAXCOL,MAXROW, nTab ); + ScBaseCell* pCell = aCellIter.GetFirst(); + while (pCell) + { + if (pCell->GetCellType() == CELLTYPE_FORMULA) + { + BOOL bMark = FALSE; + ScDetectiveRefIter aIter( (ScFormulaCell*) pCell ); + ScTripel aRefStart; + ScTripel aRefEnd; + while ( aIter.GetNextRef( aRefStart, aRefEnd ) ) + { + ScRange aRefRange( aRefStart, aRefEnd ); + for (USHORT nR=0; nR<nRangesCount; nR++) + { + ScRange aRange = *aNewRanges.GetObject(nR); + if (aRange.Intersects(aRefRange)) + bMark = TRUE; // von Teil des Ranges abhaengig + } + } + if (bMark) + { + ScRange aCellRange( aCellIter.GetCol(), + aCellIter.GetRow(), + aCellIter.GetTab() ); + if ( bRecursive && !bFound && !aMarkData.IsAllMarked( aCellRange ) ) + bFound = TRUE; + aMarkData.SetMultiMarkArea( aCellRange, TRUE ); + } + } + pCell = aCellIter.GetNext(); + } + + aMarkData.FillRangeListWithMarks( &aNewRanges, TRUE ); + } + while ( bRecursive && bFound ); + + return new ScCellRangesObj( pDocShell, aNewRanges ); + } + + return NULL; +} + +// XSearchable + +uno::Reference<util::XSearchDescriptor> SAL_CALL ScCellRangesBase::createSearchDescriptor() + throw(uno::RuntimeException) +{ + return uno::Reference<util::XSearchDescriptor>() ; +} + +uno::Reference<container::XIndexAccess> SAL_CALL ScCellRangesBase::findAll( + const uno::Reference<util::XSearchDescriptor>& xDesc ) + throw(uno::RuntimeException) +{ + // Wenn nichts gefunden wird, soll Null zurueckgegeben werden (?) + uno::Reference<container::XIndexAccess> xRet; + return xRet; +} + +uno::Reference<uno::XInterface> ScCellRangesBase::Find_Impl( + const uno::Reference<util::XSearchDescriptor>& xDesc, + const ScAddress* pLastPos ) +{ + uno::Reference<uno::XInterface> xRet; + return xRet; +} + +uno::Reference<uno::XInterface> SAL_CALL ScCellRangesBase::findFirst( + const uno::Reference<util::XSearchDescriptor>& xDesc ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return Find_Impl( xDesc, NULL ); +} + +uno::Reference<uno::XInterface> SAL_CALL ScCellRangesBase::findNext( + const uno::Reference<uno::XInterface>& xStartAt, + const uno::Reference<util::XSearchDescriptor >& xDesc ) + throw(uno::RuntimeException) +{ + return NULL; +} + +// XReplaceable + +uno::Reference<util::XReplaceDescriptor> SAL_CALL ScCellRangesBase::createReplaceDescriptor() + throw(uno::RuntimeException) +{ + return uno::Reference<util::XReplaceDescriptor>() ; +} + +sal_Int32 SAL_CALL ScCellRangesBase::replaceAll( const uno::Reference<util::XSearchDescriptor>& xDesc ) + throw(uno::RuntimeException) +{ + INT32 nReplaced = 0; + return nReplaced; +} + +// XUnoTunnel + +sal_Int64 SAL_CALL ScCellRangesBase::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return 0; +} + +// static +const uno::Sequence<sal_Int8>& ScCellRangesBase::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScCellRangesBase* ScCellRangesBase::getImplementation( const uno::Reference<uno::XInterface> xObj ) +{ + ScCellRangesBase* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScCellRangesBase*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +//------------------------------------------------------------------------ + +ScCellRangesObj::ScCellRangesObj(ScDocShell* pDocSh, const ScRangeList& rR) : + ScCellRangesBase( pDocSh, rR ) +{ +} + +ScCellRangesObj::~ScCellRangesObj() +{ + List aNamedEntries; +} + +void ScCellRangesObj::RefChanged() +{ + ScCellRangesBase::RefChanged(); + + // nix weiter... +} + +uno::Any SAL_CALL ScCellRangesObj::queryInterface( const uno::Type& rType ) + throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( sheet::XSheetCellRangeContainer ) + SC_QUERYINTERFACE( sheet::XSheetCellRanges ) + SC_QUERYINTERFACE( container::XIndexAccess ) + SC_QUERY_MULTIPLE( container::XElementAccess, container::XIndexAccess ) + SC_QUERYINTERFACE( container::XEnumerationAccess ) + SC_QUERYINTERFACE( container::XNameContainer ) + SC_QUERYINTERFACE( container::XNameReplace ) + SC_QUERYINTERFACE( container::XNameAccess ) + + return ScCellRangesBase::queryInterface( rType ); +} + +void SAL_CALL ScCellRangesObj::acquire() throw() +{ + ScCellRangesBase::acquire(); +} + +void SAL_CALL ScCellRangesObj::release() throw() +{ + ScCellRangesBase::release(); +} + +uno::Sequence<uno::Type> SAL_CALL ScCellRangesObj::getTypes() throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + uno::Sequence<uno::Type> aParentTypes = ScCellRangesBase::getTypes(); + long nParentLen = aParentTypes.getLength(); + const uno::Type* pParentPtr = aParentTypes.getConstArray(); + + aTypes.realloc( nParentLen + 3 ); + uno::Type* pPtr = aTypes.getArray(); + pPtr[nParentLen + 0] = getCppuType((const uno::Reference<sheet::XSheetCellRangeContainer>*)0); + pPtr[nParentLen + 1] = getCppuType((const uno::Reference<container::XNameContainer>*)0); + pPtr[nParentLen + 2] = getCppuType((const uno::Reference<container::XEnumerationAccess>*)0); + + for (long i=0; i<nParentLen; i++) + pPtr[i] = pParentPtr[i]; // parent types first + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScCellRangesObj::getImplementationId() + throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +// XCellRanges + +ScCellRangeObj* ScCellRangesObj::GetObjectByIndex_Impl(USHORT nIndex) const +{ + ScDocShell* pDocSh = GetDocShell(); + const ScRangeList& rRanges = GetRangeList(); + if ( pDocSh && nIndex < rRanges.Count() ) + { + ScRange aRange = *rRanges.GetObject(nIndex); + if ( aRange.aStart == aRange.aEnd ) + return new ScCellObj( pDocSh, aRange.aStart ); + else + return new ScCellRangeObj( pDocSh, aRange ); + } + + return NULL; // keine DocShell oder falscher Index +} + +uno::Sequence<table::CellRangeAddress> SAL_CALL ScCellRangesObj::getRangeAddresses() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + const ScRangeList& rRanges = GetRangeList(); + ULONG nCount = rRanges.Count(); + if ( pDocSh && nCount ) + { + table::CellRangeAddress aRangeAddress; + uno::Sequence<table::CellRangeAddress> aSeq(nCount); + table::CellRangeAddress* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + { + ScUnoConversion::FillApiRange( aRangeAddress, *rRanges.GetObject(i) ); + pAry[i] = aRangeAddress; + } + return aSeq; + } + + return uno::Sequence<table::CellRangeAddress>(0); // leer ist moeglich +} + +uno::Reference<container::XEnumerationAccess> SAL_CALL ScCellRangesObj::getCells() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + // getCells with empty range list is possible (no exception), + // the resulting enumeration just has no elements + // (same behaviour as a valid range with no cells) + // This is handled in ScCellsEnumeration ctor. + + const ScRangeList& rRanges = GetRangeList(); + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + return new ScCellsObj( pDocSh, rRanges ); + return NULL; +} + +::rtl::OUString SAL_CALL ScCellRangesObj::getRangeAddressesAsString() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString; + ScDocShell* pDocSh = GetDocShell(); + const ScRangeList& rRanges = GetRangeList(); + if (pDocSh) + rRanges.Format( aString, SCA_VALID | SCA_TAB_3D, pDocSh->GetDocument() ); + return aString; +} + +// XSheetCellRangeContainer + +void SAL_CALL ScCellRangesObj::addRangeAddress( const table::CellRangeAddress& rRange, + sal_Bool bMergeRanges ) + throw(::com::sun::star::uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRange aRange(static_cast<sal_uInt16>(rRange.StartColumn), + static_cast<sal_uInt16>(rRange.StartRow), + static_cast<sal_uInt16>(rRange.Sheet), + static_cast<sal_uInt16>(rRange.EndColumn), + static_cast<sal_uInt16>(rRange.EndRow), + static_cast<sal_uInt16>(rRange.Sheet)); + AddRange(aRange, bMergeRanges); +} + +void lcl_RemoveNamedEntry( ScNamedEntryArr_Impl& rNamedEntries, const ScRange& rRange ) +{ + USHORT nCount = rNamedEntries.Count(); + for ( USHORT n=nCount; n--; ) + if ( rNamedEntries[n]->GetRange() == rRange ) + rNamedEntries.DeleteAndDestroy( n ); +} + +void SAL_CALL ScCellRangesObj::removeRangeAddress( const table::CellRangeAddress& rRange ) + throw(::com::sun::star::container::NoSuchElementException, + ::com::sun::star::uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + + ScRangeList aSheetRanges; + ScRangeList aNotSheetRanges; + for (sal_uInt32 i = 0; i < rRanges.Count(); ++i) + { + if (rRanges.GetObject(i)->aStart.Tab() == rRange.Sheet) + { + aSheetRanges.Append(*rRanges.GetObject(i)); + } + else + { + aNotSheetRanges.Append(*rRanges.GetObject(i)); + } + } + ScMarkData aMarkData; + aMarkData.MarkFromRangeList( aSheetRanges, FALSE ); + ScRange aRange(static_cast<sal_uInt16>(rRange.StartColumn), + static_cast<sal_uInt16>(rRange.StartRow), + static_cast<sal_uInt16>(rRange.Sheet), + static_cast<sal_uInt16>(rRange.EndColumn), + static_cast<sal_uInt16>(rRange.EndRow), + static_cast<sal_uInt16>(rRange.Sheet)); + if (aMarkData.GetTableSelect( aRange.aStart.Tab() )) + { + aMarkData.MarkToMulti(); + if (aMarkData.IsAllMarked( aRange ) ) + { + aMarkData.SetMultiMarkArea( aRange, FALSE ); + lcl_RemoveNamedEntry(aNamedEntries, aRange); + } + else + throw container::NoSuchElementException(); + } + SetNewRanges(aNotSheetRanges); + ScRangeList aNew; + aMarkData.FillRangeListWithMarks( &aNew, FALSE ); + for (sal_uInt32 j = 0; j < aNew.Count(); ++j) + { + AddRange(*aNew.GetObject(j), sal_False); + } +} + +void SAL_CALL ScCellRangesObj::addRangeAddresses( const uno::Sequence<table::CellRangeAddress >& rRanges, + sal_Bool bMergeRanges ) + throw(::com::sun::star::uno::RuntimeException) +{ + SolarMutexGuard aGuard; + sal_Int32 nCount(rRanges.getLength()); + if (nCount) + { + const table::CellRangeAddress* pRanges = rRanges.getConstArray(); + for (sal_Int32 i = 0; i < rRanges.getLength(); i++, pRanges++) + { + ScRange aRange(static_cast<sal_uInt16>(pRanges->StartColumn), + static_cast<sal_uInt16>(pRanges->StartRow), + static_cast<sal_uInt16>(pRanges->Sheet), + static_cast<sal_uInt16>(pRanges->EndColumn), + static_cast<sal_uInt16>(pRanges->EndRow), + static_cast<sal_uInt16>(pRanges->Sheet)); + AddRange(aRange, bMergeRanges); + } + } +} + +void SAL_CALL ScCellRangesObj::removeRangeAddresses( const uno::Sequence<table::CellRangeAddress >& rRangeSeq ) + throw(::com::sun::star::container::NoSuchElementException, + ::com::sun::star::uno::RuntimeException) +{ + // with this implementation not needed +// SolarMutexGuard aGuard; + + + // use sometimes a better/faster implementation + sal_uInt32 nCount(rRangeSeq.getLength()); + if (nCount) + { + const table::CellRangeAddress* pRanges = rRangeSeq.getConstArray(); + for (sal_uInt32 i=0; i < nCount; ++i, ++pRanges) + { + removeRangeAddress(*pRanges); + } + } +} + +// XNameContainer + +void lcl_RemoveNamedEntry( ScNamedEntryArr_Impl& rNamedEntries, const String& rName ) +{ + USHORT nCount = rNamedEntries.Count(); + for ( USHORT n=nCount; n--; ) + if ( rNamedEntries[n]->GetName() == rName ) + rNamedEntries.DeleteAndDestroy( n ); +} + +void SAL_CALL ScCellRangesObj::insertByName( const ::rtl::OUString& aName, const uno::Any& aElement ) + throw(lang::IllegalArgumentException, container::ElementExistException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + BOOL bDone = FALSE; + + //! Type of aElement can be some specific interface instead of XInterface + + uno::Reference<uno::XInterface> xInterface; + if ( pDocSh && ( aElement >>= xInterface ) ) + { + ScCellRangesBase* pRangesImp = ScCellRangesBase::getImplementation( xInterface ); + if ( pRangesImp && pRangesImp->GetDocShell() == pDocSh ) + { + // if explicit name is given and already existing, throw exception + + String aNamStr = aName; + if ( aNamStr.Len() ) + { + USHORT nNamedCount = aNamedEntries.Count(); + for (USHORT n=0; n<nNamedCount; n++) + if ( aNamedEntries[n]->GetName() == aNamStr ) + throw container::ElementExistException(); + } + + ScRangeList aNew = GetRangeList(); + const ScRangeList& rAddRanges = pRangesImp->GetRangeList(); + ULONG nAddCount = rAddRanges.Count(); + for (ULONG i=0; i<nAddCount; i++) + aNew.Join( *rAddRanges.GetObject(i) ); + SetNewRanges(aNew); + bDone = TRUE; + + if ( aName.getLength() && nAddCount == 1 ) + { + // if a name is given, also insert into list of named entries + // (only possible for a single range) + // name is not in aNamedEntries (tested above) + + ScNamedEntry* pEntry = new ScNamedEntry( aNamStr, *rAddRanges.GetObject(0) ); + aNamedEntries.Insert( pEntry, aNamedEntries.Count() ); + } + } + } + + if (!bDone) + { + // invalid element - double names are handled above + throw lang::IllegalArgumentException(); + } +} + +BOOL lcl_FindRangeByName( const ScRangeList& rRanges, ScDocShell* pDocSh, + const String& rName, ULONG& rIndex ) +{ + if (pDocSh) + { + String aRangeStr; + ScDocument* pDoc = pDocSh->GetDocument(); + ULONG nCount = rRanges.Count(); + for (ULONG i=0; i<nCount; i++) + { + rRanges.GetObject(i)->Format( aRangeStr, SCA_VALID | SCA_TAB_3D, pDoc ); + if ( aRangeStr == rName ) + { + rIndex = i; + return TRUE; + } + } + } + return FALSE; // nicht gefunden +} + +BOOL lcl_FindRangeOrEntry( const ScNamedEntryArr_Impl& rNamedEntries, + const ScRangeList& rRanges, ScDocShell* pDocSh, + const String& rName, ScRange& rFound ) +{ + // exact range in list? + + ULONG nIndex = 0; + if ( lcl_FindRangeByName( rRanges, pDocSh, rName, nIndex ) ) + { + rFound = *rRanges.GetObject(nIndex); + return TRUE; + } + + // range contained in selection? (sheet must be specified) + + ScRange aCellRange; + USHORT nParse = aCellRange.ParseAny( rName, pDocSh->GetDocument() ); + if ( ( nParse & ( SCA_VALID | SCA_TAB_3D ) ) == ( SCA_VALID | SCA_TAB_3D ) ) + { + ScMarkData aMarkData; + aMarkData.MarkFromRangeList( rRanges, FALSE ); + aMarkData.MarkToMulti(); // needed for IsAllMarked + if ( aMarkData.IsAllMarked( aCellRange ) ) + { + rFound = aCellRange; + return TRUE; + } + } + + // named entry in this object? + + if ( rNamedEntries.Count() ) + { + for ( USHORT n=0; n<rNamedEntries.Count(); n++ ) + if ( rNamedEntries[n]->GetName() == rName ) + { + // test if named entry is contained in rRanges + + const ScRange& rComp = rNamedEntries[n]->GetRange(); + ScMarkData aMarkData; + aMarkData.MarkFromRangeList( rRanges, FALSE ); + aMarkData.MarkToMulti(); // needed for IsAllMarked + if ( aMarkData.IsAllMarked( rComp ) ) + { + rFound = rComp; + return TRUE; + } + } + } + + return FALSE; // not found +} + +void SAL_CALL ScCellRangesObj::removeByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + String aNameStr = aName; + ScDocShell* pDocSh = GetDocShell(); + const ScRangeList& rRanges = GetRangeList(); + ULONG nIndex = 0; + if ( lcl_FindRangeByName( rRanges, pDocSh, aNameStr, nIndex ) ) + { + // einzelnen Range weglassen + ScRangeList aNew; + ULONG nCount = rRanges.Count(); + for (ULONG i=0; i<nCount; i++) + if (i != nIndex) + aNew.Append( *rRanges.GetObject(i) ); + SetNewRanges(aNew); + bDone = TRUE; + } + else if (pDocSh) + { + // deselect any ranges (parsed or named entry) + ScRangeList aDiff; + BOOL bValid = ( aDiff.Parse( aNameStr, pDocSh->GetDocument() ) & SCA_VALID ) != 0; + if ( !bValid && aNamedEntries.Count() ) + { + USHORT nCount = aNamedEntries.Count(); + for (USHORT n=0; n<nCount && !bValid; n++) + if (aNamedEntries[n]->GetName() == aNameStr) + { + aDiff.RemoveAll(); + aDiff.Append( aNamedEntries[n]->GetRange() ); + bValid = TRUE; + } + } + if ( bValid ) + { + ScMarkData aMarkData; + aMarkData.MarkFromRangeList( rRanges, FALSE ); + + ULONG nDiffCount = aDiff.Count(); + for (ULONG i=0; i<nDiffCount; i++) + { + ScRange* pDiffRange = aDiff.GetObject(i); + if (aMarkData.GetTableSelect( pDiffRange->aStart.Tab() )) + aMarkData.SetMultiMarkArea( *pDiffRange, FALSE ); + } + + ScRangeList aNew; + aMarkData.FillRangeListWithMarks( &aNew, FALSE ); + SetNewRanges(aNew); + + bDone = TRUE; //! error if range was not selected before? + } + } + + if (aNamedEntries.Count()) + lcl_RemoveNamedEntry( aNamedEntries, aNameStr ); // remove named entry + + if (!bDone) + throw container::NoSuchElementException(); // not found +} + +// XNameReplace + +void SAL_CALL ScCellRangesObj::replaceByName( const ::rtl::OUString& aName, const uno::Any& aElement ) + throw(lang::IllegalArgumentException, container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + //! zusammenfassen? + removeByName( aName ); + insertByName( aName, aElement ); +} + +// XNameAccess + +uno::Any SAL_CALL ScCellRangesObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Any aRet; + + String aNameStr = aName; + ScDocShell* pDocSh = GetDocShell(); + const ScRangeList& rRanges = GetRangeList(); + ScRange aRange; + if ( lcl_FindRangeOrEntry( aNamedEntries, rRanges, pDocSh, aNameStr, aRange ) ) + { + uno::Reference<table::XCellRange> xRange; + if ( aRange.aStart == aRange.aEnd ) + xRange = new ScCellObj( pDocSh, aRange.aStart ); + else + xRange = new ScCellRangeObj( pDocSh, aRange ); + aRet <<= xRange; + } + else + throw container::NoSuchElementException(); + return aRet; +} + +BOOL lcl_FindEntryName( const ScNamedEntryArr_Impl& rNamedEntries, + const ScRange& rRange, String& rName ) +{ + USHORT nCount = rNamedEntries.Count(); + for (USHORT i=0; i<nCount; i++) + if (rNamedEntries[i]->GetRange() == rRange) + { + rName = rNamedEntries[i]->GetName(); + return TRUE; + } + return FALSE; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScCellRangesObj::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + ScDocShell* pDocSh = GetDocShell(); + const ScRangeList& rRanges = GetRangeList(); + if (pDocSh) + { + String aRangeStr; + ScDocument* pDoc = pDocSh->GetDocument(); + ULONG nCount = rRanges.Count(); + + uno::Sequence< ::rtl::OUString> aSeq(nCount); + ::rtl::OUString* pAry = aSeq.getArray(); + for (ULONG i=0; i<nCount; i++) + { + // use given name if for exactly this range, otherwise just format + ScRange aRange = *rRanges.GetObject(i); + if ( !aNamedEntries.Count() || !lcl_FindEntryName( aNamedEntries, aRange, aRangeStr ) ) + aRange.Format( aRangeStr, SCA_VALID | SCA_TAB_3D, pDoc ); + pAry[i] = aRangeStr; + } + return aSeq; + } + return uno::Sequence< ::rtl::OUString>(0); +} + +sal_Bool SAL_CALL ScCellRangesObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameStr = aName; + ScDocShell* pDocSh = GetDocShell(); + const ScRangeList& rRanges = GetRangeList(); + ScRange aRange; + return lcl_FindRangeOrEntry( aNamedEntries, rRanges, pDocSh, aNameStr, aRange ); +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScCellRangesObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.SheetCellRangesEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScCellRangesObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + return rRanges.Count(); +} + +uno::Any SAL_CALL ScCellRangesObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<table::XCellRange> xRange = GetObjectByIndex_Impl((USHORT)nIndex); + uno::Any aAny; + if (xRange.is()) + aAny <<= xRange; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScCellRangesObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<table::XCellRange>*)0); +} + +sal_Bool SAL_CALL ScCellRangesObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + return rRanges.Count() != 0; +} + +// XServiceInfo + +::rtl::OUString SAL_CALL ScCellRangesObj::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScCellRangesObj" ); +} + +sal_Bool SAL_CALL ScCellRangesObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr(rServiceName); + return aServiceStr.EqualsAscii( SCSHEETCELLRANGES_SERVICE ) || + aServiceStr.EqualsAscii( SCCELLPROPERTIES_SERVICE ) || + aServiceStr.EqualsAscii( SCCHARPROPERTIES_SERVICE ) || + aServiceStr.EqualsAscii( SCPARAPROPERTIES_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScCellRangesObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(4); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCSHEETCELLRANGES_SERVICE ); + pArray[1] = ::rtl::OUString::createFromAscii( SCCELLPROPERTIES_SERVICE ); + pArray[2] = ::rtl::OUString::createFromAscii( SCCHARPROPERTIES_SERVICE ); + pArray[3] = ::rtl::OUString::createFromAscii( SCPARAPROPERTIES_SERVICE ); + return aRet; +} + +//------------------------------------------------------------------------ + +// static +uno::Reference<table::XCellRange> ScCellRangeObj::CreateRangeFromDoc( ScDocument* pDoc, const ScRange& rR ) +{ + SfxObjectShell* pObjSh = pDoc->GetDocumentShell(); + if ( pObjSh && pObjSh->ISA(ScDocShell) ) + return new ScCellRangeObj( (ScDocShell*) pObjSh, rR ); + return NULL; +} + +//------------------------------------------------------------------------ + +ScCellRangeObj::ScCellRangeObj(ScDocShell* pDocSh, const ScRange& rR) : + ScCellRangesBase( pDocSh, rR ), + aRangePropSet( lcl_GetRangePropertyMap() ), + aRange( rR ) +{ + aRange.Justify(); // Anfang / Ende richtig +} + +ScCellRangeObj::~ScCellRangeObj() +{ +} + +void ScCellRangeObj::RefChanged() +{ + ScCellRangesBase::RefChanged(); + + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT(rRanges.Count() == 1, "was fuer Ranges ?!?!"); + const ScRange* pFirst = rRanges.GetObject(0); + if (pFirst) + { + aRange = *pFirst; + aRange.Justify(); + } +} + +uno::Any SAL_CALL ScCellRangeObj::queryInterface( const uno::Type& rType ) + throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( sheet::XCellRangeAddressable ) + SC_QUERYINTERFACE( table::XCellRange ) + SC_QUERYINTERFACE( sheet::XSheetCellRange ) + SC_QUERYINTERFACE( sheet::XArrayFormulaRange ) + SC_QUERYINTERFACE( sheet::XCellRangeData ) + SC_QUERYINTERFACE( sheet::XCellRangeFormula ) + SC_QUERYINTERFACE( sheet::XMultipleOperation ) + SC_QUERYINTERFACE( util::XMergeable ) + SC_QUERYINTERFACE( sheet::XCellSeries ) + SC_QUERYINTERFACE( table::XAutoFormattable ) + SC_QUERYINTERFACE( util::XSortable ) + SC_QUERYINTERFACE( sheet::XSheetFilterableEx ) + SC_QUERYINTERFACE( sheet::XSheetFilterable ) + SC_QUERYINTERFACE( sheet::XSubTotalCalculatable ) + SC_QUERYINTERFACE( table::XColumnRowRange ) + SC_QUERYINTERFACE( util::XImportable ) + SC_QUERYINTERFACE( sheet::XCellFormatRangesSupplier ) + SC_QUERYINTERFACE( sheet::XUniqueCellFormatRangesSupplier ) + + return ScCellRangesBase::queryInterface( rType ); +} + +void SAL_CALL ScCellRangeObj::acquire() throw() +{ + ScCellRangesBase::acquire(); +} + +void SAL_CALL ScCellRangeObj::release() throw() +{ + ScCellRangesBase::release(); +} + +uno::Sequence<uno::Type> SAL_CALL ScCellRangeObj::getTypes() throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + uno::Sequence<uno::Type> aParentTypes = ScCellRangesBase::getTypes(); + long nParentLen = aParentTypes.getLength(); + const uno::Type* pParentPtr = aParentTypes.getConstArray(); + + aTypes.realloc( nParentLen + 16 ); + uno::Type* pPtr = aTypes.getArray(); + pPtr[nParentLen + 0] = getCppuType((const uno::Reference<sheet::XCellRangeAddressable>*)0); + pPtr[nParentLen + 1] = getCppuType((const uno::Reference<sheet::XSheetCellRange>*)0); + pPtr[nParentLen + 2] = getCppuType((const uno::Reference<sheet::XArrayFormulaRange>*)0); + pPtr[nParentLen + 3] = getCppuType((const uno::Reference<sheet::XCellRangeData>*)0); + pPtr[nParentLen + 4] = getCppuType((const uno::Reference<sheet::XCellRangeFormula>*)0); + pPtr[nParentLen + 5] = getCppuType((const uno::Reference<sheet::XMultipleOperation>*)0); + pPtr[nParentLen + 6] = getCppuType((const uno::Reference<util::XMergeable>*)0); + pPtr[nParentLen + 7] = getCppuType((const uno::Reference<sheet::XCellSeries>*)0); + pPtr[nParentLen + 8] = getCppuType((const uno::Reference<table::XAutoFormattable>*)0); + pPtr[nParentLen + 9] = getCppuType((const uno::Reference<util::XSortable>*)0); + pPtr[nParentLen +10] = getCppuType((const uno::Reference<sheet::XSheetFilterableEx>*)0); + pPtr[nParentLen +11] = getCppuType((const uno::Reference<sheet::XSubTotalCalculatable>*)0); + pPtr[nParentLen +12] = getCppuType((const uno::Reference<table::XColumnRowRange>*)0); + pPtr[nParentLen +13] = getCppuType((const uno::Reference<util::XImportable>*)0); + pPtr[nParentLen +14] = getCppuType((const uno::Reference<sheet::XCellFormatRangesSupplier>*)0); + pPtr[nParentLen +15] = getCppuType((const uno::Reference<sheet::XUniqueCellFormatRangesSupplier>*)0); + + for (long i=0; i<nParentLen; i++) + pPtr[i] = pParentPtr[i]; // parent types first + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScCellRangeObj::getImplementationId() + throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +// XCellRange + +// ColumnCount / RowCount sind weggefallen +//! werden im Writer fuer Tabellen noch gebraucht ??? + +uno::Reference<table::XCell> ScCellRangeObj::GetCellByPosition_Impl( + sal_Int32 nColumn, sal_Int32 nRow ) + throw(lang::IndexOutOfBoundsException, uno::RuntimeException) +{ + ScDocShell* pDocSh = GetDocShell(); + if (!pDocSh) + throw uno::RuntimeException(); + + if ( nColumn >= 0 && nRow >= 0 ) + { + sal_Int32 nPosX = aRange.aStart.Col() + nColumn; + sal_Int32 nPosY = aRange.aStart.Row() + nRow; + + if ( nPosX <= aRange.aEnd.Col() && nPosY <= aRange.aEnd.Row() ) + { + ScAddress aNew( (USHORT)nPosX, (USHORT)nPosY, aRange.aStart.Tab() ); + return new ScCellObj( pDocSh, aNew ); + } + } + + throw lang::IndexOutOfBoundsException(); + return NULL; +} + +uno::Reference<table::XCell> SAL_CALL ScCellRangeObj::getCellByPosition( + sal_Int32 nColumn, sal_Int32 nRow ) + throw(lang::IndexOutOfBoundsException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + return GetCellByPosition_Impl(nColumn, nRow); +} + +uno::Reference<table::XCellRange> SAL_CALL ScCellRangeObj::getCellRangeByPosition( + sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom ) + throw(lang::IndexOutOfBoundsException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + ScDocShell* pDocSh = GetDocShell(); + if (!pDocSh) + throw uno::RuntimeException(); + + if ( nLeft >= 0 && nTop >= 0 && nRight >= 0 && nBottom >= 0 ) + { + sal_Int32 nStartX = aRange.aStart.Col() + nLeft; + sal_Int32 nStartY = aRange.aStart.Row() + nTop; + sal_Int32 nEndX = aRange.aStart.Col() + nRight; + sal_Int32 nEndY = aRange.aStart.Row() + nBottom; + + if ( nStartX <= nEndX && nEndX <= aRange.aEnd.Col() && + nStartY <= nEndY && nEndY <= aRange.aEnd.Row() ) + { + ScRange aNew( (USHORT)nStartX, (USHORT)nStartY, aRange.aStart.Tab(), + (USHORT)nEndX, (USHORT)nEndY, aRange.aEnd.Tab() ); + return new ScCellRangeObj( pDocSh, aNew ); + } + } + + throw lang::IndexOutOfBoundsException(); + return NULL; +} + +uno::Reference<table::XCellRange> SAL_CALL ScCellRangeObj::getCellRangeByName( + const ::rtl::OUString& aName ) throw(uno::RuntimeException) +{ + // name refers to the whole document (with the range's table as default), + // valid only if the range is within this range + + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = aRange.aStart.Tab(); + + ScRange aCellRange; + BOOL bFound = FALSE; + String aString = aName; + USHORT nParse = aCellRange.ParseAny( aString, pDoc ); + if ( nParse & SCA_VALID ) + { + if ( !(nParse & SCA_TAB_3D) ) // keine Tabelle angegeben -> auf dieser Tabelle + { + aCellRange.aStart.SetTab(nTab); + aCellRange.aEnd.SetTab(nTab); + } + bFound = TRUE; + } + else + { + ScRangeUtil aRangeUtil; + if ( aRangeUtil.MakeRangeFromName( aString, pDoc, nTab, aCellRange, RUTL_NAMES ) || + aRangeUtil.MakeRangeFromName( aString, pDoc, nTab, aCellRange, RUTL_DBASE ) ) + bFound = TRUE; + } + + if (bFound) // valid only if within this object's range + { + if (!aRange.In(aCellRange)) + bFound = FALSE; + } + + if (bFound) + { + if ( aCellRange.aStart == aCellRange.aEnd ) + return new ScCellObj( pDocSh, aCellRange.aStart ); + else + return new ScCellRangeObj( pDocSh, aCellRange ); + } + } + + throw uno::RuntimeException(); + return NULL; +} + +// XColumnRowRange + +uno::Reference<table::XTableColumns> SAL_CALL ScCellRangeObj::getColumns() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + return new ScTableColumnsObj( pDocSh, aRange.aStart.Tab(), + aRange.aStart.Col(), aRange.aEnd.Col() ); + + DBG_ERROR("Dokument ungueltig"); + return NULL; +} + +uno::Reference<table::XTableRows> SAL_CALL ScCellRangeObj::getRows() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + return new ScTableRowsObj( pDocSh, aRange.aStart.Tab(), + aRange.aStart.Row(), aRange.aEnd.Row() ); + + DBG_ERROR("Dokument ungueltig"); + return NULL; +} + +// XAddressableCellRange + +table::CellRangeAddress SAL_CALL ScCellRangeObj::getRangeAddress() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellRangeAddress aRet; + ScUnoConversion::FillApiRange( aRet, aRange ); + return aRet; +} + +// XSheetCellRange + +uno::Reference<sheet::XSpreadsheet> SAL_CALL ScCellRangeObj::getSpreadsheet() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + return new ScTableSheetObj( pDocSh, aRange.aStart.Tab() ); + + DBG_ERROR("Dokument ungueltig"); + return NULL; +} + +// XArrayFormulaRange + +::rtl::OUString SAL_CALL ScCellRangeObj::getArrayFormula() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + // Matrix-Formel, wenn eindeutig Teil einer Matrix, + // also wenn Anfang und Ende des Blocks zur selben Matrix gehoeren. + // Sonst Leerstring. + + String aFormula; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + ScDocument* pDoc = pDocSh->GetDocument(); + const ScBaseCell* pCell1 = pDoc->GetCell( aRange.aStart ); + const ScBaseCell* pCell2 = pDoc->GetCell( aRange.aEnd ); + if ( pCell1 && pCell2 && pCell1->GetCellType() == CELLTYPE_FORMULA && + pCell2->GetCellType() == CELLTYPE_FORMULA ) + { + const ScFormulaCell* pFCell1 = (const ScFormulaCell*)pCell1; + const ScFormulaCell* pFCell2 = (const ScFormulaCell*)pCell2; + ScAddress aStart1; + ScAddress aStart2; + if ( pFCell1->GetMatrixOrigin( aStart1 ) && pFCell2->GetMatrixOrigin( aStart2 ) ) + { + if ( aStart1 == aStart2 ) // beides dieselbe Matrix + pFCell1->GetFormula( aFormula ); // egal, von welcher Zelle + } + } + } + return aFormula; +} + +void SAL_CALL ScCellRangeObj::setArrayFormula( const ::rtl::OUString& aFormula ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + String aString = aFormula; + ScDocFunc aFunc(*pDocSh); + if ( aString.Len() ) + { + if ( ScTableSheetObj::getImplementation( (cppu::OWeakObject*)this ) ) + { + // #74681# don't set array formula for sheet object + throw uno::RuntimeException(); + } + + aFunc.EnterMatrix( aRange, NULL, aString, TRUE, TRUE ); + } + else + { + // empty string -> erase array formula + ScMarkData aMark; + aMark.SetMarkArea( aRange ); + aMark.SelectTable( aRange.aStart.Tab(), TRUE ); + aFunc.DeleteContents( aMark, IDF_CONTENTS, TRUE, TRUE ); + } + } +} + +// XCellRangeData + +uno::Sequence< uno::Sequence<uno::Any> > SAL_CALL ScCellRangeObj::getDataArray() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( ScTableSheetObj::getImplementation( (cppu::OWeakObject*)this ) ) + { + // don't create a data array for the sheet + throw uno::RuntimeException(); + } + + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + uno::Any aAny; + // bAllowNV = TRUE: errors as void + if ( ScRangeToSequence::FillMixedArray( aAny, pDocSh->GetDocument(), aRange, TRUE ) ) + { + uno::Sequence< uno::Sequence<uno::Any> > aSeq; + if ( aAny >>= aSeq ) + return aSeq; // success + } + } + + throw uno::RuntimeException(); // no other exceptions specified + return uno::Sequence< uno::Sequence<uno::Any> >(0); +} + +void SAL_CALL ScCellRangeObj::setDataArray( + const uno::Sequence< uno::Sequence<uno::Any> >& aArray ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + BOOL bDone = FALSE; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + //! move lcl_PutDataArray to docfunc? + bDone = lcl_PutDataArray( *pDocSh, aRange, aArray ); + } + + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +// XCellRangeFormula + +uno::Sequence< uno::Sequence< ::rtl::OUString> > SAL_CALL ScCellRangeObj::getFormulaArray() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( ScTableSheetObj::getImplementation( (cppu::OWeakObject*)this ) ) + { + // don't create a data array for the sheet + throw uno::RuntimeException(); + } + + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + USHORT nStartCol = aRange.aStart.Col(); + USHORT nStartRow = aRange.aStart.Row(); + USHORT nEndCol = aRange.aEnd.Col(); + USHORT nEndRow = aRange.aEnd.Row(); + USHORT nColCount = nEndCol + 1 - nStartCol; + USHORT nRowCount = nEndRow + 1 - nStartRow; + USHORT nTab = aRange.aStart.Tab(); + + uno::Sequence< uno::Sequence< ::rtl::OUString> > aRowSeq( nRowCount ); + uno::Sequence< ::rtl::OUString>* pRowAry = aRowSeq.getArray(); + for (USHORT nRowIndex = 0; nRowIndex < nRowCount; nRowIndex++) + { + uno::Sequence< ::rtl::OUString> aColSeq( nColCount ); + ::rtl::OUString* pColAry = aColSeq.getArray(); + for (USHORT nColIndex = 0; nColIndex < nColCount; nColIndex++) + pColAry[nColIndex] = lcl_GetInputString( pDocSh, + ScAddress( nStartCol+nColIndex, nStartRow+nRowIndex, nTab ), TRUE ); + + pRowAry[nRowIndex] = aColSeq; + } + + return aRowSeq; + } + + throw uno::RuntimeException(); // no other exceptions specified + return uno::Sequence< uno::Sequence< ::rtl::OUString> >(0); +} + +void SAL_CALL ScCellRangeObj::setFormulaArray( + const uno::Sequence< uno::Sequence< ::rtl::OUString> >& aArray ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + BOOL bDone = FALSE; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + bDone = lcl_PutFormulaArray( *pDocSh, aRange, aArray ); + } + + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +// XMultipleOperation + +void SAL_CALL ScCellRangeObj::setTableOperation( const table::CellRangeAddress& aFormulaRange, + sheet::TableOperationMode nMode, + const table::CellAddress& aColumnCell, + const table::CellAddress& aRowCell ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + BOOL bError = FALSE; + ScTabOpParam aParam; + aParam.aRefFormulaCell = ScRefTripel( (USHORT)aFormulaRange.StartColumn, + (USHORT)aFormulaRange.StartRow, aFormulaRange.Sheet, + FALSE, FALSE, FALSE ); + aParam.aRefFormulaEnd = ScRefTripel( (USHORT)aFormulaRange.EndColumn, + (USHORT)aFormulaRange.EndRow, aFormulaRange.Sheet, + FALSE, FALSE, FALSE ); + aParam.aRefRowCell = ScRefTripel( (USHORT)aRowCell.Column, + (USHORT)aRowCell.Row, aRowCell.Sheet, + FALSE, FALSE, FALSE ); + aParam.aRefColCell = ScRefTripel( (USHORT)aColumnCell.Column, + (USHORT)aColumnCell.Row, aColumnCell.Sheet, + FALSE, FALSE, FALSE ); + switch (nMode) + { + case sheet::TableOperationMode_COLUMN: + aParam.nMode = 0; + break; + case sheet::TableOperationMode_ROW: + aParam.nMode = 1; + break; + case sheet::TableOperationMode_BOTH: + aParam.nMode = 2; + break; + default: + bError = TRUE; + } + + if (!bError) + { + ScDocFunc aFunc(*pDocSh); + aFunc.TabOp( aRange, NULL, aParam, TRUE, TRUE ); + } + } +} + +// XMergeable + +void SAL_CALL ScCellRangeObj::merge( sal_Bool bMerge ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocFunc aFunc(*pDocSh); + if ( bMerge ) + aFunc.MergeCells( aRange, FALSE, TRUE, TRUE ); + else + aFunc.UnmergeCells( aRange, TRUE, TRUE ); + + //! Fehler abfangen? + } +} + +sal_Bool SAL_CALL ScCellRangeObj::getIsMerged() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + return pDocSh && pDocSh->GetDocument()->HasAttrib( aRange, HASATTR_MERGED ); +} + +// XCellSeries + +void SAL_CALL ScCellRangeObj::fillSeries( sheet::FillDirection nFillDirection, + sheet::FillMode nFillMode, sheet::FillDateMode nFillDateMode, + double fStep, double fEndValue ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + BOOL bError = FALSE; + + FillDir eDir; + switch (nFillDirection) + { + case sheet::FillDirection_TO_BOTTOM: + eDir = FILL_TO_BOTTOM; + break; + case sheet::FillDirection_TO_RIGHT: + eDir = FILL_TO_RIGHT; + break; + case sheet::FillDirection_TO_TOP: + eDir = FILL_TO_TOP; + break; + case sheet::FillDirection_TO_LEFT: + eDir = FILL_TO_LEFT; + break; + default: + bError = TRUE; + } + + FillCmd eCmd; + switch ( nFillMode ) + { + case sheet::FillMode_SIMPLE: + eCmd = FILL_SIMPLE; + break; + case sheet::FillMode_LINEAR: + eCmd = FILL_LINEAR; + break; + case sheet::FillMode_GROWTH: + eCmd = FILL_GROWTH; + break; + case sheet::FillMode_DATE: + eCmd = FILL_DATE; + break; + case sheet::FillMode_AUTO: + eCmd = FILL_AUTO; + break; + default: + bError = TRUE; + } + + FillDateCmd eDateCmd; + switch ( nFillDateMode ) + { + case sheet::FillDateMode_FILL_DATE_DAY: + eDateCmd = FILL_DAY; + break; + case sheet::FillDateMode_FILL_DATE_WEEKDAY: + eDateCmd = FILL_WEEKDAY; + break; + case sheet::FillDateMode_FILL_DATE_MONTH: + eDateCmd = FILL_MONTH; + break; + case sheet::FillDateMode_FILL_DATE_YEAR: + eDateCmd = FILL_YEAR; + break; + default: + bError = TRUE; + } + + if (!bError) + { + ScDocFunc aFunc(*pDocSh); + aFunc.FillSeries( aRange, NULL, eDir, eCmd, eDateCmd, + MAXDOUBLE, fStep, fEndValue, TRUE, TRUE ); + } + } +} + +void SAL_CALL ScCellRangeObj::fillAuto( sheet::FillDirection nFillDirection, + sal_Int32 nSourceCount ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh && nSourceCount ) + { + ScRange aSourceRange = aRange; + USHORT nCount = 0; // "Dest-Count" + FillDir eDir; + BOOL bError = FALSE; + switch (nFillDirection) + { + case sheet::FillDirection_TO_BOTTOM: + aSourceRange.aEnd.SetRow( aSourceRange.aStart.Row() + nSourceCount - 1 ); + nCount = aRange.aEnd.Row() - aSourceRange.aEnd.Row(); + eDir = FILL_TO_BOTTOM; + break; + case sheet::FillDirection_TO_RIGHT: + aSourceRange.aEnd.SetCol( aSourceRange.aStart.Col() + nSourceCount - 1 ); + nCount = aRange.aEnd.Col() - aSourceRange.aEnd.Col(); + eDir = FILL_TO_RIGHT; + break; + case sheet::FillDirection_TO_TOP: + aSourceRange.aStart.SetRow( aSourceRange.aEnd.Row() - nSourceCount + 1 ); + nCount = aSourceRange.aStart.Row() - aRange.aStart.Row(); + eDir = FILL_TO_TOP; + break; + case sheet::FillDirection_TO_LEFT: + aSourceRange.aStart.SetCol( aSourceRange.aEnd.Col() - nSourceCount + 1 ); + nCount = aSourceRange.aStart.Col() - aRange.aStart.Col(); + eDir = FILL_TO_LEFT; + break; + default: + bError = TRUE; + } + if (nCount > MAXROW) // Ueberlauf + bError = TRUE; + + if (!bError) + { + ScDocFunc aFunc(*pDocSh); + aFunc.FillAuto( aSourceRange, NULL, eDir, nCount, TRUE, TRUE ); + } + } +} + +// XAutoFormattable + +void SAL_CALL ScCellRangeObj::autoFormat( const ::rtl::OUString& aName ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAutoFormat* pAutoFormat = ScGlobal::GetAutoFormat(); + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh && pAutoFormat ) + { + String aNameString = aName; + USHORT nCount = pAutoFormat->GetCount(); + USHORT nIndex; + String aCompare; + for (nIndex=0; nIndex<nCount; nIndex++) + { + (*pAutoFormat)[nIndex]->GetName(aCompare); + if ( aCompare == aNameString ) //! Case-insensitiv ??? + break; + } + if (nIndex<nCount) + { + ScDocFunc aFunc(*pDocSh); + aFunc.AutoFormat( aRange, NULL, nIndex, TRUE, TRUE ); + } + else + throw lang::IllegalArgumentException(); + } +} + +// XSortable + +uno::Sequence<beans::PropertyValue> SAL_CALL ScCellRangeObj::createSortDescriptor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSortParam aParam; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + // DB-Bereich anlegen erst beim Ausfuehren, per API immer genau den Bereich + ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_OLD, TRUE ); + if (pData) + { + pData->GetSortParam(aParam); + + // im SortDescriptor sind die Fields innerhalb des Bereichs gezaehlt + ScRange aDBRange; + pData->GetArea(aDBRange); + USHORT nFieldStart = aParam.bByRow ? aDBRange.aStart.Col() : aDBRange.aStart.Row(); + for (USHORT i=0; i<MAXSORT; i++) + if ( aParam.bDoSort[i] && aParam.nField[i] >= nFieldStart ) + aParam.nField[i] -= nFieldStart; + } + } + + uno::Sequence<beans::PropertyValue> aSeq( ScSortDescriptor::GetPropertyCount() ); + ScSortDescriptor::FillProperties( aSeq, aParam ); + return aSeq; +} + +void SAL_CALL ScCellRangeObj::sort( const uno::Sequence<beans::PropertyValue>& aDescriptor ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + USHORT i; + ScSortParam aParam; + ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_MAKE, TRUE ); // ggf. Bereich anlegen + if (pData) + { + // alten Einstellungen holen, falls nicht alles neu gesetzt wird + pData->GetSortParam(aParam); + USHORT nOldStart = aParam.bByRow ? aRange.aStart.Col() : aRange.aStart.Row(); + for (i=0; i<MAXSORT; i++) + if ( aParam.bDoSort[i] && aParam.nField[i] >= nOldStart ) + aParam.nField[i] -= nOldStart; + } + + ScSortDescriptor::FillSortParam( aParam, aDescriptor ); + + // im SortDescriptor sind die Fields innerhalb des Bereichs gezaehlt + // ByRow kann bei FillSortParam umgesetzt worden sein + USHORT nFieldStart = aParam.bByRow ? aRange.aStart.Col() : aRange.aStart.Row(); + for (i=0; i<MAXSORT; i++) + aParam.nField[i] += nFieldStart; + + USHORT nTab = aRange.aStart.Tab(); + aParam.nCol1 = aRange.aStart.Col(); + aParam.nRow1 = aRange.aStart.Row(); + aParam.nCol2 = aRange.aEnd.Col(); + aParam.nRow2 = aRange.aEnd.Row(); + + pDocSh->GetDBData( aRange, SC_DB_MAKE, TRUE ); // ggf. Bereich anlegen + + ScDBDocFunc aFunc(*pDocSh); // Bereich muss angelegt sein + aFunc.Sort( nTab, aParam, TRUE, TRUE, TRUE ); + } +} + +// XFilterable + +uno::Reference<sheet::XSheetFilterDescriptor> SAL_CALL ScCellRangeObj::createFilterDescriptor( + sal_Bool bEmpty ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + ScFilterDescriptor* pNew = new ScFilterDescriptor(pDocSh); + if ( !bEmpty && pDocSh ) + { + // DB-Bereich anlegen erst beim Ausfuehren, per API immer genau den Bereich + ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_OLD, TRUE ); + if (pData) + { + ScQueryParam aParam; + pData->GetQueryParam(aParam); + // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt + ScRange aDBRange; + pData->GetArea(aDBRange); + USHORT nFieldStart = aParam.bByRow ? aDBRange.aStart.Col() : aDBRange.aStart.Row(); + USHORT nCount = aParam.GetEntryCount(); + for (USHORT i=0; i<nCount; i++) + { + ScQueryEntry& rEntry = aParam.GetEntry(i); + if (rEntry.bDoQuery && rEntry.nField >= nFieldStart) + rEntry.nField -= nFieldStart; + } + pNew->SetParam(aParam); + } + } + return pNew; +} + +void SAL_CALL ScCellRangeObj::filter( const uno::Reference<sheet::XSheetFilterDescriptor>& xDescriptor ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + // das koennte theoretisch ein fremdes Objekt sein, also nur das + // oeffentliche XSheetFilterDescriptor Interface benutzen, um + // die Daten in ein ScFilterDescriptor Objekt zu kopieren: + //! wenn es schon ein ScFilterDescriptor ist, direkt per getImplementation? + + ScDocShell* pDocSh = GetDocShell(); + ScFilterDescriptor aImpl(pDocSh); + aImpl.setFilterFields( xDescriptor->getFilterFields() ); + // Rest sind jetzt Properties... + + uno::Reference<beans::XPropertySet> xPropSet( xDescriptor, uno::UNO_QUERY ); + if (xPropSet.is()) + lcl_CopyProperties( aImpl, *(beans::XPropertySet*)xPropSet.get() ); + + // + // ausfuehren... + // + + if (pDocSh) + { + ScQueryParam aParam = aImpl.GetParam(); + // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt + USHORT nFieldStart = aParam.bByRow ? aRange.aStart.Col() : aRange.aStart.Row(); + USHORT nCount = aParam.GetEntryCount(); + for (USHORT i=0; i<nCount; i++) + { + ScQueryEntry& rEntry = aParam.GetEntry(i); + if (rEntry.bDoQuery) + { + rEntry.nField += nFieldStart; + // Im Dialog wird immer der String angezeigt -> muss zum Wert passen + if ( !rEntry.bQueryByString ) + pDocSh->GetDocument()->GetFormatTable()-> + GetInputLineString( rEntry.nVal, 0, *rEntry.pStr ); + } + } + + USHORT nTab = aRange.aStart.Tab(); + aParam.nCol1 = aRange.aStart.Col(); + aParam.nRow1 = aRange.aStart.Row(); + aParam.nCol2 = aRange.aEnd.Col(); + aParam.nRow2 = aRange.aEnd.Row(); + + pDocSh->GetDBData( aRange, SC_DB_MAKE, TRUE ); // ggf. Bereich anlegen + + //! keep source range in filter descriptor + //! if created by createFilterDescriptorByObject ??? + + ScDBDocFunc aFunc(*pDocSh); + aFunc.Query( nTab, aParam, NULL, TRUE, TRUE ); // Bereich muss angelegt sein + } +} + +//! get/setAutoFilter als Properties!!! + +// XAdvancedFilterSource + +uno::Reference<sheet::XSheetFilterDescriptor> SAL_CALL ScCellRangeObj::createFilterDescriptorByObject( + const uno::Reference<sheet::XSheetFilterable>& xObject ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + // this ist hier nicht der Bereich, der gefiltert wird, sondern der + // Bereich mit der Abfrage... + + uno::Reference<sheet::XCellRangeAddressable> xAddr( xObject, uno::UNO_QUERY ); + + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh && xAddr.is() ) + { + //! Test, ob xObject im selben Dokument ist + + ScFilterDescriptor* pNew = new ScFilterDescriptor(pDocSh); //! stattdessen vom Objekt? + //XSheetFilterDescriptorRef xNew = xObject->createFilterDescriptor(TRUE); + + ScQueryParam aParam = pNew->GetParam(); + aParam.bHasHeader = TRUE; + + table::CellRangeAddress aDataAddress = xAddr->getRangeAddress(); + aParam.nCol1 = (USHORT)aDataAddress.StartColumn; + aParam.nRow1 = (USHORT)aDataAddress.StartRow; + aParam.nCol2 = (USHORT)aDataAddress.EndColumn; + aParam.nRow2 = (USHORT)aDataAddress.EndRow; + aParam.nTab = aDataAddress.Sheet; + + ScDocument* pDoc = pDocSh->GetDocument(); + BOOL bOk = pDoc->CreateQueryParam( + aRange.aStart.Col(), aRange.aStart.Row(), + aRange.aEnd.Col(), aRange.aEnd.Row(), + aRange.aStart.Tab(), aParam ); + if ( bOk ) + { + // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt + USHORT nFieldStart = aParam.bByRow ? (USHORT)aDataAddress.StartColumn : (USHORT)aDataAddress.StartRow; + USHORT nCount = aParam.GetEntryCount(); + for (USHORT i=0; i<nCount; i++) + { + ScQueryEntry& rEntry = aParam.GetEntry(i); + if (rEntry.bDoQuery && rEntry.nField >= nFieldStart) + rEntry.nField -= nFieldStart; + } + + pNew->SetParam( aParam ); + return pNew; + } + else + { + delete pNew; + return NULL; // ungueltig -> null + } + } + + DBG_ERROR("kein Dokument oder kein Bereich"); + return NULL; +} + +// XSubTotalSource + +uno::Reference<sheet::XSubTotalDescriptor> SAL_CALL ScCellRangeObj::createSubTotalDescriptor( + sal_Bool bEmpty ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSubTotalDescriptor* pNew = new ScSubTotalDescriptor; + ScDocShell* pDocSh = GetDocShell(); + if ( !bEmpty && pDocSh ) + { + // DB-Bereich anlegen erst beim Ausfuehren, per API immer genau den Bereich + ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_OLD, TRUE ); + if (pData) + { + ScSubTotalParam aParam; + pData->GetSubTotalParam(aParam); + // im SubTotalDescriptor sind die Fields innerhalb des Bereichs gezaehlt + ScRange aDBRange; + pData->GetArea(aDBRange); + USHORT nFieldStart = aDBRange.aStart.Col(); + for (USHORT i=0; i<MAXSUBTOTAL; i++) + { + if ( aParam.bGroupActive[i] ) + { + if ( aParam.nField[i] >= nFieldStart ) + aParam.nField[i] -= nFieldStart; + for (USHORT j=0; j<aParam.nSubTotals[i]; j++) + if ( aParam.pSubTotals[i][j] >= nFieldStart ) + aParam.pSubTotals[i][j] -= nFieldStart; + } + } + pNew->SetParam(aParam); + } + } + return pNew; +} + +void SAL_CALL ScCellRangeObj::applySubTotals( + const uno::Reference<sheet::XSubTotalDescriptor>& xDescriptor, + sal_Bool bReplace ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if (!xDescriptor.is()) return; + + ScDocShell* pDocSh = GetDocShell(); + ScSubTotalDescriptorBase* pImp = + ScSubTotalDescriptorBase::getImplementation( xDescriptor ); + + if (pDocSh && pImp) + { + ScSubTotalParam aParam; + pImp->GetData(aParam); // virtuelle Methode der Basisklasse + + // im SubTotalDescriptor sind die Fields innerhalb des Bereichs gezaehlt + USHORT nFieldStart = aRange.aStart.Col(); + for (USHORT i=0; i<MAXSUBTOTAL; i++) + { + if ( aParam.bGroupActive[i] ) + { + aParam.nField[i] += nFieldStart; + for (USHORT j=0; j<aParam.nSubTotals[i]; j++) + aParam.pSubTotals[i][j] += nFieldStart; + } + } + + aParam.bReplace = bReplace; + + USHORT nTab = aRange.aStart.Tab(); + aParam.nCol1 = aRange.aStart.Col(); + aParam.nRow1 = aRange.aStart.Row(); + aParam.nCol2 = aRange.aEnd.Col(); + aParam.nRow2 = aRange.aEnd.Row(); + + pDocSh->GetDBData( aRange, SC_DB_MAKE, TRUE ); // ggf. Bereich anlegen + + ScDBDocFunc aFunc(*pDocSh); + aFunc.DoSubTotals( nTab, aParam, NULL, TRUE, TRUE ); // Bereich muss angelegt sein + } +} + +void SAL_CALL ScCellRangeObj::removeSubTotals() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + ScSubTotalParam aParam; + ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_OLD, TRUE ); + if (pData) + pData->GetSubTotalParam(aParam); // auch bei Remove die Feld-Eintraege behalten + + aParam.bRemoveOnly = TRUE; + + USHORT nTab = aRange.aStart.Tab(); + aParam.nCol1 = aRange.aStart.Col(); + aParam.nRow1 = aRange.aStart.Row(); + aParam.nCol2 = aRange.aEnd.Col(); + aParam.nRow2 = aRange.aEnd.Row(); + + pDocSh->GetDBData( aRange, SC_DB_MAKE, TRUE ); // ggf. Bereich anlegen + + ScDBDocFunc aFunc(*pDocSh); + aFunc.DoSubTotals( nTab, aParam, NULL, TRUE, TRUE ); // Bereich muss angelegt sein + } +} + +uno::Sequence<beans::PropertyValue> SAL_CALL ScCellRangeObj::createImportDescriptor( sal_Bool bEmpty ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScImportParam aParam; + ScDocShell* pDocSh = GetDocShell(); + if ( !bEmpty && pDocSh ) + { + // DB-Bereich anlegen erst beim Ausfuehren, per API immer genau den Bereich + ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_OLD, TRUE ); + if (pData) + pData->GetImportParam(aParam); + } + + uno::Sequence<beans::PropertyValue> aSeq( ScImportDescriptor::GetPropertyCount() ); + ScImportDescriptor::FillProperties( aSeq, aParam ); + return aSeq; +} + +void SAL_CALL ScCellRangeObj::doImport( const uno::Sequence<beans::PropertyValue>& aDescriptor ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + ScImportParam aParam; + ScImportDescriptor::FillImportParam( aParam, aDescriptor ); + + USHORT nTab = aRange.aStart.Tab(); + aParam.nCol1 = aRange.aStart.Col(); + aParam.nRow1 = aRange.aStart.Row(); + aParam.nCol2 = aRange.aEnd.Col(); + aParam.nRow2 = aRange.aEnd.Row(); + + //! TODO: could we get passed a valid result set by any means? + uno::Reference< sdbc::XResultSet > xResultSet; + + pDocSh->GetDBData( aRange, SC_DB_MAKE, TRUE ); // ggf. Bereich anlegen + + ScDBDocFunc aFunc(*pDocSh); // Bereich muss angelegt sein + aFunc.DoImport( nTab, aParam, xResultSet, NULL, TRUE, FALSE ); //! Api-Flag als Parameter + } +} + +// XCellFormatRangesSupplier + +uno::Reference<container::XIndexAccess> SAL_CALL ScCellRangeObj::getCellFormatRanges() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + return new ScCellFormatsObj( pDocSh, aRange ); + return NULL; +} + +// XUniqueCellFormatRangesSupplier + +uno::Reference<container::XIndexAccess> SAL_CALL ScCellRangeObj::getUniqueCellFormatRanges() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + return new ScUniqueCellFormatsObj( pDocSh, aRange ); + return NULL; +} + +// XPropertySet erweitert fuer Range-Properties + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScCellRangeObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aRangePropSet.getPropertyMap() ); + return aRef; +} + +void ScCellRangeObj::SetOnePropertyValue( const SfxItemPropertyMap* pMap, const uno::Any& aValue ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + // Range has only Position and Size in addition to ScCellRangesBase, both are ReadOnly + // -> nothing to do here + + ScCellRangesBase::SetOnePropertyValue( pMap, aValue ); +} + +void ScCellRangeObj::GetOnePropertyValue( const SfxItemPropertyMap* pMap, + uno::Any& rAny ) + throw(uno::RuntimeException) +{ + if ( pMap ) + { + if ( pMap->nWID == SC_WID_UNO_POS ) + { + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + // GetMMRect converts using HMM_PER_TWIPS, like the DrawingLayer + Rectangle aMMRect = pDocSh->GetDocument()->GetMMRect( + aRange.aStart.Col(), aRange.aStart.Row(), + aRange.aEnd.Col(), aRange.aEnd.Row(), aRange.aStart.Tab() ); + awt::Point aPos( aMMRect.Left(), aMMRect.Top() ); + rAny <<= aPos; + } + } + else if ( pMap->nWID == SC_WID_UNO_SIZE ) + { + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + // GetMMRect converts using HMM_PER_TWIPS, like the DrawingLayer + Rectangle aMMRect = pDocSh->GetDocument()->GetMMRect( + aRange.aStart.Col(), aRange.aStart.Row(), + aRange.aEnd.Col(), aRange.aEnd.Row(), aRange.aStart.Tab() ); + Size aSize = aMMRect.GetSize(); + awt::Size aAwtSize( aSize.Width(), aSize.Height() ); + rAny <<= aAwtSize; + } + } + else + ScCellRangesBase::GetOnePropertyValue( pMap, rAny ); + + } +} + +const SfxItemPropertyMap* ScCellRangeObj::GetItemPropertyMap() +{ + return lcl_GetRangePropertyMap(); +} + +// XServiceInfo + +::rtl::OUString SAL_CALL ScCellRangeObj::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScCellRangeObj" ); +} + +sal_Bool SAL_CALL ScCellRangeObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr( rServiceName ); + return aServiceStr.EqualsAscii( SCSHEETCELLRANGE_SERVICE ) || + aServiceStr.EqualsAscii( SCCELLRANGE_SERVICE ) || + aServiceStr.EqualsAscii( SCCELLPROPERTIES_SERVICE ) || + aServiceStr.EqualsAscii( SCCHARPROPERTIES_SERVICE ) || + aServiceStr.EqualsAscii( SCPARAPROPERTIES_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScCellRangeObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(5); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCSHEETCELLRANGE_SERVICE ); + pArray[1] = ::rtl::OUString::createFromAscii( SCCELLRANGE_SERVICE ); + pArray[2] = ::rtl::OUString::createFromAscii( SCCELLPROPERTIES_SERVICE ); + pArray[3] = ::rtl::OUString::createFromAscii( SCCHARPROPERTIES_SERVICE ); + pArray[4] = ::rtl::OUString::createFromAscii( SCPARAPROPERTIES_SERVICE ); + return aRet; +} + +//------------------------------------------------------------------------ + +const SfxItemPropertyMap* ScCellObj::GetEditPropertyMap() // static +{ + return lcl_GetEditPropertyMap(); +} + +ScCellObj::ScCellObj(ScDocShell* pDocSh, const ScAddress& rP) : + ScCellRangeObj( pDocSh, ScRange(rP,rP) ), + aCellPropSet( lcl_GetCellPropertyMap() ), + aCellPos( rP ), + pUnoText( NULL ), + nActionLockCount( 0 ) +{ + // pUnoText is allocated on demand (GetUnoText) + // can't be aggregated because getString/setString is handled here +} + +SvxUnoText& ScCellObj::GetUnoText() +{ + if (!pUnoText) + { + pUnoText = new ScCellTextObj( GetDocShell(), aCellPos ); + pUnoText->acquire(); + if (nActionLockCount) + { + ScSharedCellEditSource* pEditSource = + static_cast<ScSharedCellEditSource*> (pUnoText->GetEditSource()); + if (pEditSource) + pEditSource->SetDoUpdateData(sal_False); + } + } + return *pUnoText; +} + +ScCellObj::~ScCellObj() +{ + if (pUnoText) + pUnoText->release(); +} + +void ScCellObj::RefChanged() +{ + ScCellRangeObj::RefChanged(); + + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT(rRanges.Count() == 1, "was fuer Ranges ?!?!"); + const ScRange* pFirst = rRanges.GetObject(0); + if (pFirst) + aCellPos = pFirst->aStart; +} + +uno::Any SAL_CALL ScCellObj::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( table::XCell ) + SC_QUERYINTERFACE( sheet::XCellAddressable ) + SC_QUERYINTERFACE( text::XText ) + SC_QUERYINTERFACE( text::XSimpleText ) + SC_QUERYINTERFACE( text::XTextRange ) + SC_QUERYINTERFACE( container::XEnumerationAccess ) + SC_QUERYINTERFACE( container::XElementAccess ) + SC_QUERYINTERFACE( sheet::XSheetAnnotationAnchor ) + SC_QUERYINTERFACE( text::XTextFieldsSupplier ) + SC_QUERYINTERFACE( document::XActionLockable ) + + return ScCellRangeObj::queryInterface( rType ); +} + +void SAL_CALL ScCellObj::acquire() throw() +{ + ScCellRangeObj::acquire(); +} + +void SAL_CALL ScCellObj::release() throw() +{ + ScCellRangeObj::release(); +} + +uno::Sequence<uno::Type> SAL_CALL ScCellObj::getTypes() throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + uno::Sequence<uno::Type> aParentTypes = ScCellRangeObj::getTypes(); + long nParentLen = aParentTypes.getLength(); + const uno::Type* pParentPtr = aParentTypes.getConstArray(); + + aTypes.realloc( nParentLen + 7 ); + uno::Type* pPtr = aTypes.getArray(); + pPtr[nParentLen + 0] = getCppuType((const uno::Reference<table::XCell>*)0); + pPtr[nParentLen + 1] = getCppuType((const uno::Reference<sheet::XCellAddressable>*)0); + pPtr[nParentLen + 2] = getCppuType((const uno::Reference<text::XText>*)0); + pPtr[nParentLen + 3] = getCppuType((const uno::Reference<container::XEnumerationAccess>*)0); + pPtr[nParentLen + 4] = getCppuType((const uno::Reference<sheet::XSheetAnnotationAnchor>*)0); + pPtr[nParentLen + 5] = getCppuType((const uno::Reference<text::XTextFieldsSupplier>*)0); + pPtr[nParentLen + 6] = getCppuType((const uno::Reference<document::XActionLockable>*)0); + + for (long i=0; i<nParentLen; i++) + pPtr[i] = pParentPtr[i]; // parent types first + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScCellObj::getImplementationId() throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +// Hilfsfunktionen + +String ScCellObj::GetInputString_Impl(BOOL bEnglish) const // fuer getFormula / FormulaLocal +{ + return lcl_GetInputString( GetDocShell(), aCellPos, bEnglish ); +} + +String ScCellObj::GetOutputString_Impl() const +{ + ScDocShell* pDocSh = GetDocShell(); + String aVal; + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + ScBaseCell* pCell = pDoc->GetCell( aCellPos ); + if ( pCell && pCell->GetCellType() != CELLTYPE_NOTE ) + { + if ( pCell->GetCellType() == CELLTYPE_EDIT ) + { + // GetString an der EditCell macht Leerzeichen aus Umbruechen, + // hier werden die Umbrueche aber gebraucht + const EditTextObject* pData = ((ScEditCell*)pCell)->GetData(); + if (pData) + { + EditEngine& rEngine = pDoc->GetEditEngine(); + rEngine.SetText( *pData ); + aVal = rEngine.GetText( LINEEND_LF ); + } + // Edit-Zellen auch nicht per NumberFormatter formatieren + // (passend zur Ausgabe) + } + else + { + // wie in GetString am Dokument (column) + Color* pColor; + ULONG nNumFmt = pDoc->GetNumberFormat( aCellPos ); + ScCellFormat::GetString( pCell, nNumFmt, aVal, &pColor, *pDoc->GetFormatTable() ); + } + } + } + return aVal; +} + +void ScCellObj::SetString_Impl(const String& rString, BOOL bInterpret, BOOL bEnglish) +{ + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocFunc aFunc(*pDocSh); + BOOL bOk = aFunc.SetCellText( aCellPos, rString, bInterpret, bEnglish, TRUE ); + } +} + +double ScCellObj::GetValue_Impl() const +{ + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + return pDocSh->GetDocument()->GetValue( aCellPos ); + + return 0.0; +} + +void ScCellObj::SetValue_Impl(double fValue) +{ + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocFunc aFunc(*pDocSh); + BOOL bOk = aFunc.PutCell( aCellPos, new ScValueCell(fValue), TRUE ); + } +} + +// only for XML import + +void ScCellObj::SetFormulaResultString( const ::rtl::OUString& rResult ) +{ + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScBaseCell* pCell = pDocSh->GetDocument()->GetCell( aCellPos ); + if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA ) + ((ScFormulaCell*)pCell)->SetString( rResult ); + } +} + +void ScCellObj::SetFormulaResultDouble( double fResult ) +{ + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScBaseCell* pCell = pDocSh->GetDocument()->GetCell( aCellPos ); + if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA ) + ((ScFormulaCell*)pCell)->SetDouble( fResult ); + } +} + +// XText + +uno::Reference<text::XTextCursor> SAL_CALL ScCellObj::createTextCursor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScCellTextCursor( *this ); +} + +uno::Reference<text::XTextCursor> SAL_CALL ScCellObj::createTextCursorByRange( + const uno::Reference<text::XTextRange>& aTextPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SvxUnoTextCursor* pCursor = new ScCellTextCursor( *this ); + uno::Reference<text::XTextCursor> xCursor = pCursor; + + SvxUnoTextRangeBase* pRange = SvxUnoTextRangeBase::getImplementation( aTextPosition ); + if(pRange) + pCursor->SetSelection( pRange->GetSelection() ); + else + { + ScCellTextCursor* pOther = ScCellTextCursor::getImplementation( aTextPosition ); + if(pOther) + pCursor->SetSelection( pOther->GetSelection() ); + else + throw uno::RuntimeException(); + } + + return xCursor; +} + +::rtl::OUString SAL_CALL ScCellObj::getString() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return GetOutputString_Impl(); +} + +void SAL_CALL ScCellObj::setString( const ::rtl::OUString& aText ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString = aText; + SetString_Impl(aString, FALSE, FALSE); // immer Text + + // don't create pUnoText here if not there + if (pUnoText) + pUnoText->SetSelection(ESelection( 0,0, 0,aString.Len() )); +} + +void SAL_CALL ScCellObj::insertString( const uno::Reference<text::XTextRange>& xRange, + const ::rtl::OUString& aString, sal_Bool bAbsorb ) + throw(uno::RuntimeException) +{ + // special handling for ScCellTextCursor is no longer needed, + // SvxUnoText::insertString checks for SvxUnoTextRangeBase instead of SvxUnoTextRange + + SolarMutexGuard aGuard; + GetUnoText().insertString(xRange, aString, bAbsorb); +} + +void SAL_CALL ScCellObj::insertControlCharacter( const uno::Reference<text::XTextRange>& xRange, + sal_Int16 nControlCharacter, sal_Bool bAbsorb ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + GetUnoText().insertControlCharacter(xRange, nControlCharacter, bAbsorb); +} + +void SAL_CALL ScCellObj::insertTextContent( const uno::Reference<text::XTextRange >& xRange, + const uno::Reference<text::XTextContent >& xContent, + sal_Bool bAbsorb ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh && xContent.is() ) + { + ScCellFieldObj* pCellField = ScCellFieldObj::getImplementation( xContent ); + SvxUnoTextRangeBase* pTextRange = ScCellTextCursor::getImplementation( xRange ); + +#if 0 + if (!pTextRange) + pTextRange = SvxUnoTextRangeBase::getImplementation( xRange ); + + //! bei SvxUnoTextRange testen, ob in passendem Objekt !!! +#endif + + if ( pCellField && !pCellField->IsInserted() && pTextRange ) + { + SvxEditSource* pEditSource = pTextRange->GetEditSource(); + ESelection aSelection = pTextRange->GetSelection(); + + if (!bAbsorb) + { + // nicht ersetzen -> hinten anhaengen + aSelection.Adjust(); + aSelection.nStartPara = aSelection.nEndPara; + aSelection.nStartPos = aSelection.nEndPos; + } + + SvxFieldItem aItem = pCellField->CreateFieldItem(); + + SvxTextForwarder* pForwarder = pEditSource->GetTextForwarder(); + pForwarder->QuickInsertField( aItem, aSelection ); + pEditSource->UpdateData(); + + // neue Selektion: ein Zeichen + aSelection.Adjust(); + aSelection.nEndPara = aSelection.nStartPara; + aSelection.nEndPos = aSelection.nStartPos + 1; + pCellField->InitDoc( pDocSh, aCellPos, aSelection ); + + // #91431# for bAbsorb=FALSE, the new selection must be behind the inserted content + // (the xml filter relies on this) + if (!bAbsorb) + aSelection.nStartPos = aSelection.nEndPos; + + pTextRange->SetSelection( aSelection ); + + return; + } + } + GetUnoText().insertTextContent(xRange, xContent, bAbsorb); +} + +void SAL_CALL ScCellObj::removeTextContent( const uno::Reference<text::XTextContent>& xContent ) + throw(container::NoSuchElementException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( xContent.is() ) + { + ScCellFieldObj* pCellField = ScCellFieldObj::getImplementation( xContent ); + if ( pCellField && pCellField->IsInserted() ) + { + //! Testen, ob das Feld in dieser Zelle ist + pCellField->DeleteField(); + return; + } + } + GetUnoText().removeTextContent(xContent); +} + +uno::Reference<text::XText> SAL_CALL ScCellObj::getText() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return this; +} + +uno::Reference<text::XTextRange> SAL_CALL ScCellObj::getStart() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return GetUnoText().getStart(); +} + +uno::Reference<text::XTextRange> SAL_CALL ScCellObj::getEnd() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return GetUnoText().getEnd(); +} + +uno::Reference<container::XEnumeration> SAL_CALL ScCellObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return GetUnoText().createEnumeration(); +} + +uno::Type SAL_CALL ScCellObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return GetUnoText().getElementType(); +} + +sal_Bool SAL_CALL ScCellObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return GetUnoText().hasElements(); +} + +// XCell + +::rtl::OUString SAL_CALL ScCellObj::getFormula() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + // TRUE = englisch + return GetInputString_Impl(TRUE); +} + +void SAL_CALL ScCellObj::setFormula( const ::rtl::OUString& aFormula ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString = aFormula; + SetString_Impl(aString, TRUE, TRUE); // englisch interpretieren +} + +double SAL_CALL ScCellObj::getValue() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return GetValue_Impl(); +} + +void SAL_CALL ScCellObj::setValue( double nValue ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SetValue_Impl(nValue); +} + +table::CellContentType SAL_CALL ScCellObj::getType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellContentType eRet = table::CellContentType_EMPTY; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + CellType eCalcType = pDocSh->GetDocument()->GetCellType( aCellPos ); + switch (eCalcType) + { + case CELLTYPE_VALUE: + eRet = table::CellContentType_VALUE; + break; + case CELLTYPE_STRING: + case CELLTYPE_EDIT: + eRet = table::CellContentType_TEXT; + break; + case CELLTYPE_FORMULA: + eRet = table::CellContentType_FORMULA; + break; + default: + eRet = table::CellContentType_EMPTY; + } + } + else + DBG_ERROR("keine DocShell"); //! Exception oder so? + + return eRet; +} + +table::CellContentType ScCellObj::GetResultType_Impl() +{ + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScBaseCell* pCell = pDocSh->GetDocument()->GetCell(aCellPos); + if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA ) + { + BOOL bValue = ((ScFormulaCell*)pCell)->IsValue(); + return bValue ? table::CellContentType_VALUE : table::CellContentType_TEXT; + } + } + return getType(); // wenn keine Formel +} + +sal_Int32 SAL_CALL ScCellObj::getError() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nError = 0; + ScDocShell* pDocSh = GetDocShell(); + if (pDocSh) + { + ScBaseCell* pCell = pDocSh->GetDocument()->GetCell( aCellPos ); + if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA ) + nError = ((ScFormulaCell*)pCell)->GetErrCode(); + // sonst bleibt's bei 0 + } + else + DBG_ERROR("keine DocShell"); //! Exception oder so? + + return nError; +} + +// XCellAddressable + +table::CellAddress SAL_CALL ScCellObj::getCellAddress() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellAddress aAdr; + aAdr.Sheet = aCellPos.Tab(); + aAdr.Column = aCellPos.Col(); + aAdr.Row = aCellPos.Row(); + return aAdr; +} + +// XSheetAnnotationAnchor + +uno::Reference<sheet::XSheetAnnotation> SAL_CALL ScCellObj::getAnnotation() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + return new ScAnnotationObj( pDocSh, aCellPos ); + + DBG_ERROR("getAnnotation ohne DocShell"); + return NULL; +} + +// XFieldTypesSupplier + +uno::Reference<container::XEnumerationAccess> SAL_CALL ScCellObj::getTextFields() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + return new ScCellFieldsObj( pDocSh, aCellPos ); + + return NULL; +} + +uno::Reference<container::XNameAccess> SAL_CALL ScCellObj::getTextFieldMasters() + throw(uno::RuntimeException) +{ + // sowas gibts nicht im Calc (?) + return NULL; +} + +// XPropertySet erweitert fuer Zell-Properties + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScCellObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aCellPropSet.getPropertyMap() ); + return aRef; +} + +void ScCellObj::SetOnePropertyValue( const SfxItemPropertyMap* pMap, const uno::Any& aValue ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + if ( pMap ) + { + if ( pMap->nWID == SC_WID_UNO_FORMLOC ) + { + ::rtl::OUString aStrVal; + aValue >>= aStrVal; + String aString = aStrVal; + SetString_Impl(aString, TRUE, FALSE); // lokal interpretieren + } + else if ( pMap->nWID == SC_WID_UNO_FORMRT ) + { + // Read-Only + //! Exception oder so... + } + else + ScCellRangeObj::SetOnePropertyValue( pMap, aValue ); + } +} + +void ScCellObj::GetOnePropertyValue( const SfxItemPropertyMap* pMap, + uno::Any& rAny ) + throw(uno::RuntimeException) +{ + if ( pMap ) + { + if ( pMap->nWID == SC_WID_UNO_FORMLOC ) + { + // FALSE = lokal + String aFormStr = GetInputString_Impl(FALSE); + rAny <<= ::rtl::OUString( aFormStr ); + } + else if ( pMap->nWID == SC_WID_UNO_FORMRT ) + { + table::CellContentType eType = GetResultType_Impl(); + rAny <<= eType; + } + else + ScCellRangeObj::GetOnePropertyValue(pMap, rAny); + } +} + +const SfxItemPropertyMap* ScCellObj::GetItemPropertyMap() +{ + return lcl_GetCellPropertyMap(); +} + +// XServiceInfo + +::rtl::OUString SAL_CALL ScCellObj::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScCellObj" ); +} + +sal_Bool SAL_CALL ScCellObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + // CellRange/SheetCellRange are not in SheetCell service description, + // but ScCellObj is used instead of ScCellRangeObj in CellRanges collections, + // so it must support them + + String aServiceStr(rServiceName); + return aServiceStr.EqualsAscii( SCSHEETCELL_SERVICE ) || + aServiceStr.EqualsAscii( SCCELL_SERVICE ) || + aServiceStr.EqualsAscii( SCCELLPROPERTIES_SERVICE ) || + aServiceStr.EqualsAscii( SCCHARPROPERTIES_SERVICE ) || + aServiceStr.EqualsAscii( SCPARAPROPERTIES_SERVICE ) || + aServiceStr.EqualsAscii( SCSHEETCELLRANGE_SERVICE ) || + aServiceStr.EqualsAscii( SCCELLRANGE_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScCellObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(7); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCSHEETCELL_SERVICE ); + pArray[1] = ::rtl::OUString::createFromAscii( SCCELL_SERVICE ); + pArray[2] = ::rtl::OUString::createFromAscii( SCCELLPROPERTIES_SERVICE ); + pArray[3] = ::rtl::OUString::createFromAscii( SCCHARPROPERTIES_SERVICE ); + pArray[4] = ::rtl::OUString::createFromAscii( SCPARAPROPERTIES_SERVICE ); + pArray[5] = ::rtl::OUString::createFromAscii( SCSHEETCELLRANGE_SERVICE ); + pArray[6] = ::rtl::OUString::createFromAscii( SCCELLRANGE_SERVICE ); + return aRet; +} + +// XActionLockable + +sal_Bool SAL_CALL ScCellObj::isActionLocked() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return nActionLockCount != 0; +} + +void SAL_CALL ScCellObj::addActionLock() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!nActionLockCount) + { + if (pUnoText) + { + ScSharedCellEditSource* pEditSource = + static_cast<ScSharedCellEditSource*> (pUnoText->GetEditSource()); + if (pEditSource) + pEditSource->SetDoUpdateData(sal_False); + } + } + nActionLockCount++; +} + +void SAL_CALL ScCellObj::removeActionLock() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (nActionLockCount > 0) + { + nActionLockCount--; + if (!nActionLockCount) + { + if (pUnoText) + { + ScSharedCellEditSource* pEditSource = + static_cast<ScSharedCellEditSource*> (pUnoText->GetEditSource()); + if (pEditSource) + { + pEditSource->SetDoUpdateData(sal_True); + if (pEditSource->IsDirty()) + pEditSource->UpdateData(); + } + } + } + } +} + +void SAL_CALL ScCellObj::setActionLocks( sal_Int16 nLock ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pUnoText) + { + ScSharedCellEditSource* pEditSource = + static_cast<ScSharedCellEditSource*> (pUnoText->GetEditSource()); + if (pEditSource) + { + pEditSource->SetDoUpdateData(nLock == 0); + if ((nActionLockCount > 0) && (nLock == 0) && pEditSource->IsDirty()) + pEditSource->UpdateData(); + } + } + nActionLockCount = nLock; +} + +sal_Int16 SAL_CALL ScCellObj::resetActionLocks() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nRet(nActionLockCount); + if (pUnoText) + { + ScSharedCellEditSource* pEditSource = + static_cast<ScSharedCellEditSource*> (pUnoText->GetEditSource()); + if (pEditSource) + { + pEditSource->SetDoUpdateData(sal_True); + if (pEditSource->IsDirty()) + pEditSource->UpdateData(); + } + } + nActionLockCount = 0; + return nRet; +} + +//------------------------------------------------------------------------ + +ScTableSheetObj::ScTableSheetObj( ScDocShell* pDocSh, USHORT nTab ) : + ScCellRangeObj( pDocSh, ScRange(0,0,nTab, MAXCOL,MAXROW,nTab) ), + aSheetPropSet(lcl_GetSheetPropertyMap()) +{ +} + +ScTableSheetObj::~ScTableSheetObj() +{ +} + +void ScTableSheetObj::InitInsertSheet(ScDocShell* pDocSh, USHORT nTab) +{ + InitInsertRange( pDocSh, ScRange(0,0,nTab, MAXCOL,MAXROW,nTab) ); +} + +uno::Any SAL_CALL ScTableSheetObj::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( sheet::XSpreadsheet ) + SC_QUERYINTERFACE( container::XNamed ) + SC_QUERYINTERFACE( sheet::XSheetPageBreak ) + SC_QUERYINTERFACE( sheet::XCellRangeMovement ) + SC_QUERYINTERFACE( table::XTableChartsSupplier ) + SC_QUERYINTERFACE( sheet::XDataPilotTablesSupplier ) + SC_QUERYINTERFACE( sheet::XScenariosSupplier ) + SC_QUERYINTERFACE( sheet::XSheetAnnotationsSupplier ) + SC_QUERYINTERFACE( drawing::XDrawPageSupplier ) + SC_QUERYINTERFACE( sheet::XPrintAreas ) + SC_QUERYINTERFACE( sheet::XSheetAuditing ) + SC_QUERYINTERFACE( sheet::XSheetOutline ) + SC_QUERYINTERFACE( util::XProtectable ) + SC_QUERYINTERFACE( sheet::XScenario ) + SC_QUERYINTERFACE( sheet::XSheetLinkable ) + + return ScCellRangeObj::queryInterface( rType ); +} + +void SAL_CALL ScTableSheetObj::acquire() throw() +{ + ScCellRangeObj::acquire(); +} + +void SAL_CALL ScTableSheetObj::release() throw() +{ + ScCellRangeObj::release(); +} + +uno::Sequence<uno::Type> SAL_CALL ScTableSheetObj::getTypes() throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + uno::Sequence<uno::Type> aParentTypes = ScCellRangeObj::getTypes(); + long nParentLen = aParentTypes.getLength(); + const uno::Type* pParentPtr = aParentTypes.getConstArray(); + + aTypes.realloc( nParentLen + 15 ); + uno::Type* pPtr = aTypes.getArray(); + pPtr[nParentLen + 0] = getCppuType((const uno::Reference<sheet::XSpreadsheet>*)0); + pPtr[nParentLen + 1] = getCppuType((const uno::Reference<container::XNamed>*)0); + pPtr[nParentLen + 2] = getCppuType((const uno::Reference<sheet::XSheetPageBreak>*)0); + pPtr[nParentLen + 3] = getCppuType((const uno::Reference<sheet::XCellRangeMovement>*)0); + pPtr[nParentLen + 4] = getCppuType((const uno::Reference<table::XTableChartsSupplier>*)0); + pPtr[nParentLen + 5] = getCppuType((const uno::Reference<sheet::XDataPilotTablesSupplier>*)0); + pPtr[nParentLen + 6] = getCppuType((const uno::Reference<sheet::XScenariosSupplier>*)0); + pPtr[nParentLen + 7] = getCppuType((const uno::Reference<sheet::XSheetAnnotationsSupplier>*)0); + pPtr[nParentLen + 8] = getCppuType((const uno::Reference<drawing::XDrawPageSupplier>*)0); + pPtr[nParentLen + 9] = getCppuType((const uno::Reference<sheet::XPrintAreas>*)0); + pPtr[nParentLen +10] = getCppuType((const uno::Reference<sheet::XSheetAuditing>*)0); + pPtr[nParentLen +11] = getCppuType((const uno::Reference<sheet::XSheetOutline>*)0); + pPtr[nParentLen +12] = getCppuType((const uno::Reference<util::XProtectable>*)0); + pPtr[nParentLen +13] = getCppuType((const uno::Reference<sheet::XScenario>*)0); + pPtr[nParentLen +14] = getCppuType((const uno::Reference<sheet::XSheetLinkable>*)0); + + for (long i=0; i<nParentLen; i++) + pPtr[i] = pParentPtr[i]; // parent types first + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScTableSheetObj::getImplementationId() throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +// Hilfsfunktionen + +USHORT ScTableSheetObj::GetTab_Impl() const +{ + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT(rRanges.Count() == 1, "was fuer Ranges ?!?!"); + const ScRange* pFirst = rRanges.GetObject(0); + if (pFirst) + return pFirst->aStart.Tab(); + + return 0; // soll nicht sein +} + +// former XSheet + +uno::Reference<table::XTableCharts> SAL_CALL ScTableSheetObj::getCharts() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + return new ScChartsObj( pDocSh, GetTab_Impl() ); + + DBG_ERROR("kein Dokument"); + return NULL; +} + +uno::Reference<sheet::XDataPilotTables> SAL_CALL ScTableSheetObj::getDataPilotTables() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + return new ScDataPilotTablesObj( pDocSh, GetTab_Impl() ); + + DBG_ERROR("kein Dokument"); + return NULL; +} + +uno::Reference<sheet::XScenarios> SAL_CALL ScTableSheetObj::getScenarios() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + + if ( pDocSh ) + return new ScScenariosObj( pDocSh, GetTab_Impl() ); + + DBG_ERROR("kein Dokument"); + return NULL; +} + +uno::Reference<sheet::XSheetAnnotations> SAL_CALL ScTableSheetObj::getAnnotations() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + + if ( pDocSh ) + return new ScAnnotationsObj( pDocSh, GetTab_Impl() ); + + DBG_ERROR("kein Dokument"); + return NULL; +} + +uno::Reference<table::XCellRange> SAL_CALL ScTableSheetObj::getCellRangeByName( + const ::rtl::OUString& aRange ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ScCellRangeObj::getCellRangeByName( aRange ); +} + +uno::Reference<sheet::XSheetCellCursor> SAL_CALL ScTableSheetObj::createCursor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + //! einzelne Zelle oder ganze Tabelle??????? + USHORT nTab = GetTab_Impl(); + return new ScCellCursorObj( pDocSh, ScRange( 0,0,nTab, MAXCOL,MAXROW,nTab ) ); + } + return NULL; +} + +uno::Reference<sheet::XSheetCellCursor> SAL_CALL ScTableSheetObj::createCursorByRange( + const uno::Reference<sheet::XSheetCellRange>& aRange ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh && aRange.is() ) + { + ScCellRangesBase* pRangesImp = ScCellRangesBase::getImplementation( aRange ); + if (pRangesImp) + { + const ScRangeList& rRanges = pRangesImp->GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + return new ScCellCursorObj( pDocSh, *rRanges.GetObject(0) ); + } + } + return NULL; +} + +// XSheetCellRange + +uno::Reference<sheet::XSpreadsheet> SAL_CALL ScTableSheetObj::getSpreadsheet() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return this; //!??? +} + +// XCellRange + +uno::Reference<table::XCell> SAL_CALL ScTableSheetObj::getCellByPosition( + sal_Int32 nColumn, sal_Int32 nRow ) + throw(lang::IndexOutOfBoundsException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ScCellRangeObj::GetCellByPosition_Impl(nColumn, nRow); +} + +uno::Reference<table::XCellRange> SAL_CALL ScTableSheetObj::getCellRangeByPosition( + sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom ) + throw(lang::IndexOutOfBoundsException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ScCellRangeObj::getCellRangeByPosition(nLeft,nTop,nRight,nBottom); +} + +uno::Sequence<sheet::TablePageBreakData> SAL_CALL ScTableSheetObj::getColumnPageBreaks() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + Size aSize = pDoc->GetPageSize( nTab ); + if (aSize.Width() && aSize.Height()) // effektive Groesse schon gesetzt? + pDoc->UpdatePageBreaks( nTab ); + else + { + // Umbrueche updaten wie in ScDocShell::PageStyleModified: + ScPrintFunc aPrintFunc( pDocSh, pDocSh->GetPrinter(), nTab ); + aPrintFunc.UpdatePages(); + } + + USHORT nCount = 0; + USHORT nCol; + for (nCol=0; nCol<=MAXCOL; nCol++) + if (pDoc->GetColFlags( nCol, nTab ) & ( CR_PAGEBREAK | CR_MANUALBREAK )) + ++nCount; + + sheet::TablePageBreakData aData; + uno::Sequence<sheet::TablePageBreakData> aSeq(nCount); + sheet::TablePageBreakData* pAry = aSeq.getArray(); + USHORT nPos = 0; + for (nCol=0; nCol<=MAXCOL; nCol++) + { + BYTE nFlags = pDoc->GetColFlags( nCol, nTab ); + if (nFlags & ( CR_PAGEBREAK | CR_MANUALBREAK )) + { + aData.Position = nCol; + aData.ManualBreak = ( nFlags & CR_MANUALBREAK ) != 0; + pAry[nPos] = aData; + ++nPos; + } + } + return aSeq; + } + return uno::Sequence<sheet::TablePageBreakData>(0); +} + +uno::Sequence<sheet::TablePageBreakData> SAL_CALL ScTableSheetObj::getRowPageBreaks() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + Size aSize = pDoc->GetPageSize( nTab ); + if (aSize.Width() && aSize.Height()) // effektive Groesse schon gesetzt? + pDoc->UpdatePageBreaks( nTab ); + else + { + // Umbrueche updaten wie in ScDocShell::PageStyleModified: + ScPrintFunc aPrintFunc( pDocSh, pDocSh->GetPrinter(), nTab ); + aPrintFunc.UpdatePages(); + } + + USHORT nCount = 0; + USHORT nRow; + for (nRow=0; nRow<=MAXROW; nRow++) + if (pDoc->GetRowFlags( nRow, nTab ) & ( CR_PAGEBREAK | CR_MANUALBREAK )) + ++nCount; + + sheet::TablePageBreakData aData; + uno::Sequence<sheet::TablePageBreakData> aSeq(nCount); + sheet::TablePageBreakData* pAry = aSeq.getArray(); + USHORT nPos = 0; + for (nRow=0; nRow<=MAXROW; nRow++) + { + BYTE nFlags = pDoc->GetRowFlags( nRow, nTab ); + if (nFlags & ( CR_PAGEBREAK | CR_MANUALBREAK )) + { + aData.Position = nRow; + aData.ManualBreak = ( nFlags & CR_MANUALBREAK ) != 0; + pAry[nPos] = aData; + ++nPos; + } + } + return aSeq; + } + return uno::Sequence<sheet::TablePageBreakData>(0); +} + +void SAL_CALL ScTableSheetObj::removeAllManualPageBreaks() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + //! docfunc Funktion, auch fuer ScViewFunc::RemoveManualBreaks + + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + pDoc->RemoveManualBreaks(nTab); + pDoc->UpdatePageBreaks(nTab); + + //? UpdatePageBreakData( TRUE ); + pDocSh->SetDocumentModified(); + pDocSh->PostPaint( 0,0,nTab, MAXCOL,MAXROW,nTab, PAINT_GRID ); + } +} + +// XNamed + +::rtl::OUString SAL_CALL ScTableSheetObj::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aName; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + pDocSh->GetDocument()->GetName( GetTab_Impl(), aName ); + return aName; +} + +void SAL_CALL ScTableSheetObj::setName( const ::rtl::OUString& aNewName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + String aString = aNewName; + ScDocFunc aFunc( *pDocSh ); + aFunc.RenameTable( GetTab_Impl(), aString, TRUE, TRUE ); + } +} + +// XDrawPageSupplier + +uno::Reference<drawing::XDrawPage> SAL_CALL ScTableSheetObj::getDrawPage() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDrawLayer* pDrawLayer = pDocSh->MakeDrawLayer(); + DBG_ASSERT(pDrawLayer,"kann Draw-Layer nicht anlegen"); + + USHORT nTab = GetTab_Impl(); + SdrPage* pPage = pDrawLayer->GetPage(nTab); + DBG_ASSERT(pPage,"Draw-Page nicht gefunden"); + if (pPage) + return uno::Reference<drawing::XDrawPage> (pPage->getUnoPage(), uno::UNO_QUERY); + + // Das DrawPage-Objekt meldet sich als Listener am SdrModel an + // und sollte von dort alle Aktionen mitbekommen + } + return NULL; +} + +// XCellMovement + +void SAL_CALL ScTableSheetObj::insertCells( const table::CellRangeAddress& aRange, + sheet::CellInsertMode nMode ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + BOOL bDo = TRUE; + InsCellCmd eCmd; + switch (nMode) + { + case sheet::CellInsertMode_NONE: bDo = FALSE; break; + case sheet::CellInsertMode_DOWN: eCmd = INS_CELLSDOWN; break; + case sheet::CellInsertMode_RIGHT: eCmd = INS_CELLSRIGHT; break; + case sheet::CellInsertMode_ROWS: eCmd = INS_INSROWS; break; + case sheet::CellInsertMode_COLUMNS: eCmd = INS_INSCOLS; break; + default: + DBG_ERROR("insertCells: falscher Mode"); + bDo = FALSE; + } + + if (bDo) + { + DBG_ASSERT( aRange.Sheet == GetTab_Impl(), "falsche Tabelle in CellRangeAddress" ); + ScRange aScRange; + ScUnoConversion::FillScRange( aScRange, aRange ); + ScDocFunc aFunc(*pDocSh); + aFunc.InsertCells( aScRange, eCmd, TRUE, TRUE ); + } + } +} + +void SAL_CALL ScTableSheetObj::removeRange( const table::CellRangeAddress& aRange, + sheet::CellDeleteMode nMode ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + BOOL bDo = TRUE; + DelCellCmd eCmd; + switch (nMode) + { + case sheet::CellDeleteMode_NONE: bDo = FALSE; break; + case sheet::CellDeleteMode_UP: eCmd = DEL_CELLSUP; break; + case sheet::CellDeleteMode_LEFT: eCmd = DEL_CELLSLEFT; break; + case sheet::CellDeleteMode_ROWS: eCmd = DEL_DELROWS; break; + case sheet::CellDeleteMode_COLUMNS: eCmd = DEL_DELCOLS; break; + default: + DBG_ERROR("deleteCells: falscher Mode"); + bDo = FALSE; + } + + if (bDo) + { + DBG_ASSERT( aRange.Sheet == GetTab_Impl(), "falsche Tabelle in CellRangeAddress" ); + ScRange aScRange; + ScUnoConversion::FillScRange( aScRange, aRange ); + ScDocFunc aFunc(*pDocSh); + aFunc.DeleteCells( aScRange, eCmd, TRUE, TRUE ); + } + } +} + +void SAL_CALL ScTableSheetObj::moveRange( const table::CellAddress& aDestination, + const table::CellRangeAddress& aSource ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + DBG_ASSERT( aSource.Sheet == GetTab_Impl(), "falsche Tabelle in CellRangeAddress" ); + ScRange aRange; + ScUnoConversion::FillScRange( aRange, aSource ); + ScAddress aDestPos( (USHORT)aDestination.Column, (USHORT)aDestination.Row, aDestination.Sheet ); + ScDocFunc aFunc(*pDocSh); + aFunc.MoveBlock( aRange, aDestPos, TRUE, TRUE, TRUE, TRUE ); + } +} + +void SAL_CALL ScTableSheetObj::copyRange( const table::CellAddress& aDestination, + const table::CellRangeAddress& aSource ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + DBG_ASSERT( aSource.Sheet == GetTab_Impl(), "falsche Tabelle in CellRangeAddress" ); + ScRange aRange; + ScUnoConversion::FillScRange( aRange, aSource ); + ScAddress aDestPos( (USHORT)aDestination.Column, (USHORT)aDestination.Row, aDestination.Sheet ); + ScDocFunc aFunc(*pDocSh); + aFunc.MoveBlock( aRange, aDestPos, FALSE, TRUE, TRUE, TRUE ); + } +} + +// XPrintAreas + +void ScTableSheetObj::PrintAreaUndo_Impl( ScPrintRangeSaver* pOldRanges ) +{ + // Umbrueche und Undo + + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + pDoc->CreatePrintRangeSaver(); + ScPrintFunc( pDocSh, pDocSh->GetPrinter(), nTab ).UpdatePages(); + pDocSh->SetDocumentModified(); + } + else + delete pOldRanges; +} + +uno::Sequence<table::CellRangeAddress> SAL_CALL ScTableSheetObj::getPrintAreas() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + USHORT nCount = pDoc->GetPrintRangeCount( nTab ); + + table::CellRangeAddress aRangeAddress; + uno::Sequence<table::CellRangeAddress> aSeq(nCount); + table::CellRangeAddress* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + { + const ScRange* pRange = pDoc->GetPrintRange( nTab, i ); + DBG_ASSERT(pRange,"wo ist der Druckbereich"); + if (pRange) + { + ScUnoConversion::FillApiRange( aRangeAddress, *pRange ); + pAry[i] = aRangeAddress; + } + } + return aSeq; + } + return uno::Sequence<table::CellRangeAddress>(); +} + +void SAL_CALL ScTableSheetObj::setPrintAreas( + const uno::Sequence<table::CellRangeAddress>& aPrintAreas ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + ScPrintRangeSaver* pOldRanges = pDoc->CreatePrintRangeSaver(); + + USHORT nCount = (USHORT) aPrintAreas.getLength(); + pDoc->SetPrintRangeCount( nTab, nCount ); + if (nCount) + { + ScRange aRange; + const table::CellRangeAddress* pAry = aPrintAreas.getConstArray(); + for (USHORT i=0; i<nCount; i++) + { + ScUnoConversion::FillScRange( aRange, pAry[i] ); + pDoc->SetPrintRange( nTab, i, aRange ); + } + } + + PrintAreaUndo_Impl( pOldRanges ); // Undo, Umbrueche, Modified etc. + } +} + +sal_Bool SAL_CALL ScTableSheetObj::getPrintTitleColumns() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + return ( pDoc->GetRepeatColRange(nTab) != NULL ); + } + return FALSE; +} + +void SAL_CALL ScTableSheetObj::setPrintTitleColumns( sal_Bool bPrintTitleColumns ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + ScPrintRangeSaver* pOldRanges = pDoc->CreatePrintRangeSaver(); + + if ( bPrintTitleColumns ) + { + if ( !pDoc->GetRepeatColRange( nTab ) ) // keinen bestehenden Bereich veraendern + { + ScRange aNew( 0, 0, nTab, 0, 0, nTab ); // Default + pDoc->SetRepeatColRange( nTab, &aNew ); // einschalten + } + } + else + pDoc->SetRepeatColRange( nTab, NULL ); // abschalten + + PrintAreaUndo_Impl( pOldRanges ); // Undo, Umbrueche, Modified etc. + + //! zuletzt gesetzten Bereich beim Abschalten merken und beim Einschalten wiederherstellen ??? + } +} + +table::CellRangeAddress SAL_CALL ScTableSheetObj::getTitleColumns() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellRangeAddress aRet; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + const ScRange* pRange = pDoc->GetRepeatColRange(nTab); + if (pRange) + ScUnoConversion::FillApiRange( aRet, *pRange ); + } + return aRet; +} + +void SAL_CALL ScTableSheetObj::setTitleColumns( const table::CellRangeAddress& aTitleColumns ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + ScPrintRangeSaver* pOldRanges = pDoc->CreatePrintRangeSaver(); + + ScRange aNew; + ScUnoConversion::FillScRange( aNew, aTitleColumns ); + pDoc->SetRepeatColRange( nTab, &aNew ); // immer auch einschalten + + PrintAreaUndo_Impl( pOldRanges ); // Undo, Umbrueche, Modified etc. + } +} + +sal_Bool SAL_CALL ScTableSheetObj::getPrintTitleRows() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + return ( pDoc->GetRepeatRowRange(nTab) != NULL ); + } + return FALSE; +} + +void SAL_CALL ScTableSheetObj::setPrintTitleRows( sal_Bool bPrintTitleRows ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + ScPrintRangeSaver* pOldRanges = pDoc->CreatePrintRangeSaver(); + + if ( bPrintTitleRows ) + { + if ( !pDoc->GetRepeatRowRange( nTab ) ) // keinen bestehenden Bereich veraendern + { + ScRange aNew( 0, 0, nTab, 0, 0, nTab ); // Default + pDoc->SetRepeatRowRange( nTab, &aNew ); // einschalten + } + } + else + pDoc->SetRepeatRowRange( nTab, NULL ); // abschalten + + PrintAreaUndo_Impl( pOldRanges ); // Undo, Umbrueche, Modified etc. + + //! zuletzt gesetzten Bereich beim Abschalten merken und beim Einschalten wiederherstellen ??? + } +} + +table::CellRangeAddress SAL_CALL ScTableSheetObj::getTitleRows() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellRangeAddress aRet; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + const ScRange* pRange = pDoc->GetRepeatRowRange(nTab); + if (pRange) + ScUnoConversion::FillApiRange( aRet, *pRange ); + } + return aRet; +} + +void SAL_CALL ScTableSheetObj::setTitleRows( const table::CellRangeAddress& aTitleRows ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + ScPrintRangeSaver* pOldRanges = pDoc->CreatePrintRangeSaver(); + + ScRange aNew; + ScUnoConversion::FillScRange( aNew, aTitleRows ); + pDoc->SetRepeatRowRange( nTab, &aNew ); // immer auch einschalten + + PrintAreaUndo_Impl( pOldRanges ); // Undo, Umbrueche, Modified etc. + } +} + +// XSheetLinkable + +sheet::SheetLinkMode SAL_CALL ScTableSheetObj::getLinkMode() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + sheet::SheetLinkMode eRet = sheet::SheetLinkMode_NONE; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + BYTE nMode = pDocSh->GetDocument()->GetLinkMode( GetTab_Impl() ); + if ( nMode == SC_LINK_NORMAL ) + eRet = sheet::SheetLinkMode_NORMAL; + else if ( nMode == SC_LINK_VALUE ) + eRet = sheet::SheetLinkMode_VALUE; + } + return eRet; +} + +void SAL_CALL ScTableSheetObj::setLinkMode( sheet::SheetLinkMode nLinkMode ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! Filter und Options aus altem Link suchen + + ::rtl::OUString aUrl = getLinkUrl(); + ::rtl::OUString aSheet = getLinkSheetName(); + + ::rtl::OUString aEmpty; + link( aUrl, aSheet, aEmpty, aEmpty, nLinkMode ); +} + +::rtl::OUString SAL_CALL ScTableSheetObj::getLinkUrl() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aFile; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + aFile = pDocSh->GetDocument()->GetLinkDoc( GetTab_Impl() ); + return aFile; +} + +void SAL_CALL ScTableSheetObj::setLinkUrl( const ::rtl::OUString& aLinkUrl ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! Filter und Options aus altem Link suchen + + sheet::SheetLinkMode eMode = getLinkMode(); + ::rtl::OUString aSheet = getLinkSheetName(); + + ::rtl::OUString aEmpty; + link( aLinkUrl, aSheet, aEmpty, aEmpty, eMode ); +} + +::rtl::OUString SAL_CALL ScTableSheetObj::getLinkSheetName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aSheet; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + aSheet = pDocSh->GetDocument()->GetLinkTab( GetTab_Impl() ); + return aSheet; +} + +void SAL_CALL ScTableSheetObj::setLinkSheetName( const ::rtl::OUString& aLinkSheetName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! Filter und Options aus altem Link suchen + + sheet::SheetLinkMode eMode = getLinkMode(); + ::rtl::OUString aUrl = getLinkUrl(); + + ::rtl::OUString aEmpty; + link( aUrl, aLinkSheetName, aEmpty, aEmpty, eMode ); +} + +void SAL_CALL ScTableSheetObj::link( const ::rtl::OUString& aUrl, const ::rtl::OUString& aSheetName, + const ::rtl::OUString& aFilterName, const ::rtl::OUString& aFilterOptions, + sheet::SheetLinkMode nMode ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + String aFileString = aUrl; + String aFilterString = aFilterName; + String aOptString = aFilterOptions; + String aSheetString = aSheetName; + + aFileString = ScGlobal::GetAbsDocName( aFileString, pDocSh ); + if ( !aFilterString.Len() ) + ScDocumentLoader::GetFilterName( aFileString, aFilterString, aOptString ); + + // remove application prefix from filter name here, so the filter options + // aren't reset when the filter name is changed in ScTableLink::DataChanged + ScDocumentLoader::RemoveAppPrefix( aFilterString ); + + BYTE nLinkMode = SC_LINK_NONE; + if ( nMode == sheet::SheetLinkMode_NORMAL ) + nLinkMode = SC_LINK_NORMAL; + else if ( nMode == sheet::SheetLinkMode_VALUE ) + nLinkMode = SC_LINK_VALUE; + + ULONG nRefresh = 0; + pDoc->SetLink( nTab, nLinkMode, aFileString, aFilterString, aOptString, aSheetString, nRefresh ); + + pDocSh->UpdateLinks(); // ggf. Link eintragen oder loeschen + + //! Undo fuer Link-Daten an der Table + + if ( nLinkMode != SC_LINK_NONE ) // Link updaten + { + // Update immer, auch wenn der Link schon da war + //! Update nur fuer die betroffene Tabelle??? + + SvxLinkManager* pLinkManager = pDoc->GetLinkManager(); + USHORT nCount = pLinkManager->GetLinks().Count(); + for ( USHORT i=0; i<nCount; i++ ) + { + ::binfilter::SvBaseLink* pBase = *pLinkManager->GetLinks()[i]; + if (pBase->ISA(ScTableLink)) + { + ScTableLink* pTabLink = (ScTableLink*)pBase; + if ( pTabLink->GetFileName() == aFileString ) + pTabLink->Update(); // inkl. Paint&Undo + + //! Der Dateiname sollte nur einmal vorkommen (?) + } + } + } + + //! Notify fuer ScSheetLinkObj Objekte!!! + } +} + +// XSheetAuditing + +sal_Bool SAL_CALL ScTableSheetObj::hideDependents( const table::CellAddress& aPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + USHORT nTab = GetTab_Impl(); + DBG_ASSERT( aPosition.Sheet == nTab, "falsche Tabelle in CellAddress" ); + ScAddress aPos( (USHORT)aPosition.Column, (USHORT)aPosition.Row, nTab ); + ScDocFunc aFunc(*pDocSh); + return aFunc.DetectiveDelSucc( aPos ); + } + return FALSE; +} + +sal_Bool SAL_CALL ScTableSheetObj::hidePrecedents( const table::CellAddress& aPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + USHORT nTab = GetTab_Impl(); + DBG_ASSERT( aPosition.Sheet == nTab, "falsche Tabelle in CellAddress" ); + ScAddress aPos( (USHORT)aPosition.Column, (USHORT)aPosition.Row, nTab ); + ScDocFunc aFunc(*pDocSh); + return aFunc.DetectiveDelPred( aPos ); + } + return FALSE; +} + +sal_Bool SAL_CALL ScTableSheetObj::showDependents( const table::CellAddress& aPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + USHORT nTab = GetTab_Impl(); + DBG_ASSERT( aPosition.Sheet == nTab, "falsche Tabelle in CellAddress" ); + ScAddress aPos( (USHORT)aPosition.Column, (USHORT)aPosition.Row, nTab ); + ScDocFunc aFunc(*pDocSh); + return aFunc.DetectiveAddSucc( aPos ); + } + return FALSE; +} + +sal_Bool SAL_CALL ScTableSheetObj::showPrecedents( const table::CellAddress& aPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + USHORT nTab = GetTab_Impl(); + DBG_ASSERT( aPosition.Sheet == nTab, "falsche Tabelle in CellAddress" ); + ScAddress aPos( (USHORT)aPosition.Column, (USHORT)aPosition.Row, nTab ); + ScDocFunc aFunc(*pDocSh); + return aFunc.DetectiveAddPred( aPos ); + } + return FALSE; +} + +sal_Bool SAL_CALL ScTableSheetObj::showErrors( const table::CellAddress& aPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + USHORT nTab = GetTab_Impl(); + DBG_ASSERT( aPosition.Sheet == nTab, "falsche Tabelle in CellAddress" ); + ScAddress aPos( (USHORT)aPosition.Column, (USHORT)aPosition.Row, nTab ); + ScDocFunc aFunc(*pDocSh); + return aFunc.DetectiveAddError( aPos ); + } + return FALSE; +} + +sal_Bool SAL_CALL ScTableSheetObj::showInvalid() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocFunc aFunc(*pDocSh); + return aFunc.DetectiveMarkInvalid( GetTab_Impl() ); + } + return FALSE; +} + +void SAL_CALL ScTableSheetObj::clearArrows() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocFunc aFunc(*pDocSh); + aFunc.DetectiveDelAll( GetTab_Impl() ); + } +} + +// XSheetOutline + +void SAL_CALL ScTableSheetObj::group( const table::CellRangeAddress& aRange, + table::TableOrientation nOrientation ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + BOOL bColumns = ( nOrientation == table::TableOrientation_COLUMNS ); + ScRange aGroupRange; + ScUnoConversion::FillScRange( aGroupRange, aRange ); + ScOutlineDocFunc aFunc(*pDocSh); + aFunc.MakeOutline( aGroupRange, bColumns, TRUE, TRUE ); + } +} + +void SAL_CALL ScTableSheetObj::ungroup( const table::CellRangeAddress& aRange, + table::TableOrientation nOrientation ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + BOOL bColumns = ( nOrientation == table::TableOrientation_COLUMNS ); + ScRange aGroupRange; + ScUnoConversion::FillScRange( aGroupRange, aRange ); + ScOutlineDocFunc aFunc(*pDocSh); + aFunc.RemoveOutline( aGroupRange, bColumns, TRUE, TRUE ); + } +} + +void SAL_CALL ScTableSheetObj::autoOutline( const table::CellRangeAddress& aRange ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScRange aFormulaRange; + ScUnoConversion::FillScRange( aFormulaRange, aRange ); + ScOutlineDocFunc aFunc(*pDocSh); + aFunc.AutoOutline( aFormulaRange, TRUE, TRUE ); + } +} + +void SAL_CALL ScTableSheetObj::clearOutline() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + USHORT nTab = GetTab_Impl(); + ScOutlineDocFunc aFunc(*pDocSh); + aFunc.RemoveAllOutlines( nTab, TRUE, TRUE ); + } +} + +void SAL_CALL ScTableSheetObj::hideDetail( const table::CellRangeAddress& aRange ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScRange aMarkRange; + ScUnoConversion::FillScRange( aMarkRange, aRange ); + ScOutlineDocFunc aFunc(*pDocSh); + aFunc.HideMarkedOutlines( aMarkRange, TRUE, TRUE ); + } +} + +void SAL_CALL ScTableSheetObj::showDetail( const table::CellRangeAddress& aRange ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScRange aMarkRange; + ScUnoConversion::FillScRange( aMarkRange, aRange ); + ScOutlineDocFunc aFunc(*pDocSh); + aFunc.ShowMarkedOutlines( aMarkRange, TRUE, TRUE ); + } +} + +void SAL_CALL ScTableSheetObj::showLevel( sal_Int16 nLevel, table::TableOrientation nOrientation ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + BOOL bColumns = ( nOrientation == table::TableOrientation_COLUMNS ); + USHORT nTab = GetTab_Impl(); + ScOutlineDocFunc aFunc(*pDocSh); + aFunc.SelectLevel( nTab, bColumns, nLevel, TRUE, TRUE, TRUE ); + } +} + +// XProtectable + +void SAL_CALL ScTableSheetObj::protect( const ::rtl::OUString& aPassword ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + String aString = aPassword; + ScDocFunc aFunc(*pDocSh); + aFunc.Protect( GetTab_Impl(), aString, TRUE ); + } +} + +void SAL_CALL ScTableSheetObj::unprotect( const ::rtl::OUString& aPassword ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + String aString = aPassword; + ScDocFunc aFunc(*pDocSh); + aFunc.Unprotect( GetTab_Impl(), aString, TRUE ); + + //! Rueckgabewert auswerten, Exception oder so + } +} + +sal_Bool SAL_CALL ScTableSheetObj::isProtected() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + return pDocSh->GetDocument()->IsTabProtected( GetTab_Impl() ); + + DBG_ERROR("keine DocShell"); //! Exception oder so? + return FALSE; +} + +// XScenario + +sal_Bool SAL_CALL ScTableSheetObj::getIsScenario() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + return pDocSh->GetDocument()->IsScenario( GetTab_Impl() ); + + return FALSE; +} + +::rtl::OUString SAL_CALL ScTableSheetObj::getScenarioComment() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + String aComment; + Color aColor; + USHORT nFlags; + pDocSh->GetDocument()->GetScenarioData( GetTab_Impl(), aComment, aColor, nFlags ); + return aComment; + } + return ::rtl::OUString(); +} + +void SAL_CALL ScTableSheetObj::setScenarioComment( const ::rtl::OUString& aScenarioComment ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + String aName; + String aComment; + Color aColor; + USHORT nFlags; + pDoc->GetName( nTab, aName ); + pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); + + aComment = String( aScenarioComment ); + + pDocSh->ModifyScenario( nTab, aName, aComment, aColor, nFlags ); + } +} + +void SAL_CALL ScTableSheetObj::addRanges( const uno::Sequence<table::CellRangeAddress>& aRanges ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + ScMarkData aMarkData; + aMarkData.SelectTable( nTab, TRUE ); + + USHORT nRangeCount = (USHORT)aRanges.getLength(); + if (nRangeCount) + { + const table::CellRangeAddress* pAry = aRanges.getConstArray(); + for (USHORT i=0; i<nRangeCount; i++) + { + DBG_ASSERT( pAry[i].Sheet == nTab, "addRanges mit falscher Tab" ); + ScRange aRange( (USHORT)pAry[i].StartColumn, (USHORT)pAry[i].StartRow, nTab, + (USHORT)pAry[i].EndColumn, (USHORT)pAry[i].EndRow, nTab ); + + aMarkData.SetMultiMarkArea( aRange ); + } + } + + // Szenario-Ranges sind durch Attribut gekennzeichnet + ScPatternAttr aPattern( pDoc->GetPool() ); + aPattern.GetItemSet().Put( ScMergeFlagAttr( SC_MF_SCENARIO ) ); + aPattern.GetItemSet().Put( ScProtectionAttr( TRUE ) ); + ScDocFunc aFunc(*pDocSh); + aFunc.ApplyAttributes( aMarkData, aPattern, TRUE, TRUE ); + } +} + +void SAL_CALL ScTableSheetObj::apply() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + String aName; + pDoc->GetName( nTab, aName ); // Name dieses Szenarios + + USHORT nDestTab = nTab; + while ( nDestTab > 0 && pDoc->IsScenario(nDestTab) ) + --nDestTab; + + if ( !pDoc->IsScenario(nDestTab) ) + pDocSh->UseScenario( nDestTab, aName ); + + //! sonst Fehler oder so + } +} + +// XPropertySet erweitert fuer Sheet-Properties + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScTableSheetObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aSheetPropSet.getPropertyMap() ); + return aRef; +} + +void ScTableSheetObj::SetOnePropertyValue( const SfxItemPropertyMap* pMap, const uno::Any& aValue ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + if ( pMap ) + { + if ( IsScItemWid( pMap->nWID ) ) + { + // for Item WIDs, call ScCellRangesBase directly + ScCellRangesBase::SetOnePropertyValue(pMap, aValue); + return; + } + + // own properties + + ScDocShell* pDocSh = GetDocShell(); + if (!pDocSh) + return; //! Exception oder so? + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + ScDocFunc aFunc(*pDocSh); + + if ( pMap->nWID == SC_WID_UNO_PAGESTL ) + { + ::rtl::OUString aStrVal; + aValue >>= aStrVal; + String aNewStr = ScStyleNameConversion::ProgrammaticToDisplayName( + aStrVal, SFX_STYLE_FAMILY_PAGE ); + + //! Undo? (auch bei SID_STYLE_APPLY an der View) + + if ( pDoc->GetPageStyle( nTab ) != aNewStr ) + { + pDoc->SetPageStyle( nTab, aNewStr ); + ScPrintFunc( pDocSh, pDocSh->GetPrinter(), nTab ).UpdatePages(); + pDocSh->SetDocumentModified(); + + } + } + else if ( pMap->nWID == SC_WID_UNO_CELLVIS ) + { + BOOL bVis = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + aFunc.SetTableVisible( nTab, bVis, TRUE ); + } + else + ScCellRangeObj::SetOnePropertyValue(pMap, aValue); // base class, no Item WID + } +} + +void ScTableSheetObj::GetOnePropertyValue( const SfxItemPropertyMap* pMap, + uno::Any& rAny ) + throw(uno::RuntimeException) +{ + if ( pMap ) + { + ScDocShell* pDocSh = GetDocShell(); + if (!pDocSh) + throw uno::RuntimeException(); + ScDocument* pDoc = pDocSh->GetDocument(); + USHORT nTab = GetTab_Impl(); + + if ( pMap->nWID == SC_WID_UNO_PAGESTL ) + { + String aStyle = ScStyleNameConversion::DisplayToProgrammaticName( + pDoc->GetPageStyle( nTab ), SFX_STYLE_FAMILY_PAGE ); + rAny <<= ::rtl::OUString( aStyle ); + } + else if ( pMap->nWID == SC_WID_UNO_CELLVIS ) + { + BOOL bVis = pDoc->IsVisible( nTab ); + ScUnoHelpFunctions::SetBoolInAny( rAny, bVis ); + } + else if ( pMap->nWID == SC_WID_UNO_LINKDISPBIT ) + { + // no target bitmaps for individual entries (would be all equal) + // ScLinkTargetTypeObj::SetLinkTargetBitmap( aAny, SC_LINKTARGETTYPE_SHEET ); + } + else if ( pMap->nWID == SC_WID_UNO_LINKDISPNAME ) + { + // LinkDisplayName for hyperlink dialog + rAny <<= getName(); // sheet name + } + else + ScCellRangeObj::GetOnePropertyValue(pMap, rAny); + } +} + +const SfxItemPropertyMap* ScTableSheetObj::GetItemPropertyMap() +{ + return lcl_GetSheetPropertyMap(); +} + +// XServiceInfo + +::rtl::OUString SAL_CALL ScTableSheetObj::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScTableSheetObj" ); +} + +sal_Bool SAL_CALL ScTableSheetObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr( rServiceName ); + return aServiceStr.EqualsAscii( SCSPREADSHEET_SERVICE ) || + aServiceStr.EqualsAscii( SCSHEETCELLRANGE_SERVICE ) || + aServiceStr.EqualsAscii( SCCELLRANGE_SERVICE ) || + aServiceStr.EqualsAscii( SCCELLPROPERTIES_SERVICE ) || + aServiceStr.EqualsAscii( SCCHARPROPERTIES_SERVICE ) || + aServiceStr.EqualsAscii( SCPARAPROPERTIES_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScTableSheetObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(6); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCSPREADSHEET_SERVICE ); + pArray[1] = ::rtl::OUString::createFromAscii( SCSHEETCELLRANGE_SERVICE ); + pArray[2] = ::rtl::OUString::createFromAscii( SCCELLRANGE_SERVICE ); + pArray[3] = ::rtl::OUString::createFromAscii( SCCELLPROPERTIES_SERVICE ); + pArray[4] = ::rtl::OUString::createFromAscii( SCCHARPROPERTIES_SERVICE ); + pArray[5] = ::rtl::OUString::createFromAscii( SCPARAPROPERTIES_SERVICE ); + return aRet; +} + +// XUnoTunnel + +sal_Int64 SAL_CALL ScTableSheetObj::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + + return ScCellRangeObj::getSomething( rId ); +} + +// static +const uno::Sequence<sal_Int8>& ScTableSheetObj::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScTableSheetObj* ScTableSheetObj::getImplementation( const uno::Reference<uno::XInterface> xObj ) +{ + ScTableSheetObj* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScTableSheetObj*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +//------------------------------------------------------------------------ + +ScTableColumnObj::ScTableColumnObj( ScDocShell* pDocSh, USHORT nCol, USHORT nTab ) : + ScCellRangeObj( pDocSh, ScRange(nCol,0,nTab, nCol,MAXROW,nTab) ), + aColPropSet(lcl_GetColumnPropertyMap()) +{ +} + +ScTableColumnObj::~ScTableColumnObj() +{ +} + +uno::Any SAL_CALL ScTableColumnObj::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( container::XNamed ) + + return ScCellRangeObj::queryInterface( rType ); +} + +void SAL_CALL ScTableColumnObj::acquire() throw() +{ + ScCellRangeObj::acquire(); +} + +void SAL_CALL ScTableColumnObj::release() throw() +{ + ScCellRangeObj::release(); +} + +uno::Sequence<uno::Type> SAL_CALL ScTableColumnObj::getTypes() throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + uno::Sequence<uno::Type> aParentTypes = ScCellRangeObj::getTypes(); + long nParentLen = aParentTypes.getLength(); + const uno::Type* pParentPtr = aParentTypes.getConstArray(); + + aTypes.realloc( nParentLen + 1 ); + uno::Type* pPtr = aTypes.getArray(); + pPtr[nParentLen + 0] = getCppuType((const uno::Reference<container::XNamed>*)0); + + for (long i=0; i<nParentLen; i++) + pPtr[i] = pParentPtr[i]; // parent types first + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScTableColumnObj::getImplementationId() throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +// XNamed + +::rtl::OUString SAL_CALL ScTableColumnObj::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + const ScRange& rRange = GetRange(); + DBG_ASSERT(rRange.aStart.Col() == rRange.aEnd.Col(), "too many columns"); + USHORT nCol = rRange.aStart.Col(); + + return ColToAlpha( nCol ); // from global.hxx +} + +void SAL_CALL ScTableColumnObj::setName( const ::rtl::OUString& aNewName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + throw uno::RuntimeException(); // read-only +} + +// XPropertySet erweitert fuer Spalten-Properties + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScTableColumnObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aColPropSet.getPropertyMap() ); + return aRef; +} + +void ScTableColumnObj::SetOnePropertyValue( const SfxItemPropertyMap* pMap, const uno::Any& aValue ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + if ( pMap ) + { + if ( IsScItemWid( pMap->nWID ) ) + { + // for Item WIDs, call ScCellRangesBase directly + ScCellRangesBase::SetOnePropertyValue(pMap, aValue); + return; + } + + // own properties + + ScDocShell* pDocSh = GetDocShell(); + if (!pDocSh) + return; //! Exception oder so? + ScDocument* pDoc = pDocSh->GetDocument(); + const ScRange& rRange = GetRange(); + DBG_ASSERT(rRange.aStart.Col() == rRange.aEnd.Col(), "zuviele Spalten"); + USHORT nCol = rRange.aStart.Col(); + USHORT nTab = rRange.aStart.Tab(); + ScDocFunc aFunc(*pDocSh); + + USHORT nColArr[2]; + nColArr[0] = nColArr[1] = nCol; + + if ( pMap->nWID == SC_WID_UNO_CELLWID ) + { + sal_Int32 nNewWidth; + if ( aValue >>= nNewWidth ) + { + // property is 1/100mm, column width is twips + nNewWidth = HMMToTwips(nNewWidth); + aFunc.SetWidthOrHeight( TRUE, 1, nColArr, nTab, SC_SIZE_ORIGINAL, + (USHORT)nNewWidth, TRUE, TRUE ); + } + } + else if ( pMap->nWID == SC_WID_UNO_CELLVIS ) + { + BOOL bVis = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + ScSizeMode eMode = bVis ? SC_SIZE_SHOW : SC_SIZE_DIRECT; + aFunc.SetWidthOrHeight( TRUE, 1, nColArr, nTab, eMode, 0, TRUE, TRUE ); + // SC_SIZE_DIRECT mit Groesse 0 blendet aus + } + else if ( pMap->nWID == SC_WID_UNO_OWIDTH ) + { + BOOL bOpt = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + if (bOpt) + aFunc.SetWidthOrHeight( TRUE, 1, nColArr, nTab, + SC_SIZE_OPTIMAL, STD_EXTRA_WIDTH, TRUE, TRUE ); + // FALSE bei Spalten momentan ohne Auswirkung + } + else if ( pMap->nWID == SC_WID_UNO_NEWPAGE || pMap->nWID == SC_WID_UNO_MANPAGE ) + { + BOOL bSet = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + if (bSet) + aFunc.InsertPageBreak( TRUE, rRange.aStart, TRUE, TRUE, TRUE ); + else + aFunc.RemovePageBreak( TRUE, rRange.aStart, TRUE, TRUE, TRUE ); + } + else + ScCellRangeObj::SetOnePropertyValue(pMap, aValue); // base class, no Item WID + } +} + +void ScTableColumnObj::GetOnePropertyValue( const SfxItemPropertyMap* pMap, + uno::Any& rAny ) + throw(uno::RuntimeException) +{ + if ( pMap ) + { + ScDocShell* pDocSh = GetDocShell(); + if (!pDocSh) + throw uno::RuntimeException(); + + ScDocument* pDoc = pDocSh->GetDocument(); + const ScRange& rRange = GetRange(); + DBG_ASSERT(rRange.aStart.Col() == rRange.aEnd.Col(), "zuviele Spalten"); + USHORT nCol = rRange.aStart.Col(); + USHORT nTab = rRange.aStart.Tab(); + + if ( pMap->nWID == SC_WID_UNO_CELLWID ) + { + // for hidden column, return original height + USHORT nWidth = pDoc->GetOriginalWidth( nCol, nTab ); + // property is 1/100mm, column width is twips + nWidth = (USHORT) TwipsToHMM(nWidth); + rAny <<= (sal_Int32)( nWidth ); + } + else if ( pMap->nWID == SC_WID_UNO_CELLVIS ) + { + BOOL bVis = !(pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN); + ScUnoHelpFunctions::SetBoolInAny( rAny, bVis ); + } + else if ( pMap->nWID == SC_WID_UNO_OWIDTH ) + { + //! momentan immer gesetzt ??!?! + BOOL bOpt = !(pDoc->GetColFlags( nCol, nTab ) & CR_MANUALSIZE); + ScUnoHelpFunctions::SetBoolInAny( rAny, bOpt ); + } + else if ( pMap->nWID == SC_WID_UNO_NEWPAGE ) + { + BOOL bBreak = ( 0 != (pDoc->GetColFlags( nCol, nTab ) & (CR_PAGEBREAK|CR_MANUALBREAK)) ); + ScUnoHelpFunctions::SetBoolInAny( rAny, bBreak ); + } + else if ( pMap->nWID == SC_WID_UNO_MANPAGE ) + { + BOOL bBreak = ( 0 != (pDoc->GetColFlags( nCol, nTab ) & (CR_MANUALBREAK)) ); + ScUnoHelpFunctions::SetBoolInAny( rAny, bBreak ); + } + else + ScCellRangeObj::GetOnePropertyValue(pMap, rAny); + } +} + +const SfxItemPropertyMap* ScTableColumnObj::GetItemPropertyMap() +{ + return lcl_GetColumnPropertyMap(); +} + +//------------------------------------------------------------------------ + +ScTableRowObj::ScTableRowObj(ScDocShell* pDocSh, USHORT nRow, USHORT nTab) : + ScCellRangeObj( pDocSh, ScRange(0,nRow,nTab, MAXCOL,nRow,nTab) ), + aRowPropSet(lcl_GetRowPropertyMap()) +{ +} + +ScTableRowObj::~ScTableRowObj() +{ +} + +// XPropertySet erweitert fuer Zeilen-Properties + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScTableRowObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aRowPropSet.getPropertyMap() ); + return aRef; +} + +void ScTableRowObj::SetOnePropertyValue( const SfxItemPropertyMap* pMap, const uno::Any& aValue ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + if ( pMap ) + { + if ( IsScItemWid( pMap->nWID ) ) + { + // for Item WIDs, call ScCellRangesBase directly + ScCellRangesBase::SetOnePropertyValue(pMap, aValue); + return; + } + + // own properties + + ScDocShell* pDocSh = GetDocShell(); + if (!pDocSh) + return; //! Exception oder so? + ScDocument* pDoc = pDocSh->GetDocument(); + const ScRange& rRange = GetRange(); + DBG_ASSERT(rRange.aStart.Row() == rRange.aEnd.Row(), "zuviele Zeilen"); + USHORT nRow = rRange.aStart.Row(); + USHORT nTab = rRange.aStart.Tab(); + ScDocFunc aFunc(*pDocSh); + + USHORT nRowArr[2]; + nRowArr[0] = nRowArr[1] = nRow; + + if ( pMap->nWID == SC_WID_UNO_CELLHGT ) + { + sal_Int32 nNewHeight; + if ( aValue >>= nNewHeight ) + { + // property is 1/100mm, row height is twips + nNewHeight = HMMToTwips(nNewHeight); + aFunc.SetWidthOrHeight( FALSE, 1, nRowArr, nTab, SC_SIZE_ORIGINAL, + (USHORT)nNewHeight, TRUE, TRUE ); + } + } + else if ( pMap->nWID == SC_WID_UNO_CELLVIS ) + { + BOOL bVis = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + ScSizeMode eMode = bVis ? SC_SIZE_SHOW : SC_SIZE_DIRECT; + aFunc.SetWidthOrHeight( FALSE, 1, nRowArr, nTab, eMode, 0, TRUE, TRUE ); + // SC_SIZE_DIRECT mit Groesse 0 blendet aus + } + else if ( pMap->nWID == SC_WID_UNO_CELLFILT ) + { + BOOL bFil = ScUnoHelpFunctions::GetBoolFromAny( aValue ); +// ScSizeMode eMode = bVis ? SC_SIZE_SHOW : SC_SIZE_DIRECT; +// aFunc.SetWidthOrHeight( FALSE, 1, nRowArr, nTab, eMode, 0, TRUE, TRUE ); + // SC_SIZE_DIRECT mit Groesse 0 blendet aus + BYTE nFlags = pDoc->GetRowFlags(nRow, nTab); + if (bFil) + nFlags |= CR_FILTERED; + else + nFlags &= ~CR_FILTERED; + pDoc->SetRowFlags(nRow, nTab, nFlags); + } + else if ( pMap->nWID == SC_WID_UNO_OHEIGHT ) + { + BOOL bOpt = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + if (bOpt) + aFunc.SetWidthOrHeight( FALSE, 1, nRowArr, nTab, SC_SIZE_OPTIMAL, 0, TRUE, TRUE ); + else + { + // set current height again manually + USHORT nHeight = pDoc->GetOriginalHeight( nRow, nTab ); + aFunc.SetWidthOrHeight( FALSE, 1, nRowArr, nTab, SC_SIZE_ORIGINAL, nHeight, TRUE, TRUE ); + } + } + else if ( pMap->nWID == SC_WID_UNO_NEWPAGE || pMap->nWID == SC_WID_UNO_MANPAGE ) + { + BOOL bSet = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + if (bSet) + aFunc.InsertPageBreak( FALSE, rRange.aStart, TRUE, TRUE, TRUE ); + else + aFunc.RemovePageBreak( FALSE, rRange.aStart, TRUE, TRUE, TRUE ); + } + else + ScCellRangeObj::SetOnePropertyValue(pMap, aValue); // base class, no Item WID + } +} + +void ScTableRowObj::GetOnePropertyValue( const SfxItemPropertyMap* pMap, + uno::Any& rAny ) + throw(uno::RuntimeException) +{ + if ( pMap ) + { + ScDocShell* pDocSh = GetDocShell(); + if (!pDocSh) + throw uno::RuntimeException(); + ScDocument* pDoc = pDocSh->GetDocument(); + const ScRange& rRange = GetRange(); + DBG_ASSERT(rRange.aStart.Row() == rRange.aEnd.Row(), "zuviele Zeilen"); + USHORT nRow = rRange.aStart.Row(); + USHORT nTab = rRange.aStart.Tab(); + + if ( pMap->nWID == SC_WID_UNO_CELLHGT ) + { + // for hidden row, return original height + USHORT nHeight = pDoc->GetOriginalHeight( nRow, nTab ); + // property is 1/100mm, row height is twips + nHeight = (USHORT) TwipsToHMM(nHeight); + rAny <<= (sal_Int32)( nHeight ); + } + else if ( pMap->nWID == SC_WID_UNO_CELLVIS ) + { + BOOL bVis = !(pDoc->GetRowFlags( nRow, nTab ) & CR_HIDDEN); + ScUnoHelpFunctions::SetBoolInAny( rAny, bVis ); + } + else if ( pMap->nWID == SC_WID_UNO_CELLFILT ) + { + BOOL bVis = ((pDoc->GetRowFlags( nRow, nTab ) & CR_FILTERED) != 0); + ScUnoHelpFunctions::SetBoolInAny( rAny, bVis ); + } + else if ( pMap->nWID == SC_WID_UNO_OHEIGHT ) + { + BOOL bOpt = !(pDoc->GetRowFlags( nRow, nTab ) & CR_MANUALSIZE); + ScUnoHelpFunctions::SetBoolInAny( rAny, bOpt ); + } + else if ( pMap->nWID == SC_WID_UNO_NEWPAGE ) + { + BOOL bBreak = ( 0 != (pDoc->GetRowFlags( nRow, nTab ) & (CR_PAGEBREAK|CR_MANUALBREAK)) ); + ScUnoHelpFunctions::SetBoolInAny( rAny, bBreak ); + } + else if ( pMap->nWID == SC_WID_UNO_MANPAGE ) + { + BOOL bBreak = ( 0 != (pDoc->GetRowFlags( nRow, nTab ) & (CR_MANUALBREAK)) ); + ScUnoHelpFunctions::SetBoolInAny( rAny, bBreak ); + } + else + ScCellRangeObj::GetOnePropertyValue(pMap, rAny); + } +} + +const SfxItemPropertyMap* ScTableRowObj::GetItemPropertyMap() +{ + return lcl_GetRowPropertyMap(); +} + +//------------------------------------------------------------------------ + +ScCellsObj::ScCellsObj(ScDocShell* pDocSh, const ScRangeList& rR) : + pDocShell( pDocSh ), + aRanges( rR ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScCellsObj::~ScCellsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScCellsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; + aRanges.UpdateReference( rRef.GetMode(), pDocShell->GetDocument(), rRef.GetRange(), + rRef.GetDx(), rRef.GetDy(), rRef.GetDz() ); + } + else if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScCellsObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return new ScCellsEnumeration( pDocShell, aRanges ); + return NULL; +} + +uno::Type SAL_CALL ScCellsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<table::XCell>*)0); +} + +sal_Bool SAL_CALL ScCellsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bHas = FALSE; + if ( pDocShell ) + { + //! schneller selber testen? + + uno::Reference<container::XEnumeration> xEnum = new ScCellsEnumeration( pDocShell, aRanges ); + bHas = xEnum->hasMoreElements(); + } + return bHas; +} + +//------------------------------------------------------------------------ + +ScCellsEnumeration::ScCellsEnumeration(ScDocShell* pDocSh, const ScRangeList& rR) : + pDocShell( pDocSh ), + aRanges( rR ), + bAtEnd( FALSE ), + pMark( NULL ) +{ + ScDocument* pDoc = pDocShell->GetDocument(); + pDoc->AddUnoObject(*this); + + if ( aRanges.Count() == 0 ) + bAtEnd = TRUE; + else + { + USHORT nTab = 0; + const ScRange* pFirst = aRanges.GetObject(0); + if (pFirst) + nTab = pFirst->aStart.Tab(); + aPos = ScAddress(0,0,nTab); + CheckPos_Impl(); // aPos auf erste passende Zelle setzen + } +} + +void ScCellsEnumeration::CheckPos_Impl() +{ + if (pDocShell) + { + BOOL bFound = FALSE; + ScDocument* pDoc = pDocShell->GetDocument(); + ScBaseCell* pCell = pDoc->GetCell(aPos); + if ( pCell && pCell->GetCellType() != CELLTYPE_NOTE ) + { + if (!pMark) + { + pMark = new ScMarkData; + pMark->MarkFromRangeList( aRanges, FALSE ); + pMark->MarkToMulti(); // needed for GetNextMarkedCell + } + bFound = pMark->IsCellMarked( aPos.Col(), aPos.Row() ); + } + if (!bFound) + Advance_Impl(); + } +} + +ScCellsEnumeration::~ScCellsEnumeration() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); + delete pMark; +} + +void ScCellsEnumeration::Advance_Impl() +{ + DBG_ASSERT(!bAtEnd,"zuviel Advance_Impl"); + if (!pMark) + { + pMark = new ScMarkData; + pMark->MarkFromRangeList( aRanges, FALSE ); + pMark->MarkToMulti(); // needed for GetNextMarkedCell + } + + USHORT nCol = aPos.Col(); + USHORT nRow = aPos.Row(); + USHORT nTab = aPos.Tab(); + BOOL bFound = pDocShell->GetDocument()->GetNextMarkedCell( nCol, nRow, nTab, *pMark ); + if (bFound) + aPos.Set( nCol, nRow, nTab ); + else + bAtEnd = TRUE; // kommt nix mehr +} + +void ScCellsEnumeration::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + if (pDocShell) + { + const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; + aRanges.UpdateReference( rRef.GetMode(), pDocShell->GetDocument(), rRef.GetRange(), + rRef.GetDx(), rRef.GetDy(), rRef.GetDz() ); + + delete pMark; // aus verschobenen Bereichen neu erzeugen + pMark = NULL; + + if (!bAtEnd) // aPos anpassen + { + ScRangeList aNew; + aNew.Append(ScRange(aPos)); + aNew.UpdateReference( rRef.GetMode(), pDocShell->GetDocument(), rRef.GetRange(), + rRef.GetDx(), rRef.GetDy(), rRef.GetDz() ); + if (aNew.Count()==1) + { + aPos = aNew.GetObject(0)->aStart; + CheckPos_Impl(); + } + } + } + } + else if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XEnumeration + +sal_Bool SAL_CALL ScCellsEnumeration::hasMoreElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return !bAtEnd; +} + +uno::Any SAL_CALL ScCellsEnumeration::nextElement() throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell && !bAtEnd) + { + // Interface-Typ muss zu ScCellsObj::getElementType passen + + uno::Any aAny; + uno::Reference<table::XCell> xCell = new ScCellObj( pDocShell, aPos ); + aAny <<= xCell; + Advance_Impl(); + return aAny; + } + + throw container::NoSuchElementException(); // no more elements + return uno::Any(); +} + +//------------------------------------------------------------------------ + +ScCellFormatsObj::ScCellFormatsObj(ScDocShell* pDocSh, const ScRange& rRange) : + pDocShell( pDocSh ), + aTotalRange( rRange ) +{ + ScDocument* pDoc = pDocShell->GetDocument(); + pDoc->AddUnoObject(*this); + + DBG_ASSERT( aTotalRange.aStart.Tab() == aTotalRange.aEnd.Tab(), "unterschiedliche Tabellen" ); +} + +ScCellFormatsObj::~ScCellFormatsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScCellFormatsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + //! aTotalRange... + } + else if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +ScCellRangeObj* ScCellFormatsObj::GetObjectByIndex_Impl(long nIndex) const +{ + //! direkt auf die AttrArrays zugreifen !!!! + + ScCellRangeObj* pRet = NULL; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + long nPos = 0; + ScAttrRectIterator aIter( pDoc, aTotalRange.aStart.Tab(), + aTotalRange.aStart.Col(), aTotalRange.aStart.Row(), + aTotalRange.aEnd.Col(), aTotalRange.aEnd.Row() ); + USHORT nCol1, nCol2, nRow1, nRow2; + while ( aIter.GetNext( nCol1, nCol2, nRow1, nRow2 ) ) + { + if ( nPos == nIndex ) + { + USHORT nTab = aTotalRange.aStart.Tab(); + ScRange aNext( nCol1, nRow1, nTab, nCol2, nRow2, nTab ); + + if ( aNext.aStart == aNext.aEnd ) + pRet = new ScCellObj( pDocShell, aNext.aStart ); + else + pRet = new ScCellRangeObj( pDocShell, aNext ); + } + ++nPos; + } + } + return pRet; +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScCellFormatsObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! direkt auf die AttrArrays zugreifen !!!! + + long nCount = 0; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScAttrRectIterator aIter( pDoc, aTotalRange.aStart.Tab(), + aTotalRange.aStart.Col(), aTotalRange.aStart.Row(), + aTotalRange.aEnd.Col(), aTotalRange.aEnd.Row() ); + USHORT nCol1, nCol2, nRow1, nRow2; + while ( aIter.GetNext( nCol1, nCol2, nRow1, nRow2 ) ) + ++nCount; + } + return nCount; +} + +uno::Any SAL_CALL ScCellFormatsObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<table::XCellRange> xRange = GetObjectByIndex_Impl(nIndex); + uno::Any aAny; + if (xRange.is()) + aAny <<= xRange; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScCellFormatsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<table::XCellRange>*)0); +} + +sal_Bool SAL_CALL ScCellFormatsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); //! immer groesser 0 ?? +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScCellFormatsObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return new ScCellFormatsEnumeration( pDocShell, aTotalRange ); + return NULL; +} + +//------------------------------------------------------------------------ + +ScCellFormatsEnumeration::ScCellFormatsEnumeration(ScDocShell* pDocSh, const ScRange& rRange) : + pDocShell( pDocSh ), + nTab( rRange.aStart.Tab() ), + pIter( NULL ), + bAtEnd( FALSE ), + bDirty( FALSE ) +{ + ScDocument* pDoc = pDocShell->GetDocument(); + pDoc->AddUnoObject(*this); + + DBG_ASSERT( rRange.aStart.Tab() == rRange.aEnd.Tab(), + "CellFormatsEnumeration: unterschiedliche Tabellen" ); + + pIter = new ScAttrRectIterator( pDoc, nTab, + rRange.aStart.Col(), rRange.aStart.Row(), + rRange.aEnd.Col(), rRange.aEnd.Row() ); + Advance_Impl(); +} + +ScCellFormatsEnumeration::~ScCellFormatsEnumeration() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); + delete pIter; +} + +void ScCellFormatsEnumeration::Advance_Impl() +{ + DBG_ASSERT(!bAtEnd,"zuviel Advance_Impl"); + + if ( pIter ) + { + if ( bDirty ) + { + pIter->DataChanged(); // AttrArray-Index neu suchen + bDirty = FALSE; + } + + USHORT nCol1, nCol2, nRow1, nRow2; + if ( pIter->GetNext( nCol1, nCol2, nRow1, nRow2 ) ) + aNext = ScRange( nCol1, nRow1, nTab, nCol2, nRow2, nTab ); + else + bAtEnd = TRUE; // kommt nix mehr + } + else + bAtEnd = TRUE; // Dok weggekommen oder so +} + +ScCellRangeObj* ScCellFormatsEnumeration::NextObject_Impl() +{ + ScCellRangeObj* pRet = NULL; + if (pDocShell && !bAtEnd) + { + if ( aNext.aStart == aNext.aEnd ) + pRet = new ScCellObj( pDocShell, aNext.aStart ); + else + pRet = new ScCellRangeObj( pDocShell, aNext ); + Advance_Impl(); + } + return pRet; +} + +void ScCellFormatsEnumeration::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + //! und nun ??? + } + else if ( rHint.ISA( SfxSimpleHint ) ) + { + ULONG nId = ((const SfxSimpleHint&)rHint).GetId(); + if ( nId == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + delete pIter; + pIter = NULL; + } + else if ( nId == SFX_HINT_DATACHANGED ) + { + bDirty = TRUE; // AttrArray-Index evtl. ungueltig geworden + } + } +} + +// XEnumeration + +sal_Bool SAL_CALL ScCellFormatsEnumeration::hasMoreElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return !bAtEnd; +} + +uno::Any SAL_CALL ScCellFormatsEnumeration::nextElement() throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( bAtEnd || !pDocShell ) + throw container::NoSuchElementException(); // no more elements + + // Interface-Typ muss zu ScCellFormatsObj::getElementType passen + + uno::Any aAny; + uno::Reference<table::XCellRange> xRange = NextObject_Impl(); + aAny <<= xRange; + return aAny; +} + +//------------------------------------------------------------------------ + +ScUniqueCellFormatsObj::ScUniqueCellFormatsObj(ScDocShell* pDocSh, const ScRange& rRange) : + pDocShell( pDocSh ), + aTotalRange( rRange ), + aRangeLists() +{ + pDocShell->GetDocument()->AddUnoObject(*this); + + DBG_ASSERT( aTotalRange.aStart.Tab() == aTotalRange.aEnd.Tab(), "unterschiedliche Tabellen" ); + + GetObjects_Impl(); +} + +ScUniqueCellFormatsObj::~ScUniqueCellFormatsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScUniqueCellFormatsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + //! aTotalRange... + } + else if ( rHint.ISA( SfxSimpleHint ) ) + { + ULONG nId = ((const SfxSimpleHint&)rHint).GetId(); + if ( nId == SFX_HINT_DYING ) + pDocShell = NULL; // ungueltig geworden + } +} + +void ScUniqueCellFormatsObj::GetObjects_Impl() +{ + //! direkt auf die AttrArrays zugreifen !!!! + + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + long nPos = 0; + USHORT nTab = aTotalRange.aStart.Tab(); + ScAttrRectIterator aIter( pDoc, nTab, + aTotalRange.aStart.Col(), aTotalRange.aStart.Row(), + aTotalRange.aEnd.Col(), aTotalRange.aEnd.Row() ); + USHORT nCol1, nCol2, nRow1, nRow2; + std::list<ScRange> aList; + ScRange aFirst; + if (aIter.GetNext( nCol1, nCol2, nRow1, nRow2 ) ) + { + aFirst = ScRange( nCol1, nRow1, nTab, nCol2, nRow2, nTab ); + aRangeLists.push_back(ScRangeList()); + aRangeLists[0].Join(aFirst); + } + while ( aIter.GetNext( nCol1, nCol2, nRow1, nRow2 ) ) + { + ScRange aNext( nCol1, nRow1, nTab, nCol2, nRow2, nTab ); + if (pDoc->GetPattern(nCol1, nRow1, nTab) == pDoc->GetPattern(aFirst.aStart.Col(), aFirst.aStart.Row(), aFirst.aStart.Tab()) ) + aRangeLists[0].Join(aNext); + else + aList.push_back(aNext); + } + if (!aList.empty()) + { + std::list<ScRange>::iterator aItr = aList.begin(); + aRangeLists.push_back(ScRangeList()); + sal_Int32 nIndex(1); + aFirst = *aItr; + aRangeLists[nIndex].Join(aFirst); + aItr = aList.erase(aItr); + while (!aList.empty()) + { + if (pDoc->GetPattern(aItr->aStart.Col(), aItr->aStart.Row(), aItr->aStart.Tab()) == + pDoc->GetPattern(aFirst.aStart.Col(), aFirst.aStart.Row(), aFirst.aStart.Tab()) ) + { + aRangeLists[nIndex].Join(*aItr); + aItr = aList.erase(aItr); + } + else + aItr++; + if (aItr == aList.end() && !aList.empty()) + { + aItr = aList.begin(); + aRangeLists.push_back(ScRangeList()); + nIndex++; + aFirst = *aItr; + aRangeLists[nIndex].Join(aFirst); + aItr = aList.erase(aItr); + } + } + } + } +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScUniqueCellFormatsObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + return aRangeLists.size(); +} + +uno::Any SAL_CALL ScUniqueCellFormatsObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Any aAny; + if(static_cast<sal_uInt32>(nIndex) < aRangeLists.size()) + { + uno::Reference<sheet::XSheetCellRangeContainer> xCellRanges = new ScCellRangesObj(pDocShell, aRangeLists[nIndex]); + aAny <<= xCellRanges; + } + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScUniqueCellFormatsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<sheet::XSheetCellRangeContainer>*)0); +} + +sal_Bool SAL_CALL ScUniqueCellFormatsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( aRangeLists.size() != 0 ); +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScUniqueCellFormatsObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return new ScUniqueCellFormatsEnumeration( pDocShell, aRangeLists ); + return NULL; +} + +//------------------------------------------------------------------------ + +ScUniqueCellFormatsEnumeration::ScUniqueCellFormatsEnumeration(ScDocShell* pDocSh, const ScMyRangeLists& rRangeLists) : + pDocShell( pDocSh ), + aRangeLists(rRangeLists), + nCurrentPosition(0) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScUniqueCellFormatsEnumeration::~ScUniqueCellFormatsEnumeration() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScUniqueCellFormatsEnumeration::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + //! und nun ??? + } + else if ( rHint.ISA( SfxSimpleHint ) ) + { + ULONG nId = ((const SfxSimpleHint&)rHint).GetId(); + if ( nId == SFX_HINT_DYING ) + pDocShell = NULL; // ungueltig geworden + } +} + +// XEnumeration + +sal_Bool SAL_CALL ScUniqueCellFormatsEnumeration::hasMoreElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return static_cast<sal_uInt32>(nCurrentPosition + 1) < aRangeLists.size(); +} + +uno::Any SAL_CALL ScUniqueCellFormatsEnumeration::nextElement() throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( !hasMoreElements() || !pDocShell ) + throw container::NoSuchElementException(); // no more elements + + // Interface-Typ muss zu ScCellFormatsObj::getElementType passen + + nCurrentPosition++; + uno::Reference<sheet::XSheetCellRangeContainer> xCellRanges = new ScCellRangesObj(pDocShell, aRangeLists[nCurrentPosition]); + uno::Any aAny; + aAny <<= xCellRanges; + return aAny; +} + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_chartuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_chartuno.cxx new file mode 100644 index 000000000000..1bac6f40464e --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_chartuno.cxx @@ -0,0 +1,630 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <bf_svx/svditer.hxx> +#include <bf_svx/svdoole2.hxx> +#include <bf_svx/svdpage.hxx> +#include <bf_svx/svdundo.hxx> +#include <bf_sch/schdll.hxx> +#include <bf_sch/memchrt.hxx> +#include <bf_sch/schdll0.hxx> +#include <bf_svtools/moduleoptions.hxx> + +#include "chartuno.hxx" +#include "miscuno.hxx" +#include "docsh.hxx" +#include "drwlayer.hxx" +#include "undodat.hxx" +#include "chartarr.hxx" +#include "chartlis.hxx" +#include <vcl/svapp.hxx> +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +SC_SIMPLE_SERVICE_INFO( ScChartObj, "ScChartObj", "com.sun.star.table.TableChart" ) +SC_SIMPLE_SERVICE_INFO( ScChartsObj, "ScChartsObj", "com.sun.star.table.TableCharts" ) + +//------------------------------------------------------------------------ + +SdrOle2Obj* lcl_FindChartObj( ScDocShell* pDocShell, USHORT nTab, const String& rName ) +{ + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer(); + if (pDrawLayer) + { + SdrPage* pPage = pDrawLayer->GetPage(nTab); + DBG_ASSERT(pPage, "Page nicht gefunden"); + if (pPage) + { + SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS ); + SdrObject* pObject = aIter.Next(); + while (pObject) + { + if ( pObject->GetObjIdentifier() == OBJ_OLE2 && pDoc->IsChart(pObject) ) + { + SvInPlaceObjectRef aIPObj = ((SdrOle2Obj*)pObject)->GetObjRef(); + if (aIPObj.Is()) + { + SvInfoObject* pInfoObj = pDocShell->Find( aIPObj ); + if (pInfoObj) + { + if ( pInfoObj->GetObjName() == rName ) + return (SdrOle2Obj*)pObject; + } + } + } + pObject = aIter.Next(); + } + } + } + } + return NULL; +} + +//------------------------------------------------------------------------ + +ScChartsObj::ScChartsObj(ScDocShell* pDocSh, USHORT nT) : + pDocShell( pDocSh ), + nTab( nT ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScChartsObj::~ScChartsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScChartsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + //! Referenz-Update + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +ScChartObj* ScChartsObj::GetObjectByIndex_Impl(long nIndex) const +{ + String aName; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer(); + if (pDrawLayer) + { + SdrPage* pPage = pDrawLayer->GetPage(nTab); + DBG_ASSERT(pPage, "Page nicht gefunden"); + if (pPage) + { + long nPos = 0; + SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS ); + SdrObject* pObject = aIter.Next(); + while (pObject) + { + if ( pObject->GetObjIdentifier() == OBJ_OLE2 && pDoc->IsChart(pObject) ) + { + if ( nPos == nIndex ) + { + SvInPlaceObjectRef aIPObj = ((SdrOle2Obj*)pObject)->GetObjRef(); + if (aIPObj.Is()) + { + SvInfoObject* pInfoObj = pDocShell->Find( aIPObj ); + if (pInfoObj) + aName = pInfoObj->GetObjName(); + } + break; // nicht weitersuchen + } + ++nPos; + } + pObject = aIter.Next(); + } + } + } + } + + if (aName.Len()) + return new ScChartObj( pDocShell, nTab, aName ); + return NULL; +} + +ScChartObj* ScChartsObj::GetObjectByName_Impl(const ::rtl::OUString& aName) const +{ + String aNameString = aName; + if ( lcl_FindChartObj( pDocShell, nTab, aNameString ) ) + return new ScChartObj( pDocShell, nTab, aNameString ); + return NULL; +} + +// XTableCharts + +void SAL_CALL ScChartsObj::addNewByName( const ::rtl::OUString& aName, + const awt::Rectangle& aRect, + const uno::Sequence<table::CellRangeAddress>& aRanges, + sal_Bool bColumnHeaders, sal_Bool bRowHeaders ) + throw(::com::sun::star::uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pDocShell) + return; + + ScDocument* pDoc = pDocShell->GetDocument(); + ScDrawLayer* pModel = pDocShell->MakeDrawLayer(); + SdrPage* pPage = pModel->GetPage(nTab); + DBG_ASSERT(pPage,"addChart: keine Page"); + if (!pPage) + return; + + // chart can't be inserted if any ole object with that name exists on any table + // (empty string: generate valid name) + + String aNameString = aName; + USHORT nDummy; + if ( aNameString.Len() && pModel->GetNamedObject( aNameString, OBJ_OLE2, nDummy ) ) + { + // object exists - only RuntimeException is specified + throw uno::RuntimeException(); + } + + ScRangeList* pList = new ScRangeList; + USHORT nRangeCount = (USHORT)aRanges.getLength(); + if (nRangeCount) + { + const table::CellRangeAddress* pAry = aRanges.getConstArray(); + for (USHORT i=0; i<nRangeCount; i++) + { + ScRange aRange( (USHORT)pAry[i].StartColumn, (USHORT)pAry[i].StartRow, pAry[i].Sheet, + (USHORT)pAry[i].EndColumn, (USHORT)pAry[i].EndRow, pAry[i].Sheet ); + pList->Append( aRange ); + } + } + ScRangeListRef xNewRanges( pList ); + + SvStorageRef aStor = new SvStorage( String() ); + SvInPlaceObjectRef aIPObj; + if ( SvtModuleOptions().IsChart() ) + aIPObj = &((SvFactory*)SvInPlaceObject::ClassFactory())->CreateAndInit( + *SCH_MOD()->pSchChartDocShellFactory, + aStor ); + if ( aIPObj.Is() ) + { + SvEmbeddedInfoObject* pInfoObj = pDocShell->InsertObject( aIPObj, aNameString ); + if ( pInfoObj ) + { + String aObjName = pInfoObj->GetObjName(); // wirklich eingefuegter Name... + + // Rechteck anpassen + //! Fehler/Exception, wenn leer/ungueltig ??? + Point aRectPos( aRect.X, aRect.Y ); + if (aRectPos.X() < 0) aRectPos.X() = 0; + if (aRectPos.Y() < 0) aRectPos.Y() = 0; + Size aRectSize( aRect.Width, aRect.Height ); + if (aRectSize.Width() <= 0) aRectSize.Width() = 5000; // Default-Groesse + if (aRectSize.Height() <= 0) aRectSize.Height() = 5000; + Rectangle aInsRect( aRectPos, aRectSize ); + + Size aSize = aInsRect.GetSize(); + aSize = Window::LogicToLogic( aSize, MapMode( MAP_100TH_MM ), MapMode( aIPObj->GetMapUnit() ) ); + aIPObj->SetVisAreaSize(aSize); + + Window* pWin = NULL; + + ScChartArray aParam( pDoc, xNewRanges, String() ); + aParam.SetHeaders( bColumnHeaders, bRowHeaders ); + SchMemChart* pMemChart = aParam.CreateMemChart(); + SchDLL::Update( aIPObj, pMemChart, pWin ); + delete pMemChart; + + ScChartListener* pChartListener = + new ScChartListener( aObjName, pDoc, xNewRanges ); + pDoc->GetChartListenerCollection()->Insert( pChartListener ); + pChartListener->StartListeningTo(); + + SdrOle2Obj* pObj = new SdrOle2Obj( aIPObj, aObjName, aInsRect ); + + pPage->InsertObject( pObj ); + pModel->AddUndo( new SdrUndoInsertObj( *pObj ) ); //! Undo-Kommentar? + + // Dies veranlaesst Chart zum sofortigen Update + //SvData aEmpty; + //aIPObj->SendDataChanged( aEmpty ); + aIPObj->SendViewChanged(); + } + } +} + +void SAL_CALL ScChartsObj::removeByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aName; + SdrOle2Obj* pObj = lcl_FindChartObj( pDocShell, nTab, aNameString ); + if (pObj) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDrawLayer* pModel = pDoc->GetDrawLayer(); // ist nicht 0 + SdrPage* pPage = pModel->GetPage(nTab); // ist nicht 0 + + pModel->AddUndo( new SdrUndoRemoveObj( *pObj ) ); //! Undo-Kommentar? + pPage->RemoveObject( pObj->GetOrdNum() ); + + //! Notify etc.??? + } +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScChartsObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.table.TableChartsEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScChartsObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + INT32 nCount = 0; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer(); + if (pDrawLayer) + { + SdrPage* pPage = pDrawLayer->GetPage(nTab); + DBG_ASSERT(pPage, "Page nicht gefunden"); + if (pPage) + { + SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS ); + SdrObject* pObject = aIter.Next(); + while (pObject) + { + if ( pObject->GetObjIdentifier() == OBJ_OLE2 && pDoc->IsChart(pObject) ) + ++nCount; + pObject = aIter.Next(); + } + } + } + } + return nCount; +} + +uno::Any SAL_CALL ScChartsObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<table::XTableChart> xChart = GetObjectByIndex_Impl(nIndex); + uno::Any aAny; + if (xChart.is()) + aAny <<= xChart; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScChartsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<table::XTableChart>*)0); +} + +sal_Bool SAL_CALL ScChartsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCount() != 0; +} + +uno::Any SAL_CALL ScChartsObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<table::XTableChart> xChart = GetObjectByName_Impl(aName); + uno::Any aAny; + if (xChart.is()) + aAny <<= xChart; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScChartsObj::getElementNames() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + + long nCount = getCount(); + uno::Sequence< ::rtl::OUString> aSeq(nCount); + ::rtl::OUString* pAry = aSeq.getArray(); + + long nPos = 0; + ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer(); + if (pDrawLayer) + { + SdrPage* pPage = pDrawLayer->GetPage(nTab); + DBG_ASSERT(pPage, "Page nicht gefunden"); + if (pPage) + { + SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS ); + SdrObject* pObject = aIter.Next(); + while (pObject) + { + if ( pObject->GetObjIdentifier() == OBJ_OLE2 && pDoc->IsChart(pObject) ) + { + String aName; + SvInPlaceObjectRef aIPObj = ((SdrOle2Obj*)pObject)->GetObjRef(); + if (aIPObj.Is()) + { + SvInfoObject* pInfoObj = pDocShell->Find( aIPObj ); + if (pInfoObj) + aName = pInfoObj->GetObjName(); + } + DBG_ASSERT(nPos<nCount, "huch, verzaehlt?"); + pAry[nPos++] = aName; + } + pObject = aIter.Next(); + } + } + } + DBG_ASSERT(nPos==nCount, "nanu, verzaehlt?"); + + return aSeq; + } + return uno::Sequence< ::rtl::OUString>(0); +} + +sal_Bool SAL_CALL ScChartsObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aName; + return ( lcl_FindChartObj( pDocShell, nTab, aNameString ) != NULL ); +} + +//------------------------------------------------------------------------ + +ScChartObj::ScChartObj(ScDocShell* pDocSh, USHORT nT, const String& rN) : + pDocShell( pDocSh ), + nTab( nT ), + aChartName( rN ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScChartObj::~ScChartObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScChartObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + //! Referenz-Update + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +void ScChartObj::GetData_Impl( ScRangeListRef& rRanges, BOOL& rColHeaders, BOOL& rRowHeaders ) const +{ + BOOL bFound = FALSE; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + SchMemChart* pOld = pDoc->FindChartData(aChartName); + if (pOld) + { + ScChartArray aData(pDoc,*pOld); + rRanges = aData.GetRangeList(); + rColHeaders = aData.HasColHeaders(); + rRowHeaders = aData.HasRowHeaders(); + bFound = TRUE; + } + } + if (!bFound) // Default + { + rRanges = NULL; + rColHeaders = FALSE; + rRowHeaders = FALSE; + } +} + +void ScChartObj::Update_Impl( const ScRangeListRef& rRanges, BOOL bColHeaders, BOOL bRowHeaders ) +{ + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + Window* pWin = NULL; + pDoc->UpdateChartArea( aChartName, rRanges, bColHeaders, bRowHeaders, FALSE, pWin ); + } +} + +// XTableChart + +sal_Bool SAL_CALL ScChartObj::getHasColumnHeaders() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRangeListRef xRanges; + BOOL bColHeaders, bRowHeaders; + GetData_Impl( xRanges, bColHeaders, bRowHeaders ); + return bColHeaders; +} + +void SAL_CALL ScChartObj::setHasColumnHeaders( sal_Bool bHasColumnHeaders ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRangeListRef xRanges; + BOOL bOldColHeaders, bOldRowHeaders; + GetData_Impl( xRanges, bOldColHeaders, bOldRowHeaders ); + if ( bOldColHeaders != bHasColumnHeaders ) + Update_Impl( xRanges, bHasColumnHeaders, bOldRowHeaders ); +} + +sal_Bool SAL_CALL ScChartObj::getHasRowHeaders() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRangeListRef xRanges; + BOOL bColHeaders, bRowHeaders; + GetData_Impl( xRanges, bColHeaders, bRowHeaders ); + return bRowHeaders; +} + +void SAL_CALL ScChartObj::setHasRowHeaders( sal_Bool bHasRowHeaders ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRangeListRef xRanges; + BOOL bOldColHeaders, bOldRowHeaders; + GetData_Impl( xRanges, bOldColHeaders, bOldRowHeaders ); + if ( bOldRowHeaders != bHasRowHeaders ) + Update_Impl( xRanges, bOldColHeaders, bHasRowHeaders ); +} + +uno::Sequence<table::CellRangeAddress> SAL_CALL ScChartObj::getRanges() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRangeListRef xRanges; + BOOL bColHeaders, bRowHeaders; + GetData_Impl( xRanges, bColHeaders, bRowHeaders ); + if ( xRanges.Is() ) + { + ULONG nCount = xRanges->Count(); + + table::CellRangeAddress aRangeAddress; + uno::Sequence<table::CellRangeAddress> aSeq(nCount); + table::CellRangeAddress* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + { + ScRange aRange = *xRanges->GetObject(i); + + aRangeAddress.Sheet = aRange.aStart.Tab(); + aRangeAddress.StartColumn = aRange.aStart.Col(); + aRangeAddress.StartRow = aRange.aStart.Row(); + aRangeAddress.EndColumn = aRange.aEnd.Col(); + aRangeAddress.EndRow = aRange.aEnd.Row(); + + pAry[i] = aRangeAddress; + } + return aSeq; + } + + DBG_ERROR("ScChartObj::getRanges: keine Ranges"); + return uno::Sequence<table::CellRangeAddress>(); +} + +void SAL_CALL ScChartObj::setRanges( const uno::Sequence<table::CellRangeAddress>& aRanges ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRangeListRef xOldRanges; + BOOL bColHeaders, bRowHeaders; + GetData_Impl( xOldRanges, bColHeaders, bRowHeaders ); + + ScRangeList* pList = new ScRangeList; + USHORT nRangeCount = (USHORT)aRanges.getLength(); + if (nRangeCount) + { + const table::CellRangeAddress* pAry = aRanges.getConstArray(); + for (USHORT i=0; i<nRangeCount; i++) + { + ScRange aRange( (USHORT)pAry[i].StartColumn, (USHORT)pAry[i].StartRow, pAry[i].Sheet, + (USHORT)pAry[i].EndColumn, (USHORT)pAry[i].EndRow, pAry[i].Sheet ); + pList->Append( aRange ); + } + } + ScRangeListRef xNewRanges( pList ); + + if ( !xOldRanges.Is() || *xOldRanges != *xNewRanges ) + Update_Impl( xNewRanges, bColHeaders, bRowHeaders ); +} + +// XEmbeddedObjectSupplier + +uno::Reference<lang::XComponent> SAL_CALL ScChartObj::getEmbeddedObject() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SdrOle2Obj* pObject = lcl_FindChartObj( pDocShell, nTab, aChartName ); + if (pObject) + { + SvInPlaceObjectRef aIPObj = pObject->GetObjRef(); + if (aIPObj.Is()) + { + SfxInPlaceObjectRef aSfxObj( aIPObj ); + if (aSfxObj.Is()) + { + SfxObjectShell* pObjSh = aSfxObj->GetObjectShell(); + if (pObjSh) + return pObjSh->GetBaseModel().get(); + } + } + } + return NULL; +} + +// XNamed + +::rtl::OUString SAL_CALL ScChartObj::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aChartName; +} + +void SAL_CALL ScChartObj::setName( const ::rtl::OUString& aName ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + throw uno::RuntimeException(); // name cannot be changed +} + +//------------------------------------------------------------------------ + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_confuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_confuno.cxx new file mode 100644 index 000000000000..8e39b01f02e5 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_confuno.cxx @@ -0,0 +1,406 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "confuno.hxx" +#include "unonames.hxx" +#include <vcl/svapp.hxx> +#include "docsh.hxx" +#include "miscuno.hxx" +#include "forbiuno.hxx" +#include "viewopti.hxx" +#include "docpool.hxx" +#include "bf_sc.hrc" + +#include <com/sun/star/beans/PropertyAttribute.hpp> + +#include <bf_sfx2/printer.hxx> +#include <bf_sfx2/docinf.hxx> +namespace binfilter { + +using namespace ::com::sun::star; + +#define SCCOMPSCPREADSHEETSETTINGS_SERVICE "com.sun.star.comp.SpreadsheetSettings" +#define SCDOCUMENTSETTINGS_SERVICE "com.sun.star.document.Settings" +#define SCSAVEVERSION "SaveVersionOnClose" + + +const SfxItemPropertyMap* lcl_GetConfigPropertyMap() +{ + static SfxItemPropertyMap aConfigPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNO_SHOWZERO), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_SHOWNOTES), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_SHOWGRID), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_GRIDCOLOR), 0, &getCppuType((sal_Int32*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_SHOWPAGEBR), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_LINKUPD), 0, &getCppuType((sal_Int16*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_COLROWHDR), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_SHEETTABS), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_OUTLSYMB), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_SNAPTORASTER), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_RASTERVIS), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_RASTERRESX), 0, &getCppuType((sal_Int32*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_RASTERRESY), 0, &getCppuType((sal_Int32*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_RASTERSUBX), 0, &getCppuType((sal_Int32*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_RASTERSUBY), 0, &getCppuType((sal_Int32*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_RASTERSYNC), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_AUTOCALC), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_PRINTERNAME), 0, &getCppuType((::rtl::OUString*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_PRINTERSETUP), 0, &getCppuType((uno::Sequence<sal_Int8>*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_APPLYDOCINF), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_FORBIDDEN), 0, &getCppuType((uno::Reference<i18n::XForbiddenCharacters>*)0), beans::PropertyAttribute::READONLY}, + {MAP_CHAR_LEN(SC_UNO_CHARCOMP), 0, &getCppuType((sal_Int16*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_ASIANKERN), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SCSAVEVERSION), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_UPDTEMPL), 0, &getBooleanCppuType(), 0}, + {0,0,0,0} + }; + return aConfigPropertyMap_Impl; +} + +//------------------------------------------------------------------------ + +ScDocumentConfiguration::ScDocumentConfiguration(ScDocShell* pDocSh) + : aPropSet ( lcl_GetConfigPropertyMap() ) , + pDocShell(pDocSh) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScDocumentConfiguration::~ScDocumentConfiguration() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScDocumentConfiguration::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScDocumentConfiguration::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScDocumentConfiguration::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if(pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + if (pDoc) + { + sal_Bool bUpdateHeights = sal_False; + + ScViewOptions aViewOpt(pDoc->GetViewOptions()); + if ( aPropertyName.compareToAscii( SC_UNO_SHOWZERO ) == 0 ) + aViewOpt.SetOption(VOPT_NULLVALS, ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_SHOWNOTES ) == 0 ) + aViewOpt.SetOption(VOPT_NOTES, ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_SHOWGRID ) == 0 ) + aViewOpt.SetOption(VOPT_GRID, ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_GRIDCOLOR ) == 0 ) + { + sal_Int64 nColor; + if (aValue >>= nColor) + { + String aColorName; + Color aColor(static_cast<sal_uInt32>(nColor)); + aViewOpt.SetGridColor(aColor, aColorName); + } + } + else if ( aPropertyName.compareToAscii( SC_UNO_SHOWPAGEBR ) == 0 ) + aViewOpt.SetOption(VOPT_PAGEBREAKS, ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNONAME_LINKUPD ) == 0 ) + pDoc->SetLinkMode( static_cast<ScLkUpdMode> ( ScUnoHelpFunctions::GetInt16FromAny( aValue ) ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_COLROWHDR ) == 0 ) + aViewOpt.SetOption(VOPT_HEADER, ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_SHEETTABS ) == 0 ) + aViewOpt.SetOption(VOPT_TABCONTROLS, ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_OUTLSYMB ) == 0 ) + aViewOpt.SetOption(VOPT_OUTLINER, ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_AUTOCALC ) == 0 ) + pDoc->SetAutoCalc( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_PRINTERNAME ) == 0 ) + { + SfxPrinter* pPrinter = pDocShell->GetPrinter(); + if (pPrinter) + { + ::rtl::OUString sPrinterName; + if (aValue >>= sPrinterName) + { + String aString(sPrinterName); + SfxPrinter* pNewPrinter = new SfxPrinter( pPrinter->GetOptions().Clone(), aString ); + if (pNewPrinter->IsKnown()) + pDocShell->SetPrinter( pNewPrinter, SFX_PRINTER_PRINTER ); + else + delete pNewPrinter; + } + else + throw lang::IllegalArgumentException(); + } + else + throw uno::RuntimeException(); + } + else if ( aPropertyName.compareToAscii( SC_UNO_PRINTERSETUP ) == 0 ) + { + uno::Sequence<sal_Int8> aSequence; + if ( aValue >>= aSequence ) + { + sal_uInt32 nSize = aSequence.getLength(); + SvMemoryStream aStream (aSequence.getArray(), nSize, STREAM_READ ); + aStream.Seek ( STREAM_SEEK_TO_BEGIN ); + SfxItemSet* pSet = new SfxItemSet( *pDoc->GetPool(), + SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN, + SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC, + SID_SCPRINTOPTIONS, SID_SCPRINTOPTIONS, + NULL ); + pDocShell->SetPrinter( SfxPrinter::Create( aStream, pSet ) ); + } + } + else if ( aPropertyName.compareToAscii( SC_UNO_APPLYDOCINF ) == 0 ) + pDocShell->GetDocInfo().SetUseUserData( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_FORBIDDEN ) == 0 ) + { + // read-only - should not be set + } + else if ( aPropertyName.compareToAscii( SC_UNO_CHARCOMP ) == 0 ) + { + // Int16 contains CharacterCompressionType values + sal_Int16 nUno = ScUnoHelpFunctions::GetInt16FromAny( aValue ); + pDoc->SetAsianCompression( (BYTE) nUno ); + bUpdateHeights = sal_True; + } + else if ( aPropertyName.compareToAscii( SC_UNO_ASIANKERN ) == 0 ) + { + pDoc->SetAsianKerning( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + bUpdateHeights = sal_True; + } + else if ( aPropertyName.compareToAscii( SCSAVEVERSION ) == 0) + pDocShell->GetDocInfo().SetSaveVersionOnClose( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_UPDTEMPL ) == 0 ) + pDocShell->GetDocInfo().SetQueryLoadTemplate( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else + { + ScGridOptions aGridOpt(aViewOpt.GetGridOptions()); + if ( aPropertyName.compareToAscii( SC_UNO_SNAPTORASTER ) == 0 ) + aGridOpt.SetUseGridSnap( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERVIS ) == 0 ) + aGridOpt.SetGridVisible( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERRESX ) == 0 ) + aGridOpt.SetFldDrawX( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( aValue ) ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERRESY ) == 0 ) + aGridOpt.SetFldDrawY( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( aValue ) ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERSUBX ) == 0 ) + aGridOpt.SetFldDivisionX( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( aValue ) ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERSUBY ) == 0 ) + aGridOpt.SetFldDivisionY( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( aValue ) ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERSYNC ) == 0 ) + aGridOpt.SetSynchronize( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else + throw beans::UnknownPropertyException(); + aViewOpt.SetGridOptions(aGridOpt); + } + pDoc->SetViewOptions(aViewOpt); + + if ( bUpdateHeights && !pDoc->IsImportingXML() ) + { + // update automatic row heights and repaint + USHORT nTabCount = pDoc->GetTableCount(); + for (USHORT nTab=0; nTab<nTabCount; nTab++) + if ( !pDocShell->AdjustRowHeight( 0, MAXROW, nTab ) ) + pDocShell->PostPaint( 0,0,nTab, MAXCOL,MAXROW,nTab, PAINT_GRID ); + pDocShell->SetDocumentModified(); + } + } + else + throw uno::RuntimeException(); + } + else + throw uno::RuntimeException(); +} + +uno::Any SAL_CALL ScDocumentConfiguration::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Any aRet; + + if(pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + if (pDoc) + { + const ScViewOptions& aViewOpt = pDoc->GetViewOptions(); + if ( aPropertyName.compareToAscii( SC_UNO_SHOWZERO ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, aViewOpt.GetOption( VOPT_NULLVALS ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_SHOWNOTES ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, aViewOpt.GetOption( VOPT_NOTES ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_SHOWGRID ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, aViewOpt.GetOption( VOPT_GRID ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_GRIDCOLOR ) == 0 ) + { + String aColorName; + Color aColor = aViewOpt.GetGridColor(&aColorName); + aRet <<= static_cast<sal_Int64>(aColor.GetColor()); + } + else if ( aPropertyName.compareToAscii( SC_UNO_SHOWPAGEBR ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, aViewOpt.GetOption( VOPT_PAGEBREAKS ) ); + else if ( aPropertyName.compareToAscii( SC_UNONAME_LINKUPD ) == 0 ) + aRet <<= static_cast<sal_Int16> ( pDoc->GetLinkMode() ); + else if ( aPropertyName.compareToAscii( SC_UNO_COLROWHDR ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, aViewOpt.GetOption( VOPT_HEADER ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_SHEETTABS ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, aViewOpt.GetOption( VOPT_TABCONTROLS ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_OUTLSYMB ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, aViewOpt.GetOption( VOPT_OUTLINER ) ); + else if ( aPropertyName.compareToAscii( SC_UNO_AUTOCALC ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, pDoc->GetAutoCalc() ); + else if ( aPropertyName.compareToAscii( SC_UNO_PRINTERNAME ) == 0 ) + { + SfxPrinter *pPrinter = pDoc->GetPrinter (); + if (pPrinter) + aRet <<= ::rtl::OUString ( pPrinter->GetName()); + else + throw uno::RuntimeException(); + } + else if ( aPropertyName.compareToAscii( SC_UNO_PRINTERSETUP ) == 0 ) + { + SfxPrinter *pPrinter = pDocShell->GetPrinter(); + if (pPrinter) + { + SvMemoryStream aStream; + pPrinter->Store( aStream ); + aStream.Seek ( STREAM_SEEK_TO_END ); + sal_uInt32 nSize = aStream.Tell(); + aStream.Seek ( STREAM_SEEK_TO_BEGIN ); + uno::Sequence < sal_Int8 > aSequence( nSize ); + aStream.Read ( aSequence.getArray(), nSize ); + aRet <<= aSequence; + } + } + else if ( aPropertyName.compareToAscii( SC_UNO_APPLYDOCINF ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, pDocShell->GetDocInfo().IsUseUserData() ); + else if ( aPropertyName.compareToAscii( SC_UNO_FORBIDDEN ) == 0 ) + { + uno::Reference<i18n::XForbiddenCharacters> xForbidden = new ScForbiddenCharsObj( pDocShell ); + aRet <<= xForbidden; + } + else if ( aPropertyName.compareToAscii( SC_UNO_CHARCOMP ) == 0 ) + aRet <<= static_cast<sal_Int16> ( pDoc->GetAsianCompression() ); + else if ( aPropertyName.compareToAscii( SC_UNO_ASIANKERN ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, pDoc->GetAsianKerning() ); + else if ( aPropertyName.compareToAscii( SCSAVEVERSION ) == 0) + ScUnoHelpFunctions::SetBoolInAny( aRet, pDocShell->GetDocInfo().IsSaveVersionOnClose() ); + else if ( aPropertyName.compareToAscii( SC_UNO_UPDTEMPL ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, pDocShell->GetDocInfo().IsQueryLoadTemplate()); + else + { + const ScGridOptions& aGridOpt = aViewOpt.GetGridOptions(); + if ( aPropertyName.compareToAscii( SC_UNO_SNAPTORASTER ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, aGridOpt.GetUseGridSnap() ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERVIS ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, aGridOpt.GetGridVisible() ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERRESX ) == 0 ) + aRet <<= static_cast<sal_Int32> ( aGridOpt.GetFldDrawX() ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERRESY ) == 0 ) + aRet <<= static_cast<sal_Int32> ( aGridOpt.GetFldDrawY() ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERSUBX ) == 0 ) + aRet <<= static_cast<sal_Int32> ( aGridOpt.GetFldDivisionX() ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERSUBY ) == 0 ) + aRet <<= static_cast<sal_Int32> ( aGridOpt.GetFldDivisionY() ); + else if ( aPropertyName.compareToAscii( SC_UNO_RASTERSYNC ) == 0 ) + ScUnoHelpFunctions::SetBoolInAny( aRet, aGridOpt.GetSynchronize() ); + else + throw beans::UnknownPropertyException(); + } + } + else + throw uno::RuntimeException(); + } + else + throw uno::RuntimeException(); + + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScDocumentConfiguration ) + +// XServiceInfo + +::rtl::OUString SAL_CALL ScDocumentConfiguration::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScDocumentConfiguration" ); +} + +sal_Bool SAL_CALL ScDocumentConfiguration::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr( rServiceName ); + return aServiceStr.EqualsAscii( SCCOMPSCPREADSHEETSETTINGS_SERVICE ) || + aServiceStr.EqualsAscii( SCDOCUMENTSETTINGS_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScDocumentConfiguration::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(2); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCCOMPSCPREADSHEETSETTINGS_SERVICE ); + pArray[1] = ::rtl::OUString::createFromAscii( SCDOCUMENTSETTINGS_SERVICE ); + return aRet; +} + +//------------------------------------------------------------------------- + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_convuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_convuno.cxx new file mode 100644 index 000000000000..90d9943fba1a --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_convuno.cxx @@ -0,0 +1,69 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <i18npool/mslangid.hxx> + +#include "convuno.hxx" + +#include <com/sun/star/lang/Locale.hpp> + +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +// everything is static... + +LanguageType ScUnoConversion::GetLanguage( const lang::Locale& rLocale ) +{ + // empty language -> LANGUAGE_SYSTEM + if ( rLocale.Language.getLength() == 0 ) + return LANGUAGE_SYSTEM; + + LanguageType eRet = MsLangId::convertLocaleToLanguage( rLocale ); + if ( eRet == LANGUAGE_NONE ) + eRet = LANGUAGE_SYSTEM; //! or throw an exception? + + return eRet; +} + +void ScUnoConversion::FillLocale( lang::Locale& rLocale, LanguageType eLang ) +{ + MsLangId::convertLanguageToLocale( eLang, rLocale ); +} + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_cursuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_cursuno.cxx new file mode 100644 index 000000000000..86ee965a7a27 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_cursuno.cxx @@ -0,0 +1,502 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <rtl/uuid.h> + +#include "cursuno.hxx" +#include "docsh.hxx" +#include "markdata.hxx" +#include <vcl/svapp.hxx> +#include "miscuno.hxx" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +#define SCSHEETCELLCURSOR_SERVICE "com.sun.star.sheet.SheetCellCursor" +#define SCCELLCURSOR_SERVICE "com.sun.star.table.CellCursor" + +//------------------------------------------------------------------------ + +ScCellCursorObj::ScCellCursorObj(ScDocShell* pDocSh, const ScRange& rR) : + ScCellRangeObj( pDocSh, rR ) +{ +} + +ScCellCursorObj::~ScCellCursorObj() +{ +} + +uno::Any SAL_CALL ScCellCursorObj::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( sheet::XSheetCellCursor ) + SC_QUERYINTERFACE( sheet::XUsedAreaCursor ) + SC_QUERYINTERFACE( table::XCellCursor ) + + return ScCellRangeObj::queryInterface( rType ); +} + +void SAL_CALL ScCellCursorObj::acquire() throw() +{ + ScCellRangeObj::acquire(); +} + +void SAL_CALL ScCellCursorObj::release() throw() +{ + ScCellRangeObj::release(); +} + +uno::Sequence<uno::Type> SAL_CALL ScCellCursorObj::getTypes() throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + uno::Sequence<uno::Type> aParentTypes = ScCellRangeObj::getTypes(); + long nParentLen = aParentTypes.getLength(); + const uno::Type* pParentPtr = aParentTypes.getConstArray(); + + aTypes.realloc( nParentLen + 3 ); + uno::Type* pPtr = aTypes.getArray(); + pPtr[nParentLen + 0] = getCppuType((const uno::Reference<sheet::XSheetCellCursor>*)0); + pPtr[nParentLen + 1] = getCppuType((const uno::Reference<sheet::XUsedAreaCursor>*)0); + pPtr[nParentLen + 2] = getCppuType((const uno::Reference<table::XCellCursor>*)0); + + for (long i=0; i<nParentLen; i++) + pPtr[i] = pParentPtr[i]; // parent types first + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScCellCursorObj::getImplementationId() throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +// XSheetCellCursor + +void SAL_CALL ScCellCursorObj::collapseToCurrentRegion() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aRange = *rRanges.GetObject(0); + + aRange.Justify(); + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + USHORT nStartCol = aRange.aStart.Col(); + USHORT nStartRow = aRange.aStart.Row(); + USHORT nEndCol = aRange.aEnd.Col(); + USHORT nEndRow = aRange.aEnd.Row(); + USHORT nTab = aRange.aStart.Tab(); + + pDocSh->GetDocument()->GetDataArea( + nTab, nStartCol, nStartRow, nEndCol, nEndRow, TRUE ); + + ScRange aNew( nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab ); + SetNewRange( aNew ); + } +} + +void SAL_CALL ScCellCursorObj::collapseToCurrentArray() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aRange = *rRanges.GetObject(0); + + aRange.Justify(); + ScAddress aCursor = aRange.aStart; // use the start address of the range + + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + ScRange aMatrix; + + // finding the matrix range is now in GetMatrixFormulaRange in the document + if ( pDoc->GetMatrixFormulaRange( aCursor, aMatrix ) ) + { + SetNewRange( aMatrix ); + } + } + // thats a Bug, that this assertion comes; the API Reference says, that + // if there is no Matrix, the Range is left unchanged; they says nothing + // about a exception + /*if (!bFound) + { + DBG_ERROR("keine Matrix"); + //! Exception, oder was? + }*/ +} + +void SAL_CALL ScCellCursorObj::collapseToMergedArea() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aNewRange = *rRanges.GetObject(0); + + ScDocument* pDoc = pDocSh->GetDocument(); + pDoc->ExtendOverlapped( aNewRange ); + pDoc->ExtendMerge( aNewRange ); // after ExtendOverlapped! + + SetNewRange( aNewRange ); + } +} + +void SAL_CALL ScCellCursorObj::expandToEntireColumns() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aNewRange = *rRanges.GetObject(0); + + aNewRange.aStart.SetRow( 0 ); + aNewRange.aEnd.SetRow( MAXROW ); + + SetNewRange( aNewRange ); +} + +void SAL_CALL ScCellCursorObj::expandToEntireRows() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aNewRange = *rRanges.GetObject(0); + + aNewRange.aStart.SetCol( 0 ); + aNewRange.aEnd.SetCol( MAXCOL ); + + SetNewRange( aNewRange ); +} + +void SAL_CALL ScCellCursorObj::collapseToSize( sal_Int32 nColumns, sal_Int32 nRows ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( nColumns <= 0 || nRows <= 0 ) + { + DBG_ERROR("leerer Range geht nicht"); + //! und dann? + } + else + { + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aNewRange = *rRanges.GetObject(0); + + aNewRange.Justify(); //! wirklich? + + long nEndX = aNewRange.aStart.Col() + nColumns - 1; + long nEndY = aNewRange.aStart.Row() + nRows - 1; + if ( nEndX < 0 ) nEndX = 0; + if ( nEndX > MAXCOL ) nEndX = MAXCOL; + if ( nEndY < 0 ) nEndY = 0; + if ( nEndY > MAXROW ) nEndY = MAXROW; + //! Fehler/Exception oder so, wenn zu gross/zu klein? + + aNewRange.aEnd.SetCol((USHORT)nEndX); + aNewRange.aEnd.SetRow((USHORT)nEndY); + + aNewRange.Justify(); //! wirklich? + + SetNewRange( aNewRange ); + } +} + +// XUsedAreaCursor + +void SAL_CALL ScCellCursorObj::gotoStartOfUsedArea( sal_Bool bExpand ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aNewRange = *rRanges.GetObject(0); + USHORT nTab = aNewRange.aStart.Tab(); + + USHORT nUsedX = 0; // Anfang holen + USHORT nUsedY = 0; + if (!pDocSh->GetDocument()->GetDataStart( nTab, nUsedX, nUsedY )) + nUsedX = nUsedY = 0; + + aNewRange.aStart.SetCol( nUsedX ); + aNewRange.aStart.SetRow( nUsedY ); + if (!bExpand) + aNewRange.aEnd = aNewRange.aStart; + SetNewRange( aNewRange ); + } +} + +void SAL_CALL ScCellCursorObj::gotoEndOfUsedArea( sal_Bool bExpand ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aNewRange = *rRanges.GetObject(0); + USHORT nTab = aNewRange.aStart.Tab(); + + USHORT nUsedX = 0; // Ende holen + USHORT nUsedY = 0; + if (!pDocSh->GetDocument()->GetTableArea( nTab, nUsedX, nUsedY )) + nUsedX = nUsedY = 0; + + aNewRange.aEnd.SetCol( nUsedX ); + aNewRange.aEnd.SetRow( nUsedY ); + if (!bExpand) + aNewRange.aStart = aNewRange.aEnd; + SetNewRange( aNewRange ); + } +} + +// XCellCursor + +void SAL_CALL ScCellCursorObj::gotoStart() throw(uno::RuntimeException) +{ + // this is similar to collapseToCurrentRegion + //! something like gotoEdge with 4 possible directions is needed + + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aRange = *rRanges.GetObject(0); + + aRange.Justify(); + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + USHORT nStartCol = aRange.aStart.Col(); + USHORT nStartRow = aRange.aStart.Row(); + USHORT nEndCol = aRange.aEnd.Col(); + USHORT nEndRow = aRange.aEnd.Row(); + USHORT nTab = aRange.aStart.Tab(); + + pDocSh->GetDocument()->GetDataArea( + nTab, nStartCol, nStartRow, nEndCol, nEndRow, FALSE ); + + ScRange aNew( nStartCol, nStartRow, nTab ); + SetNewRange( aNew ); + } +} + +void SAL_CALL ScCellCursorObj::gotoEnd() throw(uno::RuntimeException) +{ + // this is similar to collapseToCurrentRegion + //! something like gotoEdge with 4 possible directions is needed + + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aRange = *rRanges.GetObject(0); + + aRange.Justify(); + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + { + USHORT nStartCol = aRange.aStart.Col(); + USHORT nStartRow = aRange.aStart.Row(); + USHORT nEndCol = aRange.aEnd.Col(); + USHORT nEndRow = aRange.aEnd.Row(); + USHORT nTab = aRange.aStart.Tab(); + + pDocSh->GetDocument()->GetDataArea( + nTab, nStartCol, nStartRow, nEndCol, nEndRow, FALSE ); + + ScRange aNew( nEndCol, nEndRow, nTab ); + SetNewRange( aNew ); + } +} + +void SAL_CALL ScCellCursorObj::gotoNext() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aRange = *rRanges.GetObject(0); + + aRange.Justify(); + ScAddress aCursor = aRange.aStart; // bei Block immer den Start nehmen + + ScMarkData aMark; // not used with bMarked=FALSE + USHORT nNewX = aCursor.Col(); + USHORT nNewY = aCursor.Row(); + USHORT nTab = aCursor.Tab(); + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + pDocSh->GetDocument()->GetNextPos( nNewX,nNewY, nTab, 1,0, FALSE,TRUE, aMark ); + //! sonst Exception oder so + + SetNewRange( ScRange( nNewX, nNewY, nTab ) ); +} + +void SAL_CALL ScCellCursorObj::gotoPrevious() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aRange = *rRanges.GetObject(0); + + aRange.Justify(); + ScAddress aCursor = aRange.aStart; // bei Block immer den Start nehmen + + ScMarkData aMark; // not used with bMarked=FALSE + USHORT nNewX = aCursor.Col(); + USHORT nNewY = aCursor.Row(); + USHORT nTab = aCursor.Tab(); + ScDocShell* pDocSh = GetDocShell(); + if ( pDocSh ) + pDocSh->GetDocument()->GetNextPos( nNewX,nNewY, nTab, -1,0, FALSE,TRUE, aMark ); + //! sonst Exception oder so + + SetNewRange( ScRange( nNewX, nNewY, nTab ) ); +} + +void SAL_CALL ScCellCursorObj::gotoOffset( sal_Int32 nColumnOffset, sal_Int32 nRowOffset ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + const ScRangeList& rRanges = GetRangeList(); + DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); + ScRange aRange = *rRanges.GetObject(0); + aRange.Justify(); + + if ( aRange.aStart.Col() + nColumnOffset >= 0 && + aRange.aEnd.Col() + nColumnOffset <= MAXCOL && + aRange.aStart.Row() + nRowOffset >= 0 && + aRange.aEnd.Row() + nRowOffset <= MAXROW ) + { + ScRange aNew( (USHORT)(aRange.aStart.Col() + nColumnOffset), + (USHORT)(aRange.aStart.Row() + nRowOffset), + aRange.aStart.Tab(), + (USHORT)(aRange.aEnd.Col() + nColumnOffset), + (USHORT)(aRange.aEnd.Row() + nRowOffset), + aRange.aEnd.Tab() ); + SetNewRange( aNew ); + } +} + +// XSheetCellRange + +uno::Reference<sheet::XSpreadsheet> SAL_CALL ScCellCursorObj::getSpreadsheet() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ScCellRangeObj::getSpreadsheet(); +} + +// XCellRange + +uno::Reference<table::XCell> SAL_CALL ScCellCursorObj::getCellByPosition( + sal_Int32 nColumn, sal_Int32 nRow ) + throw(lang::IndexOutOfBoundsException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ScCellRangeObj::getCellByPosition(nColumn,nRow); +} + +uno::Reference<table::XCellRange> SAL_CALL ScCellCursorObj::getCellRangeByPosition( + sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom ) + throw(lang::IndexOutOfBoundsException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ScCellRangeObj::getCellRangeByPosition(nLeft,nTop,nRight,nBottom); +} + +uno::Reference<table::XCellRange> SAL_CALL ScCellCursorObj::getCellRangeByName( + const ::rtl::OUString& aRange ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ScCellRangeObj::getCellRangeByName(aRange); +} + +// XServiceInfo + +::rtl::OUString SAL_CALL ScCellCursorObj::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScCellCursorObj" ); +} + +sal_Bool SAL_CALL ScCellCursorObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr( rServiceName ); + return aServiceStr.EqualsAscii( SCSHEETCELLCURSOR_SERVICE ) || + aServiceStr.EqualsAscii( SCCELLCURSOR_SERVICE ) || + ScCellRangeObj::supportsService(rServiceName); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScCellCursorObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + // get all service names from cell range + uno::Sequence< ::rtl::OUString> aParentSeq = ScCellRangeObj::getSupportedServiceNames(); + sal_Int32 nParentLen = aParentSeq.getLength(); + const ::rtl::OUString* pParentArr = aParentSeq.getConstArray(); + + // SheetCellCursor should be first (?) + uno::Sequence< ::rtl::OUString> aTotalSeq( nParentLen + 2 ); + ::rtl::OUString* pTotalArr = aTotalSeq.getArray(); + pTotalArr[0] = ::rtl::OUString::createFromAscii( SCSHEETCELLCURSOR_SERVICE ); + pTotalArr[1] = ::rtl::OUString::createFromAscii( SCCELLCURSOR_SERVICE ); + + // append cell range services + for (long i=0; i<nParentLen; i++) + pTotalArr[i+2] = pParentArr[i]; + + return aTotalSeq; +} + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_dapiuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_dapiuno.cxx new file mode 100644 index 000000000000..f8514396a590 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_dapiuno.cxx @@ -0,0 +1,1855 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <rtl/uuid.h> + +#include "dapiuno.hxx" +#include "datauno.hxx" +#include "miscuno.hxx" +#include "docsh.hxx" +#include "pivot.hxx" +#include <vcl/svapp.hxx> +#include "dpobject.hxx" +#include "dpshttab.hxx" +#include "dpsave.hxx" +#include "dbdocfun.hxx" +#include "unonames.hxx" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +const SfxItemPropertyMap* lcl_GetDataPilotFieldMap() +{ + static SfxItemPropertyMap aDataPilotFieldMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_FUNCTION), 0, &getCppuType((sheet::GeneralFunction*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_ORIENT), 0, &getCppuType((sheet::DataPilotFieldOrientation*)0), 0, 0 }, + {0,0,0,0} + }; + return aDataPilotFieldMap_Impl; +} + +//------------------------------------------------------------------------ + +SC_SIMPLE_SERVICE_INFO( ScDataPilotDescriptor, "ScDataPilotDescriptor", "stardiv::one::sheet::DataPilotDescriptor" ) +SC_SIMPLE_SERVICE_INFO( ScDataPilotFieldObj, "ScDataPilotFieldObj", "com.sun.star.sheet.DataPilotField" ) +SC_SIMPLE_SERVICE_INFO( ScDataPilotFieldsObj, "ScDataPilotFieldsObj", "com.sun.star.sheet.DataPilotFields" ) +SC_SIMPLE_SERVICE_INFO( ScDataPilotTableObj, "ScDataPilotTableObj", "com.sun.star.sheet.DataPilotTable" ) +SC_SIMPLE_SERVICE_INFO( ScDataPilotTablesObj, "ScDataPilotTablesObj", "com.sun.star.sheet.DataPilotTables" ) + +//------------------------------------------------------------------------ + +//! irgendwann ueberall die neuen enum-Werte benutzen +#define DATA_PILOT_HIDDEN sheet::DataPilotFieldOrientation_HIDDEN +#define DATA_PILOT_COLUMN sheet::DataPilotFieldOrientation_COLUMN +#define DATA_PILOT_ROW sheet::DataPilotFieldOrientation_ROW +#define DATA_PILOT_PAGE sheet::DataPilotFieldOrientation_PAGE +#define DATA_PILOT_DATA sheet::DataPilotFieldOrientation_DATA + +//------------------------------------------------------------------------ + +USHORT lcl_BitCount( USHORT nBits ) +{ + if (!nBits) return 0; + + USHORT nCount = 0; + USHORT nMask = 1; + for (USHORT i=0; i<16; i++) + { + if ( nBits & nMask ) + ++nCount; + nMask <<= 1; + } + return nCount; +} + +USHORT lcl_DataCount( const ScPivotParam& rParam ) +{ + USHORT nRet = 0; + for ( USHORT i=0; i<rParam.nDataCount; i++ ) + nRet += lcl_BitCount( rParam.aDataArr[i].nFuncMask ); // nFuncCount stimmt nicht + return nRet; +} + +BOOL lcl_GetDataArrayPos( const ScPivotParam& rParam, USHORT nIndex, + USHORT& rArrayPos, USHORT& rFuncBit ) +{ + USHORT nPos = 0; + for ( USHORT i=0; i<rParam.nDataCount; i++ ) + { + USHORT nBits = rParam.aDataArr[i].nFuncMask; + USHORT nMask = 1; + for (USHORT nBP=0; nBP<16; nBP++) + { + if ( nBits & nMask ) + { + if ( nPos == nIndex ) + { + rArrayPos = i; // position in aDataArr + rFuncBit = nMask; + return TRUE; + } + ++nPos; + } + nMask <<= 1; + } + } + rArrayPos = 0; + rFuncBit = 0; + return FALSE; +} + +ScDPObject* lcl_GetDPObject( ScDocShell* pDocShell, USHORT nTab, const String& rName ) +{ + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDPCollection* pColl = pDoc->GetDPCollection(); + if ( pColl ) + { + USHORT nCount = pColl->GetCount(); + for (USHORT i=0; i<nCount; i++) + { + ScDPObject* pDPObj = (*pColl)[i]; + if ( pDPObj->IsSheetData() && + pDPObj->GetOutRange().aStart.Tab() == nTab && + pDPObj->GetName() == rName ) + return pDPObj; + } + } + } + return NULL; // nicht gefunden +} + +String lcl_ColumnTitle( ScDocument* pDoc, USHORT nCol, USHORT nRow, USHORT nTab ) +{ + // Spaltennamen, wie sie in der Pivottabelle angezeigt werden + String aStr; + pDoc->GetString(nCol, nRow, nTab, aStr); + if (aStr.Len() == 0) + aStr = ColToAlpha( nCol ); + return aStr; +} + +sheet::GeneralFunction ScDataPilotConversion::FirstFunc( USHORT nBits ) +{ + if ( nBits & PIVOT_FUNC_SUM ) return sheet::GeneralFunction_SUM; + if ( nBits & PIVOT_FUNC_COUNT ) return sheet::GeneralFunction_COUNT; + if ( nBits & PIVOT_FUNC_AVERAGE ) return sheet::GeneralFunction_AVERAGE; + if ( nBits & PIVOT_FUNC_MAX ) return sheet::GeneralFunction_MAX; + if ( nBits & PIVOT_FUNC_MIN ) return sheet::GeneralFunction_MIN; + if ( nBits & PIVOT_FUNC_PRODUCT ) return sheet::GeneralFunction_PRODUCT; + if ( nBits & PIVOT_FUNC_COUNT_NUM ) return sheet::GeneralFunction_COUNTNUMS; + if ( nBits & PIVOT_FUNC_STD_DEV ) return sheet::GeneralFunction_STDEV; + if ( nBits & PIVOT_FUNC_STD_DEVP ) return sheet::GeneralFunction_STDEVP; + if ( nBits & PIVOT_FUNC_STD_VAR ) return sheet::GeneralFunction_VAR; + if ( nBits & PIVOT_FUNC_STD_VARP ) return sheet::GeneralFunction_VARP; + if ( nBits & PIVOT_FUNC_AUTO ) return sheet::GeneralFunction_AUTO; + return sheet::GeneralFunction_NONE; +} + +USHORT ScDataPilotConversion::FunctionBit( sheet::GeneralFunction eFunc ) +{ + USHORT nRet = PIVOT_FUNC_NONE; // 0 + switch (eFunc) + { + case sheet::GeneralFunction_SUM: nRet = PIVOT_FUNC_SUM; break; + case sheet::GeneralFunction_COUNT: nRet = PIVOT_FUNC_COUNT; break; + case sheet::GeneralFunction_AVERAGE: nRet = PIVOT_FUNC_AVERAGE; break; + case sheet::GeneralFunction_MAX: nRet = PIVOT_FUNC_MAX; break; + case sheet::GeneralFunction_MIN: nRet = PIVOT_FUNC_MIN; break; + case sheet::GeneralFunction_PRODUCT: nRet = PIVOT_FUNC_PRODUCT; break; + case sheet::GeneralFunction_COUNTNUMS: nRet = PIVOT_FUNC_COUNT_NUM; break; + case sheet::GeneralFunction_STDEV: nRet = PIVOT_FUNC_STD_DEV; break; + case sheet::GeneralFunction_STDEVP: nRet = PIVOT_FUNC_STD_DEVP; break; + case sheet::GeneralFunction_VAR: nRet = PIVOT_FUNC_STD_VAR; break; + case sheet::GeneralFunction_VARP: nRet = PIVOT_FUNC_STD_VARP; break; + case sheet::GeneralFunction_AUTO: nRet = PIVOT_FUNC_AUTO; break; + } + return nRet; +} + +String lcl_CreatePivotName( ScDocShell* pDocShell ) +{ + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDPCollection* pColl = pDoc->GetDPCollection(); + if ( pColl ) + return pColl->CreateNewName(); + } + return String(); // sollte nicht vorkommen +} + +void lcl_SetLayoutNamesToObject( ScDocument* pDoc, + const ScPivotParam& rParam, const ScArea& rSrcArea, + ScDPObject& rObject ) +{ + // set layout names from LabelData to SaveData + + //! reset old names? (renamed columns) + + ScDPSaveData* pOldData = rObject.GetSaveData(); + if ( pOldData && rSrcArea.nColEnd >= rSrcArea.nColStart ) + { + ScDPSaveData aNewData( *pOldData ); + + USHORT nRow = rSrcArea.nRowStart; + USHORT nTab = rSrcArea.nTab; + USHORT nCount = rSrcArea.nColEnd - rSrcArea.nColStart + 1; + for (USHORT nField = 0; nField < nCount; nField++) + { + USHORT nCol = rSrcArea.nColStart + nField; + String aSourceName = lcl_ColumnTitle( pDoc, nCol, nRow, nTab ); + + if ( nField < rParam.nLabels && rParam.ppLabelArr && + rParam.ppLabelArr[nField] && + rParam.ppLabelArr[nField]->pStrColName && + rParam.ppLabelArr[nField]->pStrColName->Len() ) + { + String aLayoutName = *rParam.ppLabelArr[nField]->pStrColName; + + // create SaveDimension if not there + ScDPSaveDimension* pDim = aNewData.GetDimensionByName( aSourceName ); + if (pDim) + pDim->SetLayoutName( &aLayoutName ); + } + else + { + // reset layout name if one was set + ScDPSaveDimension* pDim = aNewData.GetExistingDimensionByName( aSourceName ); + if (pDim) + pDim->ResetLayoutName(); + } + } + + rObject.SetSaveData( aNewData ); + } +} + +void lcl_SetLayoutNamesToParam( ScPivotParam& rParam, ScDocument* pDoc, + const ScArea& rSrcArea, const ScDPObject& rObject ) +{ + // set layout names from SaveData to LabelData + + ScDPSaveData* pSaveData = rObject.GetSaveData(); + if ( pSaveData && rSrcArea.nColEnd >= rSrcArea.nColStart ) + { + BOOL bAnyFound = FALSE; + USHORT nNewCount = rSrcArea.nColEnd - rSrcArea.nColStart + 1; + LabelData** ppNewData = new LabelData*[nNewCount]; + + USHORT nRow = rSrcArea.nRowStart; + USHORT nTab = rSrcArea.nTab; + for (USHORT nField = 0; nField < nNewCount; nField++) + { + USHORT nCol = rSrcArea.nColStart + nField; + String aSourceName = lcl_ColumnTitle( pDoc, nCol, nRow, nTab ); + + String aLayoutName; + ScDPSaveDimension* pDim = pSaveData->GetExistingDimensionByName( aSourceName ); + if ( pDim && pDim->HasLayoutName() ) + { + aLayoutName = pDim->GetLayoutName(); + if (aLayoutName.Len()) + bAnyFound = TRUE; + } + + ppNewData[nField] = new LabelData( aLayoutName, 0, FALSE ); + } + + if ( bAnyFound ) + rParam.SetLabelData( ppNewData, nNewCount ); + + // SetLabelData copies data - ppNewData must be deleted + for (USHORT i=0; i<nNewCount; i++) + delete ppNewData[i]; + delete[] ppNewData; + } +} + +//------------------------------------------------------------------------ + +ScDataPilotTablesObj::ScDataPilotTablesObj(ScDocShell* pDocSh, USHORT nT) : + pDocShell( pDocSh ), + nTab( nT ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScDataPilotTablesObj::~ScDataPilotTablesObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScDataPilotTablesObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + //! Referenz-Update + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XDataPilotTables + +ScDataPilotTableObj* ScDataPilotTablesObj::GetObjectByIndex_Impl(USHORT nIndex) +{ + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDPCollection* pColl = pDoc->GetDPCollection(); + if ( pColl ) + { + // count tables on this sheet + // api only handles sheet data at this time + //! allow all data sources!!! + USHORT nFound = 0; + USHORT nCount = pColl->GetCount(); + for (USHORT i=0; i<nCount; i++) + { + ScDPObject* pDPObj = (*pColl)[i]; + if ( pDPObj->IsSheetData() && pDPObj->GetOutRange().aStart.Tab() == nTab ) + { + if ( nFound == nIndex ) + { + String aName = pDPObj->GetName(); + return new ScDataPilotTableObj( pDocShell, nTab, aName ); + } + ++nFound; + } + } + } + } + return NULL; +} + +ScDataPilotTableObj* ScDataPilotTablesObj::GetObjectByName_Impl(const ::rtl::OUString& aName) +{ + if (hasByName(aName)) + { + String aNamStr = aName; + return new ScDataPilotTableObj( pDocShell, nTab, aNamStr ); + } + return NULL; +} + +uno::Reference<sheet::XDataPilotDescriptor> SAL_CALL ScDataPilotTablesObj::createDataPilotDescriptor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return new ScDataPilotDescriptor(pDocShell); + return NULL; +} + +void SAL_CALL ScDataPilotTablesObj::insertNewByName( const ::rtl::OUString& aNewName, + const table::CellAddress& aOutputAddress, + const uno::Reference<sheet::XDataPilotDescriptor>& xDescriptor ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!xDescriptor.is()) return; + + // inserting with already existing name? + if ( aNewName.getLength() && hasByName( aNewName ) ) + throw uno::RuntimeException(); // no other exceptions specified + + BOOL bDone = FALSE; + ScDataPilotDescriptorBase* pImp = ScDataPilotDescriptorBase::getImplementation( xDescriptor ); + if ( pDocShell && pImp ) + { + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pImp->GetParam( aParam, aQuery, aSrcArea ); + + aParam.nCol = (USHORT)aOutputAddress.Column; + aParam.nRow = (USHORT)aOutputAddress.Row; + aParam.nTab = aOutputAddress.Sheet; + + // in den Uno-Objekten sind alle Fields in den Descriptoren innerhalb des Bereichs gezaehlt + + short nFieldStart = aSrcArea.nColStart; + USHORT i; + for ( i=0; i<aParam.nColCount; i++ ) + if ( aParam.aColArr[i].nCol != PIVOT_DATA_FIELD ) + aParam.aColArr[i].nCol += nFieldStart; + for ( i=0; i<aParam.nRowCount; i++ ) + if ( aParam.aRowArr[i].nCol != PIVOT_DATA_FIELD ) + aParam.aRowArr[i].nCol += nFieldStart; + for ( i=0; i<aParam.nDataCount; i++ ) + if ( aParam.aDataArr[i].nCol != PIVOT_DATA_FIELD ) + aParam.aDataArr[i].nCol += nFieldStart; + + // Daten-Eintrag hinzufuegen, wenn noch nicht vorhanden + + BOOL bDataFound = FALSE; + for ( i=0; i<aParam.nColCount; i++ ) + if ( aParam.aColArr[i].nCol == PIVOT_DATA_FIELD ) + bDataFound = TRUE; + for ( i=0; i<aParam.nRowCount; i++ ) + if ( aParam.aRowArr[i].nCol == PIVOT_DATA_FIELD ) + bDataFound = TRUE; + if (!bDataFound) + { + if ( aParam.nRowCount < PIVOT_MAXFIELD ) + aParam.aRowArr[aParam.nRowCount++].nCol = PIVOT_DATA_FIELD; + else if ( aParam.nColCount < PIVOT_MAXFIELD ) + aParam.aColArr[aParam.nColCount++].nCol = PIVOT_DATA_FIELD; + else + throw uno::RuntimeException(); // no space for data field + } + + String aName = aNewName; + if (!aName.Len()) + aName = lcl_CreatePivotName( pDocShell ); + String aTag = xDescriptor->getTag(); + + ScDocument* pDoc = pDocShell->GetDocument(); + ScPivot* pNewPivot = new ScPivot( pDoc ); + pNewPivot->SetName( aName ); + pNewPivot->SetTag( aTag ); + pNewPivot->SetParam( aParam, aQuery, aSrcArea ); + + ScDPObject* pNewObj = new ScDPObject( pDoc ); + pNewObj->InitFromOldPivot( *pNewPivot, pDoc, TRUE ); + lcl_SetLayoutNamesToObject( pDoc, aParam, aSrcArea, *pNewObj ); + + ScDBDocFunc aFunc(*pDocShell); + bDone = aFunc.DataPilotUpdate( NULL, pNewObj, TRUE, TRUE ); + + delete pNewObj; // DataPilotUpdate copies settings from "new" object + delete pNewPivot; + } + + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +void SAL_CALL ScDataPilotTablesObj::removeByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameStr = aName; + ScDPObject* pDPObj = lcl_GetDPObject( pDocShell, nTab, aNameStr ); + if (pDPObj && pDocShell) + { + ScDBDocFunc aFunc(*pDocShell); + aFunc.DataPilotUpdate( pDPObj, NULL, TRUE, TRUE ); // remove - incl. undo etc. + } + else + throw uno::RuntimeException(); // no other exceptions specified +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScDataPilotTablesObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.DataPilotTablesEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScDataPilotTablesObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDPCollection* pColl = pDoc->GetDPCollection(); + if ( pColl ) + { + // count tables on this sheet + // api only handles sheet data at this time + //! allow all data sources!!! + + USHORT nFound = 0; + USHORT nCount = pColl->GetCount(); + for (USHORT i=0; i<nCount; i++) + { + ScDPObject* pDPObj = (*pColl)[i]; + if ( pDPObj->IsSheetData() && pDPObj->GetOutRange().aStart.Tab() == nTab ) + ++nFound; + } + return nFound; + } + } + + return 0; +} + +uno::Any SAL_CALL ScDataPilotTablesObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XDataPilotTable> xTable = GetObjectByIndex_Impl((USHORT)nIndex); + uno::Any aAny; + if (xTable.is()) + aAny <<= xTable; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScDataPilotTablesObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<sheet::XDataPilotTable>*)0); +} + +sal_Bool SAL_CALL ScDataPilotTablesObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +// XNameAccess + +uno::Any SAL_CALL ScDataPilotTablesObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XDataPilotTable> xTable = GetObjectByName_Impl(aName); + uno::Any aAny; + if (xTable.is()) + aAny <<= xTable; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScDataPilotTablesObj::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDPCollection* pColl = pDoc->GetDPCollection(); + if ( pColl ) + { + // count tables on this sheet + // api only handles sheet data at this time + //! allow all data sources!!! + + USHORT nFound = 0; + USHORT nCount = pColl->GetCount(); + USHORT i; + for (i=0; i<nCount; i++) + { + ScDPObject* pDPObj = (*pColl)[i]; + if ( pDPObj->IsSheetData() && pDPObj->GetOutRange().aStart.Tab() == nTab ) + ++nFound; + } + + USHORT nPos = 0; + uno::Sequence< ::rtl::OUString> aSeq(nFound); + ::rtl::OUString* pAry = aSeq.getArray(); + for (i=0; i<nCount; i++) + { + ScDPObject* pDPObj = (*pColl)[i]; + if ( pDPObj->IsSheetData() && pDPObj->GetOutRange().aStart.Tab() == nTab ) + pAry[nPos++] = pDPObj->GetName(); + } + + return aSeq; + } + } + return uno::Sequence< ::rtl::OUString>(0); +} + +sal_Bool SAL_CALL ScDataPilotTablesObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScDPCollection* pColl = pDoc->GetDPCollection(); + if ( pColl ) + { + String aNamStr = aName; + USHORT nCount = pColl->GetCount(); + for (USHORT i=0; i<nCount; i++) + { + // api only handles sheet data at this time + //! allow all data sources!!! + + ScDPObject* pDPObj = (*pColl)[i]; + if ( pDPObj->IsSheetData() && + pDPObj->GetOutRange().aStart.Tab() == nTab && + pDPObj->GetName() == aNamStr ) + return TRUE; + } + } + } + return FALSE; +} + +//------------------------------------------------------------------------ + +ScDataPilotDescriptorBase::ScDataPilotDescriptorBase(ScDocShell* pDocSh) : + pDocShell( pDocSh ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScDataPilotDescriptorBase::~ScDataPilotDescriptorBase() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +uno::Any SAL_CALL ScDataPilotDescriptorBase::queryInterface( const uno::Type& rType ) + throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( sheet::XDataPilotDescriptor ) + SC_QUERYINTERFACE( container::XNamed ) // base of XDataPilotDescriptor + SC_QUERYINTERFACE( lang::XUnoTunnel ) + SC_QUERYINTERFACE( lang::XTypeProvider ) + SC_QUERYINTERFACE( lang::XServiceInfo ) + + return OWeakObject::queryInterface( rType ); +} + +void SAL_CALL ScDataPilotDescriptorBase::acquire() throw() +{ + OWeakObject::acquire(); +} + +void SAL_CALL ScDataPilotDescriptorBase::release() throw() +{ + OWeakObject::release(); +} + +uno::Sequence<uno::Type> SAL_CALL ScDataPilotDescriptorBase::getTypes() + throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + aTypes.realloc(4); + uno::Type* pPtr = aTypes.getArray(); + pPtr[0] = getCppuType((const uno::Reference<sheet::XDataPilotDescriptor>*)0); + pPtr[1] = getCppuType((const uno::Reference<lang::XUnoTunnel>*)0); + pPtr[2] = getCppuType((const uno::Reference<lang::XTypeProvider>*)0); + pPtr[3] = getCppuType((const uno::Reference<lang::XServiceInfo>*)0); + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScDataPilotDescriptorBase::getImplementationId() + throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +void ScDataPilotDescriptorBase::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + //! Referenz-Update? + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XDataPilotDescriptor + +table::CellRangeAddress SAL_CALL ScDataPilotDescriptorBase::getSourceRange() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + GetParam( aParam, aQuery, aSrcArea ); + + table::CellRangeAddress aRet; + aRet.Sheet = aSrcArea.nTab; + aRet.StartColumn = aSrcArea.nColStart; + aRet.StartRow = aSrcArea.nRowStart; + aRet.EndColumn = aSrcArea.nColEnd; + aRet.EndRow = aSrcArea.nRowEnd; + return aRet; +} + +void SAL_CALL ScDataPilotDescriptorBase::setSourceRange( + const table::CellRangeAddress& aSourceRange ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + GetParam( aParam, aQuery, aSrcArea ); + + aSrcArea.nTab = aSourceRange.Sheet; + aSrcArea.nColStart = (USHORT)aSourceRange.StartColumn; + aSrcArea.nRowStart = (USHORT)aSourceRange.StartRow; + aSrcArea.nColEnd = (USHORT)aSourceRange.EndColumn; + aSrcArea.nRowEnd = (USHORT)aSourceRange.EndRow; + + SetParam( aParam, aQuery, aSrcArea ); +} + +uno::Reference<sheet::XSheetFilterDescriptor> SAL_CALL ScDataPilotDescriptorBase::getFilterDescriptor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScDataPilotFilterDescriptor( pDocShell, this ); +} + +uno::Reference<container::XIndexAccess> SAL_CALL ScDataPilotDescriptorBase::getDataPilotFields() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScDataPilotFieldsObj( this, SC_FIELDORIENT_ALL ); +} + +uno::Reference<container::XIndexAccess> SAL_CALL ScDataPilotDescriptorBase::getColumnFields() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScDataPilotFieldsObj( this, DATA_PILOT_COLUMN ); +} + +uno::Reference<container::XIndexAccess> SAL_CALL ScDataPilotDescriptorBase::getRowFields() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScDataPilotFieldsObj( this, DATA_PILOT_ROW ); +} + +uno::Reference<container::XIndexAccess> SAL_CALL ScDataPilotDescriptorBase::getPageFields() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScDataPilotFieldsObj( this, DATA_PILOT_PAGE ); +} + +uno::Reference<container::XIndexAccess> SAL_CALL ScDataPilotDescriptorBase::getDataFields() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScDataPilotFieldsObj( this, DATA_PILOT_DATA ); +} + +uno::Reference<container::XIndexAccess> SAL_CALL ScDataPilotDescriptorBase::getHiddenFields() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScDataPilotFieldsObj( this, DATA_PILOT_HIDDEN ); +} + +// XUnoTunnel + +sal_Int64 SAL_CALL ScDataPilotDescriptorBase::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return 0; +} + +// static +const uno::Sequence<sal_Int8>& ScDataPilotDescriptorBase::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScDataPilotDescriptorBase* ScDataPilotDescriptorBase::getImplementation( + const uno::Reference<sheet::XDataPilotDescriptor> xObj ) +{ + ScDataPilotDescriptorBase* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScDataPilotDescriptorBase*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +//------------------------------------------------------------------------ + +ScDataPilotTableObj::ScDataPilotTableObj(ScDocShell* pDocSh, USHORT nT, const String& rN) : + ScDataPilotDescriptorBase( pDocSh ), + nTab( nT ), + aName( rN ) +{ +} + +ScDataPilotTableObj::~ScDataPilotTableObj() +{ +} + +uno::Any SAL_CALL ScDataPilotTableObj::queryInterface( const uno::Type& rType ) + throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( sheet::XDataPilotTable ) + + return ScDataPilotDescriptorBase::queryInterface( rType ); +} + +void SAL_CALL ScDataPilotTableObj::acquire() throw() +{ + ScDataPilotDescriptorBase::acquire(); +} + +void SAL_CALL ScDataPilotTableObj::release() throw() +{ + ScDataPilotDescriptorBase::release(); +} + +uno::Sequence<uno::Type> SAL_CALL ScDataPilotTableObj::getTypes() + throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + uno::Sequence<uno::Type> aParentTypes = ScDataPilotDescriptorBase::getTypes(); + long nParentLen = aParentTypes.getLength(); + const uno::Type* pParentPtr = aParentTypes.getConstArray(); + + aTypes.realloc( nParentLen + 1 ); + uno::Type* pPtr = aTypes.getArray(); + pPtr[nParentLen + 0] = getCppuType((const uno::Reference<sheet::XDataPilotTable>*)0); + + for (long i=0; i<nParentLen; i++) + pPtr[i] = pParentPtr[i]; // parent types first + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScDataPilotTableObj::getImplementationId() + throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +// --- + +void ScDataPilotTableObj::GetParam( ScPivotParam& rParam, ScQueryParam& rQuery, ScArea& rSrcArea ) const +{ + ScDPObject* pDPObj = lcl_GetDPObject(GetDocShell(), nTab, aName); + if (pDPObj) + { + const ScSheetSourceDesc* pSheetDesc = pDPObj->GetSheetDesc(); + if ( pSheetDesc ) + { + // FALSE -> fields are counted within the source range + pDPObj->FillOldParam( rParam, FALSE ); + + rSrcArea = ScArea( pSheetDesc->aSourceRange.aStart.Tab(), + pSheetDesc->aSourceRange.aStart.Col(), + pSheetDesc->aSourceRange.aStart.Row(), + pSheetDesc->aSourceRange.aEnd.Col(), + pSheetDesc->aSourceRange.aEnd.Row() ); + rQuery = pSheetDesc->aQueryParam; + + // in the Uno objects all fields in descriptors are counted within the source range + // fields in ScPivotParam are correct (bForFile=FALSE in FillOldParam), + // ScQueryParam still has to be adjusted: + + short nFieldStart = rSrcArea.nColStart; + USHORT nQueryCount = rQuery.GetEntryCount(); + for ( USHORT i=0; i<nQueryCount; i++ ) + { + ScQueryEntry& rEntry = rQuery.GetEntry(i); + if (rEntry.bDoQuery && rEntry.nField >= nFieldStart) + rEntry.nField -= nFieldStart; + } + + lcl_SetLayoutNamesToParam( rParam, GetDocShell()->GetDocument(), rSrcArea, *pDPObj ); + } + } +} + +void ScDataPilotTableObj::SetParam( const ScPivotParam& rParam, + const ScQueryParam& rQuery, const ScArea& rSrcArea ) +{ + ScDocShell* pDocShell = GetDocShell(); + ScDPObject* pDPObj = lcl_GetDPObject(pDocShell, nTab, aName); + if ( pDPObj && pDocShell ) + { + // in den Uno-Objekten sind alle Fields in den Descriptoren innerhalb des Bereichs gezaehlt + + ScPivotParam aNewParam( rParam ); + short nFieldStart = rSrcArea.nColStart; + USHORT i; + for ( i=0; i<aNewParam.nColCount; i++ ) + if ( aNewParam.aColArr[i].nCol != PIVOT_DATA_FIELD ) + aNewParam.aColArr[i].nCol += nFieldStart; + for ( i=0; i<aNewParam.nRowCount; i++ ) + if ( aNewParam.aRowArr[i].nCol != PIVOT_DATA_FIELD ) + aNewParam.aRowArr[i].nCol += nFieldStart; + for ( i=0; i<aNewParam.nDataCount; i++ ) + if ( aNewParam.aDataArr[i].nCol != PIVOT_DATA_FIELD ) + aNewParam.aDataArr[i].nCol += nFieldStart; + + ScQueryParam aNewQuery( rQuery ); + USHORT nQueryCount = aNewQuery.GetEntryCount(); + for ( i=0; i<nQueryCount; i++ ) + { + ScQueryEntry& rEntry = aNewQuery.GetEntry(i); + if (rEntry.bDoQuery) + rEntry.nField += nFieldStart; + } + +// ScPivot* pNew = new ScPivot(*pPivot); //? behaelt falsche Groessenangaben bei... + + ScDocument* pDoc = pDocShell->GetDocument(); + ScPivot* pNew = new ScPivot( pDoc ); + pNew->SetName( pDPObj->GetName() ); + pNew->SetTag( pDPObj->GetTag() ); + pNew->SetParam( aNewParam, aNewQuery, rSrcArea ); + + ScDPObject* pNewObj = new ScDPObject( pDoc ); + pNewObj->InitFromOldPivot( *pNew, pDoc, TRUE ); + lcl_SetLayoutNamesToObject( pDoc, aNewParam, rSrcArea, *pNewObj ); + + ScDBDocFunc aFunc(*pDocShell); + aFunc.DataPilotUpdate( pDPObj, pNewObj, TRUE, TRUE ); + + delete pNewObj; // DataPilotUpdate copies settings from "new" object + delete pNew; + } +} + +// "rest of XDataPilotDescriptor" + +::rtl::OUString SAL_CALL ScDataPilotTableObj::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDPObject* pDPObj = lcl_GetDPObject(GetDocShell(), nTab, aName); + if (pDPObj) + return pDPObj->GetName(); + return ::rtl::OUString(); +} + +void SAL_CALL ScDataPilotTableObj::setName( const ::rtl::OUString& aNewName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDPObject* pDPObj = lcl_GetDPObject(GetDocShell(), nTab, aName); + if (pDPObj) + { + //! test for existing names !!! + + String aString = aNewName; + pDPObj->SetName( aString ); //! Undo - DBDocFunc ??? + aName = aString; + + // DataPilotUpdate would do too much (output table is not changed) + GetDocShell()->SetDocumentModified(); + } +} + +::rtl::OUString SAL_CALL ScDataPilotTableObj::getTag() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDPObject* pDPObj = lcl_GetDPObject(GetDocShell(), nTab, aName); + if (pDPObj) + return pDPObj->GetTag(); + return ::rtl::OUString(); +} + +void SAL_CALL ScDataPilotTableObj::setTag( const ::rtl::OUString& aNewTag ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDPObject* pDPObj = lcl_GetDPObject(GetDocShell(), nTab, aName); + if (pDPObj) + { + String aString = aNewTag; + pDPObj->SetTag( aString ); //! Undo - DBDocFunc ??? + + // DataPilotUpdate would do too much (output table is not changed) + GetDocShell()->SetDocumentModified(); + } +} + +// XDataPilotTable + +table::CellRangeAddress SAL_CALL ScDataPilotTableObj::getOutputRange() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellRangeAddress aRet; + ScDPObject* pDPObj = lcl_GetDPObject(GetDocShell(), nTab, aName); + if (pDPObj) + { + ScRange aRange = pDPObj->GetOutRange(); + aRet.Sheet = aRange.aStart.Tab(); + aRet.StartColumn = aRange.aStart.Col(); + aRet.StartRow = aRange.aStart.Row(); + aRet.EndColumn = aRange.aEnd.Col(); + aRet.EndRow = aRange.aEnd.Row(); + } + return aRet; +} + +void SAL_CALL ScDataPilotTableObj::refresh() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDPObject* pDPObj = lcl_GetDPObject(GetDocShell(), nTab, aName); + if (pDPObj) + { + ScDPObject* pNew = new ScDPObject(*pDPObj); + ScDBDocFunc aFunc(*GetDocShell()); + aFunc.DataPilotUpdate( pDPObj, pNew, TRUE, TRUE ); + delete pNew; // DataPilotUpdate copies settings from "new" object + } +} + +//------------------------------------------------------------------------ + +ScDataPilotDescriptor::ScDataPilotDescriptor(ScDocShell* pDocSh) : + ScDataPilotDescriptorBase( pDocSh ) +{ +} + +ScDataPilotDescriptor::~ScDataPilotDescriptor() +{ +} + +void ScDataPilotDescriptor::GetParam( ScPivotParam& rParam, ScQueryParam& rQuery, + ScArea& rSrcArea ) const +{ + // Fields sind und bleiben innerhalb des Bereichs + + rParam = aParam; + rQuery = aQuery; + rSrcArea = aSrcArea; +} + +void ScDataPilotDescriptor::SetParam( const ScPivotParam& rParam, + const ScQueryParam& rQuery, const ScArea& rSrcArea ) +{ + // Fields sind und bleiben innerhalb des Bereichs + + aParam = rParam; + aQuery = rQuery; + aSrcArea = rSrcArea; +} + +// "rest of XDataPilotDescriptor" + +::rtl::OUString SAL_CALL ScDataPilotDescriptor::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aNameStr; +} + +void SAL_CALL ScDataPilotDescriptor::setName( const ::rtl::OUString& aNewName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aNameStr = String( aNewName ); +} + +::rtl::OUString SAL_CALL ScDataPilotDescriptor::getTag() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aTagStr; +} + +void SAL_CALL ScDataPilotDescriptor::setTag( const ::rtl::OUString& aNewTag ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aTagStr = String( aNewTag ); +} + +//------------------------------------------------------------------------ + +ScDataPilotFieldsObj::ScDataPilotFieldsObj(ScDataPilotDescriptorBase* pPar, USHORT nTy) : + pParent( pPar ), + nType( nTy ) +{ + pParent->acquire(); +} + +ScDataPilotFieldsObj::~ScDataPilotFieldsObj() +{ + pParent->release(); +} + +USHORT lcl_GetFieldCount( const ScPivotParam& rParam, const ScArea& rSrcArea, USHORT nType ) +{ + USHORT nRet = 0; + + USHORT nDataCount = lcl_DataCount(rParam); + // Daten-Feld bei Spalten oder Zeile, wenn mehr als 1 Eintrag + + USHORT i; + switch (nType) + { + case SC_FIELDORIENT_ALL: + // Anzahl Spalten im Datenbereich + // plus eins fuer das Datenfeld (immer) + nRet = rSrcArea.nColEnd - rSrcArea.nColStart + 2; + break; + case DATA_PILOT_HIDDEN: + { + //! Datenfeld auch hier? + USHORT nColCount = rSrcArea.nColEnd - rSrcArea.nColStart + 1; + for (USHORT nSrcField=0; nSrcField<nColCount; nSrcField++) + { + BOOL bUsed = FALSE; + for (i=0; i<rParam.nColCount; i++) + if ( rParam.aColArr[i].nCol == nSrcField ) bUsed = TRUE; + for (i=0; i<rParam.nRowCount; i++) + if ( rParam.aRowArr[i].nCol == nSrcField ) bUsed = TRUE; + for (i=0; i<rParam.nDataCount; i++) + if ( rParam.aDataArr[i].nCol == nSrcField ) bUsed = TRUE; + if (!bUsed) + ++nRet; + } + } + break; + case DATA_PILOT_COLUMN: + for (i=0; i<rParam.nColCount; i++) + if ( rParam.aColArr[i].nCol != PIVOT_DATA_FIELD || nDataCount > 1 ) + ++nRet; + break; + case DATA_PILOT_ROW: + for (i=0; i<rParam.nRowCount; i++) + if ( rParam.aRowArr[i].nCol != PIVOT_DATA_FIELD || nDataCount > 1 ) + ++nRet; + break; + case DATA_PILOT_PAGE: + nRet = 0; // Page-Fields sind nicht implementiert + break; + case DATA_PILOT_DATA: + nRet = nDataCount; + break; + } + + return nRet; +} + +BOOL lcl_GetFieldDataByIndex( const ScPivotParam& rParam, const ScArea& rSrcArea, + USHORT nType, USHORT nIndex, USHORT& rField ) +{ + BOOL bOk = FALSE; + USHORT nPos = 0; + + USHORT nDataCount = lcl_DataCount(rParam); + // Daten-Feld bei Spalten oder Zeile, wenn mehr als 1 Eintrag + + USHORT i; + switch (nType) + { + case SC_FIELDORIENT_ALL: + { + USHORT nSourceCount = rSrcArea.nColEnd - rSrcArea.nColStart + 1; + if ( nIndex < nSourceCount ) + { + rField = nIndex; + bOk = TRUE; + } + else if ( nIndex == nSourceCount ) + { + rField = PIVOT_DATA_FIELD; + bOk = TRUE; + } + } + break; + case DATA_PILOT_HIDDEN: + { + //! Datenfeld auch hier? + USHORT nColCount = rSrcArea.nColEnd - rSrcArea.nColStart + 1; + for (USHORT nSrcField=0; nSrcField<nColCount; nSrcField++) + { + BOOL bUsed = FALSE; + for (i=0; i<rParam.nColCount; i++) + if ( rParam.aColArr[i].nCol == nSrcField ) bUsed = TRUE; + for (i=0; i<rParam.nRowCount; i++) + if ( rParam.aRowArr[i].nCol == nSrcField ) bUsed = TRUE; + for (i=0; i<rParam.nDataCount; i++) + if ( rParam.aDataArr[i].nCol == nSrcField ) bUsed = TRUE; + if (!bUsed) + { + if ( nPos == nIndex ) + { + rField = nSrcField; + bOk = TRUE; + } + ++nPos; + } + } + } + break; + case DATA_PILOT_COLUMN: + for (i=0; i<rParam.nColCount; i++) + if ( rParam.aColArr[i].nCol != PIVOT_DATA_FIELD || nDataCount > 1 ) + { + if ( nPos == nIndex ) + { + rField = rParam.aColArr[i].nCol; + bOk = TRUE; + } + ++nPos; + } + break; + case DATA_PILOT_ROW: + for (i=0; i<rParam.nRowCount; i++) + if ( rParam.aRowArr[i].nCol != PIVOT_DATA_FIELD || nDataCount > 1 ) + { + if ( nPos == nIndex ) + { + rField = rParam.aRowArr[i].nCol; + bOk = TRUE; + } + ++nPos; + } + break; + case DATA_PILOT_PAGE: + break; // Page-Fields sind nicht implementiert + case DATA_PILOT_DATA: + { + USHORT nArrayPos, nFuncBit; + if ( lcl_GetDataArrayPos( rParam, nIndex, nArrayPos, nFuncBit ) ) + { + rField = rParam.aDataArr[nArrayPos].nCol; + bOk = TRUE; + } + } + break; + } + return bOk; +} + +String lcl_FieldName( ScDocShell* pDocSh, const ScPivotParam& rParam, + const ScArea& rSrcArea, USHORT nField ) +{ + String aRet; + if ( nField == PIVOT_DATA_FIELD ) + aRet = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("Data")); //! ??? + else + { + USHORT nCol = rSrcArea.nColStart + nField; + if ( pDocSh && nCol <= rSrcArea.nColEnd ) + { + USHORT nRow = rSrcArea.nRowStart; + aRet = lcl_ColumnTitle( pDocSh->GetDocument(), nCol, nRow, rSrcArea.nTab ); + + // layout names from SaveData are in PivotParam LabelData + + if ( nField < rParam.nLabels && rParam.ppLabelArr && + rParam.ppLabelArr[nField] && + rParam.ppLabelArr[nField]->pStrColName && + rParam.ppLabelArr[nField]->pStrColName->Len() ) + aRet = *rParam.ppLabelArr[nField]->pStrColName; + } + } + return aRet; +} + +void lcl_SetFieldName( ScPivotParam& rParam, USHORT nField, const String& rNewName ) +{ + USHORT nNewCount = Max( rParam.nLabels, (USHORT)( nField + 1 ) ); + USHORT i; + + LabelData** ppNewData = new LabelData*[nNewCount]; + for (i=0; i<nNewCount; i++) + { + if ( i == nField ) + ppNewData[i] = new LabelData( rNewName, 0, FALSE ); + else if ( i < rParam.nLabels && rParam.ppLabelArr && rParam.ppLabelArr[i] ) + ppNewData[i] = new LabelData( *rParam.ppLabelArr[i] ); + else + ppNewData[i] = new LabelData( EMPTY_STRING, 0, FALSE ); + } + + rParam.SetLabelData( ppNewData, nNewCount ); + + // SetLabelData copies data - ppNewData must be deleted + for (i=0; i<nNewCount; i++) + delete ppNewData[i]; + delete[] ppNewData; +} + +// XDataPilotFields + +ScDataPilotFieldObj* ScDataPilotFieldsObj::GetObjectByIndex_Impl(USHORT nIndex) const +{ + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pParent->GetParam( aParam, aQuery, aSrcArea ); + + USHORT nField = 0; + BOOL bOk = lcl_GetFieldDataByIndex( aParam, aSrcArea, nType, nIndex, nField ); + + if (bOk) + return new ScDataPilotFieldObj( pParent, nField, nType, nIndex ); + + return NULL; +} + +ScDataPilotFieldObj* ScDataPilotFieldsObj::GetObjectByName_Impl(const ::rtl::OUString& aName) const +{ + String aNameStr = aName; + + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pParent->GetParam( aParam, aQuery, aSrcArea ); + + ScDocShell* pDocSh = pParent->GetDocShell(); + USHORT nCount = lcl_GetFieldCount( aParam, aSrcArea, nType ); + USHORT nField = 0; + for (USHORT i=0; i<nCount; i++) + { + if (lcl_GetFieldDataByIndex( aParam, aSrcArea, nType, i, nField )) + { + if ( aNameStr == lcl_FieldName( pDocSh, aParam, aSrcArea, nField ) ) + return new ScDataPilotFieldObj( pParent, nField, nType, i ); + } + } + return NULL; +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScDataPilotFieldsObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.DataPilotFieldsEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScDataPilotFieldsObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pParent->GetParam( aParam, aQuery, aSrcArea ); + + return lcl_GetFieldCount( aParam, aSrcArea, nType ); +} + +uno::Any SAL_CALL ScDataPilotFieldsObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<beans::XPropertySet> xField = GetObjectByIndex_Impl((USHORT)nIndex); + uno::Any aAny; + if (xField.is()) + aAny <<= xField; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScDataPilotFieldsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<beans::XPropertySet>*)0); +} + +sal_Bool SAL_CALL ScDataPilotFieldsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +uno::Any SAL_CALL ScDataPilotFieldsObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<beans::XPropertySet> xField = GetObjectByName_Impl(aName); + uno::Any aAny; + if (xField.is()) + aAny <<= xField; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScDataPilotFieldsObj::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pParent->GetParam( aParam, aQuery, aSrcArea ); + + ScDocShell* pDocSh = pParent->GetDocShell(); + USHORT nCount = lcl_GetFieldCount( aParam, aSrcArea, nType ); + USHORT nField = 0; + + uno::Sequence< ::rtl::OUString> aSeq(nCount); + ::rtl::OUString* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + { + lcl_GetFieldDataByIndex( aParam, aSrcArea, nType, i, nField ); + String aName = lcl_FieldName( pDocSh, aParam, aSrcArea, nField ); + pAry[i] = aName; + } + return aSeq; +} + +sal_Bool SAL_CALL ScDataPilotFieldsObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameStr = aName; + + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pParent->GetParam( aParam, aQuery, aSrcArea ); + + ScDocShell* pDocSh = pParent->GetDocShell(); + USHORT nCount = lcl_GetFieldCount( aParam, aSrcArea, nType ); + USHORT nField = 0; + for (USHORT i=0; i<nCount; i++) + { + if (lcl_GetFieldDataByIndex( aParam, aSrcArea, nType, i, nField )) + { + if ( aNameStr == lcl_FieldName( pDocSh, aParam, aSrcArea, nField ) ) + return TRUE; + } + } + return FALSE; +} + +//------------------------------------------------------------------------ + +ScDataPilotFieldObj::ScDataPilotFieldObj( ScDataPilotDescriptorBase* pPar, + USHORT nF, USHORT nST, USHORT nSP ) : + aPropSet( lcl_GetDataPilotFieldMap() ), + pParent( pPar ), + nField( nF ), + nSourceType( nST ), + nSourcePos( nSP ), + nLastFunc( sheet::GeneralFunction_NONE ) +{ + pParent->acquire(); +} + +ScDataPilotFieldObj::~ScDataPilotFieldObj() +{ + pParent->release(); +} + +// XNamed + +::rtl::OUString SAL_CALL ScDataPilotFieldObj::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pParent->GetParam( aParam, aQuery, aSrcArea ); + + String aRet = lcl_FieldName( pParent->GetDocShell(), aParam, aSrcArea, nField ); + + return aRet; +} + +void SAL_CALL ScDataPilotFieldObj::setName( const ::rtl::OUString& aNewName ) + throw(uno::RuntimeException) +{ + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pParent->GetParam( aParam, aQuery, aSrcArea ); + + if ( nField == PIVOT_DATA_FIELD ) + { + //! ... ??? + } + else + lcl_SetFieldName( aParam, nField, aNewName ); + + pParent->SetParam( aParam, aQuery, aSrcArea ); +} + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScDataPilotFieldObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScDataPilotFieldObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + if ( aNameString.EqualsAscii( SC_UNONAME_FUNCTION ) ) + { + //! test for correct enum type? + sheet::GeneralFunction eFunction = (sheet::GeneralFunction) + ScUnoHelpFunctions::GetEnumFromAny( aValue ); + setFunction( eFunction ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_ORIENT ) ) + { + //! test for correct enum type? + sheet::DataPilotFieldOrientation eOrient = (sheet::DataPilotFieldOrientation) + ScUnoHelpFunctions::GetEnumFromAny( aValue ); + setOrientation( eOrient ); + } +} + +uno::Any SAL_CALL ScDataPilotFieldObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + uno::Any aRet; + + if ( aNameString.EqualsAscii( SC_UNONAME_FUNCTION ) ) + { + sheet::GeneralFunction eFunction = getFunction(); + aRet <<= eFunction; + } + else if ( aNameString.EqualsAscii( SC_UNONAME_ORIENT ) ) + { + sheet::DataPilotFieldOrientation eOrient = getOrientation(); + aRet <<= eOrient; + } + + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScDataPilotFieldObj ) + +void lcl_FindUsage( const ScPivotParam& rParam, USHORT nField, USHORT& rType, USHORT& rPos ) +{ + USHORT i; + for (i=0; i<rParam.nColCount; i++) + if ( rParam.aColArr[i].nCol == nField ) + { + rType = DATA_PILOT_COLUMN; + rPos = i; + return; + } + for (i=0; i<rParam.nRowCount; i++) + if ( rParam.aRowArr[i].nCol == nField ) + { + rType = DATA_PILOT_ROW; + rPos = i; + return; + } + USHORT nBitCount = 0; + for (i=0; i<rParam.nDataCount; i++) + { + if ( rParam.aDataArr[i].nCol == nField ) + { + rType = DATA_PILOT_DATA; + rPos = nBitCount; // Uno-Index der ersten Funktion + return; + } + nBitCount += lcl_BitCount( rParam.aDataArr[i].nFuncMask ); + } + //! DATA_PILOT_HIDDEN zurueck - Position suchen +} + +sheet::DataPilotFieldOrientation ScDataPilotFieldObj::getOrientation(void) const +{ + SolarMutexGuard aGuard; + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pParent->GetParam( aParam, aQuery, aSrcArea ); + + USHORT nType = nSourceType; + USHORT nPos = nSourcePos; + if ( nType == SC_FIELDORIENT_ALL ) + lcl_FindUsage( aParam, nField, nType, nPos ); + + if ( nType == SC_FIELDORIENT_ALL ) // bei FindUsage nicht gefunden + nType = DATA_PILOT_HIDDEN; // nicht verwendet + + return (sheet::DataPilotFieldOrientation)nType; +} + +void lcl_RemoveField( PivotField* pFields, USHORT& rCount, USHORT nField ) +{ + for (USHORT i=0; i<rCount; i++) + if (pFields[i].nCol == nField) + { + for (USHORT j=i; j+1<rCount; j++) + pFields[j] = pFields[j+1]; + --rCount; + return; // nicht weitersuchen + } +} + +void ScDataPilotFieldObj::setOrientation(sheet::DataPilotFieldOrientation eNew) +{ + SolarMutexGuard aGuard; + if ( eNew == nSourceType ) + return; // nix + + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pParent->GetParam( aParam, aQuery, aSrcArea ); + + // aus altem Array entfernen + + switch (nSourceType) + { + case DATA_PILOT_COLUMN: + if ( nSourcePos < aParam.nColCount ) + { + for (USHORT i=nSourcePos; i+1<aParam.nColCount; i++) + aParam.aColArr[i] = aParam.aColArr[i+1]; + --aParam.nColCount; + } + break; + case DATA_PILOT_ROW: + if ( nSourcePos < aParam.nRowCount ) + { + for (USHORT i=nSourcePos; i+1<aParam.nRowCount; i++) + aParam.aRowArr[i] = aParam.aRowArr[i+1]; + --aParam.nRowCount; + } + break; + case DATA_PILOT_DATA: + { + USHORT nArrayPos, nFuncBit; + if ( lcl_GetDataArrayPos( aParam, nSourcePos, nArrayPos, nFuncBit ) ) + { + aParam.aDataArr[nArrayPos].nFuncMask &= ~nFuncBit; // Funktion weglassen + if (!aParam.aDataArr[nArrayPos].nFuncMask) // war's die letzte? + { + for (USHORT j=nArrayPos; j+1<aParam.nDataCount; j++) + aParam.aDataArr[j] = aParam.aDataArr[j+1]; + --aParam.nDataCount; + } + } + } + break; + + // SC_FIELDORIENT_ALL, DATA_PILOT_HIDDEN: nichts + } + + // if Function was set for this object, use that value; + // default otherwise (0 for SubTotals, SUM for data) + USHORT nNewBit = ScDataPilotConversion::FunctionBit( (sheet::GeneralFunction)nLastFunc ); + + // in neues Array eintragen + + switch (eNew) + { + case DATA_PILOT_COLUMN: + if ( aParam.nColCount < PIVOT_MAXFIELD ) + { + lcl_RemoveField( aParam.aColArr, aParam.nColCount, nField ); // nicht doppelt + lcl_RemoveField( aParam.aRowArr, aParam.nRowCount, nField ); + aParam.aColArr[aParam.nColCount].nCol = nField; + aParam.aColArr[aParam.nColCount].nFuncMask = nNewBit; + nSourceType = DATA_PILOT_COLUMN; + nSourcePos = aParam.nColCount; + ++aParam.nColCount; + } + break; + case DATA_PILOT_ROW: + if ( aParam.nRowCount < PIVOT_MAXFIELD ) + { + lcl_RemoveField( aParam.aColArr, aParam.nColCount, nField ); // nicht doppelt + lcl_RemoveField( aParam.aRowArr, aParam.nRowCount, nField ); + aParam.aRowArr[aParam.nRowCount].nCol = nField; + aParam.aRowArr[aParam.nRowCount].nFuncMask = nNewBit; + nSourceType = DATA_PILOT_ROW; + nSourcePos = aParam.nRowCount; + ++aParam.nRowCount; + } + break; + case DATA_PILOT_DATA: + if ( aParam.nDataCount < PIVOT_MAXFIELD ) + { + //! ggf. mit bestehendem Eintrag zusammenfassen (Funktionen verodern) ??? + aParam.aDataArr[aParam.nDataCount].nCol = nField; + if ( nNewBit == 0 ) + nNewBit = PIVOT_FUNC_SUM; + aParam.aDataArr[aParam.nDataCount].nFuncMask = nNewBit; + nSourceType = DATA_PILOT_DATA; + nSourcePos = aParam.nDataCount; + ++aParam.nDataCount; + } + break; + default: // PAGE or HIDDEN + nSourceType = eNew; + nSourcePos = 0; + break; + } + + pParent->SetParam( aParam, aQuery, aSrcArea ); +} + +sheet::GeneralFunction ScDataPilotFieldObj::getFunction(void) const +{ + SolarMutexGuard aGuard; + sheet::GeneralFunction eRet = sheet::GeneralFunction_NONE; + + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pParent->GetParam( aParam, aQuery, aSrcArea ); + + USHORT nType = nSourceType; + USHORT nPos = nSourcePos; + if ( nType == SC_FIELDORIENT_ALL ) + lcl_FindUsage( aParam, nField, nType, nPos ); + + switch ( nType ) + { + case DATA_PILOT_COLUMN: + if ( nPos < aParam.nColCount ) + eRet = ScDataPilotConversion::FirstFunc( aParam.aColArr[nPos].nFuncMask ); + break; + case DATA_PILOT_ROW: + if ( nPos < aParam.nRowCount ) + eRet = ScDataPilotConversion::FirstFunc( aParam.aRowArr[nPos].nFuncMask ); + break; + case DATA_PILOT_DATA: // Bits zaehlen... + { + USHORT nArrayPos, nFuncBit; + if ( lcl_GetDataArrayPos( aParam, nPos, nArrayPos, nFuncBit ) ) + eRet = ScDataPilotConversion::FirstFunc( nFuncBit ); + } + break; + default: + // if Function has been set for this object, return that value + eRet = (sheet::GeneralFunction) nLastFunc; + } + return eRet; +} + +void ScDataPilotFieldObj::setFunction(sheet::GeneralFunction eNewFunc) +{ + SolarMutexGuard aGuard; + ScPivotParam aParam; + ScQueryParam aQuery; + ScArea aSrcArea; + pParent->GetParam( aParam, aQuery, aSrcArea ); + + USHORT nType = nSourceType; + USHORT nPos = nSourcePos; + if ( nType == SC_FIELDORIENT_ALL ) + lcl_FindUsage( aParam, nField, nType, nPos ); + + switch ( nType ) + { + case DATA_PILOT_COLUMN: + if ( nPos < aParam.nColCount ) + aParam.aColArr[nPos].nFuncMask = ScDataPilotConversion::FunctionBit(eNewFunc); + break; + case DATA_PILOT_ROW: + if ( nPos < aParam.nRowCount ) + aParam.aRowArr[nPos].nFuncMask = ScDataPilotConversion::FunctionBit(eNewFunc); + break; + case DATA_PILOT_DATA: // Bits zaehlen... + { + USHORT nArrayPos, nFuncBit; + if ( lcl_GetDataArrayPos( aParam, nPos, nArrayPos, nFuncBit ) ) + { + // alte Funktion weglassen, neue eintragen + aParam.aDataArr[nArrayPos].nFuncMask &= ~nFuncBit; + aParam.aDataArr[nArrayPos].nFuncMask |= ScDataPilotConversion::FunctionBit(eNewFunc); + } + } + break; + } + + pParent->SetParam( aParam, aQuery, aSrcArea ); + + nLastFunc = eNewFunc; // to allow setting Function before Orientation +} + + +//------------------------------------------------------------------------ + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_datauno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_datauno.cxx new file mode 100644 index 000000000000..87dd6ee045f9 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_datauno.cxx @@ -0,0 +1,2085 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <com/sun/star/beans/PropertyAttribute.hpp> +#include <bf_svtools/zforlist.hxx> +#include <rtl/uuid.h> + +#include <com/sun/star/awt/XBitmap.hpp> +#include <com/sun/star/util/SortField.hpp> +#include <com/sun/star/table/TableSortField.hpp> +#include <com/sun/star/sheet/DataImportMode.hpp> + +#include "datauno.hxx" +#include "dapiuno.hxx" +#include "cellsuno.hxx" +#include "miscuno.hxx" +#include "targuno.hxx" +#include "dbcolect.hxx" +#include "docsh.hxx" +#include "dbdocfun.hxx" +#include <vcl/svapp.hxx> +#include "unonames.hxx" +#include "globstr.hrc" +#include "convuno.hxx" +#include "attrib.hxx" +#include <comphelper/extract.hxx> +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +// alles ohne Which-ID, Map nur fuer PropertySetInfo + +const SfxItemPropertyMap* lcl_GetSubTotalPropertyMap() +{ + // some old property names are for 5.2 compatibility + + static SfxItemPropertyMap aSubTotalPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_BINDFMT), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_CASE), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_ENABSORT), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_ENUSLIST), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_FORMATS), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_INSBRK), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_ISCASE), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_MAXFLD), 0, &getCppuType((sal_Int32*)0), beans::PropertyAttribute::READONLY}, + {MAP_CHAR_LEN(SC_UNONAME_SORTASC), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_ULIST), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_UINDEX), 0, &getCppuType((sal_Int32*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_USINDEX), 0, &getCppuType((sal_Int32*)0), 0}, + {0,0,0,0} + }; + return aSubTotalPropertyMap_Impl; +} + +const SfxItemPropertyMap* lcl_GetFilterPropertyMap() +{ + static SfxItemPropertyMap aFilterPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_CONTHDR), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_COPYOUT), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_ISCASE), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_MAXFLD), 0, &getCppuType((sal_Int32*)0), beans::PropertyAttribute::READONLY}, + {MAP_CHAR_LEN(SC_UNONAME_ORIENT), 0, &getCppuType((table::TableOrientation*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_OUTPOS), 0, &getCppuType((table::CellAddress*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_SAVEOUT), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_SKIPDUP), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_USEREGEX), 0, &getBooleanCppuType(), 0}, + {0,0,0,0} + }; + return aFilterPropertyMap_Impl; +} + +const SfxItemPropertyMap* lcl_GetDBRangePropertyMap() +{ + static SfxItemPropertyMap aDBRangePropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_AUTOFLT), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_FLTCRT), 0, &getCppuType((table::CellRangeAddress*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_ISUSER), 0, &getBooleanCppuType(), beans::PropertyAttribute::READONLY }, + {MAP_CHAR_LEN(SC_UNONAME_KEEPFORM), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_LINKDISPBIT), 0, &getCppuType((uno::Reference<awt::XBitmap>*)0), beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNO_LINKDISPNAME), 0, &getCppuType((::rtl::OUString*)0), beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_MOVCELLS), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_STRIPDAT), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_USEFLTCRT),0, &getBooleanCppuType(), 0}, + {0,0,0,0} + }; + return aDBRangePropertyMap_Impl; +} + + +//------------------------------------------------------------------------ + +#define SCDATABASERANGEOBJ_SERVICE "com.sun.star.sheet.DatabaseRange" + +SC_SIMPLE_SERVICE_INFO( ScConsolidationDescriptor, "ScConsolidationDescriptor", "com.sun.star.sheet.ConsolidationDescriptor" ) +SC_SIMPLE_SERVICE_INFO( ScDatabaseRangesObj, "ScDatabaseRangesObj", "com.sun.star.sheet.DatabaseRanges" ) +SC_SIMPLE_SERVICE_INFO( ScFilterDescriptorBase, "ScFilterDescriptorBase", "com.sun.star.sheet.SheetFilterDescriptor" ) +SC_SIMPLE_SERVICE_INFO( ScSubTotalDescriptorBase, "ScSubTotalDescriptorBase", "com.sun.star.sheet.SubTotalDescriptor" ) +SC_SIMPLE_SERVICE_INFO( ScSubTotalFieldObj, "ScSubTotalFieldObj", "com.sun.star.sheet.SubTotalField" ) + + +//------------------------------------------------------------------------ + +// static +ScSubTotalFunc ScDataUnoConversion::GeneralToSubTotal( sheet::GeneralFunction eSummary ) +{ + ScSubTotalFunc eSubTotal; + switch (eSummary) + { + case sheet::GeneralFunction_NONE: eSubTotal = SUBTOTAL_FUNC_NONE; break; + case sheet::GeneralFunction_SUM: eSubTotal = SUBTOTAL_FUNC_SUM; break; + case sheet::GeneralFunction_COUNT: eSubTotal = SUBTOTAL_FUNC_CNT2; break; + case sheet::GeneralFunction_AVERAGE: eSubTotal = SUBTOTAL_FUNC_AVE; break; + case sheet::GeneralFunction_MAX: eSubTotal = SUBTOTAL_FUNC_MAX; break; + case sheet::GeneralFunction_MIN: eSubTotal = SUBTOTAL_FUNC_MIN; break; + case sheet::GeneralFunction_PRODUCT: eSubTotal = SUBTOTAL_FUNC_PROD; break; + case sheet::GeneralFunction_COUNTNUMS: eSubTotal = SUBTOTAL_FUNC_CNT; break; + case sheet::GeneralFunction_STDEV: eSubTotal = SUBTOTAL_FUNC_STD; break; + case sheet::GeneralFunction_STDEVP: eSubTotal = SUBTOTAL_FUNC_STDP; break; + case sheet::GeneralFunction_VAR: eSubTotal = SUBTOTAL_FUNC_VAR; break; + case sheet::GeneralFunction_VARP: eSubTotal = SUBTOTAL_FUNC_VARP; break; + case sheet::GeneralFunction_AUTO: + default: + DBG_ERROR("GeneralToSubTotal: falscher enum"); + eSubTotal = SUBTOTAL_FUNC_NONE; + } + return eSubTotal; +} + +// static +sheet::GeneralFunction ScDataUnoConversion::SubTotalToGeneral( ScSubTotalFunc eSubTotal ) +{ + sheet::GeneralFunction eGeneral; + switch (eSubTotal) + { + case SUBTOTAL_FUNC_NONE: eGeneral = sheet::GeneralFunction_NONE; break; + case SUBTOTAL_FUNC_AVE: eGeneral = sheet::GeneralFunction_AVERAGE; break; + case SUBTOTAL_FUNC_CNT: eGeneral = sheet::GeneralFunction_COUNTNUMS; break; + case SUBTOTAL_FUNC_CNT2: eGeneral = sheet::GeneralFunction_COUNT; break; + case SUBTOTAL_FUNC_MAX: eGeneral = sheet::GeneralFunction_MAX; break; + case SUBTOTAL_FUNC_MIN: eGeneral = sheet::GeneralFunction_MIN; break; + case SUBTOTAL_FUNC_PROD: eGeneral = sheet::GeneralFunction_PRODUCT; break; + case SUBTOTAL_FUNC_STD: eGeneral = sheet::GeneralFunction_STDEV; break; + case SUBTOTAL_FUNC_STDP: eGeneral = sheet::GeneralFunction_STDEVP; break; + case SUBTOTAL_FUNC_SUM: eGeneral = sheet::GeneralFunction_SUM; break; + case SUBTOTAL_FUNC_VAR: eGeneral = sheet::GeneralFunction_VAR; break; + case SUBTOTAL_FUNC_VARP: eGeneral = sheet::GeneralFunction_VARP; break; + default: + DBG_ERROR("SubTotalToGeneral: falscher enum"); + eGeneral = sheet::GeneralFunction_NONE; + break; + } + return eGeneral; +} + +//------------------------------------------------------------------------ + +// ScImportDescriptor: alles static + +long ScImportDescriptor::GetPropertyCount() +{ + return 4; +} + +void ScImportDescriptor::FillProperties( uno::Sequence<beans::PropertyValue>& rSeq, const ScImportParam& rParam ) +{ + DBG_ASSERT( rSeq.getLength() == GetPropertyCount(), "falscher Count" ); + + beans::PropertyValue* pArray = rSeq.getArray(); + + sheet::DataImportMode eMode = sheet::DataImportMode_NONE; + if ( rParam.bImport ) + { + if ( rParam.bSql ) + eMode = sheet::DataImportMode_SQL; + else if ( rParam.nType == ScDbQuery ) + eMode = sheet::DataImportMode_QUERY; + else + eMode = sheet::DataImportMode_TABLE; // Type ist immer ScDbQuery oder ScDbTable + } + + pArray[0].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_DBNAME ); + pArray[0].Value <<= ::rtl::OUString( rParam.aDBName ); + + pArray[1].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_SRCTYPE ); + pArray[1].Value <<= eMode; + + pArray[2].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_SRCOBJ ); + pArray[2].Value <<= ::rtl::OUString( rParam.aStatement ); + + pArray[3].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_NATIVE ); + ScUnoHelpFunctions::SetBoolInAny( pArray[3].Value, rParam.bNative ); +} + +void ScImportDescriptor::FillImportParam( ScImportParam& rParam, const uno::Sequence<beans::PropertyValue>& rSeq ) +{ + ::rtl::OUString aStrVal; + const beans::PropertyValue* pPropArray = rSeq.getConstArray(); + long nPropCount = rSeq.getLength(); + for (long i = 0; i < nPropCount; i++) + { + const beans::PropertyValue& rProp = pPropArray[i]; + String aPropName = rProp.Name; + + if (aPropName.EqualsAscii( SC_UNONAME_NATIVE )) + rParam.bNative = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value ); + else if (aPropName.EqualsAscii( SC_UNONAME_DBNAME )) + { + if ( rProp.Value >>= aStrVal ) + rParam.aDBName = String( aStrVal ); + } + else if (aPropName.EqualsAscii( SC_UNONAME_SRCOBJ )) + { + if ( rProp.Value >>= aStrVal ) + rParam.aStatement = String( aStrVal ); + } + else if (aPropName.EqualsAscii( SC_UNONAME_SRCTYPE )) + { + //! test for correct enum type? + sheet::DataImportMode eMode = (sheet::DataImportMode) + ScUnoHelpFunctions::GetEnumFromAny( rProp.Value ); + switch (eMode) + { + case sheet::DataImportMode_NONE: + rParam.bImport = FALSE; + break; + case sheet::DataImportMode_SQL: + rParam.bImport = TRUE; + rParam.bSql = TRUE; + break; + case sheet::DataImportMode_TABLE: + rParam.bImport = TRUE; + rParam.bSql = FALSE; + rParam.nType = ScDbTable; + break; + case sheet::DataImportMode_QUERY: + rParam.bImport = TRUE; + rParam.bSql = FALSE; + rParam.nType = ScDbQuery; + break; + default: + DBG_ERROR("falscher Mode"); + rParam.bImport = FALSE; + } + } + } +} + +//------------------------------------------------------------------------ + +// ScSortDescriptor: alles static + +//! SortAscending muss aus der SheetSortDescriptor service-Beschreibung raus + +long ScSortDescriptor::GetPropertyCount() +{ + return 9; // TableSortDescriptor and SheetSortDescriptor +} + +void ScSortDescriptor::FillProperties( uno::Sequence<beans::PropertyValue>& rSeq, const ScSortParam& rParam ) +{ + DBG_ASSERT( rSeq.getLength() == GetPropertyCount(), "falscher Count" ); + + beans::PropertyValue* pArray = rSeq.getArray(); + + // Uno-Werte zusammensuchen + + table::TableOrientation eOrient = + rParam.bByRow ? table::TableOrientation_ROWS : table::TableOrientation_COLUMNS; + + table::CellAddress aOutPos; + aOutPos.Sheet = rParam.nDestTab; + aOutPos.Column = rParam.nDestCol; + aOutPos.Row = rParam.nDestRow; + + USHORT nSortCount = 0; + while ( nSortCount < MAXSORT && rParam.bDoSort[nSortCount] ) + ++nSortCount; + + uno::Sequence<table::TableSortField> aFields(nSortCount); + if (nSortCount) + { + table::TableSortField* pFieldArray = aFields.getArray(); + for (USHORT i=0; i<nSortCount; i++) + { + pFieldArray[i].Field = rParam.nField[i]; + pFieldArray[i].IsAscending = rParam.bAscending[i]; + pFieldArray[i].FieldType = table::TableSortFieldType_AUTOMATIC; // immer Automatic + pFieldArray[i].IsCaseSensitive = rParam.bCaseSens; + pFieldArray[i].CollatorLocale = rParam.aCollatorLocale; + pFieldArray[i].CollatorAlgorithm = ::rtl::OUString( rParam.aCollatorAlgorithm ); + } + } + + // Sequence fuellen + + pArray[0].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_ISSORTCOLUMNS ); + pArray[0].Value = ::cppu::bool2any(!rParam.bByRow); + + pArray[1].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_CONTHDR ); + ScUnoHelpFunctions::SetBoolInAny( pArray[1].Value, rParam.bHasHeader ); + + pArray[2].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_MAXFLD ); + pArray[2].Value <<= (sal_Int32) MAXSORT; + + pArray[3].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_SORTFLD ); + pArray[3].Value <<= aFields; + + pArray[4].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_BINDFMT ); + ScUnoHelpFunctions::SetBoolInAny( pArray[4].Value, rParam.bIncludePattern ); + + pArray[5].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_COPYOUT ); + ScUnoHelpFunctions::SetBoolInAny( pArray[5].Value, !rParam.bInplace ); + + pArray[6].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_OUTPOS ); + pArray[6].Value <<= aOutPos; + + pArray[7].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_ISULIST ); + ScUnoHelpFunctions::SetBoolInAny( pArray[7].Value, rParam.bUserDef ); + + pArray[8].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_UINDEX ); + pArray[8].Value <<= (sal_Int32) rParam.nUserIndex; +} + +void ScSortDescriptor::FillSortParam( ScSortParam& rParam, const uno::Sequence<beans::PropertyValue>& rSeq ) +{ + sal_Bool bOldSortDescriptor(sal_False); + sal_Bool bNewSortDescriptor(sal_False); + const beans::PropertyValue* pPropArray = rSeq.getConstArray(); + long nPropCount = rSeq.getLength(); + for (long i = 0; i < nPropCount; i++) + { + const beans::PropertyValue& rProp = pPropArray[i]; + String aPropName = rProp.Name; + + if (aPropName.EqualsAscii( SC_UNONAME_ORIENT )) + { + bOldSortDescriptor = sal_True; + //! test for correct enum type? + table::TableOrientation eOrient = (table::TableOrientation) + ScUnoHelpFunctions::GetEnumFromAny( rProp.Value ); + rParam.bByRow = ( eOrient != table::TableOrientation_COLUMNS ); + } + else if (aPropName.EqualsAscii( SC_UNONAME_ISSORTCOLUMNS )) + { + bNewSortDescriptor = sal_True; + rParam.bByRow = !::cppu::any2bool(rProp.Value); + } + else if (aPropName.EqualsAscii( SC_UNONAME_CONTHDR )) + rParam.bHasHeader = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value ); + else if (aPropName.EqualsAscii( SC_UNONAME_MAXFLD )) + { + sal_Int32 nVal; + if ( (rProp.Value >>= nVal) && nVal > MAXSORT ) + { + //! specify exceptions + //! throw lang::IllegalArgumentException(); + } + } + else if (aPropName.EqualsAscii( SC_UNONAME_SORTFLD )) + { + uno::Sequence<util::SortField> aSeq; + uno::Sequence<table::TableSortField> aNewSeq; + if ( rProp.Value >>= aSeq ) + { + bOldSortDescriptor = sal_True; + INT32 nCount = aSeq.getLength(); + INT32 i; + if ( nCount > MAXSORT ) + { + DBG_ERROR("Zu viele Sortierfelder"); + nCount = MAXSORT; + } + const util::SortField* pFieldArray = aSeq.getConstArray(); + for (i=0; i<nCount; i++) + { + rParam.nField[i] = (USHORT)pFieldArray[i].Field; + rParam.bAscending[i] = pFieldArray[i].SortAscending; + + // FieldType wird ignoriert + rParam.bDoSort[i] = TRUE; + } + for (i=nCount; i<MAXSORT; i++) + rParam.bDoSort[i] = FALSE; + } + else if ( rProp.Value >>= aNewSeq ) + { + bNewSortDescriptor = sal_True; + INT32 nCount = aNewSeq.getLength(); + INT32 i; + if ( nCount > MAXSORT ) + { + DBG_ERROR("Zu viele Sortierfelder"); + nCount = MAXSORT; + } + const table::TableSortField* pFieldArray = aNewSeq.getConstArray(); + for (i=0; i<nCount; i++) + { + rParam.nField[i] = (USHORT)pFieldArray[i].Field; + rParam.bAscending[i] = pFieldArray[i].IsAscending; + + // only one is possible, sometime we should make it possible to have different for every entry + rParam.bCaseSens = pFieldArray[i].IsCaseSensitive; + rParam.aCollatorLocale = pFieldArray[i].CollatorLocale; + rParam.aCollatorAlgorithm = pFieldArray[i].CollatorAlgorithm; + + // FieldType wird ignoriert + rParam.bDoSort[i] = TRUE; + } + for (i=nCount; i<MAXSORT; i++) + rParam.bDoSort[i] = FALSE; + } + } + else if (aPropName.EqualsAscii( SC_UNONAME_ISCASE )) + { + bOldSortDescriptor = sal_True; + rParam.bCaseSens = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value ); + } + else if (aPropName.EqualsAscii( SC_UNONAME_BINDFMT )) + rParam.bIncludePattern = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value ); + else if (aPropName.EqualsAscii( SC_UNONAME_COPYOUT )) + rParam.bInplace = !ScUnoHelpFunctions::GetBoolFromAny( rProp.Value ); + else if (aPropName.EqualsAscii( SC_UNONAME_OUTPOS )) + { + table::CellAddress aAddress; + if ( rProp.Value >>= aAddress ) + { + rParam.nDestTab = aAddress.Sheet; + rParam.nDestCol = (USHORT)aAddress.Column; + rParam.nDestRow = (USHORT)aAddress.Row; + } + } + else if (aPropName.EqualsAscii( SC_UNONAME_ISULIST )) + rParam.bUserDef = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value ); + else if (aPropName.EqualsAscii( SC_UNONAME_UINDEX )) + { + sal_Int32 nVal; + if ( rProp.Value >>= nVal ) + rParam.nUserIndex = (USHORT)nVal; + } + else if (aPropName.EqualsAscii( SC_UNONAME_COLLLOC )) + { + bOldSortDescriptor = sal_True; + rProp.Value >>= rParam.aCollatorLocale; + } + else if (aPropName.EqualsAscii( SC_UNONAME_COLLALG )) + { + bOldSortDescriptor = sal_True; + ::rtl::OUString sStr; + if ( rProp.Value >>= sStr ) + rParam.aCollatorAlgorithm = sStr; + } + } +} + +//------------------------------------------------------------------------ + +ScSubTotalFieldObj::ScSubTotalFieldObj( ScSubTotalDescriptorBase* pDesc, USHORT nP ) : + rParent( *pDesc ), + xRef( pDesc ), // Objekt festhalten + nPos( nP ) +{ + DBG_ASSERT(pDesc, "ScSubTotalFieldObj: Parent ist 0"); +} + +ScSubTotalFieldObj::~ScSubTotalFieldObj() +{ +} + +// XSubTotalField + +sal_Int32 SAL_CALL ScSubTotalFieldObj::getGroupColumn() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSubTotalParam aParam; + rParent.GetData(aParam); + + return aParam.nField[nPos]; +} + +void SAL_CALL ScSubTotalFieldObj::setGroupColumn( sal_Int32 nGroupColumn ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSubTotalParam aParam; + rParent.GetData(aParam); + + aParam.nField[nPos] = (USHORT)nGroupColumn; + + rParent.PutData(aParam); +} + +uno::Sequence<sheet::SubTotalColumn> SAL_CALL ScSubTotalFieldObj::getSubTotalColumns() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSubTotalParam aParam; + rParent.GetData(aParam); + + USHORT nCount = aParam.nSubTotals[nPos]; + uno::Sequence<sheet::SubTotalColumn> aSeq(nCount); + sheet::SubTotalColumn* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + { + pAry[i].Column = aParam.pSubTotals[nPos][i]; + pAry[i].Function = ScDataUnoConversion::SubTotalToGeneral( + aParam.pFunctions[nPos][i] ); + } + return aSeq; +} + +void SAL_CALL ScSubTotalFieldObj::setSubTotalColumns( + const uno::Sequence<sheet::SubTotalColumn>& aSubTotalColumns ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSubTotalParam aParam; + rParent.GetData(aParam); + + UINT32 nColCount = aSubTotalColumns.getLength(); + if ( nColCount <= USHRT_MAX ) + { + USHORT nCount = (USHORT)nColCount; + aParam.nSubTotals[nPos] = nCount; + if (nCount) + { + aParam.pSubTotals[nPos] = new USHORT[nCount]; + aParam.pFunctions[nPos] = new ScSubTotalFunc[nCount]; + + const sheet::SubTotalColumn* pAry = aSubTotalColumns.getConstArray(); + for (USHORT i=0; i<nCount; i++) + { + aParam.pSubTotals[nPos][i] = (USHORT)pAry[i].Column; + aParam.pFunctions[nPos][i] = + ScDataUnoConversion::GeneralToSubTotal( pAry[i].Function ); + } + } + else + { + aParam.pSubTotals[nPos] = NULL; + aParam.pFunctions[nPos] = NULL; + } + } + //! sonst Exception oder so? (zuviele Spalten) + + rParent.PutData(aParam); +} + +//------------------------------------------------------------------------ + +ScSubTotalDescriptorBase::ScSubTotalDescriptorBase() : + aPropSet( lcl_GetSubTotalPropertyMap() ) +{ +} + +ScSubTotalDescriptorBase::~ScSubTotalDescriptorBase() +{ +} + +// XSubTotalDesctiptor + +ScSubTotalFieldObj* ScSubTotalDescriptorBase::GetObjectByIndex_Impl(USHORT nIndex) +{ + if ( nIndex < getCount() ) + return new ScSubTotalFieldObj( this, nIndex ); + return NULL; +} + +void SAL_CALL ScSubTotalDescriptorBase::clear() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSubTotalParam aParam; + GetData(aParam); + + for (USHORT i=0; i<MAXSUBTOTAL; i++) + aParam.bGroupActive[i] = FALSE; + + //! Notify oder so fuer die Field-Objekte??? + + PutData(aParam); +} + +void SAL_CALL ScSubTotalDescriptorBase::addNew( + const uno::Sequence<sheet::SubTotalColumn>& aSubTotalColumns, + sal_Int32 nGroupColumn ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSubTotalParam aParam; + GetData(aParam); + + USHORT nPos = 0; + while ( nPos < MAXSUBTOTAL && aParam.bGroupActive[nPos] ) + ++nPos; + + UINT32 nColCount = aSubTotalColumns.getLength(); + + if ( nPos < MAXSUBTOTAL && nColCount <= USHRT_MAX ) + { + aParam.bGroupActive[nPos] = TRUE; + aParam.nField[nPos] = (USHORT)nGroupColumn; + + delete aParam.pSubTotals[nPos]; + delete aParam.pFunctions[nPos]; + + USHORT nCount = (USHORT)nColCount; + aParam.nSubTotals[nPos] = nCount; + if (nCount) + { + aParam.pSubTotals[nPos] = new USHORT[nCount]; + aParam.pFunctions[nPos] = new ScSubTotalFunc[nCount]; + + const sheet::SubTotalColumn* pAry = aSubTotalColumns.getConstArray(); + for (USHORT i=0; i<nCount; i++) + { + aParam.pSubTotals[nPos][i] = (USHORT)pAry[i].Column; + aParam.pFunctions[nPos][i] = + ScDataUnoConversion::GeneralToSubTotal( pAry[i].Function ); + } + } + else + { + aParam.pSubTotals[nPos] = NULL; + aParam.pFunctions[nPos] = NULL; + } + } + else // too many fields / columns + throw uno::RuntimeException(); // no other exceptions specified + + PutData(aParam); +} + +// Flags/Einstellungen als Properties + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScSubTotalDescriptorBase::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.SubTotalFieldsEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScSubTotalDescriptorBase::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSubTotalParam aParam; + GetData(aParam); + + USHORT nCount = 0; + while ( nCount < MAXSUBTOTAL && aParam.bGroupActive[nCount] ) + ++nCount; + return nCount; +} + +uno::Any SAL_CALL ScSubTotalDescriptorBase::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XSubTotalField> xField = GetObjectByIndex_Impl((USHORT)nIndex); + uno::Any aAny; + if (xField.is()) + aAny <<= xField; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScSubTotalDescriptorBase::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<sheet::XSubTotalField>*)0); +} + +sal_Bool SAL_CALL ScSubTotalDescriptorBase::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScSubTotalDescriptorBase::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScSubTotalDescriptorBase::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSubTotalParam aParam; + GetData(aParam); + + String aString = aPropertyName; + + // some old property names are for 5.2 compatibility + + if (aString.EqualsAscii( SC_UNONAME_CASE ) || aString.EqualsAscii( SC_UNONAME_ISCASE )) + aParam.bCaseSens = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if (aString.EqualsAscii( SC_UNONAME_FORMATS ) || aString.EqualsAscii( SC_UNONAME_BINDFMT )) + aParam.bIncludePattern = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if (aString.EqualsAscii( SC_UNONAME_ENABSORT )) + aParam.bDoSort = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if (aString.EqualsAscii( SC_UNONAME_SORTASC )) + aParam.bAscending = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if (aString.EqualsAscii( SC_UNONAME_INSBRK )) + aParam.bPagebreak = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if (aString.EqualsAscii( SC_UNONAME_ULIST ) || aString.EqualsAscii( SC_UNONAME_ENUSLIST )) + aParam.bUserDef = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if (aString.EqualsAscii( SC_UNONAME_UINDEX ) || aString.EqualsAscii( SC_UNONAME_USINDEX )) + { + sal_Int32 nVal; + if ( aValue >>= nVal ) + aParam.nUserIndex = (USHORT)nVal; + } + else if (aString.EqualsAscii( SC_UNONAME_MAXFLD )) + { + sal_Int32 nVal; + if ( (aValue >>= nVal) && nVal > MAXSUBTOTAL ) + { + throw lang::IllegalArgumentException(); + } + } + + PutData(aParam); +} + +uno::Any SAL_CALL ScSubTotalDescriptorBase::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSubTotalParam aParam; + GetData(aParam); + + String aString = aPropertyName; + uno::Any aRet; + + // some old property names are for 5.2 compatibility + + if (aString.EqualsAscii( SC_UNONAME_CASE ) || aString.EqualsAscii( SC_UNONAME_ISCASE )) + ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bCaseSens ); + else if (aString.EqualsAscii( SC_UNONAME_FORMATS ) || aString.EqualsAscii( SC_UNONAME_BINDFMT )) + ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bIncludePattern ); + else if (aString.EqualsAscii( SC_UNONAME_ENABSORT )) + ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bDoSort ); + else if (aString.EqualsAscii( SC_UNONAME_SORTASC )) + ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bAscending ); + else if (aString.EqualsAscii( SC_UNONAME_INSBRK )) + ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bPagebreak ); + else if (aString.EqualsAscii( SC_UNONAME_ULIST ) || aString.EqualsAscii( SC_UNONAME_ENUSLIST )) + ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bUserDef ); + else if (aString.EqualsAscii( SC_UNONAME_UINDEX ) || aString.EqualsAscii( SC_UNONAME_USINDEX )) + aRet <<= (sal_Int32) aParam.nUserIndex; + else if (aString.EqualsAscii( SC_UNONAME_MAXFLD )) + aRet <<= (sal_Int32) MAXSUBTOTAL; + + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScSubTotalDescriptorBase ) + +// XUnoTunnel + +sal_Int64 SAL_CALL ScSubTotalDescriptorBase::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return 0; +} + +// static +const uno::Sequence<sal_Int8>& ScSubTotalDescriptorBase::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScSubTotalDescriptorBase* ScSubTotalDescriptorBase::getImplementation( + const uno::Reference<sheet::XSubTotalDescriptor> xObj ) +{ + ScSubTotalDescriptorBase* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScSubTotalDescriptorBase*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +//------------------------------------------------------------------------ + +ScSubTotalDescriptor::ScSubTotalDescriptor() +{ +} + +ScSubTotalDescriptor::~ScSubTotalDescriptor() +{ +} + +void ScSubTotalDescriptor::GetData( ScSubTotalParam& rParam ) const +{ + rParam = aStoredParam; // Abfrage fuer Interface +} + +void ScSubTotalDescriptor::PutData( const ScSubTotalParam& rParam ) +{ + aStoredParam = rParam; // vom Interface gesetzt +} + +void ScSubTotalDescriptor::SetParam( const ScSubTotalParam& rNew ) +{ + aStoredParam = rNew; // von aussen gesetzt +} + +//------------------------------------------------------------------------ + +ScRangeSubTotalDescriptor::ScRangeSubTotalDescriptor(ScDatabaseRangeObj* pPar) : + pParent(pPar) +{ + if (pParent) + pParent->acquire(); +} + +ScRangeSubTotalDescriptor::~ScRangeSubTotalDescriptor() +{ + if (pParent) + pParent->release(); +} + +void ScRangeSubTotalDescriptor::GetData( ScSubTotalParam& rParam ) const +{ + if (pParent) + pParent->GetSubTotalParam( rParam ); +} + +void ScRangeSubTotalDescriptor::PutData( const ScSubTotalParam& rParam ) +{ + if (pParent) + pParent->SetSubTotalParam( rParam ); +} + +//------------------------------------------------------------------------ + +ScConsolidationDescriptor::ScConsolidationDescriptor() +{ +} + +ScConsolidationDescriptor::~ScConsolidationDescriptor() +{ +} + +void ScConsolidationDescriptor::SetParam( const ScConsolidateParam& rNew ) +{ + aParam = rNew; +} + +// XConsolidationDescriptor + +sheet::GeneralFunction SAL_CALL ScConsolidationDescriptor::getFunction() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ScDataUnoConversion::SubTotalToGeneral(aParam.eFunction); +} + +void SAL_CALL ScConsolidationDescriptor::setFunction( sheet::GeneralFunction nFunction ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aParam.eFunction = ScDataUnoConversion::GeneralToSubTotal(nFunction); +} + +uno::Sequence<table::CellRangeAddress> SAL_CALL ScConsolidationDescriptor::getSources() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nCount = aParam.nDataAreaCount; + if (!aParam.ppDataAreas) + nCount = 0; + table::CellRangeAddress aRange; + uno::Sequence<table::CellRangeAddress> aSeq(nCount); + table::CellRangeAddress* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + { + ScArea* pArea = aParam.ppDataAreas[i]; + if (pArea) + { + aRange.Sheet = pArea->nTab; + aRange.StartColumn = pArea->nColStart; + aRange.StartRow = pArea->nRowStart; + aRange.EndColumn = pArea->nColEnd; + aRange.EndRow = pArea->nRowEnd; + } + pAry[i] = aRange; + } + return aSeq; +} + +void SAL_CALL ScConsolidationDescriptor::setSources( + const uno::Sequence<table::CellRangeAddress>& aSources ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nCount = (USHORT)aSources.getLength(); + if (nCount) + { + const table::CellRangeAddress* pAry = aSources.getConstArray(); + ScArea** pNew = new ScArea*[nCount]; + USHORT i; + for (i=0; i<nCount; i++) + pNew[i] = new ScArea( pAry[i].Sheet, + (USHORT)pAry[i].StartColumn, (USHORT)pAry[i].StartRow, + (USHORT)pAry[i].EndColumn, (USHORT)pAry[i].EndRow ); + + aParam.SetAreas( pNew, nCount ); // kopiert alles + + for (i=0; i<nCount; i++) + delete pNew[i]; + delete[] pNew; + } + else + aParam.ClearDataAreas(); +} + +table::CellAddress SAL_CALL ScConsolidationDescriptor::getStartOutputPosition() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellAddress aPos; + aPos.Column = aParam.nCol; + aPos.Row = aParam.nRow; + aPos.Sheet = aParam.nTab; + return aPos; +} + +void SAL_CALL ScConsolidationDescriptor::setStartOutputPosition( + const table::CellAddress& aStartOutputPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aParam.nCol = (USHORT)aStartOutputPosition.Column; + aParam.nRow = (USHORT)aStartOutputPosition.Row; + aParam.nTab = aStartOutputPosition.Sheet; +} + +sal_Bool SAL_CALL ScConsolidationDescriptor::getUseColumnHeaders() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aParam.bByCol; +} + +void SAL_CALL ScConsolidationDescriptor::setUseColumnHeaders( sal_Bool bUseColumnHeaders ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aParam.bByCol = bUseColumnHeaders; +} + +sal_Bool SAL_CALL ScConsolidationDescriptor::getUseRowHeaders() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aParam.bByRow; +} + +void SAL_CALL ScConsolidationDescriptor::setUseRowHeaders( sal_Bool bUseRowHeaders ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aParam.bByRow = bUseRowHeaders; +} + +sal_Bool SAL_CALL ScConsolidationDescriptor::getInsertLinks() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aParam.bReferenceData; +} + +void SAL_CALL ScConsolidationDescriptor::setInsertLinks( sal_Bool bInsertLinks ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aParam.bReferenceData = bInsertLinks; +} + +//------------------------------------------------------------------------ + +ScFilterDescriptorBase::ScFilterDescriptorBase(ScDocShell* pDocShell) : + pDocSh(pDocShell), + aPropSet( lcl_GetFilterPropertyMap() ) +{ + if (pDocSh) + pDocSh->GetDocument()->AddUnoObject(*this); +} + +ScFilterDescriptorBase::~ScFilterDescriptorBase() +{ + if (pDocSh) + pDocSh->GetDocument()->RemoveUnoObject(*this); +} + +void ScFilterDescriptorBase::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( SfxSimpleHint ) ) + { + ULONG nId = ((const SfxSimpleHint&)rHint).GetId(); + if ( nId == SFX_HINT_DYING ) + { + pDocSh = NULL; // invalid + } + } +} + +// XSheetFilterDescriptor + +uno::Sequence<sheet::TableFilterField> SAL_CALL ScFilterDescriptorBase::getFilterFields() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScQueryParam aParam; + GetData(aParam); + + USHORT nEntries = aParam.GetEntryCount(); // allozierte Eintraege im Param + USHORT nCount = 0; // aktive + while ( nCount < nEntries && + aParam.GetEntry(nCount).bDoQuery ) + ++nCount; + + sheet::TableFilterField aField; + uno::Sequence<sheet::TableFilterField> aSeq(nCount); + sheet::TableFilterField* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + { + const ScQueryEntry& rEntry = aParam.GetEntry(i); + + ::rtl::OUString aStringValue; + if (rEntry.pStr) + aStringValue = *rEntry.pStr; + + aField.Connection = (rEntry.eConnect == SC_AND) ? sheet::FilterConnection_AND : + sheet::FilterConnection_OR; + aField.Field = rEntry.nField; + aField.IsNumeric = !rEntry.bQueryByString; + aField.StringValue = aStringValue; + aField.NumericValue = rEntry.nVal; + + switch (rEntry.eOp) // ScQueryOp + { + case SC_EQUAL: + { + aField.Operator = sheet::FilterOperator_EQUAL; + if (!rEntry.bQueryByString && *rEntry.pStr == EMPTY_STRING) + { + if (rEntry.nVal == SC_EMPTYFIELDS) + { + aField.Operator = sheet::FilterOperator_EMPTY; + aField.NumericValue = 0; + } + else if (rEntry.nVal == SC_NONEMPTYFIELDS) + { + aField.Operator = sheet::FilterOperator_NOT_EMPTY; + aField.NumericValue = 0; + } + } + } + break; + case SC_LESS: aField.Operator = sheet::FilterOperator_LESS; break; + case SC_GREATER: aField.Operator = sheet::FilterOperator_GREATER; break; + case SC_LESS_EQUAL: aField.Operator = sheet::FilterOperator_LESS_EQUAL; break; + case SC_GREATER_EQUAL: aField.Operator = sheet::FilterOperator_GREATER_EQUAL; break; + case SC_NOT_EQUAL: aField.Operator = sheet::FilterOperator_NOT_EQUAL; break; + case SC_TOPVAL: aField.Operator = sheet::FilterOperator_TOP_VALUES; break; + case SC_BOTVAL: aField.Operator = sheet::FilterOperator_BOTTOM_VALUES; break; + case SC_TOPPERC: aField.Operator = sheet::FilterOperator_TOP_PERCENT; break; + case SC_BOTPERC: aField.Operator = sheet::FilterOperator_BOTTOM_PERCENT; break; + default: + DBG_ERROR("Falscher Filter-enum"); + aField.Operator = sheet::FilterOperator_EMPTY; + } + pAry[i] = aField; + } + return aSeq; +} + +void SAL_CALL ScFilterDescriptorBase::setFilterFields( + const uno::Sequence<sheet::TableFilterField>& aFilterFields ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScQueryParam aParam; + GetData(aParam); + + USHORT nCount = (USHORT)aFilterFields.getLength(); + DBG_ASSERT( nCount <= MAXQUERY, "setFilterFields: zu viele" ); + + aParam.Resize( nCount ); + + const sheet::TableFilterField* pAry = aFilterFields.getConstArray(); + USHORT i; + for (i=0; i<nCount; i++) + { + ScQueryEntry& rEntry = aParam.GetEntry(i); + if (!rEntry.pStr) + rEntry.pStr = new String; // sollte nicht sein (soll immer initialisiert sein) + + rEntry.bDoQuery = TRUE; + rEntry.eConnect = (pAry[i].Connection == sheet::FilterConnection_AND) ? SC_AND : SC_OR; + rEntry.nField = (USHORT)pAry[i].Field; + rEntry.bQueryByString = !pAry[i].IsNumeric; + *rEntry.pStr = String( pAry[i].StringValue ); + rEntry.nVal = pAry[i].NumericValue; + + if (!rEntry.bQueryByString && pDocSh) + { + pDocSh->GetDocument()->GetFormatTable()->GetInputLineString(rEntry.nVal, 0, *rEntry.pStr); + } + + switch (pAry[i].Operator) // FilterOperator + { + case sheet::FilterOperator_EQUAL: rEntry.eOp = SC_EQUAL; break; + case sheet::FilterOperator_LESS: rEntry.eOp = SC_LESS; break; + case sheet::FilterOperator_GREATER: rEntry.eOp = SC_GREATER; break; + case sheet::FilterOperator_LESS_EQUAL: rEntry.eOp = SC_LESS_EQUAL; break; + case sheet::FilterOperator_GREATER_EQUAL: rEntry.eOp = SC_GREATER_EQUAL; break; + case sheet::FilterOperator_NOT_EQUAL: rEntry.eOp = SC_NOT_EQUAL; break; + case sheet::FilterOperator_TOP_VALUES: rEntry.eOp = SC_TOPVAL; break; + case sheet::FilterOperator_BOTTOM_VALUES: rEntry.eOp = SC_BOTVAL; break; + case sheet::FilterOperator_TOP_PERCENT: rEntry.eOp = SC_TOPPERC; break; + case sheet::FilterOperator_BOTTOM_PERCENT: rEntry.eOp = SC_BOTPERC; break; + case sheet::FilterOperator_EMPTY: + { + rEntry.eOp = SC_EQUAL; + rEntry.nVal = SC_EMPTYFIELDS; + rEntry.bQueryByString = FALSE; + *rEntry.pStr = EMPTY_STRING; + } + break; + case sheet::FilterOperator_NOT_EMPTY: + { + rEntry.eOp = SC_EQUAL; + rEntry.nVal = SC_NONEMPTYFIELDS; + rEntry.bQueryByString = FALSE; + *rEntry.pStr = EMPTY_STRING; + } + break; + default: + DBG_ERROR("Falscher Query-enum"); + rEntry.eOp = SC_EQUAL; + } + } + + USHORT nParamCount = aParam.GetEntryCount(); // Param wird nicht unter 8 resized + for (i=nCount; i<nParamCount; i++) + aParam.GetEntry(i).bDoQuery = FALSE; // ueberzaehlige Felder zuruecksetzen + + PutData(aParam); +} + +// Rest sind Properties + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScFilterDescriptorBase::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScFilterDescriptorBase::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScQueryParam aParam; + GetData(aParam); + + String aString = aPropertyName; + if (aString.EqualsAscii( SC_UNONAME_CONTHDR )) + aParam.bHasHeader = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if (aString.EqualsAscii( SC_UNONAME_COPYOUT )) + aParam.bInplace = !(ScUnoHelpFunctions::GetBoolFromAny( aValue )); + else if (aString.EqualsAscii( SC_UNONAME_ISCASE )) + aParam.bCaseSens = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if (aString.EqualsAscii( SC_UNONAME_MAXFLD )) + { + sal_Int32 nVal; + if ( (aValue >>= nVal) && nVal > MAXQUERY ) + { + throw lang::IllegalArgumentException(); + } + } + else if (aString.EqualsAscii( SC_UNONAME_ORIENT )) + { + //! test for correct enum type? + table::TableOrientation eOrient = (table::TableOrientation) + ScUnoHelpFunctions::GetEnumFromAny( aValue ); + aParam.bByRow = ( eOrient != table::TableOrientation_COLUMNS ); + } + else if (aString.EqualsAscii( SC_UNONAME_OUTPOS )) + { + table::CellAddress aAddress; + if ( aValue >>= aAddress ) + { + aParam.nDestTab = aAddress.Sheet; + aParam.nDestCol = (USHORT)aAddress.Column; + aParam.nDestRow = (USHORT)aAddress.Row; + } + } + else if (aString.EqualsAscii( SC_UNONAME_SAVEOUT )) + aParam.bDestPers = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if (aString.EqualsAscii( SC_UNONAME_SKIPDUP )) + aParam.bDuplicate = !(ScUnoHelpFunctions::GetBoolFromAny( aValue )); + else if (aString.EqualsAscii( SC_UNONAME_USEREGEX )) + aParam.bRegExp = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + + PutData(aParam); +} + +uno::Any SAL_CALL ScFilterDescriptorBase::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScQueryParam aParam; + GetData(aParam); + + String aString = aPropertyName; + uno::Any aRet; + + if (aString.EqualsAscii( SC_UNONAME_CONTHDR )) + ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bHasHeader ); + else if (aString.EqualsAscii( SC_UNONAME_COPYOUT )) + ScUnoHelpFunctions::SetBoolInAny( aRet, !(aParam.bInplace) ); + else if (aString.EqualsAscii( SC_UNONAME_ISCASE )) + ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bCaseSens ); + else if (aString.EqualsAscii( SC_UNONAME_MAXFLD )) + aRet <<= (sal_Int32) MAXQUERY; + else if (aString.EqualsAscii( SC_UNONAME_ORIENT )) + { + table::TableOrientation eOrient = aParam.bByRow ? table::TableOrientation_ROWS : + table::TableOrientation_COLUMNS; + aRet <<= eOrient; + } + else if (aString.EqualsAscii( SC_UNONAME_OUTPOS )) + { + table::CellAddress aOutPos; + aOutPos.Sheet = aParam.nDestTab; + aOutPos.Column = aParam.nDestCol; + aOutPos.Row = aParam.nDestRow; + aRet <<= aOutPos; + } + else if (aString.EqualsAscii( SC_UNONAME_SAVEOUT )) + ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bDestPers ); + else if (aString.EqualsAscii( SC_UNONAME_SKIPDUP )) + ScUnoHelpFunctions::SetBoolInAny( aRet, !(aParam.bDuplicate) ); + else if (aString.EqualsAscii( SC_UNONAME_USEREGEX )) + ScUnoHelpFunctions::SetBoolInAny( aRet, aParam.bRegExp ); + + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScFilterDescriptorBase ) + +//------------------------------------------------------------------------ + +ScFilterDescriptor::ScFilterDescriptor(ScDocShell* pDocSh) + : + ScFilterDescriptorBase(pDocSh) +{ +} + +ScFilterDescriptor::~ScFilterDescriptor() +{ +} + +void ScFilterDescriptor::GetData( ScQueryParam& rParam ) const +{ + rParam = aStoredParam; // Abfrage fuer Interface +} + +void ScFilterDescriptor::PutData( const ScQueryParam& rParam ) +{ + aStoredParam = rParam; // vom Interface gesetzt +} + +void ScFilterDescriptor::SetParam( const ScQueryParam& rNew ) +{ + aStoredParam = rNew; // von aussen gesetzt +} + +//------------------------------------------------------------------------ + +ScRangeFilterDescriptor::ScRangeFilterDescriptor(ScDocShell* pDocSh, ScDatabaseRangeObj* pPar) : + ScFilterDescriptorBase(pDocSh), + pParent(pPar) +{ + if (pParent) + pParent->acquire(); +} + +ScRangeFilterDescriptor::~ScRangeFilterDescriptor() +{ + if (pParent) + pParent->release(); +} + +void ScRangeFilterDescriptor::GetData( ScQueryParam& rParam ) const +{ + if (pParent) + pParent->GetQueryParam( rParam ); +} + +void ScRangeFilterDescriptor::PutData( const ScQueryParam& rParam ) +{ + if (pParent) + pParent->SetQueryParam( rParam ); +} + +//------------------------------------------------------------------------ + +ScDataPilotFilterDescriptor::ScDataPilotFilterDescriptor(ScDocShell* pDocSh, ScDataPilotDescriptorBase* pPar) : + ScFilterDescriptorBase(pDocSh), + pParent(pPar) +{ + if (pParent) + pParent->acquire(); +} + +ScDataPilotFilterDescriptor::~ScDataPilotFilterDescriptor() +{ + if (pParent) + pParent->release(); +} + +void ScDataPilotFilterDescriptor::GetData( ScQueryParam& rParam ) const +{ + if (pParent) + { + ScPivotParam aPivot; + ScArea aArea; + pParent->GetParam( aPivot, rParam, aArea ); + } +} + +void ScDataPilotFilterDescriptor::PutData( const ScQueryParam& rParam ) +{ + if (pParent) + { + ScPivotParam aPivot; + ScArea aArea; + ScQueryParam aOldQuery; + pParent->GetParam( aPivot, aOldQuery, aArea ); + pParent->SetParam( aPivot, rParam, aArea ); + } +} + +//------------------------------------------------------------------------ + +ScDatabaseRangeObj::ScDatabaseRangeObj(ScDocShell* pDocSh, const String& rNm) : + pDocShell( pDocSh ), + aName( rNm ), + aPropSet( lcl_GetDBRangePropertyMap() ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScDatabaseRangeObj::~ScDatabaseRangeObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScDatabaseRangeObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Ref-Update interessiert nicht + + if ( rHint.ISA( SfxSimpleHint ) && ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + pDocShell = NULL; // ungueltig geworden +} + +// Hilfsfuntionen + +ScDBData* ScDatabaseRangeObj::GetDBData_Impl() const +{ + ScDBData* pRet = NULL; + if (pDocShell) + { + ScDBCollection* pNames = pDocShell->GetDocument()->GetDBCollection(); + if (pNames) + { + USHORT nPos = 0; + if (pNames->SearchName( aName, nPos )) + pRet = (*pNames)[nPos]; + } + } + return pRet; +} + +// XNamed + +::rtl::OUString SAL_CALL ScDatabaseRangeObj::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aName; +} + +void SAL_CALL ScDatabaseRangeObj::setName( const ::rtl::OUString& aNewName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDBDocFunc aFunc(*pDocShell); + String aNewStr = aNewName; + BOOL bOk = aFunc.RenameDBRange( aName, aNewStr, TRUE ); + if (bOk) + aName = aNewStr; + } +} + +// XDatabaseRange + +table::CellRangeAddress SAL_CALL ScDatabaseRangeObj::getDataArea() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellRangeAddress aAddress; + ScDBData* pData = GetDBData_Impl(); + if (pData) + { + ScRange aRange; + pData->GetArea(aRange); + aAddress.Sheet = aRange.aStart.Tab(); + aAddress.StartColumn = aRange.aStart.Col(); + aAddress.StartRow = aRange.aStart.Row(); + aAddress.EndColumn = aRange.aEnd.Col(); + aAddress.EndRow = aRange.aEnd.Row(); + } + return aAddress; +} + +void SAL_CALL ScDatabaseRangeObj::setDataArea( const table::CellRangeAddress& aDataArea ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDBData* pData = GetDBData_Impl(); + if ( pDocShell && pData ) + { + ScDBData aNewData( *pData ); + //! MoveTo ??? + aNewData.SetArea( aDataArea.Sheet, (USHORT)aDataArea.StartColumn, (USHORT)aDataArea.StartRow, + (USHORT)aDataArea.EndColumn, (USHORT)aDataArea.EndRow ); + ScDBDocFunc aFunc(*pDocShell); + aFunc.ModifyDBData(aNewData, TRUE); + } +} + +uno::Sequence<beans::PropertyValue> SAL_CALL ScDatabaseRangeObj::getSortDescriptor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScSortParam aParam; + const ScDBData* pData = GetDBData_Impl(); + if (pData) + { + pData->GetSortParam(aParam); + + // im SortDescriptor sind die Fields innerhalb des Bereichs gezaehlt + ScRange aDBRange; + pData->GetArea(aDBRange); + USHORT nFieldStart = aParam.bByRow ? aDBRange.aStart.Col() : aDBRange.aStart.Row(); + for (USHORT i=0; i<MAXSORT; i++) + if ( aParam.bDoSort[i] && aParam.nField[i] >= nFieldStart ) + aParam.nField[i] -= nFieldStart; + } + + uno::Sequence<beans::PropertyValue> aSeq( ScSortDescriptor::GetPropertyCount() ); + ScSortDescriptor::FillProperties( aSeq, aParam ); + return aSeq; +} + +void ScDatabaseRangeObj::GetQueryParam(ScQueryParam& rQueryParam) const +{ + const ScDBData* pData = GetDBData_Impl(); + if (pData) + { + pData->GetQueryParam(rQueryParam); + + // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt + ScRange aDBRange; + pData->GetArea(aDBRange); + USHORT nFieldStart = rQueryParam.bByRow ? aDBRange.aStart.Col() : aDBRange.aStart.Row(); + USHORT nCount = rQueryParam.GetEntryCount(); + for (USHORT i=0; i<nCount; i++) + { + ScQueryEntry& rEntry = rQueryParam.GetEntry(i); + if (rEntry.bDoQuery && rEntry.nField >= nFieldStart) + rEntry.nField -= nFieldStart; + } + } +} + +void ScDatabaseRangeObj::SetQueryParam(const ScQueryParam& rQueryParam) +{ + const ScDBData* pData = GetDBData_Impl(); + if (pData) + { + // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt + ScQueryParam aParam = rQueryParam; + ScRange aDBRange; + pData->GetArea(aDBRange); + USHORT nFieldStart = aParam.bByRow ? aDBRange.aStart.Col() : aDBRange.aStart.Row(); + + USHORT nCount = aParam.GetEntryCount(); + for (USHORT i=0; i<nCount; i++) + { + ScQueryEntry& rEntry = aParam.GetEntry(i); + if (rEntry.bDoQuery) + rEntry.nField += nFieldStart; + } + + ScDBData aNewData( *pData ); + aNewData.SetQueryParam(aParam); + aNewData.SetHeader(aParam.bHasHeader); // not in ScDBData::SetQueryParam + ScDBDocFunc aFunc(*pDocShell); + aFunc.ModifyDBData(aNewData, TRUE); + } +} + +uno::Reference<sheet::XSheetFilterDescriptor> SAL_CALL ScDatabaseRangeObj::getFilterDescriptor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScRangeFilterDescriptor(pDocShell, this); +} + +void ScDatabaseRangeObj::GetSubTotalParam(ScSubTotalParam& rSubTotalParam) const +{ + const ScDBData* pData = GetDBData_Impl(); + if (pData) + { + pData->GetSubTotalParam(rSubTotalParam); + + // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt + ScRange aDBRange; + pData->GetArea(aDBRange); + USHORT nFieldStart = aDBRange.aStart.Col(); + for (USHORT i=0; i<MAXSUBTOTAL; i++) + { + if ( rSubTotalParam.bGroupActive[i] ) + { + if ( rSubTotalParam.nField[i] >= nFieldStart ) + rSubTotalParam.nField[i] -= nFieldStart; + for (USHORT j=0; j<rSubTotalParam.nSubTotals[i]; j++) + if ( rSubTotalParam.pSubTotals[i][j] >= nFieldStart ) + rSubTotalParam.pSubTotals[i][j] -= nFieldStart; + } + } + } +} + +void ScDatabaseRangeObj::SetSubTotalParam(const ScSubTotalParam& rSubTotalParam) +{ + const ScDBData* pData = GetDBData_Impl(); + if (pData) + { + // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt + ScSubTotalParam aParam = rSubTotalParam; + ScRange aDBRange; + pData->GetArea(aDBRange); + USHORT nFieldStart = aDBRange.aStart.Col(); + for (USHORT i=0; i<MAXSUBTOTAL; i++) + { + if ( aParam.bGroupActive[i] ) + { + aParam.nField[i] += nFieldStart; + for (USHORT j=0; j<aParam.nSubTotals[i]; j++) + aParam.pSubTotals[i][j] += nFieldStart; + } + } + + ScDBData aNewData( *pData ); + aNewData.SetSubTotalParam(aParam); + ScDBDocFunc aFunc(*pDocShell); + aFunc.ModifyDBData(aNewData, TRUE); + } +} + +uno::Reference<sheet::XSubTotalDescriptor> SAL_CALL ScDatabaseRangeObj::getSubTotalDescriptor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScRangeSubTotalDescriptor(this); +} + +uno::Sequence<beans::PropertyValue> SAL_CALL ScDatabaseRangeObj::getImportDescriptor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScImportParam aParam; + const ScDBData* pData = GetDBData_Impl(); + if (pData) + pData->GetImportParam(aParam); + + uno::Sequence<beans::PropertyValue> aSeq( ScImportDescriptor::GetPropertyCount() ); + ScImportDescriptor::FillProperties( aSeq, aParam ); + return aSeq; +} + +void SAL_CALL ScDatabaseRangeObj::refresh() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDBData* pData = GetDBData_Impl(); + if ( pDocShell && pData ) + { + ScDBDocFunc aFunc(*pDocShell); + + // Import zu wiederholen? + BOOL bContinue = TRUE; + ScImportParam aImportParam; + pData->GetImportParam( aImportParam ); + if (aImportParam.bImport && !pData->HasImportSelection()) + { + USHORT nTab, nDummy; + pData->GetArea( nTab, nDummy,nDummy,nDummy,nDummy ); + uno::Reference< sdbc::XResultSet > xResultSet; + bContinue = aFunc.DoImport( nTab, aImportParam, xResultSet, NULL, TRUE, FALSE ); //! Api-Flag als Parameter + } + + // interne Operationen (sort, query, subtotal) nur, wenn kein Fehler + if (bContinue) + aFunc.RepeatDB( pData->GetName(), TRUE, TRUE ); + } +} + +// XCellRangeSource + +uno::Reference<table::XCellRange> SAL_CALL ScDatabaseRangeObj::getReferredCells() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRange aRange; + ScDBData* pData = GetDBData_Impl(); + if ( pData ) + { + //! static Funktion um ScCellObj/ScCellRangeObj zu erzeugen am ScCellRangeObj ??? + + pData->GetArea(aRange); + if ( aRange.aStart == aRange.aEnd ) + return new ScCellObj( pDocShell, aRange.aStart ); + else + return new ScCellRangeObj( pDocShell, aRange ); + } + return NULL; +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScDatabaseRangeObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScDatabaseRangeObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScDBData* pData = GetDBData_Impl(); + if ( pDocShell && pData ) + { + ScDBData aNewData( *pData ); + BOOL bDo = TRUE; + + String aString = aPropertyName; + if ( aString.EqualsAscii( SC_UNONAME_KEEPFORM ) ) + aNewData.SetKeepFmt( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aString.EqualsAscii( SC_UNONAME_MOVCELLS ) ) + aNewData.SetDoSize( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aString.EqualsAscii( SC_UNONAME_STRIPDAT ) ) + aNewData.SetStripData( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if (aString.EqualsAscii( SC_UNONAME_AUTOFLT )) + { + sal_Bool bAutoFilter(ScUnoHelpFunctions::GetBoolFromAny( aValue )); + aNewData.SetAutoFilter(bAutoFilter); + ScRange aRange; + aNewData.GetArea(aRange); + ScDocument* pDoc = pDocShell->GetDocument(); + if (bAutoFilter && pDoc) + pDoc->ApplyFlagsTab( aRange.aStart.Col(), aRange.aStart.Row(), + aRange.aEnd.Col(), aRange.aStart.Row(), + aRange.aStart.Tab(), SC_MF_AUTO ); + else if (!bAutoFilter && pDoc) + pDoc->RemoveFlagsTab(aRange.aStart.Col(), aRange.aStart.Row(), + aRange.aEnd.Col(), aRange.aStart.Row(), + aRange.aStart.Tab(), SC_MF_AUTO ); + ScRange aPaintRange(aRange.aStart, aRange.aEnd); + aPaintRange.aEnd.SetRow(aPaintRange.aStart.Row()); + pDocShell->PostPaint(aPaintRange, PAINT_GRID); + } + else if (aString.EqualsAscii( SC_UNONAME_USEFLTCRT )) + { + if (ScUnoHelpFunctions::GetBoolFromAny( aValue )) + { + ScRange aRange; + aNewData.GetAdvancedQuerySource(aRange); + aNewData.SetAdvancedQuerySource(&aRange); + } + else + aNewData.SetAdvancedQuerySource(NULL); + } + else if (aString.EqualsAscii( SC_UNONAME_FLTCRT )) + { + table::CellRangeAddress aRange; + if (aValue >>= aRange) + { + ScRange aCoreRange; + ScUnoConversion::FillScRange(aCoreRange, aRange); + + aNewData.SetAdvancedQuerySource(&aCoreRange); + } + } + else + bDo = FALSE; + + if (bDo) + { + ScDBDocFunc aFunc(*pDocShell); + aFunc.ModifyDBData(aNewData, TRUE); + } + } +} + +uno::Any SAL_CALL ScDatabaseRangeObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Any aRet; + ScDBData* pData = GetDBData_Impl(); + if ( pData ) + { + String aString = aPropertyName; + if ( aString.EqualsAscii( SC_UNONAME_KEEPFORM ) ) + ScUnoHelpFunctions::SetBoolInAny( aRet, pData->IsKeepFmt() ); + else if ( aString.EqualsAscii( SC_UNONAME_MOVCELLS ) ) + ScUnoHelpFunctions::SetBoolInAny( aRet, pData->IsDoSize() ); + else if ( aString.EqualsAscii( SC_UNONAME_STRIPDAT ) ) + ScUnoHelpFunctions::SetBoolInAny( aRet, pData->IsStripData() ); + else if ( aString.EqualsAscii( SC_UNONAME_ISUSER ) ) + { + // all database ranges except "unnamed" are user defined + ScUnoHelpFunctions::SetBoolInAny( aRet, + ( pData->GetName() != ScGlobal::GetRscString(STR_DB_NONAME) ) ); + } + else if ( aString.EqualsAscii( SC_UNO_LINKDISPBIT ) ) + { + // no target bitmaps for individual entries (would be all equal) + // ScLinkTargetTypeObj::SetLinkTargetBitmap( aRet, SC_LINKTARGETTYPE_DBAREA ); + } + else if ( aString.EqualsAscii( SC_UNO_LINKDISPNAME ) ) + aRet <<= ::rtl::OUString( aName ); + else if (aString.EqualsAscii( SC_UNONAME_AUTOFLT )) + { + sal_Bool bAutoFilter(GetDBData_Impl()->HasAutoFilter()); + + ScUnoHelpFunctions::SetBoolInAny( aRet, bAutoFilter ); + } + else if (aString.EqualsAscii( SC_UNONAME_USEFLTCRT )) + { + ScRange aRange; + sal_Bool bIsAdvancedSource(GetDBData_Impl()->GetAdvancedQuerySource(aRange)); + + ScUnoHelpFunctions::SetBoolInAny( aRet, bIsAdvancedSource ); + } + else if (aString.EqualsAscii( SC_UNONAME_FLTCRT )) + { + table::CellRangeAddress aRange; + ScRange aCoreRange; + if (GetDBData_Impl()->GetAdvancedQuerySource(aCoreRange)) + ScUnoConversion::FillApiRange(aRange, aCoreRange); + + aRet <<= aRange; + } + } + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScDatabaseRangeObj ) + +// XServiceInfo + +::rtl::OUString SAL_CALL ScDatabaseRangeObj::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScDatabaseRangeObj" ); +} + +sal_Bool SAL_CALL ScDatabaseRangeObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr( rServiceName ); + return aServiceStr.EqualsAscii( SCDATABASERANGEOBJ_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScDatabaseRangeObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(1); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCDATABASERANGEOBJ_SERVICE ); + return aRet; +} + +//------------------------------------------------------------------------ + +ScDatabaseRangesObj::ScDatabaseRangesObj(ScDocShell* pDocSh) : + pDocShell( pDocSh ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScDatabaseRangesObj::~ScDatabaseRangesObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScDatabaseRangesObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XDatabaseRanges + +ScDatabaseRangeObj* ScDatabaseRangesObj::GetObjectByIndex_Impl(USHORT nIndex) +{ + if (pDocShell) + { + ScDBCollection* pNames = pDocShell->GetDocument()->GetDBCollection(); + if (pNames && nIndex < pNames->GetCount()) + return new ScDatabaseRangeObj( pDocShell, (*pNames)[nIndex]->GetName() ); + } + return NULL; +} + +ScDatabaseRangeObj* ScDatabaseRangesObj::GetObjectByName_Impl(const ::rtl::OUString& aName) +{ + if ( pDocShell && hasByName(aName) ) + { + String aString = aName; + return new ScDatabaseRangeObj( pDocShell, aString ); + } + return NULL; +} + + +void SAL_CALL ScDatabaseRangesObj::addNewByName( const ::rtl::OUString& aName, + const table::CellRangeAddress& aRange ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if (pDocShell) + { + ScDBDocFunc aFunc(*pDocShell); + + String aString = aName; + ScRange aNameRange( (USHORT)aRange.StartColumn, (USHORT)aRange.StartRow, aRange.Sheet, + (USHORT)aRange.EndColumn, (USHORT)aRange.EndRow, aRange.Sheet ); + bDone = aFunc.AddDBRange( aString, aNameRange, TRUE ); + } + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +void SAL_CALL ScDatabaseRangesObj::removeByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if (pDocShell) + { + ScDBDocFunc aFunc(*pDocShell); + String aString = aName; + bDone = aFunc.DeleteDBRange( aString, TRUE ); + } + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScDatabaseRangesObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.DatabaseRangesEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScDatabaseRangesObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! "unbenannt" weglassen ? + + if (pDocShell) + { + ScDBCollection* pNames = pDocShell->GetDocument()->GetDBCollection(); + if (pNames) + return pNames->GetCount(); + } + + return NULL; +} + +uno::Any SAL_CALL ScDatabaseRangesObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XDatabaseRange> xRange = GetObjectByIndex_Impl((USHORT)nIndex); + uno::Any aAny; + if (xRange.is()) + aAny <<= xRange; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScDatabaseRangesObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<sheet::XDatabaseRange>*)0); +} + +sal_Bool SAL_CALL ScDatabaseRangesObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +// XNameAccess + +uno::Any SAL_CALL ScDatabaseRangesObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XDatabaseRange> xRange = GetObjectByName_Impl(aName); + uno::Any aAny; + if (xRange.is()) + aAny <<= xRange; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScDatabaseRangesObj::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! "unbenannt" weglassen ? + + if (pDocShell) + { + ScDBCollection* pNames = pDocShell->GetDocument()->GetDBCollection(); + if (pNames) + { + USHORT nCount = pNames->GetCount(); + String aName; + uno::Sequence< ::rtl::OUString> aSeq(nCount); + ::rtl::OUString* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + pAry[i] = (*pNames)[i]->GetName(); + + return aSeq; + } + } + return uno::Sequence< ::rtl::OUString>(0); +} + +sal_Bool SAL_CALL ScDatabaseRangesObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! "unbenannt" weglassen ? + + if (pDocShell) + { + ScDBCollection* pNames = pDocShell->GetDocument()->GetDBCollection(); + if (pNames) + { + String aString = aName; + USHORT nPos = 0; + if (pNames->SearchName( aString, nPos )) + return TRUE; + } + } + return FALSE; +} + +//------------------------------------------------------------------------ + + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_defltuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_defltuno.cxx new file mode 100644 index 000000000000..d198cbb06c32 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_defltuno.cxx @@ -0,0 +1,385 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <bf_svtools/itemprop.hxx> +#include <i18npool/mslangid.hxx> + + +#include "scitems.hxx" +#include "defltuno.hxx" +#include "miscuno.hxx" +#include "docsh.hxx" +#include "docpool.hxx" +#include <vcl/svapp.hxx> +#include "unonames.hxx" +#include "docoptio.hxx" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +const SfxItemPropertyMap* lcl_GetDocDefaultsMap() +{ + static SfxItemPropertyMap aDocDefaultsMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_STANDARDDEC), 0, &getCppuType((sal_Int16*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_TABSTOPDIS), 0, &getCppuType((sal_Int32*)0), 0, 0 }, + {0,0,0,0} + }; + return aDocDefaultsMap_Impl; +} + +inline long TwipsToHMM(long nTwips) { return (nTwips * 127 + 36) / 72; } +inline long HMMToTwips(long nHMM) { return (nHMM * 72 + 63) / 127; } +inline long TwipsToEvenHMM(long nTwips) { return ( (nTwips * 127 + 72) / 144 ) * 2; } + +//------------------------------------------------------------------------ + +SC_SIMPLE_SERVICE_INFO( ScDocDefaultsObj, "ScDocDefaultsObj", "com.sun.star.sheet.Defaults" ) + +//------------------------------------------------------------------------ + +ScDocDefaultsObj::ScDocDefaultsObj(ScDocShell* pDocSh) : + pDocShell( pDocSh ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScDocDefaultsObj::~ScDocDefaultsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScDocDefaultsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // document gone + } +} + +void ScDocDefaultsObj::ItemsChanged() +{ + if (pDocShell) + { + //! if not in XML import, adjust row heights + + pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID ); + } +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScDocDefaultsObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( lcl_GetDocDefaultsMap() ); + return aRef; +} + +void SAL_CALL ScDocDefaultsObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( !pDocShell ) + throw uno::RuntimeException(); + + const SfxItemPropertyMap* pMap = + SfxItemPropertyMap::GetByName( lcl_GetDocDefaultsMap(), aPropertyName ); + if ( !pMap ) + throw beans::UnknownPropertyException(); + if(!pMap->nWID) + { + if(aPropertyName.compareToAscii(SC_UNO_STANDARDDEC) == 0) + { + ScDocument* pDoc = pDocShell->GetDocument(); + if (pDoc) + { + ScDocOptions aDocOpt(pDoc->GetDocOptions()); + sal_Int16 nValue; + if (aValue >>= nValue) + { + aDocOpt.SetStdPrecision(static_cast<sal_uInt8> (nValue)); + pDoc->SetDocOptions(aDocOpt); + } + } + else + throw uno::RuntimeException(); + } + else if (aPropertyName.compareToAscii(SC_UNO_TABSTOPDIS) == 0) + { + ScDocument* pDoc = pDocShell->GetDocument(); + if (pDoc) + { + ScDocOptions aDocOpt(pDoc->GetDocOptions()); + sal_Int32 nValue; + if (aValue >>= nValue) + { + aDocOpt.SetTabDistance(static_cast<sal_uInt16>(HMMToTwips(nValue))); + pDoc->SetDocOptions(aDocOpt); + } + } + else + throw uno::RuntimeException(); + } + } + else if ( pMap->nWID == ATTR_FONT_LANGUAGE || + pMap->nWID == ATTR_CJK_FONT_LANGUAGE || + pMap->nWID == ATTR_CTL_FONT_LANGUAGE ) + { + // for getPropertyValue the PoolDefaults are sufficient, + // but setPropertyValue has to be handled differently + + lang::Locale aLocale; + if ( aValue >>= aLocale ) + { + LanguageType eNew; + if (aLocale.Language.getLength() || aLocale.Country.getLength()) + eNew = MsLangId::convertIsoNamesToLanguage( aLocale.Language, aLocale.Country ); + else + eNew = LANGUAGE_NONE; + + ScDocument* pDoc = pDocShell->GetDocument(); + LanguageType eLatin, eCjk, eCtl; + pDoc->GetLanguage( eLatin, eCjk, eCtl ); + + if ( pMap->nWID == ATTR_CJK_FONT_LANGUAGE ) + eCjk = eNew; + else if ( pMap->nWID == ATTR_CTL_FONT_LANGUAGE ) + eCtl = eNew; + else + eLatin = eNew; + + pDoc->SetLanguage( eLatin, eCjk, eCtl ); + } + } + else + { + ScDocumentPool* pPool = pDocShell->GetDocument()->GetPool(); + SfxPoolItem* pNewItem = pPool->GetDefaultItem(pMap->nWID).Clone(); + + if( !pNewItem->PutValue( aValue, pMap->nMemberId ) ) + throw lang::IllegalArgumentException(); + + pPool->SetPoolDefaultItem( *pNewItem ); + delete pNewItem; // copied in SetPoolDefaultItem + + ItemsChanged(); + } +} + +uno::Any SAL_CALL ScDocDefaultsObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + // use pool default if set + + SolarMutexGuard aGuard; + + if ( !pDocShell ) + throw uno::RuntimeException(); + + uno::Any aRet; + const SfxItemPropertyMap* pMap = + SfxItemPropertyMap::GetByName( lcl_GetDocDefaultsMap(), aPropertyName ); + if ( !pMap ) + throw beans::UnknownPropertyException(); + + if (!pMap->nWID) + { + if(aPropertyName.compareToAscii(SC_UNO_STANDARDDEC) == 0) + { + ScDocument* pDoc = pDocShell->GetDocument(); + if (pDoc) + { + const ScDocOptions& aDocOpt = pDoc->GetDocOptions(); + aRet <<= static_cast<sal_Int16> (aDocOpt.GetStdPrecision()); + } + else + throw uno::RuntimeException(); + } + else if (aPropertyName.compareToAscii(SC_UNO_TABSTOPDIS) == 0) + { + ScDocument* pDoc = pDocShell->GetDocument(); + if (pDoc) + { + const ScDocOptions& aDocOpt = pDoc->GetDocOptions(); + sal_Int32 nValue (TwipsToEvenHMM(aDocOpt.GetTabDistance())); + aRet <<= nValue; + } + else + throw uno::RuntimeException(); + } + } + else + { + ScDocumentPool* pPool = pDocShell->GetDocument()->GetPool(); + const SfxPoolItem& rItem = pPool->GetDefaultItem( pMap->nWID ); + rItem.QueryValue( aRet, pMap->nMemberId ); + } + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScDocDefaultsObj ) + +// XPropertyState + +beans::PropertyState SAL_CALL ScDocDefaultsObj::getPropertyState( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( !pDocShell ) + throw uno::RuntimeException(); + + const SfxItemPropertyMap* pMap = + SfxItemPropertyMap::GetByName( lcl_GetDocDefaultsMap(), aPropertyName ); + if ( !pMap ) + throw beans::UnknownPropertyException(); + + beans::PropertyState eRet = beans::PropertyState_DEFAULT_VALUE; + + USHORT nWID = pMap->nWID; + if ( nWID == ATTR_FONT || nWID == ATTR_CJK_FONT || nWID == ATTR_CTL_FONT || !nWID ) + { + // static default for font is system-dependent, + // so font default is always treated as "direct value". + + eRet = beans::PropertyState_DIRECT_VALUE; + } + else + { + // check if pool default is set + + ScDocumentPool* pPool = pDocShell->GetDocument()->GetPool(); + if ( pPool->GetPoolDefaultItem( nWID ) != NULL ) + eRet = beans::PropertyState_DIRECT_VALUE; + } + + return eRet; +} + +uno::Sequence<beans::PropertyState> SAL_CALL ScDocDefaultsObj::getPropertyStates( + const uno::Sequence< ::rtl::OUString>& aPropertyNames ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + // the simple way: call getPropertyState + + SolarMutexGuard aGuard; + const ::rtl::OUString* pNames = aPropertyNames.getConstArray(); + uno::Sequence<beans::PropertyState> aRet(aPropertyNames.getLength()); + beans::PropertyState* pStates = aRet.getArray(); + for(sal_Int32 i = 0; i < aPropertyNames.getLength(); i++) + pStates[i] = getPropertyState(pNames[i]); + return aRet; +} + +void SAL_CALL ScDocDefaultsObj::setPropertyToDefault( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( !pDocShell ) + throw uno::RuntimeException(); + + const SfxItemPropertyMap* pMap = + SfxItemPropertyMap::GetByName( lcl_GetDocDefaultsMap(), aPropertyName ); + if ( !pMap ) + throw beans::UnknownPropertyException(); + + if (pMap->nWID) + { + ScDocumentPool* pPool = pDocShell->GetDocument()->GetPool(); + pPool->ResetPoolDefaultItem( pMap->nWID ); + + ItemsChanged(); + } +} + +uno::Any SAL_CALL ScDocDefaultsObj::getPropertyDefault( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + // always use static default + + SolarMutexGuard aGuard; + + if ( !pDocShell ) + throw uno::RuntimeException(); + + const SfxItemPropertyMap* pMap = + SfxItemPropertyMap::GetByName( lcl_GetDocDefaultsMap(), aPropertyName ); + if ( !pMap ) + throw beans::UnknownPropertyException(); + + uno::Any aRet; + if (pMap->nWID) + { + ScDocumentPool* pPool = pDocShell->GetDocument()->GetPool(); + const SfxPoolItem* pItem = pPool->GetItem( pMap->nWID, SFX_ITEMS_STATICDEFAULT ); + if (pItem) + pItem->QueryValue( aRet, pMap->nMemberId ); + } + return aRet; +} + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_docuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_docuno.cxx new file mode 100644 index 000000000000..f4c2b2a2e04e --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_docuno.cxx @@ -0,0 +1,2563 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <com/sun/star/beans/PropertyAttribute.hpp> +#include <com/sun/star/container/XIndexContainer.hpp> + +#include <bf_svx/fmdpage.hxx> +#include <bf_svx/fmview.hxx> +#include <bf_svx/svdpage.hxx> + +#include <bf_svtools/numuno.hxx> +#include <vcl/waitobj.hxx> +#include <tools/multisel.hxx> +#include <toolkit/awt/vclxdevice.hxx> +#include <ctype.h> +#include <float.h> // DBL_MAX + +#include <com/sun/star/util/Date.hpp> + +#include "cellsuno.hxx" +#include "nameuno.hxx" +#include "datauno.hxx" +#include "miscuno.hxx" +#include "notesuno.hxx" +#include "styleuno.hxx" +#include "linkuno.hxx" +#include "servuno.hxx" +#include "targuno.hxx" +#include "convuno.hxx" +#include "optuno.hxx" +#include "forbiuno.hxx" +#include "docsh.hxx" +#include "hints.hxx" +#include "docfunc.hxx" +#include "dociter.hxx" +#include "cell.hxx" +#include "drwlayer.hxx" +#include <vcl/svapp.hxx> +#include "unonames.hxx" +#include "shapeuno.hxx" +#include "printfun.hxx" +#include "scmod.hxx" +#include "docsh.hxx" +#include "viewdata.hxx" + +#include "ViewSettingsSequenceDefines.hxx" +#include <legacysmgr/legacy_binfilters_smgr.hxx> //STRIP002 +namespace binfilter { +using namespace ::com::sun::star; + +#define TABLEID_DOC 0xFFFF + +//------------------------------------------------------------------------ + +// alles ohne Which-ID, Map nur fuer PropertySetInfo + +//! umbenennen, sind nicht mehr nur Options +const SfxItemPropertyMap* lcl_GetDocOptPropertyMap() +{ + static SfxItemPropertyMap aDocOptPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNO_APPLYFMDES), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_AREALINKS), 0, &getCppuType((uno::Reference<sheet::XAreaLinks>*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_AUTOCONTFOC), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_BASICLIBRARIES),0, &getCppuType((uno::Reference< script::XLibraryContainer >*)0), beans::PropertyAttribute::READONLY}, + {MAP_CHAR_LEN(SC_UNO_CALCASSHOWN), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), 0, &getCppuType((lang::Locale*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), 0, &getCppuType((lang::Locale*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), 0, &getCppuType((lang::Locale*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_COLLABELRNG), 0, &getCppuType((uno::Reference<sheet::XLabelRanges>*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_DDELINKS), 0, &getCppuType((uno::Reference<container::XNameAccess>*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_DEFTABSTOP), 0, &getCppuType((sal_Int16*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_FORBIDDEN), 0, &getCppuType((uno::Reference<i18n::XForbiddenCharacters>*)0), beans::PropertyAttribute::READONLY}, + {MAP_CHAR_LEN(SC_UNO_HASDRAWPAGES), 0, &getBooleanCppuType(), beans::PropertyAttribute::READONLY}, + {MAP_CHAR_LEN(SC_UNO_IGNORECASE), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_ITERENABLED), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_ITERCOUNT), 0, &getCppuType((sal_Int32*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_ITEREPSILON), 0, &getCppuType((double*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_LOOKUPLABELS), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_MATCHWHOLE), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_NAMEDRANGES), 0, &getCppuType((uno::Reference<sheet::XNamedRanges>*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_DATABASERNG), 0, &getCppuType((uno::Reference<sheet::XDatabaseRanges>*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_NULLDATE), 0, &getCppuType((util::Date*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_ROWLABELRNG), 0, &getCppuType((uno::Reference<sheet::XLabelRanges>*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_SHEETLINKS), 0, &getCppuType((uno::Reference<container::XNameAccess>*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_SPELLONLINE), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_STANDARDDEC), 0, &getCppuType((sal_Int16*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_REGEXENABLED), 0, &getBooleanCppuType(), 0}, + + {0,0,0,0} + }; + return aDocOptPropertyMap_Impl; +} + +//! StandardDecimals als Property und vom NumberFormatter ???????? + +const SfxItemPropertyMap* lcl_GetColumnsPropertyMap() +{ + static SfxItemPropertyMap aColumnsPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_MANPAGE), 0, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_NEWPAGE), 0, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVIS), 0, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_OWIDTH), 0, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLWID), 0, &getCppuType((sal_Int32*)0), 0, 0 }, + {0,0,0,0} + }; + return aColumnsPropertyMap_Impl; +} + +const SfxItemPropertyMap* lcl_GetRowsPropertyMap() +{ + static SfxItemPropertyMap aRowsPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_CELLHGT), 0, &getCppuType((sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLFILT), 0, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_OHEIGHT), 0, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_MANPAGE), 0, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_NEWPAGE), 0, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVIS), 0, &getBooleanCppuType(), 0, 0 }, + {0,0,0,0} + }; + return aRowsPropertyMap_Impl; +} + +//! move these functions to a header file +inline long TwipsToHMM(long nTwips) { return (nTwips * 127 + 36) / 72; } +inline long HMMToTwips(long nHMM) { return (nHMM * 72 + 63) / 127; } + +//------------------------------------------------------------------------ + +#define SCMODELOBJ_SERVICE "com.sun.star.sheet.SpreadsheetDocument" +#define SCDOCSETTINGS_SERVICE "com.sun.star.sheet.SpreadsheetDocumentSettings" +#define SCDOC_SERVICE "com.sun.star.document.OfficeDocument" + +SC_SIMPLE_SERVICE_INFO( ScAnnotationsObj, "ScAnnotationsObj", "com.sun.star.sheet.CellAnnotations" ) +SC_SIMPLE_SERVICE_INFO( ScDrawPagesObj, "ScDrawPagesObj", "com.sun.star.drawing.DrawPages" ) +SC_SIMPLE_SERVICE_INFO( ScScenariosObj, "ScScenariosObj", "com.sun.star.sheet.Scenarios" ) +SC_SIMPLE_SERVICE_INFO( ScSpreadsheetSettingsObj, "ScSpreadsheetSettingsObj", "com.sun.star.sheet.SpreadsheetDocumentSettings" ) +SC_SIMPLE_SERVICE_INFO( ScTableColumnsObj, "ScTableColumnsObj", "com.sun.star.table.TableColumns" ) +SC_SIMPLE_SERVICE_INFO( ScTableRowsObj, "ScTableRowsObj", "com.sun.star.table.TableRows" ) +SC_SIMPLE_SERVICE_INFO( ScTableSheetsObj, "ScTableSheetsObj", "com.sun.star.sheet.Spreadsheets" ) + +//------------------------------------------------------------------------ + +String lcl_ColumnToString( USHORT nCol ) //! irgendwo global ??? +{ + if ( nCol < 26 ) + return String( (sal_Unicode) ( 'A' + nCol ) ); + else if ( nCol <= MAXCOL ) + { + String aStr( (sal_Unicode) ( 'A' + ( nCol / 26 ) - 1 ) ); + aStr += (sal_Unicode) ( 'A' + ( nCol % 26 ) ); + return aStr; + } + return '*'; //! oder #REF oder so ?? +} + +BOOL lcl_StringToColumn( const String& rStr, USHORT& rCol ) //! irgendwo global ??? +{ + BOOL bOk = FALSE; + sal_Unicode c = rStr.GetChar(0); + if (CharClass::isAsciiAlpha(c)) + { + USHORT nResult = toupper((sal_Char)c) - 'A'; + c = rStr.GetChar(1); + if (CharClass::isAsciiAlpha(c)) + nResult = ((nResult + 1) * 26) + (toupper((sal_Char)c) - 'A'); + if (nResult <= MAXCOL) + { + rCol = nResult; + bOk = TRUE; + } + } + return bOk; +} + +//------------------------------------------------------------------------ + +// static +void ScModelObj::CreateAndSet(ScDocShell* pDocSh) +{ + if (pDocSh) + pDocSh->SetBaseModel( new ScModelObj(pDocSh) ); +} + +ScModelObj::ScModelObj( ScDocShell* pDocSh ) : + SfxBaseModel( pDocSh ), + aPropSet( lcl_GetDocOptPropertyMap() ), + pDocShell( pDocSh ), + pPrintFuncCache( NULL ) +{ + // pDocShell may be NULL if this is the base of a ScDocOptionsObj + if ( pDocShell ) + { + pDocShell->GetDocument()->AddUnoObject(*this); // SfxModel is derived from SfxListener + + // setDelegator veraendert den RefCount, darum eine Referenz selber halten + // (direkt am m_refCount, um sich beim release nicht selbst zu loeschen) + ::comphelper::increment( m_refCount ); + + // waehrend des queryInterface braucht man ein Ref auf das + // SvNumberFormatsSupplierObj, sonst wird es geloescht. + uno::Reference<util::XNumberFormatsSupplier> xFormatter = new SvNumberFormatsSupplierObj( + pDocShell->GetDocument()->GetFormatTable() ); + { + xNumberAgg = uno::Reference<uno::XAggregation>( xFormatter, uno::UNO_QUERY ); + // extra block to force deletion of the temporary before setDelegator + } + + // beim setDelegator darf die zusaetzliche Ref nicht mehr existieren + xFormatter = NULL; + + if (xNumberAgg.is()) + xNumberAgg->setDelegator( (cppu::OWeakObject*)this ); + + ::comphelper::decrement( m_refCount ); + } +} + +ScModelObj::~ScModelObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); + + if (xNumberAgg.is()) + xNumberAgg->setDelegator(uno::Reference<uno::XInterface>()); +} + +ScDocument* ScModelObj::GetDocument() const +{ + if (pDocShell) + return pDocShell->GetDocument(); + return NULL; +} + +SvEmbeddedObject* ScModelObj::GetEmbeddedObject() const +{ + return pDocShell; +} + +BOOL ScModelObj::AdjustRowHeight( USHORT nStartRow, USHORT nEndRow, USHORT nTab ) +{ + if (pDocShell) + return pDocShell->AdjustRowHeight( nStartRow, nEndRow, nTab ); + return FALSE; +} + +void ScModelObj::BeforeXMLLoading() +{ + if (pDocShell) + pDocShell->BeforeXMLLoading(); +} + +void ScModelObj::AfterXMLLoading(sal_Bool bRet) +{ + if (pDocShell) + pDocShell->AfterXMLLoading(bRet); +} + +uno::Any SAL_CALL ScModelObj::queryInterface( const uno::Type& rType ) + throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( sheet::XSpreadsheetDocument ) + SC_QUERYINTERFACE( document::XActionLockable ) + SC_QUERYINTERFACE( sheet::XCalculatable ) + SC_QUERYINTERFACE( util::XProtectable ) + SC_QUERYINTERFACE( drawing::XDrawPagesSupplier ) + SC_QUERYINTERFACE( sheet::XGoalSeek ) + SC_QUERYINTERFACE( sheet::XConsolidatable ) + SC_QUERYINTERFACE( sheet::XDocumentAuditing ) + SC_QUERYINTERFACE( style::XStyleFamiliesSupplier ) + SC_QUERYINTERFACE( view::XRenderable ) + SC_QUERYINTERFACE( document::XLinkTargetSupplier ) + SC_QUERYINTERFACE( beans::XPropertySet ) + SC_QUERYINTERFACE( lang::XMultiServiceFactory ) + SC_QUERYINTERFACE( lang::XUnoTunnel ) + SC_QUERYINTERFACE( lang::XServiceInfo ) + + uno::Any aRet = SfxBaseModel::queryInterface( rType ); + if ( !aRet.hasValue() && xNumberAgg.is() ) + aRet = xNumberAgg->queryAggregation( rType ); + + return aRet; +} + +void SAL_CALL ScModelObj::acquire() throw() +{ + SfxBaseModel::acquire(); +} + +void SAL_CALL ScModelObj::release() throw() +{ + SfxBaseModel::release(); +} + +uno::Sequence<uno::Type> SAL_CALL ScModelObj::getTypes() throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + uno::Sequence<uno::Type> aParentTypes = SfxBaseModel::getTypes(); + long nParentLen = aParentTypes.getLength(); + const uno::Type* pParentPtr = aParentTypes.getConstArray(); + + uno::Sequence<uno::Type> aAggTypes; + if ( xNumberAgg.is() ) + { + const uno::Type& rProvType = ::getCppuType((uno::Reference<lang::XTypeProvider>*) 0); + uno::Any aNumProv = xNumberAgg->queryAggregation(rProvType); + if(aNumProv.getValueType() == rProvType) + { + uno::Reference<lang::XTypeProvider> xNumProv = + *(uno::Reference<lang::XTypeProvider>*)aNumProv.getValue(); + aAggTypes = xNumProv->getTypes(); + } + } + long nAggLen = aAggTypes.getLength(); + const uno::Type* pAggPtr = aAggTypes.getConstArray(); + + const long nThisLen = 15; + aTypes.realloc( nParentLen + nAggLen + nThisLen ); + uno::Type* pPtr = aTypes.getArray(); + pPtr[nParentLen + 0] = getCppuType((const uno::Reference<sheet::XSpreadsheetDocument>*)0); + pPtr[nParentLen + 1] = getCppuType((const uno::Reference<document::XActionLockable>*)0); + pPtr[nParentLen + 2] = getCppuType((const uno::Reference<sheet::XCalculatable>*)0); + pPtr[nParentLen + 3] = getCppuType((const uno::Reference<util::XProtectable>*)0); + pPtr[nParentLen + 4] = getCppuType((const uno::Reference<drawing::XDrawPagesSupplier>*)0); + pPtr[nParentLen + 5] = getCppuType((const uno::Reference<sheet::XGoalSeek>*)0); + pPtr[nParentLen + 6] = getCppuType((const uno::Reference<sheet::XConsolidatable>*)0); + pPtr[nParentLen + 7] = getCppuType((const uno::Reference<sheet::XDocumentAuditing>*)0); + pPtr[nParentLen + 8] = getCppuType((const uno::Reference<style::XStyleFamiliesSupplier>*)0); + pPtr[nParentLen + 9] = getCppuType((const uno::Reference<view::XRenderable>*)0); + pPtr[nParentLen +10] = getCppuType((const uno::Reference<document::XLinkTargetSupplier>*)0); + pPtr[nParentLen +11] = getCppuType((const uno::Reference<beans::XPropertySet>*)0); + pPtr[nParentLen +12] = getCppuType((const uno::Reference<lang::XMultiServiceFactory>*)0); + pPtr[nParentLen +13] = getCppuType((const uno::Reference<lang::XUnoTunnel>*)0); + pPtr[nParentLen +14] = getCppuType((const uno::Reference<lang::XServiceInfo>*)0); + + long i; + for (i=0; i<nParentLen; i++) + pPtr[i] = pParentPtr[i]; // parent types first + + for (i=0; i<nAggLen; i++) + pPtr[nParentLen+nThisLen+i] = pAggPtr[i]; // aggregated types last + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScModelObj::getImplementationId() + throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +void ScModelObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Not interested in reference update hints here + + if ( rHint.ISA( SfxSimpleHint ) ) + { + ULONG nId = ((const SfxSimpleHint&)rHint).GetId(); + if ( nId == SFX_HINT_DYING ) + { + pDocShell = NULL; // has become invalid + if (xNumberAgg.is()) + { + SvNumberFormatsSupplierObj* pNumFmt = + SvNumberFormatsSupplierObj::getImplementation( + uno::Reference<util::XNumberFormatsSupplier>(xNumberAgg, uno::UNO_QUERY) ); + if ( pNumFmt ) + pNumFmt->SetNumberFormatter( NULL ); + } + } + } + else if ( rHint.ISA( ScPointerChangedHint ) ) + { + USHORT nFlags = ((const ScPointerChangedHint&)rHint).GetFlags(); + if (nFlags & SC_POINTERCHANGED_NUMFMT) + { + // NumberFormatter-Pointer am Uno-Objekt neu setzen + + if (xNumberAgg.is()) + { + SvNumberFormatsSupplierObj* pNumFmt = + SvNumberFormatsSupplierObj::getImplementation( + uno::Reference<util::XNumberFormatsSupplier>(xNumberAgg, uno::UNO_QUERY) ); + if ( pNumFmt && pDocShell ) + pNumFmt->SetNumberFormatter( pDocShell->GetDocument()->GetFormatTable() ); + } + } + } + else + SfxBaseModel::Notify( rBC, rHint ); // SfxBaseModel is derived from SfxListener +} + +// XSpreadsheetDocument + +uno::Reference<sheet::XSpreadsheets> SAL_CALL ScModelObj::getSheets() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return new ScTableSheetsObj(pDocShell); + return NULL; +} + +// XStyleFamiliesSupplier + +uno::Reference<container::XNameAccess> SAL_CALL ScModelObj::getStyleFamilies() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return new ScStyleFamiliesObj(pDocShell); + return NULL; +} + +// XRenderable + +sal_Int32 SAL_CALL ScModelObj::getRendererCount( const uno::Any& aSelection, + const uno::Sequence<beans::PropertyValue>& xOptions ) + throw (lang::IllegalArgumentException, uno::RuntimeException) +{ + DBG_ERROR("Strip!"); + return 0; +} + +uno::Sequence<beans::PropertyValue> SAL_CALL ScModelObj::getRenderer( sal_Int32 nRenderer, + const uno::Any& aSelection, const uno::Sequence<beans::PropertyValue>& xOptions ) + throw (lang::IllegalArgumentException, uno::RuntimeException) +{ + DBG_ERROR("Strip!"); + uno::Sequence<beans::PropertyValue> aSequence; + return aSequence; +} + +void SAL_CALL ScModelObj::render( sal_Int32 nRenderer, const uno::Any& aSelection, + const uno::Sequence<beans::PropertyValue>& rOptions ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + DBG_ERROR("Strip!"); +} + +// XLinkTargetSupplier + +uno::Reference<container::XNameAccess> SAL_CALL ScModelObj::getLinks() throw(uno::RuntimeException) +{ + return NULL; +} + +// XActionLockable + +sal_Bool SAL_CALL ScModelObj::isActionLocked() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bLocked = FALSE; + if (pDocShell) + bLocked = ( pDocShell->GetLockCount() != 0 ); + return bLocked; +} + +void SAL_CALL ScModelObj::addActionLock() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + pDocShell->LockDocument(); +} + +void SAL_CALL ScModelObj::removeActionLock() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + pDocShell->UnlockDocument(); +} + +void SAL_CALL ScModelObj::setActionLocks( sal_Int16 nLock ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + pDocShell->SetLockCount(nLock); +} + +sal_Int16 SAL_CALL ScModelObj::resetActionLocks() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nRet = 0; + if (pDocShell) + { + nRet = pDocShell->GetLockCount(); + pDocShell->SetLockCount(0); + } + return nRet; +} + +void SAL_CALL ScModelObj::lockControllers() throw (::com::sun::star::uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SfxBaseModel::lockControllers(); + if (pDocShell) + pDocShell->LockPaint(); +} + +void SAL_CALL ScModelObj::unlockControllers() throw (::com::sun::star::uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (hasControllersLocked()) + { + SfxBaseModel::unlockControllers(); + if (pDocShell) + pDocShell->UnlockPaint(); + } +} + +// XCalculate + +void SAL_CALL ScModelObj::calculate() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + pDocShell->DoRecalc(TRUE); + else + DBG_ERROR("keine DocShell"); //! Exception oder so? +} + +void SAL_CALL ScModelObj::calculateAll() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + pDocShell->DoHardRecalc(TRUE); + else + DBG_ERROR("keine DocShell"); //! Exception oder so? +} + +sal_Bool SAL_CALL ScModelObj::isAutomaticCalculationEnabled() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return pDocShell->GetDocument()->GetAutoCalc(); + + DBG_ERROR("keine DocShell"); //! Exception oder so? + return FALSE; +} + +void SAL_CALL ScModelObj::enableAutomaticCalculation( sal_Bool bEnabled ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + if ( pDoc->GetAutoCalc() != bEnabled ) + { + pDoc->SetAutoCalc( bEnabled ); + pDocShell->SetDocumentModified(); + } + } + else + DBG_ERROR("keine DocShell"); //! Exception oder so? +} + +// XProtectable + +void SAL_CALL ScModelObj::protect( const ::rtl::OUString& aPassword ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + String aString = aPassword; + + ScDocFunc aFunc(*pDocShell); + aFunc.Protect( TABLEID_DOC, aString, TRUE ); + } +} + +void SAL_CALL ScModelObj::unprotect( const ::rtl::OUString& aPassword ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + String aString = aPassword; + + ScDocFunc aFunc(*pDocShell); + aFunc.Unprotect( TABLEID_DOC, aString, TRUE ); + + //! Rueckgabewert auswerten, Exception oder so + } +} + +sal_Bool SAL_CALL ScModelObj::isProtected() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return pDocShell->GetDocument()->IsDocProtected(); + + DBG_ERROR("keine DocShell"); //! Exception oder so? + return FALSE; +} + +// XDrawPagesSupplier + +uno::Reference<drawing::XDrawPages> SAL_CALL ScModelObj::getDrawPages() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return new ScDrawPagesObj(pDocShell); + + DBG_ERROR("keine DocShell"); //! Exception oder so? + return NULL; +} + +// XGoalSeek + +sheet::GoalResult SAL_CALL ScModelObj::seekGoal( + const table::CellAddress& aFormulaPosition, + const table::CellAddress& aVariablePosition, + const ::rtl::OUString& aGoalValue ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + sheet::GoalResult aResult; + aResult.Divergence = DBL_MAX; // nichts gefunden + if (pDocShell) + { + WaitObject aWait( pDocShell->GetDialogParent() ); + String aGoalString = aGoalValue; + ScDocument* pDoc = pDocShell->GetDocument(); + double fValue = 0.0; + BOOL bFound = pDoc->Solver( + (USHORT)aFormulaPosition.Column, (USHORT)aFormulaPosition.Row, aFormulaPosition.Sheet, + (USHORT)aVariablePosition.Column, (USHORT)aVariablePosition.Row, aVariablePosition.Sheet, + aGoalString, fValue ); + aResult.Result = fValue; + if (bFound) + aResult.Divergence = 0.0; //! das ist gelogen + } + return aResult; +} + +// XConsolidatable + +uno::Reference<sheet::XConsolidationDescriptor> SAL_CALL ScModelObj::createConsolidationDescriptor( + sal_Bool bEmpty ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScConsolidationDescriptor* pNew = new ScConsolidationDescriptor; + if ( pDocShell && !bEmpty ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + const ScConsolidateParam* pParam = pDoc->GetConsolidateDlgData(); + if (pParam) + pNew->SetParam( *pParam ); + } + return pNew; +} + +void SAL_CALL ScModelObj::consolidate( + const uno::Reference<sheet::XConsolidationDescriptor>& xDescriptor ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + // das koennte theoretisch ein fremdes Objekt sein, also nur das + // oeffentliche XConsolidationDescriptor Interface benutzen, um + // die Daten in ein ScConsolidationDescriptor Objekt zu kopieren: + //! wenn es schon ein ScConsolidationDescriptor ist, direkt per getImplementation? + + ScConsolidationDescriptor aImpl; + aImpl.setFunction( xDescriptor->getFunction() ); + aImpl.setSources( xDescriptor->getSources() ); + aImpl.setStartOutputPosition( xDescriptor->getStartOutputPosition() ); + aImpl.setUseColumnHeaders( xDescriptor->getUseColumnHeaders() ); + aImpl.setUseRowHeaders( xDescriptor->getUseRowHeaders() ); + aImpl.setInsertLinks( xDescriptor->getInsertLinks() ); + + if (pDocShell) + { + const ScConsolidateParam& rParam = aImpl.GetParam(); + pDocShell->DoConsolidate( rParam, TRUE ); + pDocShell->GetDocument()->SetConsolidateDlgData( &rParam ); + } +} + +// XDocumentAuditing + +void SAL_CALL ScModelObj::refreshArrows() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocFunc aFunc(*pDocShell); + aFunc.DetectiveRefresh(); + } +} + +// XViewDataSupplier +uno::Reference< container::XIndexAccess > SAL_CALL ScModelObj::getViewData( ) + throw (uno::RuntimeException) +{ + uno::Reference < container::XIndexAccess > xRet( SfxBaseModel::getViewData() ); + + if( !xRet.is() ) + { + SolarMutexGuard aGuard; + if (pDocShell && pDocShell->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED) + { + xRet = uno::Reference < container::XIndexAccess >::query(::legacy_binfilters::getLegacyProcessServiceFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.IndexedPropertyValues")))); + + uno::Reference < container::XIndexContainer > xCont( xRet, uno::UNO_QUERY ); + DBG_ASSERT( xCont.is(), "ScModelObj::getViewData() failed for OLE object" ); + if( xCont.is() ) + { + uno::Sequence< beans::PropertyValue > aSeq; + aSeq.realloc(1); + String sName; + pDocShell->GetDocument()->GetName( pDocShell->GetDocument()->GetVisibleTab(), sName ); + ::rtl::OUString sOUName(sName); + aSeq[0].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_ACTIVETABLE)); + aSeq[0].Value <<= sOUName; + xCont->insertByIndex( 0, uno::makeAny( aSeq ) ); + } + } + else if ( pDocShell ) + { + // #116578# Convert manually loaded state from sfx window data + // into view data sequence + + String aUserData = pDocShell->GetUserData(); + if ( aUserData.Len() ) + { + ScViewData aLocalViewData( pDocShell ); + aLocalViewData.ReadUserData( aUserData ); + uno::Sequence< beans::PropertyValue > aSeq; + aLocalViewData.WriteUserDataSequence( aSeq ); + + xRet = uno::Reference < container::XIndexAccess >::query(::legacy_binfilters::getLegacyProcessServiceFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.IndexedPropertyValues")))); + uno::Reference < container::XIndexContainer > xCont( xRet, uno::UNO_QUERY ); + if( xCont.is() ) + xCont->insertByIndex( 0, uno::makeAny( aSeq ) ); + } + } + } + + return xRet; +} + +// XPropertySet (Doc-Optionen) +//! auch an der Applikation anbieten? + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScModelObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScModelObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString = aPropertyName; + + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + const ScDocOptions& rOldOpt = pDoc->GetDocOptions(); + ScDocOptions aNewOpt = rOldOpt; + + BOOL bOpt = ScDocOptionsHelper::setPropertyValue( aNewOpt, aPropertyName, aValue ); + if (bOpt) + { + // done... + } + else if ( aString.EqualsAscii( SC_UNONAME_CLOCAL ) ) + { + lang::Locale aLocale; + if ( aValue >>= aLocale ) + { + LanguageType eLatin, eCjk, eCtl; + pDoc->GetLanguage( eLatin, eCjk, eCtl ); + eLatin = ScUnoConversion::GetLanguage(aLocale); + pDoc->SetLanguage( eLatin, eCjk, eCtl ); + } + } + else if ( aString.EqualsAscii( SC_UNO_CJK_CLOCAL ) ) + { + lang::Locale aLocale; + if ( aValue >>= aLocale ) + { + LanguageType eLatin, eCjk, eCtl; + pDoc->GetLanguage( eLatin, eCjk, eCtl ); + eCjk = ScUnoConversion::GetLanguage(aLocale); + pDoc->SetLanguage( eLatin, eCjk, eCtl ); + } + } + else if ( aString.EqualsAscii( SC_UNO_CTL_CLOCAL ) ) + { + lang::Locale aLocale; + if ( aValue >>= aLocale ) + { + LanguageType eLatin, eCjk, eCtl; + pDoc->GetLanguage( eLatin, eCjk, eCtl ); + eCtl = ScUnoConversion::GetLanguage(aLocale); + pDoc->SetLanguage( eLatin, eCjk, eCtl ); + } + } + else if ( aString.EqualsAscii( SC_UNO_APPLYFMDES ) ) + { + // model is created if not there + ScDrawLayer* pModel = pDocShell->MakeDrawLayer(); + pModel->SetOpenInDesignMode( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + + } + else if ( aString.EqualsAscii( SC_UNO_AUTOCONTFOC ) ) + { + // model is created if not there + ScDrawLayer* pModel = pDocShell->MakeDrawLayer(); + pModel->SetAutoControlFocus( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + + } + + if ( aNewOpt != rOldOpt ) + { + pDoc->SetDocOptions( aNewOpt ); + pDocShell->DoHardRecalc( TRUE ); //! Recalc nur bei entsprechenden Optionen? + pDocShell->SetDocumentModified(); + } + } +} + +uno::Any SAL_CALL ScModelObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString = aPropertyName; + uno::Any aRet; + + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + const ScDocOptions& rOpt = pDoc->GetDocOptions(); + aRet = ScDocOptionsHelper::getPropertyValue( rOpt, aPropertyName ); + if ( aRet.hasValue() ) + { + // done... + } + else if ( aString.EqualsAscii( SC_UNONAME_CLOCAL ) ) + { + LanguageType eLatin, eCjk, eCtl; + pDoc->GetLanguage( eLatin, eCjk, eCtl ); + + lang::Locale aLocale; + ScUnoConversion::FillLocale( aLocale, eLatin ); + aRet <<= aLocale; + } + else if ( aString.EqualsAscii( SC_UNO_CJK_CLOCAL ) ) + { + LanguageType eLatin, eCjk, eCtl; + pDoc->GetLanguage( eLatin, eCjk, eCtl ); + + lang::Locale aLocale; + ScUnoConversion::FillLocale( aLocale, eCjk ); + aRet <<= aLocale; + } + else if ( aString.EqualsAscii( SC_UNO_CTL_CLOCAL ) ) + { + LanguageType eLatin, eCjk, eCtl; + pDoc->GetLanguage( eLatin, eCjk, eCtl ); + + lang::Locale aLocale; + ScUnoConversion::FillLocale( aLocale, eCtl ); + aRet <<= aLocale; + } + else if ( aString.EqualsAscii( SC_UNO_NAMEDRANGES ) ) + { + uno::Reference<sheet::XNamedRanges> xRanges = new ScNamedRangesObj( pDocShell ); + aRet <<= xRanges; + } + else if ( aString.EqualsAscii( SC_UNO_DATABASERNG ) ) + { + uno::Reference<sheet::XDatabaseRanges> xRanges = new ScDatabaseRangesObj( pDocShell ); + aRet <<= xRanges; + } + else if ( aString.EqualsAscii( SC_UNO_COLLABELRNG ) ) + { + uno::Reference<sheet::XLabelRanges> xRanges = new ScLabelRangesObj( pDocShell, TRUE ); + aRet <<= xRanges; + } + else if ( aString.EqualsAscii( SC_UNO_ROWLABELRNG ) ) + { + uno::Reference<sheet::XLabelRanges> xRanges = new ScLabelRangesObj( pDocShell, FALSE ); + aRet <<= xRanges; + } + else if ( aString.EqualsAscii( SC_UNO_AREALINKS ) ) + { + uno::Reference<sheet::XAreaLinks> xLinks = new ScAreaLinksObj( pDocShell ); + aRet <<= xLinks; + } + else if ( aString.EqualsAscii( SC_UNO_DDELINKS ) ) + { + uno::Reference<container::XNameAccess> xLinks = new ScDDELinksObj( pDocShell ); + aRet <<= xLinks; + } + else if ( aString.EqualsAscii( SC_UNO_SHEETLINKS ) ) + { + uno::Reference<container::XNameAccess> xLinks = new ScSheetLinksObj( pDocShell ); + aRet <<= xLinks; + } + else if ( aString.EqualsAscii( SC_UNO_APPLYFMDES ) ) + { + // default for no model is TRUE + ScDrawLayer* pModel = pDoc->GetDrawLayer(); + sal_Bool bOpenInDesign = pModel ? pModel->GetOpenInDesignMode() : sal_True; + ScUnoHelpFunctions::SetBoolInAny( aRet, bOpenInDesign ); + } + else if ( aString.EqualsAscii( SC_UNO_AUTOCONTFOC ) ) + { + // default for no model is FALSE + ScDrawLayer* pModel = pDoc->GetDrawLayer(); + sal_Bool bAutoControlFocus = pModel ? pModel->GetAutoControlFocus() : sal_False; + ScUnoHelpFunctions::SetBoolInAny( aRet, bAutoControlFocus ); + } + else if ( aString.EqualsAscii( SC_UNO_FORBIDDEN ) ) + { + uno::Reference<i18n::XForbiddenCharacters> xForbidden = new ScForbiddenCharsObj( pDocShell ); + aRet <<= xForbidden; + } + else if ( aString.EqualsAscii( SC_UNO_HASDRAWPAGES ) ) + { + ScUnoHelpFunctions::SetBoolInAny( aRet, (pDocShell->GetDocument()->GetDrawLayer() != 0) ); + } + else if ( aString.EqualsAscii( SC_UNO_BASICLIBRARIES ) ) + { + aRet <<= pDocShell->GetBasicContainer(); + } + } + + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScModelObj ) + +// XMultiServiceFactory + +uno::Reference<uno::XInterface> SAL_CALL ScModelObj::createInstance( + const ::rtl::OUString& aServiceSpecifier ) + throw(uno::Exception, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<uno::XInterface> xRet; + String aNameStr = aServiceSpecifier; + USHORT nType = ScServiceProvider::GetProviderType(aNameStr); + if ( nType != SC_SERVICE_INVALID ) + { + // drawing layer tables must be kept as long as the model is alive + // return stored instance if already set + switch ( nType ) + { + case SC_SERVICE_GRADTAB: xRet = xDrawGradTab; break; + case SC_SERVICE_HATCHTAB: xRet = xDrawHatchTab; break; + case SC_SERVICE_BITMAPTAB: xRet = xDrawBitmapTab; break; + case SC_SERVICE_TRGRADTAB: xRet = xDrawTrGradTab; break; + case SC_SERVICE_MARKERTAB: xRet = xDrawMarkerTab; break; + case SC_SERVICE_DASHTAB: xRet = xDrawDashTab; break; + } + + if ( !xRet.is() ) + { + xRet = ScServiceProvider::MakeInstance( nType, pDocShell ); + + // store created instance + switch ( nType ) + { + case SC_SERVICE_GRADTAB: xDrawGradTab = xRet; break; + case SC_SERVICE_HATCHTAB: xDrawHatchTab = xRet; break; + case SC_SERVICE_BITMAPTAB: xDrawBitmapTab = xRet; break; + case SC_SERVICE_TRGRADTAB: xDrawTrGradTab = xRet; break; + case SC_SERVICE_MARKERTAB: xDrawMarkerTab = xRet; break; + case SC_SERVICE_DASHTAB: xDrawDashTab = xRet; break; + } + } + } + else + { + // alles was ich nicht kenn, werf ich der SvxFmMSFactory an den Hals, + // da wird dann 'ne Exception geworfen, wenn's nicht passt... + + { + xRet = SvxFmMSFactory::createInstance(aServiceSpecifier); + // extra block to force deletion of the temporary before ScShapeObj ctor (setDelegator) + } + + // #96117# if the drawing factory created a shape, a ScShapeObj has to be used + // to support own properties like ImageMap: + + uno::Reference<drawing::XShape> xShape( xRet, uno::UNO_QUERY ); + if ( xShape.is() ) + { + xRet.clear(); // for aggregation, xShape must be the object's only ref + new ScShapeObj( xShape ); // aggregates object and modifies xShape + xRet = xShape; + } + } + return xRet; +} + +uno::Reference<uno::XInterface> SAL_CALL ScModelObj::createInstanceWithArguments( + const ::rtl::OUString& ServiceSpecifier, + const uno::Sequence<uno::Any>& Arguments ) + throw(uno::Exception, uno::RuntimeException) +{ + //! unterscheiden zwischen eigenen Services und denen vom Drawing-Layer? + + SolarMutexGuard aGuard; + uno::Reference<uno::XInterface> xInt = createInstance(ServiceSpecifier); + //die Any-Sequence dient zur Initialisierung von Objekten, die auf + //Parameter zwingend angewiesen sind - bis jetzt haben wir das nicht + return xInt; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScModelObj::getAvailableServiceNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! warum sind die Parameter bei concatServiceNames nicht const ??? + //! return concatServiceNames( ScServiceProvider::GetAllServiceNames(), + //! SvxFmMSFactory::getAvailableServiceNames() ); + + uno::Sequence< ::rtl::OUString> aMyServices = ScServiceProvider::GetAllServiceNames(); + uno::Sequence< ::rtl::OUString> aDrawServices = SvxFmMSFactory::getAvailableServiceNames(); + + return concatServiceNames( aMyServices, aDrawServices ); +} + +// XServiceInfo + +::rtl::OUString SAL_CALL ScModelObj::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScModelObj" ); +} + +sal_Bool SAL_CALL ScModelObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr = rServiceName; + return aServiceStr.EqualsAscii( SCMODELOBJ_SERVICE ) || + aServiceStr.EqualsAscii( SCDOCSETTINGS_SERVICE ) || + aServiceStr.EqualsAscii( SCDOC_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScModelObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(3); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCMODELOBJ_SERVICE ); + pArray[1] = ::rtl::OUString::createFromAscii( SCDOCSETTINGS_SERVICE ); + pArray[2] = ::rtl::OUString::createFromAscii( SCDOC_SERVICE ); + return aRet; +} + +// XUnoTunnel + +sal_Int64 SAL_CALL ScModelObj::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + + // aggregated number formats supplier has XUnoTunnel, too + // interface from aggregated object must be obtained via queryAggregation + + if ( xNumberAgg.is() ) + { + const uno::Type& rTunnelType = ::getCppuType((uno::Reference<lang::XUnoTunnel>*) 0); + uno::Any aNumTunnel = xNumberAgg->queryAggregation(rTunnelType); + if(aNumTunnel.getValueType() == rTunnelType) + { + uno::Reference<lang::XUnoTunnel> xTunnelAgg = + *(uno::Reference<lang::XUnoTunnel>*)aNumTunnel.getValue(); + return xTunnelAgg->getSomething( rId ); + } + } + + return 0; +} + +// static +const uno::Sequence<sal_Int8>& ScModelObj::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScModelObj* ScModelObj::getImplementation( const uno::Reference<uno::XInterface> xObj ) +{ + ScModelObj* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScModelObj*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +//------------------------------------------------------------------------ + +ScDrawPagesObj::ScDrawPagesObj(ScDocShell* pDocSh) : + pDocShell( pDocSh ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScDrawPagesObj::~ScDrawPagesObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScDrawPagesObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +uno::Reference<drawing::XDrawPage> ScDrawPagesObj::GetObjectByIndex_Impl(INT32 nIndex) const +{ + if (pDocShell) + { + ScDrawLayer* pDrawLayer = pDocShell->MakeDrawLayer(); + DBG_ASSERT(pDrawLayer,"kann Draw-Layer nicht anlegen"); + if ( pDrawLayer && nIndex >= 0 && nIndex < pDocShell->GetDocument()->GetTableCount() ) + { + SdrPage* pPage = pDrawLayer->GetPage((USHORT)nIndex); + DBG_ASSERT(pPage,"Draw-Page nicht gefunden"); + if (pPage) + { + return uno::Reference<drawing::XDrawPage> (pPage->getUnoPage(), uno::UNO_QUERY); + } + } + } + return NULL; +} + +// XDrawPages + +uno::Reference<drawing::XDrawPage> SAL_CALL ScDrawPagesObj::insertNewByIndex( sal_Int32 nPos ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<drawing::XDrawPage> xRet; + if (pDocShell) + { + String aNewName; + pDocShell->GetDocument()->CreateValidTabName(aNewName); + ScDocFunc aFunc(*pDocShell); + if ( aFunc.InsertTable( (USHORT)nPos, aNewName, TRUE, TRUE ) ) + xRet = GetObjectByIndex_Impl( nPos ); + } + return xRet; +} + +void SAL_CALL ScDrawPagesObj::remove( const uno::Reference<drawing::XDrawPage>& xPage ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SvxDrawPage* pImp = SvxDrawPage::getImplementation( xPage ); + if ( pDocShell && pImp ) + { + SdrPage* pPage = pImp->GetSdrPage(); + if (pPage) + { + USHORT nPageNum = pPage->GetPageNum(); + ScDocFunc aFunc(*pDocShell); + aFunc.DeleteTable( nPageNum, TRUE, TRUE ); + } + } +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScDrawPagesObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return pDocShell->GetDocument()->GetTableCount(); + return 0; +} + +uno::Any SAL_CALL ScDrawPagesObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<drawing::XDrawPage> xPage = GetObjectByIndex_Impl(nIndex); + uno::Any aAny; + if (xPage.is()) + aAny <<= xPage; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScDrawPagesObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<drawing::XDrawPage>*)0); +} + +sal_Bool SAL_CALL ScDrawPagesObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +//------------------------------------------------------------------------ + +ScTableSheetsObj::ScTableSheetsObj(ScDocShell* pDocSh) : + pDocShell( pDocSh ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScTableSheetsObj::~ScTableSheetsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScTableSheetsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XSpreadsheets + +ScTableSheetObj* ScTableSheetsObj::GetObjectByIndex_Impl(USHORT nIndex) const +{ + if ( pDocShell && nIndex < pDocShell->GetDocument()->GetTableCount() ) + return new ScTableSheetObj( pDocShell, nIndex ); + + return NULL; +} + +ScTableSheetObj* ScTableSheetsObj::GetObjectByName_Impl(const ::rtl::OUString& aName) const +{ + if (pDocShell) + { + USHORT nIndex; + String aString = aName; + if ( pDocShell->GetDocument()->GetTable( aString, nIndex ) ) + return new ScTableSheetObj( pDocShell, nIndex ); + } + return NULL; +} + +void SAL_CALL ScTableSheetsObj::insertNewByName( const ::rtl::OUString& aName, sal_Int16 nPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if (pDocShell) + { + String aNamStr = aName; + ScDocFunc aFunc(*pDocShell); + bDone = aFunc.InsertTable( nPosition, aNamStr, TRUE, TRUE ); + } + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +void SAL_CALL ScTableSheetsObj::moveByName( const ::rtl::OUString& aName, sal_Int16 nDestination ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if (pDocShell) + { + String aNamStr = aName; + USHORT nSource; + if ( pDocShell->GetDocument()->GetTable( aNamStr, nSource ) ) + bDone = pDocShell->MoveTable( nSource, nDestination, FALSE, TRUE ); + } + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +void SAL_CALL ScTableSheetsObj::copyByName( const ::rtl::OUString& aName, + const ::rtl::OUString& aCopy, sal_Int16 nDestination ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if (pDocShell) + { + String aNamStr = aName; + String aNewStr = aCopy; + USHORT nSource; + if ( pDocShell->GetDocument()->GetTable( aNamStr, nSource ) ) + { + bDone = pDocShell->MoveTable( nSource, nDestination, TRUE, TRUE ); + if (bDone) + { + ScDocFunc aFunc(*pDocShell); + bDone = aFunc.RenameTable( nDestination, aNewStr, TRUE, TRUE ); + } + } + } + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +void SAL_CALL ScTableSheetsObj::insertByName( const ::rtl::OUString& aName, const uno::Any& aElement ) + throw(lang::IllegalArgumentException, container::ElementExistException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + BOOL bIllArg = FALSE; + + //! Type of aElement can be some specific interface instead of XInterface + + uno::Reference<uno::XInterface> xInterface; + if ( pDocShell ) + { + if ( aElement >>= xInterface ) + { + ScTableSheetObj* pSheetObj = ScTableSheetObj::getImplementation( xInterface ); + if ( pSheetObj && !pSheetObj->GetDocShell() ) // noch nicht eingefuegt? + { + ScDocument* pDoc = pDocShell->GetDocument(); + String aNamStr = aName; + USHORT nDummy; + if ( pDoc->GetTable( aNamStr, nDummy ) ) + { + // name already exists + throw container::ElementExistException(); + } + else + { + USHORT nPosition = pDoc->GetTableCount(); + ScDocFunc aFunc(*pDocShell); + bDone = aFunc.InsertTable( nPosition, aNamStr, TRUE, TRUE ); + if (bDone) + pSheetObj->InitInsertSheet( pDocShell, nPosition ); + // Dokument und neuen Range am Objekt setzen + } + } + else + bIllArg = TRUE; + } + else + bIllArg = TRUE; + } + + if (!bDone) + { + if (bIllArg) + throw lang::IllegalArgumentException(); + else + throw uno::RuntimeException(); // ElementExistException is handled above + } +} + +void SAL_CALL ScTableSheetsObj::replaceByName( const ::rtl::OUString& aName, const uno::Any& aElement ) + throw(lang::IllegalArgumentException, container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + BOOL bIllArg = FALSE; + + //! Type of aElement can be some specific interface instead of XInterface + + uno::Reference<uno::XInterface> xInterface; + if ( pDocShell ) + { + if ( aElement >>= xInterface ) + { + ScTableSheetObj* pSheetObj = ScTableSheetObj::getImplementation( xInterface ); + if ( pSheetObj && !pSheetObj->GetDocShell() ) // noch nicht eingefuegt? + { + String aNamStr = aName; + USHORT nPosition; + if ( pDocShell->GetDocument()->GetTable( aNamStr, nPosition ) ) + { + ScDocFunc aFunc(*pDocShell); + if ( aFunc.DeleteTable( nPosition, TRUE, TRUE ) ) + { + // InsertTable kann jetzt eigentlich nicht schiefgehen... + bDone = aFunc.InsertTable( nPosition, aNamStr, TRUE, TRUE ); + if (bDone) + pSheetObj->InitInsertSheet( pDocShell, nPosition ); + } + } + else + { + // not found + throw container::NoSuchElementException(); + } + } + else + bIllArg = TRUE; + } + else + bIllArg = TRUE; + } + + if (!bDone) + { + if (bIllArg) + throw lang::IllegalArgumentException(); + else + throw uno::RuntimeException(); // NoSuchElementException is handled above + } +} + +void SAL_CALL ScTableSheetsObj::removeByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if (pDocShell) + { + USHORT nIndex; + String aString = aName; + if ( pDocShell->GetDocument()->GetTable( aString, nIndex ) ) + { + ScDocFunc aFunc(*pDocShell); + bDone = aFunc.DeleteTable( nIndex, TRUE, TRUE ); + } + else + { + // not found + throw container::NoSuchElementException(); + } + } + + if (!bDone) + throw uno::RuntimeException(); // NoSuchElementException is handled above +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScTableSheetsObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.SpreadsheetsEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScTableSheetsObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return pDocShell->GetDocument()->GetTableCount(); + return 0; +} + +uno::Any SAL_CALL ScTableSheetsObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XSpreadsheet> xSheet = GetObjectByIndex_Impl((USHORT)nIndex); + uno::Any aAny; + if (xSheet.is()) + aAny <<= xSheet; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScTableSheetsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<sheet::XSpreadsheet>*)0); +} + +sal_Bool SAL_CALL ScTableSheetsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +// XNameAccess + +uno::Any SAL_CALL ScTableSheetsObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XSpreadsheet> xSheet = GetObjectByName_Impl(aName); + uno::Any aAny; + if (xSheet.is()) + aAny <<= xSheet; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScTableSheetsObj::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nCount = pDoc->GetTableCount(); + String aName; + uno::Sequence< ::rtl::OUString> aSeq(nCount); + ::rtl::OUString* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + { + pDoc->GetName( i, aName ); + pAry[i] = aName; + } + return aSeq; + } + return uno::Sequence< ::rtl::OUString>(); +} + +sal_Bool SAL_CALL ScTableSheetsObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + USHORT nIndex; + String aString = aName; + if ( pDocShell->GetDocument()->GetTable( aString, nIndex ) ) + return TRUE; + } + return FALSE; +} + +//------------------------------------------------------------------------ + +ScTableColumnsObj::ScTableColumnsObj(ScDocShell* pDocSh, USHORT nT, USHORT nSC, USHORT nEC) : + pDocShell( pDocSh ), + nTab ( nT ), + nStartCol( nSC ), + nEndCol ( nEC ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScTableColumnsObj::~ScTableColumnsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScTableColumnsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; + + //! Referenz-Update fuer Tab und Start/Ende + } + else if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XTableColumns + +ScTableColumnObj* ScTableColumnsObj::GetObjectByIndex_Impl(USHORT nIndex) const +{ + USHORT nCol = nIndex + nStartCol; + if ( pDocShell && nCol <= nEndCol ) + return new ScTableColumnObj( pDocShell, nCol, nTab ); + + return NULL; // falscher Index +} + +ScTableColumnObj* ScTableColumnsObj::GetObjectByName_Impl(const ::rtl::OUString& aName) const +{ + USHORT nCol = 0; + String aString = aName; + if ( lcl_StringToColumn( aString, nCol ) ) + if ( pDocShell && nCol >= nStartCol && nCol <= nEndCol ) + return new ScTableColumnObj( pDocShell, nCol, nTab ); + + return NULL; +} + +void SAL_CALL ScTableColumnsObj::insertByIndex( sal_Int32 nPosition, sal_Int32 nCount ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if ( pDocShell && nCount > 0 && nPosition >= 0 && nStartCol+nPosition <= nEndCol && + nStartCol+nPosition+nCount-1 <= MAXCOL ) + { + ScDocFunc aFunc(*pDocShell); + ScRange aRange( (USHORT)(nStartCol+nPosition), 0, nTab, + (USHORT)(nStartCol+nPosition+nCount-1), MAXROW, nTab ); + bDone = aFunc.InsertCells( aRange, INS_INSCOLS, TRUE, TRUE ); + } + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +void SAL_CALL ScTableColumnsObj::removeByIndex( sal_Int32 nIndex, sal_Int32 nCount ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + // Der zu loeschende Bereich muss innerhalb des Objekts liegen + if ( pDocShell && nCount > 0 && nIndex >= 0 && nStartCol+nIndex+nCount-1 <= nEndCol ) + { + ScDocFunc aFunc(*pDocShell); + ScRange aRange( (USHORT)(nStartCol+nIndex), 0, nTab, + (USHORT)(nStartCol+nIndex+nCount-1), MAXROW, nTab ); + bDone = aFunc.DeleteCells( aRange, DEL_DELCOLS, TRUE, TRUE ); + } + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScTableColumnsObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.table.TableColumnsEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScTableColumnsObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return nEndCol - nStartCol + 1; +} + +uno::Any SAL_CALL ScTableColumnsObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<table::XCellRange> xColumn = GetObjectByIndex_Impl((USHORT)nIndex); + uno::Any aAny; + if (xColumn.is()) + aAny <<= xColumn; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScTableColumnsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<table::XCellRange>*)0); +} + +sal_Bool SAL_CALL ScTableColumnsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +uno::Any SAL_CALL ScTableColumnsObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<table::XCellRange> xColumn = GetObjectByName_Impl(aName); + uno::Any aAny; + if (xColumn.is()) + aAny <<= xColumn; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScTableColumnsObj::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nCount = nEndCol - nStartCol + 1; + uno::Sequence< ::rtl::OUString> aSeq(nCount); + ::rtl::OUString* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + pAry[i] = lcl_ColumnToString( nStartCol + i ); + + return aSeq; +} + +sal_Bool SAL_CALL ScTableColumnsObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nCol = 0; + String aString = aName; + if ( lcl_StringToColumn( aString, nCol ) ) + if ( pDocShell && nCol >= nStartCol && nCol <= nEndCol ) + return TRUE; + + return FALSE; // nicht gefunden +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScTableColumnsObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( lcl_GetColumnsPropertyMap() ); + return aRef; +} + +void SAL_CALL ScTableColumnsObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pDocShell) + throw uno::RuntimeException(); + + ScDocFunc aFunc(*pDocShell); + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nColArr[2]; + nColArr[0] = nStartCol; + nColArr[1] = nEndCol; + String aNameString = aPropertyName; + + if ( aNameString.EqualsAscii( SC_UNONAME_CELLWID ) ) + { + sal_Int32 nNewWidth; + if ( aValue >>= nNewWidth ) + aFunc.SetWidthOrHeight( TRUE, 1, nColArr, nTab, SC_SIZE_ORIGINAL, + (USHORT)HMMToTwips(nNewWidth), TRUE, TRUE ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_CELLVIS ) ) + { + BOOL bVis = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + ScSizeMode eMode = bVis ? SC_SIZE_SHOW : SC_SIZE_DIRECT; + aFunc.SetWidthOrHeight( TRUE, 1, nColArr, nTab, eMode, 0, TRUE, TRUE ); + // SC_SIZE_DIRECT with size 0: hide + } + else if ( aNameString.EqualsAscii( SC_UNONAME_OWIDTH ) ) + { + BOOL bOpt = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + if (bOpt) + aFunc.SetWidthOrHeight( TRUE, 1, nColArr, nTab, + SC_SIZE_OPTIMAL, STD_EXTRA_WIDTH, TRUE, TRUE ); + // FALSE for columns currently has no effect + } + else if ( aNameString.EqualsAscii( SC_UNONAME_NEWPAGE ) || aNameString.EqualsAscii( SC_UNONAME_MANPAGE ) ) + { + //! single function to set/remove all breaks? + BOOL bSet = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + for (USHORT nCol=nStartCol; nCol<=nEndCol; nCol++) + if (bSet) + aFunc.InsertPageBreak( TRUE, ScAddress(nCol,0,nTab), TRUE, TRUE, TRUE ); + else + aFunc.RemovePageBreak( TRUE, ScAddress(nCol,0,nTab), TRUE, TRUE, TRUE ); + } +} + +uno::Any SAL_CALL ScTableColumnsObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pDocShell) + throw uno::RuntimeException(); + + ScDocument* pDoc = pDocShell->GetDocument(); + String aNameString = aPropertyName; + uno::Any aAny; + + //! loop over all columns for current state? + + if ( aNameString.EqualsAscii( SC_UNONAME_CELLWID ) ) + { + // for hidden column, return original height + USHORT nWidth = pDoc->GetOriginalWidth( nStartCol, nTab ); + aAny <<= (sal_Int32)TwipsToHMM(nWidth); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_CELLVIS ) ) + { + BOOL bVis = !(pDoc->GetColFlags( nStartCol, nTab ) & CR_HIDDEN); + ScUnoHelpFunctions::SetBoolInAny( aAny, bVis ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_OWIDTH ) ) + { + BOOL bOpt = !(pDoc->GetColFlags( nStartCol, nTab ) & CR_MANUALSIZE); + ScUnoHelpFunctions::SetBoolInAny( aAny, bOpt ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_NEWPAGE ) ) + { + BOOL bBreak = ( 0 != (pDoc->GetColFlags( nStartCol, nTab ) & (CR_PAGEBREAK|CR_MANUALBREAK)) ); + ScUnoHelpFunctions::SetBoolInAny( aAny, bBreak ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_MANPAGE ) ) + { + BOOL bBreak = ( 0 != (pDoc->GetColFlags( nStartCol, nTab ) & (CR_MANUALBREAK)) ); + ScUnoHelpFunctions::SetBoolInAny( aAny, bBreak ); + } + + return aAny; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScTableColumnsObj ) + +//------------------------------------------------------------------------ + +ScTableRowsObj::ScTableRowsObj(ScDocShell* pDocSh, USHORT nT, USHORT nSR, USHORT nER) : + pDocShell( pDocSh ), + nTab ( nT ), + nStartRow( nSR ), + nEndRow ( nER ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScTableRowsObj::~ScTableRowsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScTableRowsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; + + //! Referenz-Update fuer Tab und Start/Ende + } + else if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XTableRows + +ScTableRowObj* ScTableRowsObj::GetObjectByIndex_Impl(USHORT nIndex) const +{ + USHORT nRow = nIndex + nStartRow; + if ( pDocShell && nRow <= nEndRow ) + return new ScTableRowObj( pDocShell, nRow, nTab ); + + return NULL; // falscher Index +} + +void SAL_CALL ScTableRowsObj::insertByIndex( sal_Int32 nPosition, sal_Int32 nCount ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if ( pDocShell && nCount > 0 && nPosition >= 0 && nStartRow+nPosition <= nEndRow && + nStartRow+nPosition+nCount-1 <= MAXROW ) + { + ScDocFunc aFunc(*pDocShell); + ScRange aRange( 0, (USHORT)(nStartRow+nPosition), nTab, + MAXCOL, (USHORT)(nStartRow+nPosition+nCount-1), nTab ); + bDone = aFunc.InsertCells( aRange, INS_INSROWS, TRUE, TRUE ); + } + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +void SAL_CALL ScTableRowsObj::removeByIndex( sal_Int32 nIndex, sal_Int32 nCount ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + // Der zu loeschende Bereich muss innerhalb des Objekts liegen + if ( pDocShell && nCount > 0 && nIndex >= 0 && nStartRow+nIndex+nCount-1 <= nEndRow ) + { + ScDocFunc aFunc(*pDocShell); + ScRange aRange( 0, (USHORT)(nStartRow+nIndex), nTab, + MAXCOL, (USHORT)(nStartRow+nIndex+nCount-1), nTab ); + bDone = aFunc.DeleteCells( aRange, DEL_DELROWS, TRUE, TRUE ); + } + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScTableRowsObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.table.TableRowsEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScTableRowsObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return nEndRow - nStartRow + 1; +} + +uno::Any SAL_CALL ScTableRowsObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<table::XCellRange> xRow = GetObjectByIndex_Impl((USHORT)nIndex); + uno::Any aAny; + if (xRow.is()) + aAny <<= xRow; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScTableRowsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<table::XCellRange>*)0); +} + +sal_Bool SAL_CALL ScTableRowsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScTableRowsObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( lcl_GetRowsPropertyMap() ); + return aRef; +} + +void SAL_CALL ScTableRowsObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pDocShell) + throw uno::RuntimeException(); + + ScDocFunc aFunc(*pDocShell); + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nRowArr[2]; + nRowArr[0] = nStartRow; + nRowArr[1] = nEndRow; + String aNameString = aPropertyName; + + if ( aNameString.EqualsAscii( SC_UNONAME_CELLHGT ) ) + { + sal_Int32 nNewHeight; + if ( aValue >>= nNewHeight ) + aFunc.SetWidthOrHeight( FALSE, 1, nRowArr, nTab, SC_SIZE_ORIGINAL, + (USHORT)HMMToTwips(nNewHeight), TRUE, TRUE ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_CELLVIS ) ) + { + BOOL bVis = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + ScSizeMode eMode = bVis ? SC_SIZE_SHOW : SC_SIZE_DIRECT; + aFunc.SetWidthOrHeight( FALSE, 1, nRowArr, nTab, eMode, 0, TRUE, TRUE ); + // SC_SIZE_DIRECT with size 0: hide + } + else if ( aNameString.EqualsAscii( SC_UNONAME_CELLFILT ) ) + { + //! undo etc. + BOOL bFil = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + for (USHORT nRow=nStartRow; nRow<=nEndRow; nRow++) + { + BYTE nFlags = pDoc->GetRowFlags(nRow, nTab); + if (bFil) + nFlags |= CR_FILTERED; + else + nFlags &= ~CR_FILTERED; + pDoc->SetRowFlags(nRow, nTab, nFlags); + } + } + else if ( aNameString.EqualsAscii( SC_UNONAME_OHEIGHT ) ) + { + BOOL bOpt = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + if (bOpt) + aFunc.SetWidthOrHeight( FALSE, 1, nRowArr, nTab, SC_SIZE_OPTIMAL, 0, TRUE, TRUE ); + else + { + //! manually set old heights again? + } + } + else if ( aNameString.EqualsAscii( SC_UNONAME_NEWPAGE) || aNameString.EqualsAscii( SC_UNONAME_MANPAGE) ) + { + //! single function to set/remove all breaks? + BOOL bSet = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + for (USHORT nRow=nStartRow; nRow<=nEndRow; nRow++) + if (bSet) + aFunc.InsertPageBreak( FALSE, ScAddress(0,nRow,nTab), TRUE, TRUE, TRUE ); + else + aFunc.RemovePageBreak( FALSE, ScAddress(0,nRow,nTab), TRUE, TRUE, TRUE ); + } +} + +uno::Any SAL_CALL ScTableRowsObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pDocShell) + throw uno::RuntimeException(); + + ScDocument* pDoc = pDocShell->GetDocument(); + String aNameString = aPropertyName; + uno::Any aAny; + + //! loop over all rows for current state? + + if ( aNameString.EqualsAscii( SC_UNONAME_CELLHGT ) ) + { + // for hidden row, return original height + USHORT nHeight = pDoc->GetOriginalHeight( nStartRow, nTab ); + aAny <<= (sal_Int32)TwipsToHMM(nHeight); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_CELLVIS ) ) + { + BOOL bVis = !(pDoc->GetRowFlags( nStartRow, nTab ) & CR_HIDDEN); + ScUnoHelpFunctions::SetBoolInAny( aAny, bVis ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_CELLFILT ) ) + { + BOOL bVis = ((pDoc->GetRowFlags( nStartRow, nTab ) & CR_FILTERED) != 0); + ScUnoHelpFunctions::SetBoolInAny( aAny, bVis ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_OHEIGHT ) ) + { + BOOL bOpt = !(pDoc->GetRowFlags( nStartRow, nTab ) & CR_MANUALSIZE); + ScUnoHelpFunctions::SetBoolInAny( aAny, bOpt ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_NEWPAGE ) ) + { + BOOL bBreak = ( 0 != (pDoc->GetRowFlags( nStartRow, nTab ) & (CR_PAGEBREAK|CR_MANUALBREAK)) ); + ScUnoHelpFunctions::SetBoolInAny( aAny, bBreak ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_MANPAGE ) ) + { + BOOL bBreak = ( 0 != (pDoc->GetRowFlags( nStartRow, nTab ) & (CR_MANUALBREAK)) ); + ScUnoHelpFunctions::SetBoolInAny( aAny, bBreak ); + } + + return aAny; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScTableRowsObj ) + +//------------------------------------------------------------------------ + +ScSpreadsheetSettingsObj::~ScSpreadsheetSettingsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScSpreadsheetSettingsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScSpreadsheetSettingsObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + //! muss noch + return NULL; +} + +void SAL_CALL ScSpreadsheetSettingsObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + //! muss noch +} + +uno::Any SAL_CALL ScSpreadsheetSettingsObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + //! muss noch + return uno::Any(); +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScSpreadsheetSettingsObj ) + +//------------------------------------------------------------------------ + +ScAnnotationsObj::ScAnnotationsObj(ScDocShell* pDocSh, USHORT nT) : + pDocShell( pDocSh ), + nTab( nT ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScAnnotationsObj::~ScAnnotationsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScAnnotationsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + //! nTab bei Referenz-Update anpassen!!! + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +BOOL ScAnnotationsObj::GetAddressByIndex_Impl( ULONG nIndex, ScAddress& rPos ) const +{ + if (pDocShell) + { + ULONG nFound = 0; + ScDocument* pDoc = pDocShell->GetDocument(); + ScCellIterator aCellIter( pDoc, 0,0, nTab, MAXCOL,MAXROW, nTab ); + ScBaseCell* pCell = aCellIter.GetFirst(); + while (pCell) + { + if (pCell->GetNotePtr()) + { + if (nFound == nIndex) + { + rPos = ScAddress( aCellIter.GetCol(), aCellIter.GetRow(), aCellIter.GetTab() ); + return TRUE; + } + ++nFound; + } + pCell = aCellIter.GetNext(); + } + } + return FALSE; // nicht gefunden +} + +// XSheetAnnotations + +ScAnnotationObj* ScAnnotationsObj::GetObjectByIndex_Impl(USHORT nIndex) const +{ + if (pDocShell) + { + ScAddress aPos; + if ( GetAddressByIndex_Impl( nIndex, aPos ) ) + return new ScAnnotationObj( pDocShell, aPos ); + } + return NULL; +} + +void SAL_CALL ScAnnotationsObj::insertNew( const table::CellAddress& aPosition, + const ::rtl::OUString& aText ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + DBG_ASSERT( aPosition.Sheet == nTab, "addAnnotation mit falschem Sheet" ); + ScAddress aPos( (USHORT)aPosition.Column, (USHORT)aPosition.Row, nTab ); + + String aString = aText; + + ScDocFunc aFunc(*pDocShell); + aFunc.SetNoteText( aPos, aString, TRUE ); + } +} + +void SAL_CALL ScAnnotationsObj::removeByIndex( sal_Int32 nIndex ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScAddress aPos; + if ( GetAddressByIndex_Impl( nIndex, aPos ) ) + { + ScMarkData aMarkData; + aMarkData.SelectTable( aPos.Tab(), TRUE ); + aMarkData.SetMultiMarkArea( ScRange(aPos) ); + + ScDocFunc aFunc(*pDocShell); + aFunc.DeleteContents( aMarkData, IDF_NOTE, TRUE, TRUE ); + } + } +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScAnnotationsObj::createEnumeration() + throw(uno::RuntimeException) +{ + //! iterate directly (more efficiently)? + + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.CellAnnotationsEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScAnnotationsObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ULONG nCount = 0; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScCellIterator aCellIter( pDoc, 0,0, nTab, MAXCOL,MAXROW, nTab ); + ScBaseCell* pCell = aCellIter.GetFirst(); + while (pCell) + { + if (pCell->GetNotePtr()) + ++nCount; + pCell = aCellIter.GetNext(); + } + } + return nCount; +} + +uno::Any SAL_CALL ScAnnotationsObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XSheetAnnotation> xAnnotation = GetObjectByIndex_Impl((USHORT)nIndex); + uno::Any aAny; + if (xAnnotation.is()) + aAny <<= xAnnotation; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScAnnotationsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<sheet::XSheetAnnotation>*)0); +} + +sal_Bool SAL_CALL ScAnnotationsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +//------------------------------------------------------------------------ + +ScScenariosObj::ScScenariosObj(ScDocShell* pDocSh, USHORT nT) : + pDocShell( pDocSh ), + nTab ( nT ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScScenariosObj::~ScScenariosObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScScenariosObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; + + //! Referenz-Update fuer Tab und Start/Ende + } + else if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XScenarios + +BOOL ScScenariosObj::GetScenarioIndex_Impl( const ::rtl::OUString& rName, USHORT& rIndex ) +{ + //! Case-insensitiv ???? + + if ( pDocShell ) + { + String aString = rName; + + String aTabName; + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nCount = (USHORT)getCount(); + for (USHORT i=0; i<nCount; i++) + if (pDoc->GetName( nTab+i+1, aTabName )) + if ( aTabName == aString ) + { + rIndex = i; + return TRUE; + } + } + + return FALSE; +} + +ScTableSheetObj* ScScenariosObj::GetObjectByIndex_Impl(USHORT nIndex) +{ + USHORT nCount = (USHORT)getCount(); + if ( pDocShell && nIndex < nCount ) + return new ScTableSheetObj( pDocShell, nTab+nIndex+1 ); + + return NULL; // kein Dokument oder falscher Index +} + +ScTableSheetObj* ScScenariosObj::GetObjectByName_Impl(const ::rtl::OUString& aName) +{ + USHORT nIndex; + if ( pDocShell && GetScenarioIndex_Impl( aName, nIndex ) ) + return new ScTableSheetObj( pDocShell, nTab+nIndex+1 ); + + return NULL; // nicht gefunden +} + +void SAL_CALL ScScenariosObj::addNewByName( const ::rtl::OUString& aName, + const uno::Sequence<table::CellRangeAddress>& aRanges, + const ::rtl::OUString& aComment ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell ) + { + ScMarkData aMarkData; + aMarkData.SelectTable( nTab, TRUE ); + + USHORT nRangeCount = (USHORT)aRanges.getLength(); + if (nRangeCount) + { + const table::CellRangeAddress* pAry = aRanges.getConstArray(); + for (USHORT i=0; i<nRangeCount; i++) + { + DBG_ASSERT( pAry[i].Sheet == nTab, "addScenario mit falscher Tab" ); + ScRange aRange( (USHORT)pAry[i].StartColumn, (USHORT)pAry[i].StartRow, nTab, + (USHORT)pAry[i].EndColumn, (USHORT)pAry[i].EndRow, nTab ); + + aMarkData.SetMultiMarkArea( aRange ); + } + } + + String aNameStr = aName; + String aCommStr = aComment; + + Color aColor( COL_LIGHTGRAY ); // Default + USHORT nFlags = SC_SCENARIO_SHOWFRAME | SC_SCENARIO_PRINTFRAME | SC_SCENARIO_TWOWAY; + + pDocShell->MakeScenario( nTab, aNameStr, aCommStr, aColor, nFlags, aMarkData ); + } +} + +void SAL_CALL ScScenariosObj::removeByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nIndex; + if ( pDocShell && GetScenarioIndex_Impl( aName, nIndex ) ) + { + ScDocFunc aFunc(*pDocShell); + aFunc.DeleteTable( nTab+nIndex+1, TRUE, TRUE ); + } +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScScenariosObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.ScenariosEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScScenariosObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nCount = 0; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + if (!pDoc->IsScenario(nTab)) + { + USHORT nTabCount = pDoc->GetTableCount(); + USHORT nNext = nTab + 1; + while (nNext < nTabCount && pDoc->IsScenario(nNext)) + { + ++nCount; + ++nNext; + } + } + } + return nCount; +} + +uno::Any SAL_CALL ScScenariosObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XScenario> xScen = GetObjectByIndex_Impl((USHORT)nIndex); + uno::Any aAny; + if (xScen.is()) + aAny <<= xScen; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScScenariosObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<sheet::XScenario>*)0); +} + +sal_Bool SAL_CALL ScScenariosObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +uno::Any SAL_CALL ScScenariosObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XScenario> xScen = GetObjectByName_Impl(aName); + uno::Any aAny; + if (xScen.is()) + aAny <<= xScen; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScScenariosObj::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nCount = (USHORT)getCount(); + uno::Sequence< ::rtl::OUString> aSeq(nCount); + + if ( pDocShell ) // sonst ist auch Count = 0 + { + String aTabName; + ScDocument* pDoc = pDocShell->GetDocument(); + ::rtl::OUString* pAry = aSeq.getArray(); + for (USHORT i=0; i<nCount; i++) + if (pDoc->GetName( nTab+i+1, aTabName )) + pAry[i] = aTabName; + } + + return aSeq; +} + +sal_Bool SAL_CALL ScScenariosObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nIndex; + return GetScenarioIndex_Impl( aName, nIndex ); +} + + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_drdefuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_drdefuno.cxx new file mode 100644 index 000000000000..85b364908c0a --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_drdefuno.cxx @@ -0,0 +1,87 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "drdefuno.hxx" +#include "docsh.hxx" +#include "drwlayer.hxx" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +ScDrawDefaultsObj::ScDrawDefaultsObj(ScDocShell* pDocSh) : + SvxUnoDrawPool( NULL ), + pDocShell( pDocSh ) +{ + // SvxUnoDrawPool is initialized without model, + // draw layer is created on demand in getModelPool + + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScDrawDefaultsObj::~ScDrawDefaultsObj() throw () +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScDrawDefaultsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // document gone + } +} + +SfxItemPool* ScDrawDefaultsObj::getModelPool( sal_Bool bReadOnly ) throw() +{ + SfxItemPool* pRet = NULL; + if ( pDocShell ) + { + ScDrawLayer* pModel = bReadOnly ? + pDocShell->GetDocument()->GetDrawLayer() : + pDocShell->MakeDrawLayer(); + if ( pModel ) + pRet = &pModel->GetItemPool(); + } + if ( !pRet ) + pRet = SvxUnoDrawPool::getModelPool( bReadOnly ); // uses default pool + + return pRet; +} + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_editsrc.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_editsrc.cxx new file mode 100644 index 000000000000..3894e49ed29c --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_editsrc.cxx @@ -0,0 +1,352 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#define ITEMID_FIELD EE_FEATURE_FIELD +#include <bf_svx/unofored.hxx> + +#include "editsrc.hxx" +#include "editutil.hxx" +#include "docsh.hxx" +#include "docfunc.hxx" +#include "hints.hxx" +#include <vcl/svapp.hxx> +#include "AccessibleText.hxx" +namespace binfilter { + +//------------------------------------------------------------------------ + +TYPEINIT1( ScHeaderFooterChangedHint, SfxHint ); + +ScHeaderFooterChangedHint::ScHeaderFooterChangedHint(USHORT nP) : + nPart( nP ) +{ +} + +ScHeaderFooterChangedHint::~ScHeaderFooterChangedHint() +{ +} + +//------------------------------------------------------------------------ + +ScSharedHeaderFooterEditSource::ScSharedHeaderFooterEditSource( ScHeaderFooterTextData* pData ) : + pTextData( pData ) +{ + // pTextData is held by the ScHeaderFooterTextObj. + // Text range and cursor keep a reference to their parent text, so the text object is + // always alive and the TextData is valid as long as there are children. +} + +ScSharedHeaderFooterEditSource::~ScSharedHeaderFooterEditSource() +{ +} + +SvxEditSource* ScSharedHeaderFooterEditSource::Clone() const +{ + return new ScSharedHeaderFooterEditSource( pTextData ); +} + +SvxTextForwarder* ScSharedHeaderFooterEditSource::GetTextForwarder() +{ + return pTextData->GetTextForwarder(); +} + +void ScSharedHeaderFooterEditSource::UpdateData() +{ + pTextData->UpdateData(); +} + +ScEditEngineDefaulter* ScSharedHeaderFooterEditSource::GetEditEngine() +{ + return pTextData->GetEditEngine(); +} + +//------------------------------------------------------------------------ + +// each ScHeaderFooterEditSource object has its own ScHeaderFooterTextData + +ScHeaderFooterEditSource::ScHeaderFooterEditSource( ScHeaderFooterContentObj* pContent, + USHORT nP ) : + ScSharedHeaderFooterEditSource( new ScHeaderFooterTextData( *pContent, nP ) ) +{ +} + +ScHeaderFooterEditSource::ScHeaderFooterEditSource( ScHeaderFooterContentObj& rContent, + USHORT nP ) : + ScSharedHeaderFooterEditSource( new ScHeaderFooterTextData( rContent, nP ) ) +{ +} + +ScHeaderFooterEditSource::~ScHeaderFooterEditSource() +{ + delete GetTextData(); // not accessed in ScSharedHeaderFooterEditSource dtor +} + +SvxEditSource* ScHeaderFooterEditSource::Clone() const +{ + const ScHeaderFooterTextData* pData = GetTextData(); + return new ScHeaderFooterEditSource( pData->GetContentObj(), pData->GetPart() ); +} + +//------------------------------------------------------------------------ + +ScSharedCellEditSource::ScSharedCellEditSource( ScCellTextData* pData ) : + pCellTextData( pData ) +{ + // pCellTextData is part of the ScCellTextObj. + // Text range and cursor keep a reference to their parent text, so the text object is + // always alive and the CellTextData is valid as long as there are children. +} + +ScSharedCellEditSource::~ScSharedCellEditSource() +{ +} + +SvxEditSource* ScSharedCellEditSource::Clone() const +{ + return new ScSharedCellEditSource( pCellTextData ); +} + +SvxTextForwarder* ScSharedCellEditSource::GetTextForwarder() +{ + return pCellTextData->GetTextForwarder(); +} + +void ScSharedCellEditSource::UpdateData() +{ + pCellTextData->UpdateData(); +} + +void ScSharedCellEditSource::SetDoUpdateData(sal_Bool bValue) +{ + pCellTextData->SetDoUpdate(bValue); +} + +sal_Bool ScSharedCellEditSource::IsDirty() const +{ + return pCellTextData->IsDirty(); +} + +ScEditEngineDefaulter* ScSharedCellEditSource::GetEditEngine() +{ + return pCellTextData->GetEditEngine(); +} + +//------------------------------------------------------------------------ + +// each ScCellEditSource object has its own ScCellTextData + +ScCellEditSource::ScCellEditSource( ScDocShell* pDocSh, const ScAddress& rP ) : + ScSharedCellEditSource( new ScCellTextData( pDocSh, rP ) ) +{ +} + +ScCellEditSource::~ScCellEditSource() +{ + delete GetCellTextData(); // not accessed in ScSharedCellEditSource dtor +} + +SvxEditSource* ScCellEditSource::Clone() const +{ + const ScCellTextData* pData = GetCellTextData(); + return new ScCellEditSource( pData->GetDocShell(), pData->GetCellPos() ); +} + +//------------------------------------------------------------------------ + +ScAnnotationEditSource::ScAnnotationEditSource(ScDocShell* pDocSh, const ScAddress& rP) : + pDocShell( pDocSh ), + aCellPos( rP ), + pEditEngine( NULL ), + pForwarder( NULL ), + bDataValid( FALSE ) +{ + if (pDocShell) + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScAnnotationEditSource::~ScAnnotationEditSource() +{ + SolarMutexGuard aGuard; // needed for EditEngine dtor + + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); + + delete pForwarder; + delete pEditEngine; +} + +SvxEditSource* ScAnnotationEditSource::Clone() const +{ + return new ScAnnotationEditSource( pDocShell, aCellPos ); +} + +SvxTextForwarder* ScAnnotationEditSource::GetTextForwarder() +{ + if (!pEditEngine) + { + // Notizen haben keine Felder + if ( pDocShell ) + pEditEngine = new ScEditEngineDefaulter( + pDocShell->GetDocument()->GetEnginePool(), FALSE ); + else + { + SfxItemPool* pEnginePool = EditEngine::CreatePool(); + pEnginePool->FreezeIdRanges(); + pEditEngine = new ScEditEngineDefaulter( pEnginePool, TRUE ); + } + pForwarder = new SvxEditEngineForwarder(*pEditEngine); + } + + if (bDataValid) + return pForwarder; + + if ( pDocShell ) + { + ScPostIt aNote; + ScDocument* pDoc = pDocShell->GetDocument(); + pDoc->GetNote( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(), aNote ); + + pEditEngine->SetText( aNote.GetText() ); // incl. Umbrueche + } + + bDataValid = TRUE; + return pForwarder; +} + +void ScAnnotationEditSource::UpdateData() +{ + if ( pDocShell && pEditEngine ) + { + String aNewText = pEditEngine->GetText( LINEEND_LF ); // im SetNoteText passiert ConvertLineEnd + ScDocFunc aFunc(*pDocShell); + aFunc.SetNoteText( aCellPos, aNewText, TRUE ); + + // bDataValid wird bei SetDocumentModified zurueckgesetzt + } +} + +void ScAnnotationEditSource::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; + + //! Ref-Update + } + else if ( rHint.ISA( SfxSimpleHint ) ) + { + ULONG nId = ((const SfxSimpleHint&)rHint).GetId(); + if ( nId == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + + DELETEZ( pForwarder ); + DELETEZ( pEditEngine ); // EditEngine uses document's pool + } + else if ( nId == SFX_HINT_DATACHANGED ) + bDataValid = FALSE; // Text muss neu geholt werden + } +} + +//------------------------------------------------------------------------ + +ScSimpleEditSource::ScSimpleEditSource( SvxTextForwarder* pForw ) : + pForwarder( pForw ) +{ + // The same forwarder (and EditEngine) is shared by all children of the same Text object. + // Text range and cursor keep a reference to their parent text, so the text object is + // always alive and the forwarder is valid as long as there are children. +} + +ScSimpleEditSource::~ScSimpleEditSource() +{ +} + +SvxEditSource* ScSimpleEditSource::Clone() const +{ + return new ScSimpleEditSource( pForwarder ); +} + +SvxTextForwarder* ScSimpleEditSource::GetTextForwarder() +{ + return pForwarder; +} + +void ScSimpleEditSource::UpdateData() +{ + // nothing +} + +//------------------------------------------------------------------------ + +ScAccessibilityEditSource::ScAccessibilityEditSource( ::std::auto_ptr < ScAccessibleTextData > pAccessibleCellTextData ) + : mpAccessibleTextData(pAccessibleCellTextData) +{ +} + +ScAccessibilityEditSource::~ScAccessibilityEditSource() +{ +} + +SvxEditSource* ScAccessibilityEditSource::Clone() const +{ + return new ScAccessibilityEditSource(::std::auto_ptr < ScAccessibleTextData > (mpAccessibleTextData->Clone())); +} + +SvxTextForwarder* ScAccessibilityEditSource::GetTextForwarder() +{ + return mpAccessibleTextData->GetTextForwarder(); +} + +SvxViewForwarder* ScAccessibilityEditSource::GetViewForwarder() +{ + return mpAccessibleTextData->GetViewForwarder(); +} + +SvxEditViewForwarder* ScAccessibilityEditSource::GetEditViewForwarder( sal_Bool bCreate ) +{ + return mpAccessibleTextData->GetEditViewForwarder(bCreate); +} + +void ScAccessibilityEditSource::UpdateData() +{ + mpAccessibleTextData->UpdateData(); +} + +SfxBroadcaster& ScAccessibilityEditSource::GetBroadcaster() const +{ + return mpAccessibleTextData->GetBroadcaster(); +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_fielduno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_fielduno.cxx new file mode 100644 index 000000000000..bbf56c6a1a72 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_fielduno.cxx @@ -0,0 +1,1540 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#define ITEMID_FIELD EE_FEATURE_FIELD + +#include <bf_svx/editobj.hxx> + + + +#include <bf_svx/itemdata.hxx> + +#include <tools/date.hxx> + +#include <tools/time.hxx> + +#include <bf_svx/flditem.hxx> +#include <rtl/uuid.h> + +#include <com/sun/star/beans/PropertyAttribute.hpp> +#include <com/sun/star/text/TextContentAnchorType.hpp> +#include <com/sun/star/text/WrapTextMode.hpp> +#include <com/sun/star/text/FilenameDisplayFormat.hpp> + +#include "fielduno.hxx" +#include "textuno.hxx" +#include "miscuno.hxx" +#include "docsh.hxx" +#include "hints.hxx" +#include "editsrc.hxx" +#include "cellsuno.hxx" +#include "servuno.hxx" // fuer IDs +#include <vcl/svapp.hxx> +#include "unonames.hxx" +#include "editutil.hxx" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +// alles ohne Which-ID, Map nur fuer PropertySetInfo + +const SfxItemPropertyMap* lcl_GetURLPropertyMap() +{ + static SfxItemPropertyMap aURLPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_ANCTYPE), 0, &getCppuType((text::TextContentAnchorType*)0), beans::PropertyAttribute::READONLY }, + {MAP_CHAR_LEN(SC_UNONAME_ANCTYPES), 0, &getCppuType((uno::Sequence<text::TextContentAnchorType>*)0), beans::PropertyAttribute::READONLY }, + {MAP_CHAR_LEN(SC_UNONAME_REPR), 0, &getCppuType((::rtl::OUString*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_TARGET), 0, &getCppuType((::rtl::OUString*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_TEXTWRAP), 0, &getCppuType((text::WrapTextMode*)0), beans::PropertyAttribute::READONLY }, + {MAP_CHAR_LEN(SC_UNONAME_URL), 0, &getCppuType((::rtl::OUString*)0), 0}, + {0,0,0,0} + }; + return aURLPropertyMap_Impl; +} + +const SfxItemPropertyMap* lcl_GetHeaderFieldPropertyMap() +{ + static SfxItemPropertyMap aHeaderFieldPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_ANCTYPE), 0, &getCppuType((text::TextContentAnchorType*)0), beans::PropertyAttribute::READONLY }, + {MAP_CHAR_LEN(SC_UNONAME_ANCTYPES), 0, &getCppuType((uno::Sequence<text::TextContentAnchorType>*)0), beans::PropertyAttribute::READONLY }, + {MAP_CHAR_LEN(SC_UNONAME_TEXTWRAP), 0, &getCppuType((text::WrapTextMode*)0), beans::PropertyAttribute::READONLY }, + {0,0,0,0} + }; + return aHeaderFieldPropertyMap_Impl; +} + +const SfxItemPropertyMap* lcl_GetFileFieldPropertyMap() +{ + static SfxItemPropertyMap aFileFieldPropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_ANCTYPE), 0, &getCppuType((text::TextContentAnchorType*)0), beans::PropertyAttribute::READONLY }, + {MAP_CHAR_LEN(SC_UNONAME_ANCTYPES), 0, &getCppuType((uno::Sequence<text::TextContentAnchorType>*)0), beans::PropertyAttribute::READONLY }, + {MAP_CHAR_LEN(SC_UNONAME_FILEFORM), 0, &getCppuType((sal_Int16*)0), 0 }, + {MAP_CHAR_LEN(SC_UNONAME_TEXTWRAP), 0, &getCppuType((text::WrapTextMode*)0), beans::PropertyAttribute::READONLY }, + {0,0,0,0} + }; + return aFileFieldPropertyMap_Impl; +} + +//------------------------------------------------------------------------ + +#define SCTEXTFIELD_SERVICE "com.sun.star.text.TextField" +#define SCTEXTCONTENT_SERVICE "com.sun.star.text.TextContent" + +SC_SIMPLE_SERVICE_INFO( ScCellFieldsObj, "ScCellFieldsObj", "com.sun.star.text.TextFields" ) +SC_SIMPLE_SERVICE_INFO( ScHeaderFieldsObj, "ScHeaderFieldsObj", "com.sun.star.text.TextFields" ) + +//------------------------------------------------------------------------ + +// ScUnoEditEngine nur um aus einer EditEngine die Felder herauszubekommen... + +enum ScUnoCollectMode +{ + SC_UNO_COLLECT_NONE, + SC_UNO_COLLECT_COUNT, + SC_UNO_COLLECT_FINDINDEX, + SC_UNO_COLLECT_FINDPOS +}; + +class ScUnoEditEngine : public ScEditEngineDefaulter +{ + ScUnoCollectMode eMode; + USHORT nFieldCount; + TypeId aFieldType; + SvxFieldData* pFound; // lokale Kopie + USHORT nFieldPar; + xub_StrLen nFieldPos; + USHORT nFieldIndex; + +public: + ScUnoEditEngine(ScEditEngineDefaulter* pSource); + ~ScUnoEditEngine(); + + //! nPos should be xub_StrLen + virtual String CalcFieldValue( const SvxFieldItem& rField, USHORT nPara, USHORT nPos, + Color*& rTxtColor, Color*& rFldColor ); + + USHORT CountFields(TypeId aType); + SvxFieldData* FindByIndex(USHORT nIndex, TypeId aType); + SvxFieldData* FindByPos(USHORT nPar, xub_StrLen nPos, TypeId aType); + + USHORT GetFieldPar() const { return nFieldPar; } + xub_StrLen GetFieldPos() const { return nFieldPos; } +}; + +ScUnoEditEngine::ScUnoEditEngine(ScEditEngineDefaulter* pSource) : + ScEditEngineDefaulter( *pSource ), + eMode( SC_UNO_COLLECT_NONE ), + nFieldCount( 0 ), + aFieldType( NULL ), + pFound( NULL ) +{ + if (pSource) + { + EditTextObject* pData = pSource->CreateTextObject(); + SetText( *pData ); + delete pData; + } +} + +ScUnoEditEngine::~ScUnoEditEngine() +{ + delete pFound; +} + +String ScUnoEditEngine::CalcFieldValue( const SvxFieldItem& rField, + USHORT nPara, USHORT nPos, Color*& rTxtColor, Color*& rFldColor ) +{ + String aRet = EditEngine::CalcFieldValue( rField, nPara, nPos, rTxtColor, rFldColor ); + if (eMode != SC_UNO_COLLECT_NONE) + { + const SvxFieldData* pFieldData = rField.GetField(); + if ( pFieldData ) + { + if ( !aFieldType || pFieldData->Type() == aFieldType ) + { + if ( eMode == SC_UNO_COLLECT_FINDINDEX && !pFound && nFieldCount == nFieldIndex ) + { + pFound = pFieldData->Clone(); + nFieldPar = nPara; + nFieldPos = nPos; + } + if ( eMode == SC_UNO_COLLECT_FINDPOS && !pFound && + nPara == nFieldPar && nPos == nFieldPos ) + { + pFound = pFieldData->Clone(); + nFieldIndex = nFieldCount; + } + ++nFieldCount; + } + } + } + return aRet; +} + +USHORT ScUnoEditEngine::CountFields(TypeId aType) +{ + eMode = SC_UNO_COLLECT_COUNT; + aFieldType = aType; + nFieldCount = 0; + UpdateFields(); + aFieldType = NULL; + eMode = SC_UNO_COLLECT_NONE; + + return nFieldCount; +} + +SvxFieldData* ScUnoEditEngine::FindByIndex(USHORT nIndex, TypeId aType) +{ + eMode = SC_UNO_COLLECT_FINDINDEX; + nFieldIndex = nIndex; + aFieldType = aType; + nFieldCount = 0; + UpdateFields(); + aFieldType = NULL; + eMode = SC_UNO_COLLECT_NONE; + + return pFound; +} + +SvxFieldData* ScUnoEditEngine::FindByPos(USHORT nPar, xub_StrLen nPos, TypeId aType) +{ + eMode = SC_UNO_COLLECT_FINDPOS; + nFieldPar = nPar; + nFieldPos = nPos; + aFieldType = aType; + nFieldCount = 0; + UpdateFields(); + aFieldType = NULL; + eMode = SC_UNO_COLLECT_NONE; + + return pFound; +} + +//------------------------------------------------------------------------ + +ScCellFieldsObj::ScCellFieldsObj(ScDocShell* pDocSh, const ScAddress& rPos) : + pDocShell( pDocSh ), + aCellPos( rPos ), + mpRefreshListeners( NULL ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); + + pEditSource = new ScCellEditSource( pDocShell, aCellPos ); +} + +ScCellFieldsObj::~ScCellFieldsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); + + delete pEditSource; + + // increment refcount to prevent double call off dtor + osl_incrementInterlockedCount( &m_refCount ); + + if (mpRefreshListeners) + { + lang::EventObject aEvent; + aEvent.Source = static_cast<cppu::OWeakObject*>(this); + if (mpRefreshListeners) + { + mpRefreshListeners->disposeAndClear(aEvent); + DELETEZ( mpRefreshListeners ); + } + } +} + +void ScCellFieldsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; + + //! Ref-Update + } + else if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } + + // EditSource hat sich selber als Listener angemeldet +} + +// XIndexAccess (via XTextFields) + +ScCellFieldObj* ScCellFieldsObj::GetObjectByIndex_Impl(INT32 Index) const +{ + //! Feld-Funktionen muessen an den Forwarder !!! + ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine(); + ScUnoEditEngine aTempEngine(pEditEngine); + + if ( aTempEngine.FindByIndex( (USHORT)Index, NULL ) ) // in der Zelle ist der Typ egal + { + USHORT nPar = aTempEngine.GetFieldPar(); + xub_StrLen nPos = aTempEngine.GetFieldPos(); + ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Feld ist 1 Zeichen + return new ScCellFieldObj( pDocShell, aCellPos, aSelection ); + } + return NULL; +} + +sal_Int32 SAL_CALL ScCellFieldsObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! Feld-Funktionen muessen an den Forwarder !!! + ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine(); + ScUnoEditEngine aTempEngine(pEditEngine); + + return aTempEngine.CountFields(NULL); // Felder zaehlen, in Zelle ist der Typ egal +} + +uno::Any SAL_CALL ScCellFieldsObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<text::XTextField> xField = GetObjectByIndex_Impl(nIndex); + uno::Any aAny; + if (xField.is()) + aAny <<= xField; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScCellFieldsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<text::XTextField>*)0); +} + +sal_Bool SAL_CALL ScCellFieldsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +uno::Reference<container::XEnumeration> SAL_CALL ScCellFieldsObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextFieldEnumeration"))); +} + +void SAL_CALL ScCellFieldsObj::addContainerListener( + const uno::Reference<container::XContainerListener>& xListener ) + throw(uno::RuntimeException) +{ + DBG_ERROR("not implemented"); +} + +void SAL_CALL ScCellFieldsObj::removeContainerListener( + const uno::Reference<container::XContainerListener>& xListener ) + throw(uno::RuntimeException) +{ + DBG_ERROR("not implemented"); +} + +// XRefreshable +void SAL_CALL ScCellFieldsObj::refresh( ) + throw (uno::RuntimeException) +{ + if (mpRefreshListeners) + { + // Call all listeners. + uno::Sequence< uno::Reference< uno::XInterface > > aListeners = mpRefreshListeners->getElements(); + sal_uInt32 nLength(aListeners.getLength()); + if (nLength) + { + const uno::Reference< uno::XInterface >* pInterfaces = aListeners.getConstArray(); + if (pInterfaces) + { + lang::EventObject aEvent; + aEvent.Source = uno::Reference< util::XRefreshable >(const_cast<ScCellFieldsObj*>(this)); + sal_uInt32 i(0); + while (i < nLength) + { + try + { + while(i < nLength) + { + static_cast< util::XRefreshListener* >(pInterfaces->get())->refreshed(aEvent); + ++pInterfaces; + ++i; + } + } + catch(uno::RuntimeException&) + { +// DBG_ERROR("a object is gone without to remove from Broadcaster"); + ++pInterfaces; + ++i; + } + } + } + } + } +} + +void SAL_CALL ScCellFieldsObj::addRefreshListener( const uno::Reference< util::XRefreshListener >& xListener ) + throw (uno::RuntimeException) +{ + if (xListener.is()) + { + SolarMutexGuard aGuard; + if (!mpRefreshListeners) + mpRefreshListeners = new cppu::OInterfaceContainerHelper(aMutex); + mpRefreshListeners->addInterface(xListener); + } +} + +void SAL_CALL ScCellFieldsObj::removeRefreshListener( const uno::Reference<util::XRefreshListener >& xListener ) + throw (uno::RuntimeException) +{ + if (xListener.is()) + { + SolarMutexGuard aGuard; + if (mpRefreshListeners) + mpRefreshListeners->removeInterface(xListener); + } +} + +//------------------------------------------------------------------------ + +ScCellFieldObj::ScCellFieldObj(ScDocShell* pDocSh, const ScAddress& rPos, + const ESelection& rSel) : + OComponentHelper( getMutex() ), + aPropSet( lcl_GetURLPropertyMap() ), + pDocShell( pDocSh ), + aCellPos( rPos ), + aSelection( rSel ) +{ + // pDocShell ist Null, wenn per ServiceProvider erzeugt + + if (pDocShell) + { + pDocShell->GetDocument()->AddUnoObject(*this); + pEditSource = new ScCellEditSource( pDocShell, aCellPos ); + } + else + pEditSource = NULL; +} + +uno::Any SAL_CALL ScCellFieldObj::queryAggregation( const uno::Type& rType ) + throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( text::XTextField ) + SC_QUERYINTERFACE( text::XTextContent ) // parent of XTextField + SC_QUERYINTERFACE( beans::XPropertySet ) + SC_QUERYINTERFACE( lang::XUnoTunnel ) + SC_QUERYINTERFACE( lang::XServiceInfo ) + + return OComponentHelper::queryAggregation( rType ); // XComponent +} + +uno::Sequence<uno::Type> SAL_CALL ScCellFieldObj::getTypes() throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + uno::Sequence<uno::Type> aParentTypes = OComponentHelper::getTypes(); + long nParentLen = aParentTypes.getLength(); + const uno::Type* pParentPtr = aParentTypes.getConstArray(); + + aTypes.realloc( nParentLen + 4 ); + uno::Type* pPtr = aTypes.getArray(); + pPtr[nParentLen + 0] = getCppuType((const uno::Reference<text::XTextField>*)0); + pPtr[nParentLen + 1] = getCppuType((const uno::Reference<beans::XPropertySet>*)0); + pPtr[nParentLen + 2] = getCppuType((const uno::Reference<lang::XUnoTunnel>*)0); + pPtr[nParentLen + 3] = getCppuType((const uno::Reference<lang::XServiceInfo>*)0); + + for (long i=0; i<nParentLen; i++) + pPtr[i] = pParentPtr[i]; // parent types first + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScCellFieldObj::getImplementationId() + throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +uno::Any SAL_CALL ScCellFieldObj::queryInterface( const uno::Type& rType ) + throw(uno::RuntimeException) +{ + return OComponentHelper::queryInterface( rType ); +} + +void SAL_CALL ScCellFieldObj::acquire() throw() +{ + OComponentHelper::acquire(); +} + +void SAL_CALL ScCellFieldObj::release() throw() +{ + OComponentHelper::release(); +} + +void ScCellFieldObj::InitDoc( ScDocShell* pDocSh, const ScAddress& rPos, + const ESelection& rSel ) +{ + if ( pDocSh && !pEditSource ) + { + aCellPos = rPos; + aSelection = rSel; + pDocShell = pDocSh; + + pDocShell->GetDocument()->AddUnoObject(*this); + pEditSource = new ScCellEditSource( pDocShell, aCellPos ); + } +} + +ScCellFieldObj::~ScCellFieldObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); + + delete pEditSource; +} + +void ScCellFieldObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + //! Updates fuer aSelection (muessen erst noch erzeugt werden) !!!!!! + + if ( rHint.ISA( ScUpdateRefHint ) ) + { + const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; + + //! Ref-Update + } + else if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } + + // EditSource hat sich selber als Listener angemeldet +} + +// per getImplementation gerufen: + +SvxFieldItem ScCellFieldObj::CreateFieldItem() +{ + DBG_ASSERT( !pEditSource, "CreateFieldItem mit eingefuegtem Feld" ); + + SvxURLField aField; + aField.SetFormat(SVXURLFORMAT_APPDEFAULT); + aField.SetURL( aUrl ); + aField.SetRepresentation( aRepresentation ); + aField.SetTargetFrame( aTarget ); + return SvxFieldItem( aField ); +} + +void ScCellFieldObj::DeleteField() +{ + if (pEditSource) + { + SvxTextForwarder* pForwarder = pEditSource->GetTextForwarder(); +// pEditEngine->QuickDelete( aSelection ); + pForwarder->QuickInsertText( String(), aSelection ); + pEditSource->UpdateData(); + + aSelection.nEndPara = aSelection.nStartPara; + aSelection.nEndPos = aSelection.nStartPos; + + //! Broadcast, um Selektion in anderen Objekten anzupassen + //! (auch bei anderen Aktionen) + } +} + +// XTextField + +::rtl::OUString SAL_CALL ScCellFieldObj::getPresentation( sal_Bool bShowCommand ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aRet; + + if (pEditSource) + { + //! Feld-Funktionen muessen an den Forwarder !!! + ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine(); + ScUnoEditEngine aTempEngine(pEditEngine); + + // Typ egal (in Zellen gibts nur URLs) + SvxFieldData* pField = aTempEngine.FindByPos( aSelection.nStartPara, aSelection.nStartPos, 0 ); + DBG_ASSERT(pField,"getPresentation: Feld nicht gefunden"); + if (pField) + { + SvxURLField* pURL = (SvxURLField*)pField; + if (bShowCommand) + aRet = pURL->GetURL(); + else + aRet = pURL->GetRepresentation(); + } + } + + return aRet; +} + +// XTextContent + +void SAL_CALL ScCellFieldObj::attach( const uno::Reference<text::XTextRange>& xTextRange ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (xTextRange.is()) + { + uno::Reference<text::XText> xText = xTextRange->getText(); + if (xText.is()) + { + xText->insertTextContent( xTextRange, this, TRUE ); + } + } +} + +uno::Reference<text::XTextRange> SAL_CALL ScCellFieldObj::getAnchor() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + return new ScCellObj( pDocShell, aCellPos ); + return NULL; +} + +// XComponent + +void SAL_CALL ScCellFieldObj::dispose() throw(uno::RuntimeException) +{ + OComponentHelper::dispose(); +} + +void SAL_CALL ScCellFieldObj::addEventListener( + const uno::Reference<lang::XEventListener>& xListener ) + throw(uno::RuntimeException) +{ + OComponentHelper::addEventListener( xListener ); +} + +void SAL_CALL ScCellFieldObj::removeEventListener( + const uno::Reference<lang::XEventListener>& xListener ) + throw(uno::RuntimeException) +{ + OComponentHelper::removeEventListener( xListener ); +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScCellFieldObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScCellFieldObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + ::rtl::OUString aStrVal; + if (pEditSource) + { + //! Feld-Funktionen muessen an den Forwarder !!! + ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine(); + ScUnoEditEngine aTempEngine(pEditEngine); + + // Typ egal (in Zellen gibts nur URLs) + SvxFieldData* pField = aTempEngine.FindByPos( aSelection.nStartPara, aSelection.nStartPos, 0 ); + DBG_ASSERT(pField,"setPropertyValue: Feld nicht gefunden"); + if (pField) + { + SvxURLField* pURL = (SvxURLField*)pField; // ist eine Kopie in der ScUnoEditEngine + + BOOL bOk = TRUE; + if ( aNameString.EqualsAscii( SC_UNONAME_URL ) ) + { + if (aValue >>= aStrVal) + pURL->SetURL( aStrVal ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_REPR ) ) + { + if (aValue >>= aStrVal) + pURL->SetRepresentation( aStrVal ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_TARGET ) ) + { + if (aValue >>= aStrVal) + pURL->SetTargetFrame( aStrVal ); + } + else + bOk = FALSE; + + if (bOk) + { + pEditEngine->QuickInsertField( SvxFieldItem(*pField), aSelection ); + pEditSource->UpdateData(); + } + } + } + else // noch nicht eingefuegt + { + if ( aNameString.EqualsAscii( SC_UNONAME_URL ) ) + { + if (aValue >>= aStrVal) + aUrl = String( aStrVal ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_REPR ) ) + { + if (aValue >>= aStrVal) + aRepresentation = String( aStrVal ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_TARGET ) ) + { + if (aValue >>= aStrVal) + aTarget = String( aStrVal ); + } + } +} + +uno::Any SAL_CALL ScCellFieldObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Any aRet; + String aNameString = aPropertyName; + + // anchor type is always "as character", text wrap always "none" + + if ( aNameString.EqualsAscii( SC_UNONAME_ANCTYPE ) ) + aRet <<= text::TextContentAnchorType_AS_CHARACTER; + else if ( aNameString.EqualsAscii( SC_UNONAME_ANCTYPES ) ) + { + uno::Sequence<text::TextContentAnchorType> aSeq(1); + aSeq[0] = text::TextContentAnchorType_AS_CHARACTER; + aRet <<= aSeq; + } + else if ( aNameString.EqualsAscii( SC_UNONAME_TEXTWRAP ) ) + aRet <<= text::WrapTextMode_NONE; + else if (pEditSource) + { + //! Feld-Funktionen muessen an den Forwarder !!! + ScEditEngineDefaulter* pEditEngine = ((ScCellEditSource*)pEditSource)->GetEditEngine(); + ScUnoEditEngine aTempEngine(pEditEngine); + + // Typ egal (in Zellen gibts nur URLs) + SvxFieldData* pField = aTempEngine.FindByPos( aSelection.nStartPara, aSelection.nStartPos, 0 ); + DBG_ASSERT(pField,"getPropertyValue: Feld nicht gefunden"); + if (pField) + { + SvxURLField* pURL = (SvxURLField*)pField; + + if ( aNameString.EqualsAscii( SC_UNONAME_URL ) ) + aRet <<= ::rtl::OUString( pURL->GetURL() ); + else if ( aNameString.EqualsAscii( SC_UNONAME_REPR ) ) + aRet <<= ::rtl::OUString( pURL->GetRepresentation() ); + else if ( aNameString.EqualsAscii( SC_UNONAME_TARGET ) ) + aRet <<= ::rtl::OUString( pURL->GetTargetFrame() ); + } + } + else // noch nicht eingefuegt + { + if ( aNameString.EqualsAscii( SC_UNONAME_URL ) ) + aRet <<= ::rtl::OUString( aUrl ); + else if ( aNameString.EqualsAscii( SC_UNONAME_REPR ) ) + aRet <<= ::rtl::OUString( aRepresentation ); + else if ( aNameString.EqualsAscii( SC_UNONAME_TARGET ) ) + aRet <<= ::rtl::OUString( aTarget ); + } + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScCellFieldObj ) + +// XUnoTunnel + +sal_Int64 SAL_CALL ScCellFieldObj::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return 0; +} + +// static +const uno::Sequence<sal_Int8>& ScCellFieldObj::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScCellFieldObj* ScCellFieldObj::getImplementation( + const uno::Reference<text::XTextContent> xObj ) +{ + ScCellFieldObj* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScCellFieldObj*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +// XServiceInfo + +::rtl::OUString SAL_CALL ScCellFieldObj::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScCellFieldObj" ); +} + +sal_Bool SAL_CALL ScCellFieldObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr( rServiceName ); + return aServiceStr.EqualsAscii( SCTEXTFIELD_SERVICE ) || + aServiceStr.EqualsAscii( SCTEXTCONTENT_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScCellFieldObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(2); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCTEXTFIELD_SERVICE ); + pArray[1] = ::rtl::OUString::createFromAscii( SCTEXTCONTENT_SERVICE ); + return aRet; +} + +//------------------------------------------------------------------------ + +ScHeaderFieldsObj::ScHeaderFieldsObj(ScHeaderFooterContentObj* pContent, USHORT nP, USHORT nT) : + pContentObj( pContent ), + nPart( nP ), + nType( nT ), + mpRefreshListeners( NULL ) +{ + DBG_ASSERT( pContentObj, "ScHeaderFieldsObj ohne Objekt?" ); + + if (pContentObj) + { + pContentObj->acquire(); // darf nicht wegkommen + pEditSource = new ScHeaderFooterEditSource( pContentObj, nPart ); + } + else + pEditSource = NULL; +} + +ScHeaderFieldsObj::~ScHeaderFieldsObj() +{ + delete pEditSource; + + if (pContentObj) + pContentObj->release(); + + // increment refcount to prevent double call off dtor + osl_incrementInterlockedCount( &m_refCount ); + + if (mpRefreshListeners) + { + lang::EventObject aEvent; + aEvent.Source = static_cast<cppu::OWeakObject*>(this); + if (mpRefreshListeners) + { + mpRefreshListeners->disposeAndClear(aEvent); + DELETEZ( mpRefreshListeners ); + } + } +} + +// XIndexAccess (via XTextFields) + +ScHeaderFieldObj* ScHeaderFieldsObj::GetObjectByIndex_Impl(INT32 Index) const +{ + //! Feld-Funktionen muessen an den Forwarder !!! + ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)pEditSource)->GetEditEngine(); + ScUnoEditEngine aTempEngine(pEditEngine); + + TypeId aTypeId = NULL; + switch (nType) + { + case SC_SERVICE_PAGEFIELD: aTypeId = TYPE(SvxPageField); break; + case SC_SERVICE_PAGESFIELD: aTypeId = TYPE(SvxPagesField); break; + case SC_SERVICE_DATEFIELD: aTypeId = TYPE(SvxDateField); break; + case SC_SERVICE_TIMEFIELD: aTypeId = TYPE(SvxTimeField); break; + case SC_SERVICE_TITLEFIELD: aTypeId = TYPE(SvxFileField); break; + case SC_SERVICE_FILEFIELD: aTypeId = TYPE(SvxExtFileField); break; + case SC_SERVICE_SHEETFIELD: aTypeId = TYPE(SvxTableField); break; + // bei SC_SERVICE_INVALID bleibt TypeId Null + } + SvxFieldData* pData = aTempEngine.FindByIndex( (USHORT)Index, aTypeId ); + if ( pData ) + { + USHORT nPar = aTempEngine.GetFieldPar(); + xub_StrLen nPos = aTempEngine.GetFieldPos(); + + USHORT nFieldType = nType; + if ( nFieldType == SC_SERVICE_INVALID ) + { + if ( pData->ISA( SvxPageField ) ) nFieldType = SC_SERVICE_PAGEFIELD; + else if ( pData->ISA( SvxPagesField ) ) nFieldType = SC_SERVICE_PAGESFIELD; + else if ( pData->ISA( SvxDateField ) ) nFieldType = SC_SERVICE_DATEFIELD; + else if ( pData->ISA( SvxTimeField ) ) nFieldType = SC_SERVICE_TIMEFIELD; + else if ( pData->ISA( SvxFileField ) ) nFieldType = SC_SERVICE_TITLEFIELD; + else if ( pData->ISA( SvxExtFileField ) ) nFieldType = SC_SERVICE_FILEFIELD; + else if ( pData->ISA( SvxTableField ) ) nFieldType = SC_SERVICE_SHEETFIELD; + } + + ESelection aSelection( nPar, nPos, nPar, nPos+1 ); // Field is 1 character + return new ScHeaderFieldObj( pContentObj, nPart, nFieldType, aSelection ); + } + return NULL; +} + +sal_Int32 SAL_CALL ScHeaderFieldsObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! Feld-Funktionen muessen an den Forwarder !!! + ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)pEditSource)->GetEditEngine(); + ScUnoEditEngine aTempEngine(pEditEngine); + + TypeId aTypeId = NULL; + switch (nType) + { + case SC_SERVICE_PAGEFIELD: aTypeId = TYPE(SvxPageField); break; + case SC_SERVICE_PAGESFIELD: aTypeId = TYPE(SvxPagesField); break; + case SC_SERVICE_DATEFIELD: aTypeId = TYPE(SvxDateField); break; + case SC_SERVICE_TIMEFIELD: aTypeId = TYPE(SvxTimeField); break; + case SC_SERVICE_TITLEFIELD: aTypeId = TYPE(SvxFileField); break; + case SC_SERVICE_FILEFIELD: aTypeId = TYPE(SvxExtFileField); break; + case SC_SERVICE_SHEETFIELD: aTypeId = TYPE(SvxTableField); break; + } + return aTempEngine.CountFields(aTypeId); // Felder zaehlen +} + +uno::Any SAL_CALL ScHeaderFieldsObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<text::XTextField> xField = GetObjectByIndex_Impl(nIndex); + uno::Any aAny; + if (xField.is()) + aAny <<= xField; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScHeaderFieldsObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<text::XTextField>*)0); +} + +sal_Bool SAL_CALL ScHeaderFieldsObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +uno::Reference<container::XEnumeration> SAL_CALL ScHeaderFieldsObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextFieldEnumeration"))); +} + +void SAL_CALL ScHeaderFieldsObj::addContainerListener( + const uno::Reference<container::XContainerListener>& xListener ) + throw(uno::RuntimeException) +{ + DBG_ERROR("not implemented"); +} + +void SAL_CALL ScHeaderFieldsObj::removeContainerListener( + const uno::Reference<container::XContainerListener>& xListener ) + throw(uno::RuntimeException) +{ + DBG_ERROR("not implemented"); +} + +// XRefreshable +void SAL_CALL ScHeaderFieldsObj::refresh( ) + throw (uno::RuntimeException) +{ + if (mpRefreshListeners) + { + // Call all listeners. + uno::Sequence< uno::Reference< uno::XInterface > > aListeners = mpRefreshListeners->getElements(); + sal_uInt32 nLength(aListeners.getLength()); + if (nLength) + { + const uno::Reference< uno::XInterface >* pInterfaces = aListeners.getConstArray(); + if (pInterfaces) + { + lang::EventObject aEvent; + aEvent.Source = uno::Reference< util::XRefreshable >(const_cast<ScHeaderFieldsObj*>(this)); + sal_uInt32 i(0); + while (i < nLength) + { + try + { + while(i < nLength) + { + static_cast< util::XRefreshListener* >(pInterfaces->get())->refreshed(aEvent); + ++pInterfaces; + ++i; + } + } + catch(uno::RuntimeException&) + { +// DBG_ERROR("a object is gone without to remove from Broadcaster"); + ++pInterfaces; + ++i; + } + } + } + } + } +} + +void SAL_CALL ScHeaderFieldsObj::addRefreshListener( const uno::Reference< util::XRefreshListener >& xListener ) + throw (uno::RuntimeException) +{ + if (xListener.is()) + { + SolarMutexGuard aGuard; + if (!mpRefreshListeners) + mpRefreshListeners = new cppu::OInterfaceContainerHelper(aMutex); + mpRefreshListeners->addInterface(xListener); + } +} + +void SAL_CALL ScHeaderFieldsObj::removeRefreshListener( const uno::Reference<util::XRefreshListener >& xListener ) + throw (uno::RuntimeException) +{ + if (xListener.is()) + { + SolarMutexGuard aGuard; + if (mpRefreshListeners) + mpRefreshListeners->removeInterface(xListener); + } +} + +//------------------------------------------------------------------------ + +SvxFileFormat lcl_UnoToSvxFileFormat( sal_Int16 nUnoValue ) +{ + switch( nUnoValue ) + { + case text::FilenameDisplayFormat::FULL: return SVXFILEFORMAT_FULLPATH; + case text::FilenameDisplayFormat::PATH: return SVXFILEFORMAT_PATH; + case text::FilenameDisplayFormat::NAME: return SVXFILEFORMAT_NAME; +// case text::FilenameDisplayFormat::NAME_AND_EXT: + default: + return SVXFILEFORMAT_NAME_EXT; + } +} + +sal_Int16 lcl_SvxToUnoFileFormat( SvxFileFormat nSvxValue ) +{ + switch( nSvxValue ) + { + case SVXFILEFORMAT_NAME_EXT: return text::FilenameDisplayFormat::NAME_AND_EXT; + case SVXFILEFORMAT_FULLPATH: return text::FilenameDisplayFormat::FULL; + case SVXFILEFORMAT_PATH: return text::FilenameDisplayFormat::PATH; +// case SVXFILEFORMAT_NAME: + default: + return text::FilenameDisplayFormat::NAME; + } +} + + +ScHeaderFieldObj::ScHeaderFieldObj(ScHeaderFooterContentObj* pContent, USHORT nP, + USHORT nT, const ESelection& rSel) : + OComponentHelper( getMutex() ), + aPropSet( (nT == SC_SERVICE_FILEFIELD) ? lcl_GetFileFieldPropertyMap() : lcl_GetHeaderFieldPropertyMap() ), + pContentObj( pContent ), + nPart( nP ), + nType( nT ), + aSelection( rSel ), + nFileFormat( SVXFILEFORMAT_NAME_EXT ) +{ + // pContent ist Null, wenn per ServiceProvider erzeugt + + if (pContentObj) + { + pContentObj->acquire(); // darf nicht wegkommen + pEditSource = new ScHeaderFooterEditSource( pContentObj, nPart ); + } + else + pEditSource = NULL; +} + +uno::Any SAL_CALL ScHeaderFieldObj::queryAggregation( const uno::Type& rType ) + throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( text::XTextField ) + SC_QUERYINTERFACE( text::XTextContent ) // parent of XTextField + SC_QUERYINTERFACE( beans::XPropertySet ) + SC_QUERYINTERFACE( lang::XUnoTunnel ) + SC_QUERYINTERFACE( lang::XServiceInfo ) + + return OComponentHelper::queryAggregation( rType ); // XComponent +} + +uno::Sequence<uno::Type> SAL_CALL ScHeaderFieldObj::getTypes() throw(uno::RuntimeException) +{ + static uno::Sequence<uno::Type> aTypes; + if ( aTypes.getLength() == 0 ) + { + uno::Sequence<uno::Type> aParentTypes = OComponentHelper::getTypes(); + long nParentLen = aParentTypes.getLength(); + const uno::Type* pParentPtr = aParentTypes.getConstArray(); + + aTypes.realloc( nParentLen + 4 ); + uno::Type* pPtr = aTypes.getArray(); + pPtr[nParentLen + 0] = getCppuType((const uno::Reference<text::XTextField>*)0); + pPtr[nParentLen + 1] = getCppuType((const uno::Reference<beans::XPropertySet>*)0); + pPtr[nParentLen + 2] = getCppuType((const uno::Reference<lang::XUnoTunnel>*)0); + pPtr[nParentLen + 3] = getCppuType((const uno::Reference<lang::XServiceInfo>*)0); + + for (long i=0; i<nParentLen; i++) + pPtr[i] = pParentPtr[i]; // parent types first + } + return aTypes; +} + +uno::Sequence<sal_Int8> SAL_CALL ScHeaderFieldObj::getImplementationId() + throw(uno::RuntimeException) +{ + static uno::Sequence< sal_Int8 > aId; + if( aId.getLength() == 0 ) + { + aId.realloc( 16 ); + rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); + } + return aId; +} + +uno::Any SAL_CALL ScHeaderFieldObj::queryInterface( const uno::Type& rType ) + throw(uno::RuntimeException) +{ + return OComponentHelper::queryInterface( rType ); +} + +void SAL_CALL ScHeaderFieldObj::acquire() throw() +{ + OComponentHelper::acquire(); +} + +void SAL_CALL ScHeaderFieldObj::release() throw() +{ + OComponentHelper::release(); +} + +void ScHeaderFieldObj::InitDoc( ScHeaderFooterContentObj* pContent, USHORT nP, + const ESelection& rSel ) +{ + if ( pContent && !pEditSource ) + { + DBG_ASSERT( !pContentObj, "ContentObj, aber kein EditSource?" ); + + aSelection = rSel; + nPart = nP; + pContentObj = pContent; + + pContentObj->acquire(); // darf nicht wegkommen + pEditSource = new ScHeaderFooterEditSource( pContentObj, nPart ); + } +} + +ScHeaderFieldObj::~ScHeaderFieldObj() +{ + delete pEditSource; + + if (pContentObj) + pContentObj->release(); +} + +// per getImplementation gerufen: + +SvxFieldItem ScHeaderFieldObj::CreateFieldItem() +{ + DBG_ASSERT( !pEditSource, "CreateFieldItem mit eingefuegtem Feld" ); + + switch (nType) + { + case SC_SERVICE_PAGEFIELD: + { + SvxPageField aField; + return SvxFieldItem( aField ); + } + case SC_SERVICE_PAGESFIELD: + { + SvxPagesField aField; + return SvxFieldItem( aField ); + } + case SC_SERVICE_DATEFIELD: + { + SvxDateField aField; + return SvxFieldItem( aField ); + } + case SC_SERVICE_TIMEFIELD: + { + SvxTimeField aField; + return SvxFieldItem( aField ); + } + case SC_SERVICE_TITLEFIELD: + { + SvxFileField aField; + return SvxFieldItem( aField ); + } + case SC_SERVICE_FILEFIELD: + { + SvxExtFileField aField; + aField.SetFormat( (SvxFileFormat) nFileFormat ); + return SvxFieldItem( aField ); + } + case SC_SERVICE_SHEETFIELD: + { + SvxTableField aField; + return SvxFieldItem( aField ); + } + } + + return SvxFieldItem( SvxFieldData() ); +} + +void ScHeaderFieldObj::DeleteField() +{ + if (pEditSource) + { + SvxTextForwarder* pForwarder = pEditSource->GetTextForwarder(); +// pEditEngine->QuickDelete( aSelection ); + pForwarder->QuickInsertText( String(), aSelection ); + pEditSource->UpdateData(); + + aSelection.nEndPara = aSelection.nStartPara; + aSelection.nEndPos = aSelection.nStartPos; + + //! Broadcast, um Selektion in anderen Objekten anzupassen + //! (auch bei anderen Aktionen) + } +} + +// XTextField + +::rtl::OUString SAL_CALL ScHeaderFieldObj::getPresentation( sal_Bool bShowCommand ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aRet; + + if (pEditSource) + { + // Feld von der EditEngine formatieren lassen, bShowCommand gibt's nicht + + SvxTextForwarder* pForwarder = pEditSource->GetTextForwarder(); + aRet = pForwarder->GetText( aSelection ); + } + + return aRet; +} + +// XTextContent + +void SAL_CALL ScHeaderFieldObj::attach( const uno::Reference<text::XTextRange>& xTextRange ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (xTextRange.is()) + { + uno::Reference<text::XText> xText = xTextRange->getText(); + if (xText.is()) + { + xText->insertTextContent( xTextRange, this, TRUE ); + } + } +} + +uno::Reference<text::XTextRange> SAL_CALL ScHeaderFieldObj::getAnchor() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pContentObj) + { + uno::Reference<text::XText> xText; + if ( nPart == SC_HDFT_LEFT ) + xText = pContentObj->getLeftText(); + else if (nPart == SC_HDFT_CENTER) + xText = pContentObj->getCenterText(); + else + xText = pContentObj->getRightText(); + return uno::Reference<text::XTextRange>( xText, uno::UNO_QUERY ); + } + return NULL; +} + +// XComponent + +void SAL_CALL ScHeaderFieldObj::dispose() throw(uno::RuntimeException) +{ + OComponentHelper::dispose(); +} + +void SAL_CALL ScHeaderFieldObj::addEventListener( + const uno::Reference<lang::XEventListener>& xListener ) + throw(uno::RuntimeException) +{ + OComponentHelper::addEventListener( xListener ); +} + +void SAL_CALL ScHeaderFieldObj::removeEventListener( + const uno::Reference<lang::XEventListener>& xListener ) + throw(uno::RuntimeException) +{ + OComponentHelper::removeEventListener( xListener ); +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScHeaderFieldObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (nType == SC_SERVICE_FILEFIELD) + { + // file field has different properties + static uno::Reference<beans::XPropertySetInfo> aFileFieldInfo = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aFileFieldInfo; + } + else + { + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; + } +} + +void SAL_CALL ScHeaderFieldObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + if ( nType == SC_SERVICE_FILEFIELD && aNameString.EqualsAscii( SC_UNONAME_FILEFORM ) ) + { + sal_Int16 nIntVal; + if ( aValue >>= nIntVal ) + { + SvxFileFormat eFormat = lcl_UnoToSvxFileFormat( nIntVal ); + if (pEditSource) + { + ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)pEditSource)->GetEditEngine(); + ScUnoEditEngine aTempEngine(pEditEngine); + SvxFieldData* pField = aTempEngine.FindByPos( + aSelection.nStartPara, aSelection.nStartPos, TYPE(SvxExtFileField) ); + DBG_ASSERT(pField,"setPropertyValue: Field not found"); + if (pField) + { + SvxExtFileField* pExtFile = (SvxExtFileField*)pField; // local to the ScUnoEditEngine + pExtFile->SetFormat( eFormat ); + pEditEngine->QuickInsertField( SvxFieldItem(*pField), aSelection ); + pEditSource->UpdateData(); + } + } + else + nFileFormat = eFormat; // not inserted yet - store value + } + } +} + +uno::Any SAL_CALL ScHeaderFieldObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! Properties? + uno::Any aRet; + String aNameString = aPropertyName; + + // anchor type is always "as character", text wrap always "none" + + if ( aNameString.EqualsAscii( SC_UNONAME_ANCTYPE ) ) + aRet <<= text::TextContentAnchorType_AS_CHARACTER; + else if ( aNameString.EqualsAscii( SC_UNONAME_ANCTYPES ) ) + { + uno::Sequence<text::TextContentAnchorType> aSeq(1); + aSeq[0] = text::TextContentAnchorType_AS_CHARACTER; + aRet <<= aSeq; + } + else if ( aNameString.EqualsAscii( SC_UNONAME_TEXTWRAP ) ) + aRet <<= text::WrapTextMode_NONE; + else if ( nType == SC_SERVICE_FILEFIELD && aNameString.EqualsAscii( SC_UNONAME_FILEFORM ) ) + { + SvxFileFormat eFormat = SVXFILEFORMAT_NAME_EXT; + if (pEditSource) + { + ScEditEngineDefaulter* pEditEngine = ((ScHeaderFooterEditSource*)pEditSource)->GetEditEngine(); + ScUnoEditEngine aTempEngine(pEditEngine); + SvxFieldData* pField = aTempEngine.FindByPos( + aSelection.nStartPara, aSelection.nStartPos, TYPE(SvxExtFileField) ); + DBG_ASSERT(pField,"setPropertyValue: Field not found"); + if (pField) + { + const SvxExtFileField* pExtFile = (const SvxExtFileField*)pField; + eFormat = pExtFile->GetFormat(); + } + } + else + eFormat = (SvxFileFormat) nFileFormat; // not inserted yet - use stored value + + sal_Int16 nIntVal = lcl_SvxToUnoFileFormat( eFormat ); + aRet <<= nIntVal; + } + + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScHeaderFieldObj ) + +// XUnoTunnel + +sal_Int64 SAL_CALL ScHeaderFieldObj::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return 0; +} + +// static +const uno::Sequence<sal_Int8>& ScHeaderFieldObj::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScHeaderFieldObj* ScHeaderFieldObj::getImplementation( + const uno::Reference<text::XTextContent> xObj ) +{ + ScHeaderFieldObj* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScHeaderFieldObj*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +// XServiceInfo + +::rtl::OUString SAL_CALL ScHeaderFieldObj::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScHeaderFieldObj" ); +} + +sal_Bool SAL_CALL ScHeaderFieldObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr( rServiceName ); + return aServiceStr.EqualsAscii( SCTEXTFIELD_SERVICE ) || + aServiceStr.EqualsAscii( SCTEXTCONTENT_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScHeaderFieldObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(2); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCTEXTFIELD_SERVICE ); + pArray[1] = ::rtl::OUString::createFromAscii( SCTEXTCONTENT_SERVICE ); + return aRet; +} + +//------------------------------------------------------------------------ + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_filtuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_filtuno.cxx new file mode 100644 index 000000000000..c0fe0f78fa85 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_filtuno.cxx @@ -0,0 +1,255 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp> +#include <tools/urlobj.hxx> +#include <unotools/ucbstreamhelper.hxx> + +#include "filtuno.hxx" +#include "miscuno.hxx" +#include <vcl/svapp.hxx> +#include "imoptdlg.hxx" +#include "docsh.hxx" +#include "globstr.hrc" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +#define SCFILTEROPTIONSOBJ_SERVICE "com.sun.star.ui.dialogs.FilterOptionsDialog" +#define SCFILTEROPTIONSOBJ_IMPLNAME "com.sun.star.comp.Calc.FilterOptionsDialog" + +SC_SIMPLE_SERVICE_INFO( ScFilterOptionsObj, SCFILTEROPTIONSOBJ_IMPLNAME, SCFILTEROPTIONSOBJ_SERVICE ) + +#define SC_UNONAME_FILENAME "URL" +#define SC_UNONAME_FILTERNAME "FilterName" +#define SC_UNONAME_FILTEROPTIONS "FilterOptions" +#define SC_UNONAME_INPUTSTREAM "InputStream" + +//------------------------------------------------------------------------ + +ScFilterOptionsObj::ScFilterOptionsObj() : + bExport( sal_False ) +{ +} + +ScFilterOptionsObj::~ScFilterOptionsObj() +{ +} + +// stuff for exService_... + +uno::Reference<uno::XInterface> SAL_CALL ScFilterOptionsObj_CreateInstance( + const uno::Reference<lang::XMultiServiceFactory>& ) +{ + SolarMutexGuard aGuard; + SC_DLL()->Load(); // load module + + return (::cppu::OWeakObject*) new ScFilterOptionsObj; +} + +::rtl::OUString ScFilterOptionsObj::getImplementationName_Static() +{ + return ::rtl::OUString::createFromAscii( SCFILTEROPTIONSOBJ_IMPLNAME ); +} + +uno::Sequence< ::rtl::OUString> ScFilterOptionsObj::getSupportedServiceNames_Static() +{ + uno::Sequence< ::rtl::OUString> aRet(1); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCFILTEROPTIONSOBJ_SERVICE ); + return aRet; +} + +// XPropertyAccess + +uno::Sequence<beans::PropertyValue> SAL_CALL ScFilterOptionsObj::getPropertyValues() throw(uno::RuntimeException) +{ + uno::Sequence<beans::PropertyValue> aRet(1); + beans::PropertyValue* pArray = aRet.getArray(); + + pArray[0].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_FILTEROPTIONS ); + pArray[0].Value <<= aFilterOptions; + + return aRet; +} + +void SAL_CALL ScFilterOptionsObj::setPropertyValues( const uno::Sequence<beans::PropertyValue>& aProps ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) +{ + const beans::PropertyValue* pPropArray = aProps.getConstArray(); + long nPropCount = aProps.getLength(); + for (long i = 0; i < nPropCount; i++) + { + const beans::PropertyValue& rProp = pPropArray[i]; + String aPropName = rProp.Name; + + if ( aPropName.EqualsAscii( SC_UNONAME_FILENAME ) ) + rProp.Value >>= aFileName; + else if ( aPropName.EqualsAscii( SC_UNONAME_FILTERNAME ) ) + rProp.Value >>= aFilterName; + else if ( aPropName.EqualsAscii( SC_UNONAME_FILTEROPTIONS ) ) + rProp.Value >>= aFilterOptions; + else if ( aPropName.EqualsAscii( SC_UNONAME_INPUTSTREAM ) ) + rProp.Value >>= xInputStream; + } +} + +// XExecutableDialog + +void SAL_CALL ScFilterOptionsObj::setTitle( const ::rtl::OUString& aTitle ) throw(uno::RuntimeException) +{ + // not used +} + +sal_Int16 SAL_CALL ScFilterOptionsObj::execute() throw(uno::RuntimeException) +{ + sal_Int16 nRet = ui::dialogs::ExecutableDialogResults::CANCEL; + + String aFilterString( aFilterName ); + if ( !bExport && aFilterString == ScDocShell::GetAsciiFilterName() ) + { + // ascii import is special... + + INetURLObject aURL( aFileName ); + String aExt = aURL.getExtension(); + String aPrivDatName = aURL.getName(); + sal_Unicode cAsciiDel; + if (aExt.EqualsIgnoreCaseAscii("CSV")) + cAsciiDel = ','; + else + cAsciiDel = '\t'; + + SvStream* pInStream = NULL; + if ( xInputStream.is() ) + pInStream = ::utl::UcbStreamHelper::CreateStream( xInputStream ); + + DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScImportAsciiDlg* pDlg = new ScImportAsciiDlg( NULL, aPrivDatName, pInStream, cAsciiDel ); + delete pInStream; + } + else + { + sal_Bool bMultiByte = sal_True; + sal_Bool bDBEnc = sal_False; + sal_Bool bAscii = sal_False; + + sal_Unicode cStrDel = '"'; + sal_Unicode cAsciiDel = ';'; + rtl_TextEncoding eEncoding = RTL_TEXTENCODING_DONTKNOW; + + String aTitle; + + if ( aFilterString == ScDocShell::GetAsciiFilterName() ) + { + // ascii export (import is handled above) + + INetURLObject aURL( aFileName ); + String aExt = aURL.getExtension(); + if (aExt.EqualsIgnoreCaseAscii("CSV")) + cAsciiDel = ','; + else + cAsciiDel = '\t'; + + aTitle = ScGlobal::GetRscString( STR_EXPORT_ASCII ); + bAscii = sal_True; + } + else if ( aFilterString == ScDocShell::GetLotusFilterName() ) + { + // lotus is only imported + DBG_ASSERT( !bExport, "Filter Options for Lotus Export is not implemented" ); + + aTitle = ScGlobal::GetRscString( STR_IMPORT_LOTUS ); + eEncoding = RTL_TEXTENCODING_IBM_437; + } + else if ( aFilterString == ScDocShell::GetDBaseFilterName() ) + { + if ( bExport ) + { + // dBase export + aTitle = ScGlobal::GetRscString( STR_EXPORT_DBF ); + } + else + { + // dBase import + aTitle = ScGlobal::GetRscString( STR_IMPORT_DBF ); + } + // common for dBase import/export + eEncoding = RTL_TEXTENCODING_IBM_850; + bMultiByte = sal_False; + bDBEnc = sal_True; + } + else if ( aFilterString == ScDocShell::GetDifFilterName() ) + { + if ( bExport ) + { + // DIF export + aTitle = ScGlobal::GetRscString( STR_EXPORT_DIF ); + } + else + { + // DIF import + aTitle = ScGlobal::GetRscString( STR_IMPORT_DIF ); + } + // common for DIF import/export + eEncoding = RTL_TEXTENCODING_MS_1252; + } + + ScImportOptions aOptions( cAsciiDel, cStrDel, eEncoding); + DBG_BF_ASSERT(0, "STRIP"); //STRIP001 ScImportOptionsDlg* pDlg = new ScImportOptionsDlg( NULL, bAscii, + } + + xInputStream.clear(); // don't hold the stream longer than necessary + + return nRet; +} + +// XImporter + +void SAL_CALL ScFilterOptionsObj::setTargetDocument( const uno::Reference<lang::XComponent>& xDoc ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + bExport = sal_False; +} + +// XExporter + +void SAL_CALL ScFilterOptionsObj::setSourceDocument( const uno::Reference<lang::XComponent>& xDoc ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + bExport = sal_True; +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_fmtuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_fmtuno.cxx new file mode 100644 index 000000000000..01c71b0f4e96 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_fmtuno.cxx @@ -0,0 +1,861 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <rtl/uuid.h> + +#include <com/sun/star/sheet/ValidationAlertStyle.hpp> +#include <com/sun/star/sheet/ValidationType.hpp> + +#include "fmtuno.hxx" +#include "miscuno.hxx" +#include "validat.hxx" +#include "document.hxx" +#include <vcl/svapp.hxx> +#include "unonames.hxx" +#include "styleuno.hxx" // ScStyleNameConversion +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +// Map nur fuer PropertySetInfo + +const SfxItemPropertyMap* lcl_GetValidatePropertyMap() +{ + static SfxItemPropertyMap aValidatePropertyMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_ERRALSTY), 0, &getCppuType((sheet::ValidationAlertStyle*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_ERRMESS), 0, &getCppuType((::rtl::OUString*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_ERRTITLE), 0, &getCppuType((::rtl::OUString*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_IGNOREBL), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_INPMESS), 0, &getCppuType((::rtl::OUString*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_INPTITLE), 0, &getCppuType((::rtl::OUString*)0), 0}, + {MAP_CHAR_LEN(SC_UNONAME_SHOWERR), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_SHOWINP), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNONAME_TYPE), 0, &getCppuType((sheet::ValidationType*)0), 0}, + {0,0,0,0} + }; + return aValidatePropertyMap_Impl; +} + +//------------------------------------------------------------------------ + +SC_SIMPLE_SERVICE_INFO( ScTableConditionalEntry, "ScTableConditionalEntry", "com.sun.star.sheet.TableConditionalEntry" ) +SC_SIMPLE_SERVICE_INFO( ScTableConditionalFormat, "ScTableConditionalFormat", "com.sun.star.sheet.TableConditionalFormat" ) +SC_SIMPLE_SERVICE_INFO( ScTableValidationObj, "ScTableValidationObj", "com.sun.star.sheet.TableValidation" ) + +//------------------------------------------------------------------------ + +sheet::ConditionOperator lcl_ConditionModeToOperator( ScConditionMode eMode ) +{ + sheet::ConditionOperator eOper = sheet::ConditionOperator_NONE; + switch (eMode) + { + case SC_COND_EQUAL: eOper = sheet::ConditionOperator_EQUAL; break; + case SC_COND_LESS: eOper = sheet::ConditionOperator_LESS; break; + case SC_COND_GREATER: eOper = sheet::ConditionOperator_GREATER; break; + case SC_COND_EQLESS: eOper = sheet::ConditionOperator_LESS_EQUAL; break; + case SC_COND_EQGREATER: eOper = sheet::ConditionOperator_GREATER_EQUAL; break; + case SC_COND_NOTEQUAL: eOper = sheet::ConditionOperator_NOT_EQUAL; break; + case SC_COND_BETWEEN: eOper = sheet::ConditionOperator_BETWEEN; break; + case SC_COND_NOTBETWEEN: eOper = sheet::ConditionOperator_NOT_BETWEEN; break; + case SC_COND_DIRECT: eOper = sheet::ConditionOperator_FORMULA; break; + } + return eOper; +} + +ScConditionMode lcl_ConditionOperatorToMode( sheet::ConditionOperator eOper ) +{ + ScConditionMode eMode = SC_COND_NONE; + switch (eOper) + { + case sheet::ConditionOperator_EQUAL: eMode = SC_COND_EQUAL; break; + case sheet::ConditionOperator_LESS: eMode = SC_COND_LESS; break; + case sheet::ConditionOperator_GREATER: eMode = SC_COND_GREATER; break; + case sheet::ConditionOperator_LESS_EQUAL: eMode = SC_COND_EQLESS; break; + case sheet::ConditionOperator_GREATER_EQUAL: eMode = SC_COND_EQGREATER; break; + case sheet::ConditionOperator_NOT_EQUAL: eMode = SC_COND_NOTEQUAL; break; + case sheet::ConditionOperator_BETWEEN: eMode = SC_COND_BETWEEN; break; + case sheet::ConditionOperator_NOT_BETWEEN: eMode = SC_COND_NOTBETWEEN; break; + case sheet::ConditionOperator_FORMULA: eMode = SC_COND_DIRECT; break; + } + return eMode; +} + +//------------------------------------------------------------------------ + +ScTableConditionalFormat::ScTableConditionalFormat(ScDocument* pDoc, ULONG nKey, + BOOL bEnglish, BOOL bCompileXML) +{ + // Eintrag aus dem Dokument lesen... + + if ( pDoc && nKey ) + { + ScConditionalFormatList* pList = pDoc->GetCondFormList(); + if (pList) + { + const ScConditionalFormat* pFormat = pList->GetFormat( nKey ); + if (pFormat) + { + USHORT nEntryCount = pFormat->Count(); + for (USHORT i=0; i<nEntryCount; i++) + { + const ScCondFormatEntry* pFormatEntry = pFormat->GetEntry(i); + ScConditionMode eMode = pFormatEntry->GetOperation(); + ScAddress aPos = pFormatEntry->GetSrcPos(); + String aExpr1 = pFormatEntry->GetExpression( aPos, 0, 0, bEnglish, bCompileXML ); + String aExpr2 = pFormatEntry->GetExpression( aPos, 1, 0, bEnglish, bCompileXML ); + String aStyle = pFormatEntry->GetStyle(); + + AddEntry_Impl( eMode, aExpr1, aExpr2, aPos, aStyle ); + } + } + } + } +} + +void ScTableConditionalFormat::FillFormat( ScConditionalFormat& rFormat, + ScDocument* pDoc, BOOL bEnglish, BOOL bCompileXML ) const +{ + // ScConditionalFormat = Core-Struktur, muss leer sein + + DBG_ASSERT( rFormat.IsEmpty(), "FillFormat: Format nicht leer" ); + USHORT nCount = (USHORT)aEntries.Count(); + for (USHORT i=0; i<nCount; i++) + { + ScTableConditionalEntry* pEntry = (ScTableConditionalEntry*)aEntries.GetObject(i); + if (pEntry) + { + USHORT nMode; + String aExpr1, aExpr2, aStyle; + ScAddress aPos; + pEntry->GetData( nMode, aExpr1, aExpr2, aPos, aStyle ); + ScCondFormatEntry aCoreEntry( (ScConditionMode)nMode, + aExpr1, aExpr2, pDoc, aPos, aStyle, bEnglish, bCompileXML ); + rFormat.AddEntry( aCoreEntry ); + } + } +} + +ScTableConditionalFormat::~ScTableConditionalFormat() +{ + ScTableConditionalEntry* pEntry; + aEntries.First(); + while ( pEntry = (ScTableConditionalEntry*)aEntries.Remove() ) + pEntry->release(); +} + +void ScTableConditionalFormat::AddEntry_Impl( USHORT nMode, + const String& rExpr1, const String& rExpr2, + const ScAddress& rPos, const String& rStyle ) +{ + ScTableConditionalEntry* pNew = new ScTableConditionalEntry( + this, nMode, rExpr1, rExpr2, rPos, rStyle ); + pNew->acquire(); + aEntries.Insert( pNew, LIST_APPEND ); +} + +void ScTableConditionalFormat::DataChanged() +{ + // wenn's mal das "lebende Objekt" ist, muss hier was passieren... +} + +// XSheetConditionalFormat + +ScTableConditionalEntry* ScTableConditionalFormat::GetObjectByIndex_Impl(USHORT nIndex) const +{ + return (ScTableConditionalEntry*)aEntries.GetObject(nIndex); +} + +void SAL_CALL ScTableConditionalFormat::addNew( + const uno::Sequence<beans::PropertyValue >& aConditionalEntry ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScConditionMode eMode = SC_COND_NONE; + String aExpr1; + String aExpr2; + ScAddress aPos; + String aStyle; + + const beans::PropertyValue* pPropArray = aConditionalEntry.getConstArray(); + long nPropCount = aConditionalEntry.getLength(); + for (long i = 0; i < nPropCount; i++) + { + const beans::PropertyValue& rProp = pPropArray[i]; + String aPropName = rProp.Name; + + if ( aPropName.EqualsAscii( SC_UNONAME_OPERATOR ) ) + { + sheet::ConditionOperator eOper = (sheet::ConditionOperator) + ScUnoHelpFunctions::GetEnumFromAny( rProp.Value ); + eMode = lcl_ConditionOperatorToMode( eOper ); + } + else if ( aPropName.EqualsAscii( SC_UNONAME_FORMULA1 ) ) + { + ::rtl::OUString aStrVal; + if ( rProp.Value >>= aStrVal ) + aExpr1 = String( aStrVal ); + } + else if ( aPropName.EqualsAscii( SC_UNONAME_FORMULA2 ) ) + { + ::rtl::OUString aStrVal; + if ( rProp.Value >>= aStrVal ) + aExpr2 = String( aStrVal ); + } + else if ( aPropName.EqualsAscii( SC_UNONAME_SOURCEPOS ) ) + { + table::CellAddress aAddress; + if ( rProp.Value >>= aAddress ) + aPos = ScAddress( (USHORT)aAddress.Column, (USHORT)aAddress.Row, aAddress.Sheet ); + } + else if ( aPropName.EqualsAscii( SC_UNONAME_STYLENAME ) ) + { + ::rtl::OUString aStrVal; + if ( rProp.Value >>= aStrVal ) + aStyle = ScStyleNameConversion::ProgrammaticToDisplayName( + aStrVal, SFX_STYLE_FAMILY_PARA ); + } + else + { + DBG_ERROR("falsche Property"); + //! Exception... + } + } + + AddEntry_Impl( eMode, aExpr1, aExpr2, aPos, aStyle ); + DataChanged(); +} + +void SAL_CALL ScTableConditionalFormat::removeByIndex( sal_Int32 nIndex ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScTableConditionalEntry* pEntry = (ScTableConditionalEntry*)aEntries.GetObject(nIndex); + if (pEntry) + { + aEntries.Remove(pEntry); + pEntry->release(); + DataChanged(); + } +} + +void SAL_CALL ScTableConditionalFormat::clear() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScTableConditionalEntry* pEntry; + aEntries.First(); + while ( pEntry = (ScTableConditionalEntry*)aEntries.Remove() ) + pEntry->release(); + + DataChanged(); +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScTableConditionalFormat::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.TableConditionalEntryEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScTableConditionalFormat::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aEntries.Count(); +} + +uno::Any SAL_CALL ScTableConditionalFormat::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XSheetConditionalEntry> xEntry = GetObjectByIndex_Impl((USHORT)nIndex); + uno::Any aAny; + if (xEntry.is()) + aAny <<= xEntry; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScTableConditionalFormat::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<sheet::XSheetConditionalEntry>*)0); +} + +sal_Bool SAL_CALL ScTableConditionalFormat::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +// conditional format entries have no real names +// -> generate name from index + +::rtl::OUString lcl_GetEntryNameFromIndex( sal_Int32 nIndex ) +{ + ::rtl::OUString aRet( RTL_CONSTASCII_USTRINGPARAM( "Entry" ) ); + aRet += ::rtl::OUString::valueOf( nIndex ); + return aRet; +} + +uno::Any SAL_CALL ScTableConditionalFormat::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<sheet::XSheetConditionalEntry> xEntry; + long nCount = aEntries.Count(); + for (long i=0; i<nCount; i++) + if ( aName == lcl_GetEntryNameFromIndex(i) ) + { + xEntry = GetObjectByIndex_Impl((USHORT)i); + break; + } + + uno::Any aAny; + if (xEntry.is()) + aAny <<= xEntry; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScTableConditionalFormat::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + long nCount = aEntries.Count(); + uno::Sequence< ::rtl::OUString> aNames(nCount); + ::rtl::OUString* pArray = aNames.getArray(); + for (long i=0; i<nCount; i++) + pArray[i] = lcl_GetEntryNameFromIndex(i); + + return aNames; +} + +sal_Bool SAL_CALL ScTableConditionalFormat::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + long nCount = aEntries.Count(); + for (long i=0; i<nCount; i++) + if ( aName == lcl_GetEntryNameFromIndex(i) ) + return TRUE; + + return FALSE; +} + +// XUnoTunnel + +sal_Int64 SAL_CALL ScTableConditionalFormat::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return 0; +} + +// static +const uno::Sequence<sal_Int8>& ScTableConditionalFormat::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScTableConditionalFormat* ScTableConditionalFormat::getImplementation( + const uno::Reference<sheet::XSheetConditionalEntries> xObj ) +{ + ScTableConditionalFormat* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScTableConditionalFormat*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +//------------------------------------------------------------------------ + +ScTableConditionalEntry::ScTableConditionalEntry( ScTableConditionalFormat* pPar, + USHORT nM, const String& rEx1, const String& rEx2, + const ScAddress& rPos, const String& rSt ) : + pParent( pPar ), + nMode( nM ), + aExpr1( rEx1 ), + aExpr2( rEx2 ), + aSrcPos( rPos ), + aStyle( rSt ) +{ + if (pParent) + pParent->acquire(); +} + +ScTableConditionalEntry::~ScTableConditionalEntry() +{ + if (pParent) + pParent->release(); +} + +void ScTableConditionalEntry::GetData( USHORT& rM, String& rEx1, String& rEx2, + ScAddress& rPos, String& rSt ) const +{ + rM = nMode; + rEx1 = aExpr1; + rEx2 = aExpr2; + rPos = aSrcPos; + rSt = aStyle; +} + +// XSheetCondition + +sheet::ConditionOperator SAL_CALL ScTableConditionalEntry::getOperator() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return lcl_ConditionModeToOperator( (ScConditionMode)nMode ); +} + +void SAL_CALL ScTableConditionalEntry::setOperator( sheet::ConditionOperator nOperator ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + nMode = lcl_ConditionOperatorToMode( nOperator ); + if (pParent) + pParent->DataChanged(); +} + +::rtl::OUString SAL_CALL ScTableConditionalEntry::getFormula1() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aExpr1; +} + +void SAL_CALL ScTableConditionalEntry::setFormula1( const ::rtl::OUString& aFormula1 ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aExpr1 = String( aFormula1 ); + if (pParent) + pParent->DataChanged(); +} + +::rtl::OUString SAL_CALL ScTableConditionalEntry::getFormula2() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aExpr2; +} + +void SAL_CALL ScTableConditionalEntry::setFormula2( const ::rtl::OUString& aFormula2 ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aExpr2 = String( aFormula2 ); + if (pParent) + pParent->DataChanged(); +} + +table::CellAddress SAL_CALL ScTableConditionalEntry::getSourcePosition() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellAddress aRet; + aRet.Column = aSrcPos.Col(); + aRet.Row = aSrcPos.Row(); + aRet.Sheet = aSrcPos.Tab(); + return aRet; +} + +void SAL_CALL ScTableConditionalEntry::setSourcePosition( const table::CellAddress& aSourcePosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aSrcPos.Set( (USHORT)aSourcePosition.Column, (USHORT)aSourcePosition.Row, aSourcePosition.Sheet ); + if (pParent) + pParent->DataChanged(); +} + +// XSheetConditionalEntry + +::rtl::OUString SAL_CALL ScTableConditionalEntry::getStyleName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ScStyleNameConversion::DisplayToProgrammaticName( aStyle, SFX_STYLE_FAMILY_PARA ); +} + +void SAL_CALL ScTableConditionalEntry::setStyleName( const ::rtl::OUString& aStyleName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aStyle = ScStyleNameConversion::ProgrammaticToDisplayName( aStyleName, SFX_STYLE_FAMILY_PARA ); + if (pParent) + pParent->DataChanged(); +} + +ScTableValidationObj::ScTableValidationObj(ScDocument* pDoc, ULONG nKey, + BOOL bEnglish, BOOL bCompileXML) : + aPropSet( lcl_GetValidatePropertyMap() ) +{ + // Eintrag aus dem Dokument lesen... + + BOOL bFound = FALSE; + if ( pDoc && nKey ) + { + const ScValidationData* pData = pDoc->GetValidationEntry( nKey ); + if (pData) + { + nMode = pData->GetOperation(); + aSrcPos = pData->GetSrcPos(); + aExpr1 = pData->GetExpression( aSrcPos, 0, 0, bEnglish, bCompileXML ); + aExpr2 = pData->GetExpression( aSrcPos, 1, 0, bEnglish, bCompileXML ); + nValMode = pData->GetDataMode(); + bIgnoreBlank = pData->IsIgnoreBlank(); + bShowInput = pData->GetInput( aInputTitle, aInputMessage ); + ScValidErrorStyle eStyle; + bShowError = pData->GetErrMsg( aErrorTitle, aErrorMessage, eStyle ); + nErrorStyle = eStyle; + + bFound = TRUE; + } + } + if (!bFound) + ClearData_Impl(); // Defaults +} + +ScValidationData* ScTableValidationObj::CreateValidationData( ScDocument* pDoc, + BOOL bEnglish, BOOL bCompileXML ) const +{ + // ScValidationData = Core-Struktur + + ScValidationData* pRet = new ScValidationData( (ScValidationMode)nValMode, + (ScConditionMode)nMode, + aExpr1, aExpr2, pDoc, aSrcPos, + bEnglish, bCompileXML ); + pRet->SetIgnoreBlank(bIgnoreBlank); + + // set strings for error / input even if disabled (and disable afterwards) + pRet->SetInput( aInputTitle, aInputMessage ); + if (!bShowInput) + pRet->ResetInput(); + pRet->SetError( aErrorTitle, aErrorMessage, (ScValidErrorStyle)nErrorStyle ); + if (!bShowError) + pRet->ResetError(); + + return pRet; +} + +void ScTableValidationObj::ClearData_Impl() +{ + nMode = SC_COND_NONE; + nValMode = SC_VALID_ANY; + bIgnoreBlank = TRUE; + bShowInput = FALSE; + bShowError = FALSE; + nErrorStyle = SC_VALERR_STOP; + aSrcPos.Set(0,0,0); + aExpr1.Erase(); + aExpr2.Erase(); + aInputTitle.Erase(); + aInputMessage.Erase(); + aErrorTitle.Erase(); + aErrorMessage.Erase(); +} + +ScTableValidationObj::~ScTableValidationObj() +{ +} + +void ScTableValidationObj::DataChanged() +{ + // wenn's mal das "lebende Objekt" ist, muss hier was passieren... +} + +// XSheetCondition + +sheet::ConditionOperator SAL_CALL ScTableValidationObj::getOperator() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return lcl_ConditionModeToOperator( (ScConditionMode)nMode ); +} + +void SAL_CALL ScTableValidationObj::setOperator( sheet::ConditionOperator nOperator ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + nMode = lcl_ConditionOperatorToMode( nOperator ); + DataChanged(); +} + +::rtl::OUString SAL_CALL ScTableValidationObj::getFormula1() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aExpr1; +} + +void SAL_CALL ScTableValidationObj::setFormula1( const ::rtl::OUString& aFormula1 ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aExpr1 = String( aFormula1 ); + DataChanged(); +} + +::rtl::OUString SAL_CALL ScTableValidationObj::getFormula2() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aExpr2; +} + +void SAL_CALL ScTableValidationObj::setFormula2( const ::rtl::OUString& aFormula2 ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aExpr2 = String( aFormula2 ); + DataChanged(); +} + +table::CellAddress SAL_CALL ScTableValidationObj::getSourcePosition() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellAddress aRet; + aRet.Column = aSrcPos.Col(); + aRet.Row = aSrcPos.Row(); + aRet.Sheet = aSrcPos.Tab(); + return aRet; +} + +void SAL_CALL ScTableValidationObj::setSourcePosition( const table::CellAddress& aSourcePosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + aSrcPos.Set( (USHORT)aSourcePosition.Column, (USHORT)aSourcePosition.Row, aSourcePosition.Sheet ); + DataChanged(); +} + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScTableValidationObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScTableValidationObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString = aPropertyName; + + if ( aString.EqualsAscii( SC_UNONAME_SHOWINP ) ) bShowInput = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if ( aString.EqualsAscii( SC_UNONAME_SHOWERR ) ) bShowError = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if ( aString.EqualsAscii( SC_UNONAME_IGNOREBL ) ) bIgnoreBlank = ScUnoHelpFunctions::GetBoolFromAny( aValue ); + else if ( aString.EqualsAscii( SC_UNONAME_INPTITLE ) ) + { + ::rtl::OUString aStrVal; + if ( aValue >>= aStrVal ) + aInputTitle = String( aStrVal ); + } + else if ( aString.EqualsAscii( SC_UNONAME_INPMESS ) ) + { + ::rtl::OUString aStrVal; + if ( aValue >>= aStrVal ) + aInputMessage = String( aStrVal ); + } + else if ( aString.EqualsAscii( SC_UNONAME_ERRTITLE ) ) + { + ::rtl::OUString aStrVal; + if ( aValue >>= aStrVal ) + aErrorTitle = String( aStrVal ); + } + else if ( aString.EqualsAscii( SC_UNONAME_ERRMESS ) ) + { + ::rtl::OUString aStrVal; + if ( aValue >>= aStrVal ) + aErrorMessage = String( aStrVal ); + } + else if ( aString.EqualsAscii( SC_UNONAME_TYPE ) ) + { + sheet::ValidationType eType = (sheet::ValidationType) + ScUnoHelpFunctions::GetEnumFromAny( aValue ); + switch (eType) + { + case sheet::ValidationType_ANY: nValMode = SC_VALID_ANY; break; + case sheet::ValidationType_WHOLE: nValMode = SC_VALID_WHOLE; break; + case sheet::ValidationType_DECIMAL: nValMode = SC_VALID_DECIMAL; break; + case sheet::ValidationType_DATE: nValMode = SC_VALID_DATE; break; + case sheet::ValidationType_TIME: nValMode = SC_VALID_TIME; break; + case sheet::ValidationType_TEXT_LEN: nValMode = SC_VALID_TEXTLEN; break; + case sheet::ValidationType_LIST: nValMode = SC_VALID_LIST; break; + case sheet::ValidationType_CUSTOM: nValMode = SC_VALID_CUSTOM; break; + } + } + else if ( aString.EqualsAscii( SC_UNONAME_ERRALSTY ) ) + { + sheet::ValidationAlertStyle eStyle = (sheet::ValidationAlertStyle) + ScUnoHelpFunctions::GetEnumFromAny( aValue ); + switch (eStyle) + { + case sheet::ValidationAlertStyle_STOP: nErrorStyle = SC_VALERR_STOP; break; + case sheet::ValidationAlertStyle_WARNING: nErrorStyle = SC_VALERR_WARNING; break; + case sheet::ValidationAlertStyle_INFO: nErrorStyle = SC_VALERR_INFO; break; + case sheet::ValidationAlertStyle_MACRO: nErrorStyle = SC_VALERR_MACRO; break; + } + } + + DataChanged(); +} + +uno::Any SAL_CALL ScTableValidationObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString = aPropertyName; + uno::Any aRet; + + if ( aString.EqualsAscii( SC_UNONAME_SHOWINP ) ) ScUnoHelpFunctions::SetBoolInAny( aRet, bShowInput ); + else if ( aString.EqualsAscii( SC_UNONAME_SHOWERR ) ) ScUnoHelpFunctions::SetBoolInAny( aRet, bShowError ); + else if ( aString.EqualsAscii( SC_UNONAME_IGNOREBL ) ) ScUnoHelpFunctions::SetBoolInAny( aRet, bIgnoreBlank ); + else if ( aString.EqualsAscii( SC_UNONAME_INPTITLE ) ) aRet <<= ::rtl::OUString( aInputTitle ); + else if ( aString.EqualsAscii( SC_UNONAME_INPMESS ) ) aRet <<= ::rtl::OUString( aInputMessage ); + else if ( aString.EqualsAscii( SC_UNONAME_ERRTITLE ) ) aRet <<= ::rtl::OUString( aErrorTitle ); + else if ( aString.EqualsAscii( SC_UNONAME_ERRMESS ) ) aRet <<= ::rtl::OUString( aErrorMessage ); + else if ( aString.EqualsAscii( SC_UNONAME_TYPE ) ) + { + sheet::ValidationType eType = sheet::ValidationType_ANY; + switch (nValMode) + { + case SC_VALID_ANY: eType = sheet::ValidationType_ANY; break; + case SC_VALID_WHOLE: eType = sheet::ValidationType_WHOLE; break; + case SC_VALID_DECIMAL: eType = sheet::ValidationType_DECIMAL; break; + case SC_VALID_DATE: eType = sheet::ValidationType_DATE; break; + case SC_VALID_TIME: eType = sheet::ValidationType_TIME; break; + case SC_VALID_TEXTLEN: eType = sheet::ValidationType_TEXT_LEN; break; + case SC_VALID_LIST: eType = sheet::ValidationType_LIST; break; + case SC_VALID_CUSTOM: eType = sheet::ValidationType_CUSTOM; break; + } + aRet <<= eType; + } + else if ( aString.EqualsAscii( SC_UNONAME_ERRALSTY ) ) + { + sheet::ValidationAlertStyle eStyle = sheet::ValidationAlertStyle_STOP; + switch (nErrorStyle) + { + case SC_VALERR_STOP: eStyle = sheet::ValidationAlertStyle_STOP; break; + case SC_VALERR_WARNING: eStyle = sheet::ValidationAlertStyle_WARNING; break; + case SC_VALERR_INFO: eStyle = sheet::ValidationAlertStyle_INFO; break; + case SC_VALERR_MACRO: eStyle = sheet::ValidationAlertStyle_MACRO; break; + } + aRet <<= eStyle; + } + + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScTableValidationObj ) + +// XUnoTunnel + +sal_Int64 SAL_CALL ScTableValidationObj::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return 0; +} + +// static +const uno::Sequence<sal_Int8>& ScTableValidationObj::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScTableValidationObj* ScTableValidationObj::getImplementation( + const uno::Reference<beans::XPropertySet> xObj ) +{ + ScTableValidationObj* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScTableValidationObj*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +//------------------------------------------------------------------------ + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_forbiuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_forbiuno.cxx new file mode 100644 index 000000000000..709a20a07bba --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_forbiuno.cxx @@ -0,0 +1,97 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <bf_svx/forbiddencharacterstable.hxx> + +#include "forbiuno.hxx" +#include "docsh.hxx" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +rtl::Reference<SvxForbiddenCharactersTable> lcl_GetForbidden( ScDocShell* pDocSh ) +{ + rtl::Reference<SvxForbiddenCharactersTable> xRet; + if ( pDocSh ) + { + ScDocument* pDoc = pDocSh->GetDocument(); + xRet = pDoc->GetForbiddenCharacters(); + if ( !xRet.is() ) + { + // create an empty SvxForbiddenCharactersTable for SvxUnoForbiddenCharsTable, + // so changes can be stored. + + xRet = new SvxForbiddenCharactersTable( pDoc->GetServiceManager() ); + pDoc->SetForbiddenCharacters( xRet ); + } + } + return xRet; +} + +ScForbiddenCharsObj::ScForbiddenCharsObj( ScDocShell* pDocSh ) : + SvxUnoForbiddenCharsTable( lcl_GetForbidden( pDocSh ) ), + pDocShell( pDocSh ) +{ + if (pDocShell) + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScForbiddenCharsObj::~ScForbiddenCharsObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScForbiddenCharsObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // document gone + } +} + +void ScForbiddenCharsObj::onChange() +{ + if (pDocShell) + { + pDocShell->GetDocument()->SetForbiddenCharacters( mxForbiddenChars ); + pDocShell->PostPaintGridAll(); + pDocShell->SetDocumentModified(); + } +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_funcuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_funcuno.cxx new file mode 100644 index 000000000000..af19008aac53 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_funcuno.cxx @@ -0,0 +1,718 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <bf_sfx2/app.hxx> + +#include "funcuno.hxx" +#include "miscuno.hxx" +#include "cellsuno.hxx" +#include <vcl/svapp.hxx> +#include "scdll.hxx" +#include "document.hxx" +#include "callform.hxx" +#include "addincol.hxx" +#include "rangeseq.hxx" +#include "cell.hxx" +#include "optuno.hxx" + +// for lcl_CopyData: +#include "markdata.hxx" +#include "patattr.hxx" +#include "docpool.hxx" +#include "attrib.hxx" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +// registered as implementation for service FunctionAccess, +// also supports service SpreadsheetDocumentSettings (to set null date etc.) + +#define SCFUNCTIONACCESS_SERVICE "com.sun.star.sheet.FunctionAccess" +#define SCDOCSETTINGS_SERVICE "com.sun.star.sheet.SpreadsheetDocumentSettings" + +//------------------------------------------------------------------------ + +// helper to use cached document if not in use, temporary document otherwise + +class ScTempDocSource +{ +private: + ScTempDocCache& rCache; + ScDocument* pTempDoc; + + static ScDocument* CreateDocument(); // create and initialize doc + +public: + ScTempDocSource( ScTempDocCache& rDocCache ); + ~ScTempDocSource(); + + ScDocument* GetDocument(); +}; + +//------------------------------------------------------------------------ + +// static +ScDocument* ScTempDocSource::CreateDocument() +{ + ScDocument* pDoc = new ScDocument; // SCDOCMODE_DOCUMENT + pDoc->MakeTable( 0 ); + return pDoc; +} + +ScTempDocSource::ScTempDocSource( ScTempDocCache& rDocCache ) : + rCache( rDocCache ), + pTempDoc( NULL ) +{ + if ( rCache.IsInUse() ) + pTempDoc = CreateDocument(); + else + { + rCache.SetInUse( TRUE ); + if ( !rCache.GetDocument() ) + rCache.SetDocument( CreateDocument() ); + } +} + +ScTempDocSource::~ScTempDocSource() +{ + if ( pTempDoc ) + delete pTempDoc; + else + rCache.SetInUse( FALSE ); +} + +ScDocument* ScTempDocSource::GetDocument() +{ + if ( pTempDoc ) + return pTempDoc; + else + return rCache.GetDocument(); +} + +//------------------------------------------------------------------------ + +ScTempDocCache::ScTempDocCache() : + pDoc( NULL ), + bInUse( FALSE ) +{ +} + +ScTempDocCache::~ScTempDocCache() +{ + DBG_ASSERT( !bInUse, "ScTempDocCache dtor: bInUse" ); + delete pDoc; +} + +void ScTempDocCache::SetDocument( ScDocument* pNew ) +{ + DBG_ASSERT( !pDoc, "ScTempDocCache::SetDocument: already set" ); + pDoc = pNew; +} + +void ScTempDocCache::Clear() +{ + DBG_ASSERT( !bInUse, "ScTempDocCache::Clear: bInUse" ); + delete pDoc; + pDoc = NULL; +} + +//------------------------------------------------------------------------ + +// copy results from one document into another +//! merge this with ScAreaLink::Refresh +//! copy directly without a clipboard document? + +BOOL lcl_CopyData( ScDocument* pSrcDoc, const ScRange& rSrcRange, + ScDocument* pDestDoc, const ScAddress& rDestPos ) +{ + USHORT nSrcTab = rSrcRange.aStart.Tab(); + USHORT nDestTab = rDestPos.Tab(); + + ScRange aNewRange( rDestPos, ScAddress( + rSrcRange.aEnd.Col() - rSrcRange.aStart.Col() + rDestPos.Col(), + rSrcRange.aEnd.Row() - rSrcRange.aStart.Row() + rDestPos.Row(), + nDestTab ) ); + + ScDocument* pClipDoc = new ScDocument( SCDOCMODE_CLIP ); + ScMarkData aSourceMark; + aSourceMark.SelectOneTable( nSrcTab ); // for CopyToClip + aSourceMark.SetMarkArea( rSrcRange ); + pSrcDoc->CopyToClip( rSrcRange.aStart.Col(),rSrcRange.aStart.Row(), + rSrcRange.aEnd.Col(),rSrcRange.aEnd.Row(), + FALSE, pClipDoc, FALSE, &aSourceMark ); + + if ( pClipDoc->HasAttrib( 0,0,nSrcTab, MAXCOL,MAXROW,nSrcTab, + HASATTR_MERGED | HASATTR_OVERLAPPED ) ) + { + ScPatternAttr aPattern( pSrcDoc->GetPool() ); + aPattern.GetItemSet().Put( ScMergeAttr() ); // Defaults + aPattern.GetItemSet().Put( ScMergeFlagAttr() ); + pClipDoc->ApplyPatternAreaTab( 0,0, MAXCOL,MAXROW, nSrcTab, aPattern ); + } + + ScMarkData aDestMark; + aDestMark.SelectOneTable( nDestTab ); + aDestMark.SetMarkArea( aNewRange ); + pDestDoc->CopyFromClip( aNewRange, aDestMark, IDF_ALL & ~IDF_FORMULA, NULL, pClipDoc, FALSE ); + + delete pClipDoc; + return TRUE; +} + +//------------------------------------------------------------------------ + +ScFunctionAccess::ScFunctionAccess() : + bInvalid( FALSE ), + pOptions( NULL ) +{ + StartListening( *SFX_APP() ); // for SFX_HINT_DEINITIALIZING +} + +ScFunctionAccess::~ScFunctionAccess() +{ + delete pOptions; +} + +void ScFunctionAccess::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA(SfxSimpleHint) && + ((SfxSimpleHint&)rHint).GetId() == SFX_HINT_DEINITIALIZING ) + { + // document must not be used anymore + aDocCache.Clear(); + bInvalid = TRUE; + } +} + +// stuff for exService_... + +uno::Reference<uno::XInterface> SAL_CALL ScFunctionAccess_CreateInstance( + const uno::Reference<lang::XMultiServiceFactory>& ) +{ + SolarMutexGuard aGuard; + SC_DLL()->Load(); // load module + static uno::Reference< uno::XInterface > xInst = (::cppu::OWeakObject*) new ScFunctionAccess; + return xInst; +} + +::rtl::OUString ScFunctionAccess::getImplementationName_Static() +{ + return ::rtl::OUString::createFromAscii( "stardiv.StarCalc.ScFunctionAccess" ); +} + +uno::Sequence< ::rtl::OUString> ScFunctionAccess::getSupportedServiceNames_Static() +{ + uno::Sequence< ::rtl::OUString> aRet(1); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCFUNCTIONACCESS_SERVICE ); + return aRet; +} + +// XServiceInfo + +::rtl::OUString SAL_CALL ScFunctionAccess::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScFunctionAccess" ); +} + +sal_Bool SAL_CALL ScFunctionAccess::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr = rServiceName; + return aServiceStr.EqualsAscii( SCFUNCTIONACCESS_SERVICE ) || + aServiceStr.EqualsAscii( SCDOCSETTINGS_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScFunctionAccess::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(2); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCFUNCTIONACCESS_SERVICE ); + pArray[1] = ::rtl::OUString::createFromAscii( SCDOCSETTINGS_SERVICE ); + return aRet; +} + +// XPropertySet (document settings) + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScFunctionAccess::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( ScDocOptionsHelper::GetPropertyMap() ); + return aRef; +} + +void SAL_CALL ScFunctionAccess::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( !pOptions ) + pOptions = new ScDocOptions(); + + // options aren't initialized from configuration - always get the same default behaviour + + BOOL bDone = ScDocOptionsHelper::setPropertyValue( *pOptions, aPropertyName, aValue ); + if (!bDone) + throw beans::UnknownPropertyException(); +} + +uno::Any SAL_CALL ScFunctionAccess::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( !pOptions ) + pOptions = new ScDocOptions(); + + // options aren't initialized from configuration - always get the same default behaviour + + return ScDocOptionsHelper::getPropertyValue( *pOptions, aPropertyName ); +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScFunctionAccess ) + +// XFunctionAccess + +BOOL lcl_AddFunctionToken( ScTokenArray& rArray, const ::rtl::OUString& rName ) +{ + // function names are always case-insensitive + String aUpper( ScGlobal::pCharClass->upper( rName ) ); + + // same options as in ScCompiler::IsOpCode: + // 1. built-in function name + + DBG_ASSERT( ScCompiler::pSymbolHashMapEnglish, "no symbol hash map" ); + if (!ScCompiler::pSymbolHashMapEnglish) + return FALSE; + + ScOpCodeHashMap::const_iterator iLook( ScCompiler::pSymbolHashMapEnglish->find( aUpper ) ); + if ( iLook != ScCompiler::pSymbolHashMapEnglish->end() ) + { + rArray.AddOpCode( iLook->second ); + return TRUE; + } + + // 2. old add in functions + + USHORT nIndex; + if ( ScGlobal::GetFuncCollection()->SearchFunc( aUpper, nIndex ) ) + { + rArray.AddExternal( aUpper.GetBuffer() ); + return TRUE; + } + + // 3. new (uno) add in functions + + String aIntName = ScGlobal::GetAddInCollection()->FindFunction( aUpper, FALSE ); + if (aIntName.Len()) + { + rArray.AddExternal( aIntName.GetBuffer() ); // international name + return TRUE; + } + + return FALSE; // no valid function name +} + +void lcl_AddRef( ScTokenArray& rArray, long nStartRow, long nColCount, long nRowCount ) +{ + ComplRefData aRef; + aRef.InitFlags(); + aRef.Ref1.nTab = 0; + aRef.Ref2.nTab = 0; + aRef.Ref1.nCol = 0; + aRef.Ref1.nRow = (USHORT) nStartRow; + aRef.Ref2.nCol = (USHORT) (nColCount - 1); + aRef.Ref2.nRow = (USHORT) (nStartRow + nRowCount - 1); + rArray.AddDoubleReference(aRef); +} + +uno::Any SAL_CALL ScFunctionAccess::callFunction( const ::rtl::OUString& aName, + const uno::Sequence<uno::Any>& aArguments ) + throw(container::NoSuchElementException, lang::IllegalArgumentException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if (bInvalid) + throw uno::RuntimeException(); + + // use cached document if not in use, temporary document otherwise + // (deleted in ScTempDocSource dtor) + ScTempDocSource aSource( aDocCache ); + ScDocument* pDoc = aSource.GetDocument(); + + if (!ScCompiler::pSymbolTableEnglish) + { + ScCompiler aComp( pDoc, ScAddress() ); + aComp.SetCompileEnglish( TRUE ); // setup english symbol table + } + + // + // find function + // + + ScTokenArray aTokenArr; + if ( !lcl_AddFunctionToken( aTokenArr, aName ) ) + { + // function not found + throw container::NoSuchElementException(); + } + + // + // set options (null date, etc.) + // + + if ( pOptions ) + pDoc->SetDocOptions( *pOptions ); + + // + // add arguments to token array + // + + BOOL bArgErr = FALSE; + BOOL bOverflow = FALSE; + long nDocRow = 0; + long nArgCount = aArguments.getLength(); + const uno::Any* pArgArr = aArguments.getConstArray(); + + aTokenArr.AddOpCode(ocOpen); + for (long nPos=0; nPos<nArgCount; nPos++) + { + if ( nPos > 0 ) + aTokenArr.AddOpCode(ocSep); + + const uno::Any& rArg = pArgArr[nPos]; + + uno::TypeClass eClass = rArg.getValueTypeClass(); + uno::Type aType = rArg.getValueType(); + if ( eClass == uno::TypeClass_BYTE || + eClass == uno::TypeClass_SHORT || + eClass == uno::TypeClass_UNSIGNED_SHORT || + eClass == uno::TypeClass_LONG || + eClass == uno::TypeClass_UNSIGNED_LONG || + eClass == uno::TypeClass_FLOAT || + eClass == uno::TypeClass_DOUBLE ) + { + // #87871# accept integer types because Basic passes a floating point + // variable as byte, short or long if it's an integer number. + double fVal; + rArg >>= fVal; + aTokenArr.AddDouble( fVal ); + } + else if ( eClass == uno::TypeClass_STRING ) + { + ::rtl::OUString aUStr; + rArg >>= aUStr; + String aStr( aUStr ); + aTokenArr.AddString( aStr.GetBuffer() ); + } + else if ( aType.equals( getCppuType( (uno::Sequence< uno::Sequence<sal_Int16> > *)0 ) ) ) + { + uno::Sequence< uno::Sequence<sal_Int16> > aRowSeq; + rArg >>= aRowSeq; + + long nStartRow = nDocRow; + long nMaxColCount = 0; + long nRowCount = aRowSeq.getLength(); + const uno::Sequence<sal_Int16>* pRowArr = aRowSeq.getConstArray(); + for (long nRow=0; nRow<nRowCount; nRow++) + { + long nColCount = pRowArr[nRow].getLength(); + if ( nColCount > nMaxColCount ) + nMaxColCount = nColCount; + const sal_Int16* pColArr = pRowArr[nRow].getConstArray(); + for (long nCol=0; nCol<nColCount; nCol++) + if ( nCol <= MAXCOL && nDocRow <= MAXROW ) + pDoc->SetValue( (USHORT) nCol, (USHORT) nDocRow, 0, pColArr[nCol] ); + else + bOverflow = TRUE; + ++nDocRow; + } + + if ( nRowCount && nMaxColCount && !bOverflow ) + lcl_AddRef( aTokenArr, nStartRow, nMaxColCount, nRowCount ); + } + else if ( aType.equals( getCppuType( (uno::Sequence< uno::Sequence<sal_Int32> > *)0 ) ) ) + { + uno::Sequence< uno::Sequence<sal_Int32> > aRowSeq; + rArg >>= aRowSeq; + + long nStartRow = nDocRow; + long nMaxColCount = 0; + long nRowCount = aRowSeq.getLength(); + const uno::Sequence<sal_Int32>* pRowArr = aRowSeq.getConstArray(); + for (long nRow=0; nRow<nRowCount; nRow++) + { + long nColCount = pRowArr[nRow].getLength(); + if ( nColCount > nMaxColCount ) + nMaxColCount = nColCount; + const sal_Int32* pColArr = pRowArr[nRow].getConstArray(); + for (long nCol=0; nCol<nColCount; nCol++) + if ( nCol <= MAXCOL && nDocRow <= MAXROW ) + pDoc->SetValue( (USHORT) nCol, (USHORT) nDocRow, 0, pColArr[nCol] ); + else + bOverflow = TRUE; + ++nDocRow; + } + + if ( nRowCount && nMaxColCount && !bOverflow ) + lcl_AddRef( aTokenArr, nStartRow, nMaxColCount, nRowCount ); + } + else if ( aType.equals( getCppuType( (uno::Sequence< uno::Sequence<double> > *)0 ) ) ) + { + uno::Sequence< uno::Sequence<double> > aRowSeq; + rArg >>= aRowSeq; + + long nStartRow = nDocRow; + long nMaxColCount = 0; + long nRowCount = aRowSeq.getLength(); + const uno::Sequence<double>* pRowArr = aRowSeq.getConstArray(); + for (long nRow=0; nRow<nRowCount; nRow++) + { + long nColCount = pRowArr[nRow].getLength(); + if ( nColCount > nMaxColCount ) + nMaxColCount = nColCount; + const double* pColArr = pRowArr[nRow].getConstArray(); + for (long nCol=0; nCol<nColCount; nCol++) + if ( nCol <= MAXCOL && nDocRow <= MAXROW ) + pDoc->SetValue( (USHORT) nCol, (USHORT) nDocRow, 0, pColArr[nCol] ); + else + bOverflow = TRUE; + ++nDocRow; + } + + if ( nRowCount && nMaxColCount && !bOverflow ) + lcl_AddRef( aTokenArr, nStartRow, nMaxColCount, nRowCount ); + } + else if ( aType.equals( getCppuType( (uno::Sequence< uno::Sequence< ::rtl::OUString> > *)0 ) ) ) + { + uno::Sequence< uno::Sequence< ::rtl::OUString> > aRowSeq; + rArg >>= aRowSeq; + + long nStartRow = nDocRow; + long nMaxColCount = 0; + long nRowCount = aRowSeq.getLength(); + const uno::Sequence< ::rtl::OUString>* pRowArr = aRowSeq.getConstArray(); + for (long nRow=0; nRow<nRowCount; nRow++) + { + long nColCount = pRowArr[nRow].getLength(); + if ( nColCount > nMaxColCount ) + nMaxColCount = nColCount; + const ::rtl::OUString* pColArr = pRowArr[nRow].getConstArray(); + for (long nCol=0; nCol<nColCount; nCol++) + if ( nCol <= MAXCOL && nDocRow <= MAXROW ) + { + if ( pColArr[nCol].getLength() ) + pDoc->PutCell( (USHORT) nCol, (USHORT) nDocRow, 0, + new ScStringCell( pColArr[nCol] ) ); + } + else + bOverflow = TRUE; + ++nDocRow; + } + + if ( nRowCount && nMaxColCount && !bOverflow ) + lcl_AddRef( aTokenArr, nStartRow, nMaxColCount, nRowCount ); + } + else if ( aType.equals( getCppuType( (uno::Sequence< uno::Sequence<uno::Any> > *)0 ) ) ) + { + uno::Sequence< uno::Sequence<uno::Any> > aRowSeq; + rArg >>= aRowSeq; + + long nStartRow = nDocRow; + long nMaxColCount = 0; + long nRowCount = aRowSeq.getLength(); + const uno::Sequence<uno::Any>* pRowArr = aRowSeq.getConstArray(); + for (long nRow=0; nRow<nRowCount; nRow++) + { + long nColCount = pRowArr[nRow].getLength(); + if ( nColCount > nMaxColCount ) + nMaxColCount = nColCount; + const uno::Any* pColArr = pRowArr[nRow].getConstArray(); + for (long nCol=0; nCol<nColCount; nCol++) + if ( nCol <= MAXCOL && nDocRow <= MAXROW ) + { + const uno::Any& rElement = pColArr[nCol]; + uno::TypeClass eElemClass = rElement.getValueTypeClass(); + if ( eElemClass == uno::TypeClass_VOID ) + { + // leave empty + } + else if ( eElemClass == uno::TypeClass_BYTE || + eElemClass == uno::TypeClass_SHORT || + eElemClass == uno::TypeClass_UNSIGNED_SHORT || + eElemClass == uno::TypeClass_LONG || + eElemClass == uno::TypeClass_UNSIGNED_LONG || + eElemClass == uno::TypeClass_FLOAT || + eElemClass == uno::TypeClass_DOUBLE ) + { + // #87871# accept integer types because Basic passes a floating point + // variable as byte, short or long if it's an integer number. + double fVal; + rElement >>= fVal; + pDoc->SetValue( (USHORT) nCol, (USHORT) nDocRow, 0, fVal ); + } + else if ( eElemClass == uno::TypeClass_STRING ) + { + ::rtl::OUString aUStr; + rElement >>= aUStr; + if ( aUStr.getLength() ) + pDoc->PutCell( (USHORT) nCol, (USHORT) nDocRow, 0, + new ScStringCell( aUStr ) ); + } + else + bArgErr = TRUE; // invalid type + } + else + bOverflow = TRUE; + ++nDocRow; + } + + if ( nRowCount && nMaxColCount && !bOverflow ) + lcl_AddRef( aTokenArr, nStartRow, nMaxColCount, nRowCount ); + } + else if ( aType.equals( getCppuType( (uno::Reference<table::XCellRange>*)0 ) ) ) + { + // currently, only our own cell ranges are supported + + uno::Reference<table::XCellRange> xRange; + rArg >>= xRange; + ScCellRangesBase* pImpl = ScCellRangesBase::getImplementation( xRange ); + if ( pImpl ) + { + ScDocument* pSrcDoc = pImpl->GetDocument(); + const ScRangeList& rRanges = pImpl->GetRangeList(); + if ( pSrcDoc && rRanges.Count() == 1 ) + { + ScRange aSrcRange = *rRanges.GetObject(0); + + long nStartRow = nDocRow; + long nColCount = aSrcRange.aEnd.Col() - aSrcRange.aStart.Col() + 1; + long nRowCount = aSrcRange.aEnd.Row() - aSrcRange.aStart.Row() + 1; + + if ( nStartRow + nRowCount > MAXROW ) + bOverflow = TRUE; + else + { + // copy data + if ( !lcl_CopyData( pSrcDoc, aSrcRange, pDoc, ScAddress( 0, (USHORT)nDocRow, 0 ) ) ) + bOverflow = TRUE; + } + + nDocRow += nRowCount; + if ( !bOverflow ) + lcl_AddRef( aTokenArr, nStartRow, nColCount, nRowCount ); + } + else + bArgErr = TRUE; + } + else + bArgErr = TRUE; + } + else + bArgErr = TRUE; // invalid type + } + aTokenArr.AddOpCode(ocClose); + aTokenArr.AddOpCode(ocStop); + + // + // execute formula + // + + uno::Any aRet; + if ( !bArgErr && !bOverflow && nDocRow <= MAXROW ) + { + ScAddress aFormulaPos( 0, (USHORT)nDocRow, 0 ); + ScFormulaCell* pFormula = new ScFormulaCell( pDoc, aFormulaPos, &aTokenArr, MM_FORMULA ); + pDoc->PutCell( aFormulaPos, pFormula ); //! necessary? + + // call GetMatrix before GetErrCode because GetMatrix always recalculates + // if there is no matrix result + + ScMatrix* pMat = NULL; + pFormula->GetMatrix(&pMat); + USHORT nErrCode = pFormula->GetErrCode(); + if ( nErrCode == 0 ) + { + if ( pMat ) + { + // array result + ScRangeToSequence::FillMixedArray( aRet, pMat ); + } + else if ( pFormula->IsValue() ) + { + // numeric value + aRet <<= (double) pFormula->GetValue(); + } + else + { + // string result + String aStrVal; + pFormula->GetString( aStrVal ); + aRet <<= ::rtl::OUString( aStrVal ); + } + } + else if ( nErrCode == NOVALUE ) + { + // #N/A: leave result empty, no exception + } + else + { + // any other error: IllegalArgumentException + bArgErr = TRUE; + } + + pDoc->DeleteAreaTab( 0, 0, MAXCOL, MAXROW, 0, IDF_ALL ); + } + + if (bOverflow) + throw uno::RuntimeException(); + + if (bArgErr) + throw lang::IllegalArgumentException(); + + return aRet; +} + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_linkuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_linkuno.cxx new file mode 100644 index 000000000000..7e5645e0db36 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_linkuno.cxx @@ -0,0 +1,1347 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <bf_svx/linkmgr.hxx> + +#include "linkuno.hxx" +#include "miscuno.hxx" +#include "convuno.hxx" +#include "docsh.hxx" +#include "docfunc.hxx" +#include "collect.hxx" +#include "tablink.hxx" +#include "arealink.hxx" +#include <vcl/svapp.hxx> +#include "hints.hxx" +#include "unonames.hxx" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +// fuer Sheet- und Area-Links benutzt: +const SfxItemPropertyMap* lcl_GetSheetLinkMap() +{ + static SfxItemPropertyMap aSheetLinkMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_FILTER), 0, &getCppuType((::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_FILTOPT), 0, &getCppuType((::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_LINKURL), 0, &getCppuType((::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_REFDELAY), 0, &getCppuType((sal_Int32*)0), 0, 0 }, + {0,0,0,0} + }; + return aSheetLinkMap_Impl; +} + +//------------------------------------------------------------------------ + +SV_IMPL_PTRARR( XRefreshListenerArr_Impl, XRefreshListenerPtr ); + +SC_SIMPLE_SERVICE_INFO( ScAreaLinkObj, "ScAreaLinkObj", "com.sun.star.sheet.CellAreaLink" ) +SC_SIMPLE_SERVICE_INFO( ScAreaLinksObj, "ScAreaLinksObj", "com.sun.star.sheet.CellAreaLinks" ) +SC_SIMPLE_SERVICE_INFO( ScDDELinkObj, "ScDDELinkObj", "com.sun.star.sheet.DDELink" ) +SC_SIMPLE_SERVICE_INFO( ScDDELinksObj, "ScDDELinksObj", "com.sun.star.sheet.DDELinks" ) +SC_SIMPLE_SERVICE_INFO( ScSheetLinkObj, "ScSheetLinkObj", "com.sun.star.sheet.SheetLink" ) +SC_SIMPLE_SERVICE_INFO( ScSheetLinksObj, "ScSheetLinksObj", "com.sun.star.sheet.SheetLinks" ) + +//------------------------------------------------------------------------ + +ScSheetLinkObj::ScSheetLinkObj(ScDocShell* pDocSh, const String& rName) : + aPropSet( lcl_GetSheetLinkMap() ), + pDocShell( pDocSh ), + aFileName( rName ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScSheetLinkObj::~ScSheetLinkObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScSheetLinkObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + //! notify if links in document are changed + // UpdateRef is not needed here + + if ( rHint.ISA( SfxSimpleHint ) ) + { + if ( ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + pDocShell = NULL; // pointer is invalid + } + else if ( rHint.ISA( ScLinkRefreshedHint ) ) + { + const ScLinkRefreshedHint& rLH = (const ScLinkRefreshedHint&) rHint; + if ( rLH.GetLinkType() == SC_LINKREFTYPE_SHEET && rLH.GetUrl() == aFileName ) + Refreshed_Impl(); + } +} + +ScTableLink* ScSheetLinkObj::GetLink_Impl() const +{ + if (pDocShell) + { + SvxLinkManager* pLinkManager = pDocShell->GetDocument()->GetLinkManager(); + USHORT nCount = pLinkManager->GetLinks().Count(); + for (USHORT i=0; i<nCount; i++) + { + ::binfilter::SvBaseLink* pBase = *pLinkManager->GetLinks()[i]; + if (pBase->ISA(ScTableLink)) + { + ScTableLink* pTabLink = (ScTableLink*)pBase; + if ( pTabLink->GetFileName() == aFileName ) + return pTabLink; + } + } + } + return NULL; // nicht gefunden +} + +// XNamed + +::rtl::OUString SAL_CALL ScSheetLinkObj::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getFileName(); // Name ist der Dateiname (URL) +} + +void SAL_CALL ScSheetLinkObj::setName( const ::rtl::OUString& aName ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + setFileName(aName); // Name ist der Dateiname (URL) +} + +// XRefreshable + +void SAL_CALL ScSheetLinkObj::refresh() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScTableLink* pLink = GetLink_Impl(); + if (pLink) + pLink->Refresh( pLink->GetFileName(), pLink->GetFilterName(), NULL, pLink->GetRefreshDelay() ); +} + +void SAL_CALL ScSheetLinkObj::addRefreshListener( + const uno::Reference<util::XRefreshListener >& xListener ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<util::XRefreshListener>* pObj = + new uno::Reference<util::XRefreshListener>( xListener ); + aRefreshListeners.Insert( pObj, aRefreshListeners.Count() ); + + // hold one additional ref to keep this object alive as long as there are listeners + if ( aRefreshListeners.Count() == 1 ) + acquire(); +} + +void SAL_CALL ScSheetLinkObj::removeRefreshListener( + const uno::Reference<util::XRefreshListener >& xListener ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nCount = aRefreshListeners.Count(); + for ( USHORT n=nCount; n--; ) + { + uno::Reference<util::XRefreshListener>* pObj = aRefreshListeners[n]; + if ( *pObj == xListener ) + { + aRefreshListeners.DeleteAndDestroy( n ); + if ( aRefreshListeners.Count() == 0 ) + release(); // release ref for listeners + break; + } + } +} + +void ScSheetLinkObj::Refreshed_Impl() +{ + lang::EventObject aEvent; + aEvent.Source = (cppu::OWeakObject*)this; + for ( USHORT n=0; n<aRefreshListeners.Count(); n++ ) + (*aRefreshListeners[n])->refreshed( aEvent ); +} + +void ScSheetLinkObj::ModifyRefreshDelay_Impl( sal_Int32 nRefresh ) +{ + ScTableLink* pLink = GetLink_Impl(); + if( pLink ) + pLink->SetRefreshDelay( (ULONG) nRefresh ); +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScSheetLinkObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScSheetLinkObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + ::rtl::OUString aValStr; + if ( aNameString.EqualsAscii( SC_UNONAME_LINKURL ) ) + { + if ( aValue >>= aValStr ) + setFileName( aValStr ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_FILTER ) ) + { + if ( aValue >>= aValStr ) + setFilter( aValStr ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_FILTOPT ) ) + { + if ( aValue >>= aValStr ) + setFilterOptions( aValStr ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_REFDELAY ) ) + { + sal_Int32 nRefresh; + if ( aValue >>= nRefresh ) + setRefreshDelay( nRefresh ); + } +} + +uno::Any SAL_CALL ScSheetLinkObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + uno::Any aRet; + if ( aNameString.EqualsAscii( SC_UNONAME_LINKURL ) ) + aRet <<= getFileName(); + else if ( aNameString.EqualsAscii( SC_UNONAME_FILTER ) ) + aRet <<= getFilter(); + else if ( aNameString.EqualsAscii( SC_UNONAME_FILTOPT ) ) + aRet <<= getFilterOptions(); + else if ( aNameString.EqualsAscii( SC_UNONAME_REFDELAY ) ) + aRet <<= getRefreshDelay(); + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScSheetLinkObj ) + +// internal: + +::rtl::OUString ScSheetLinkObj::getFileName(void) const +{ + SolarMutexGuard aGuard; + return aFileName; +} + +void ScSheetLinkObj::setFileName(const ::rtl::OUString& rNewName) +{ + SolarMutexGuard aGuard; + ScTableLink* pLink = GetLink_Impl(); + if (pLink) + { + // pLink->Refresh mit neuem Dateinamen bringt SvxLinkManager durcheinander + // darum per Hand die Tabellen umsetzen und Link per UpdateLinks neu erzeugen + + String aNewStr = rNewName; + aNewStr = ScGlobal::GetAbsDocName( aNewStr, pDocShell ); + + // zuerst Tabellen umsetzen + + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nTabCount = pDoc->GetTableCount(); + for (USHORT nTab=0; nTab<nTabCount; nTab++) + if ( pDoc->IsLinked(nTab) && pDoc->GetLinkDoc(nTab) == aFileName ) // alte Datei + pDoc->SetLink( nTab, pDoc->GetLinkMode(nTab), aNewStr, + pDoc->GetLinkFlt(nTab), pDoc->GetLinkOpt(nTab), + pDoc->GetLinkTab(nTab), + pDoc->GetLinkRefreshDelay(nTab) ); // nur Datei aendern + + // Links updaten + //! Undo !!! + + pLink = NULL; // wird bei UpdateLinks ungueltig + pDocShell->UpdateLinks(); // alter Link raus, evtl. neuen Link anlegen + + // Daten kopieren + + aFileName = aNewStr; + pLink = GetLink_Impl(); // neuer Link mit neuem Namen + if (pLink) + pLink->Update(); // inkl. Paint & Undo fuer Daten + } +} + +::rtl::OUString ScSheetLinkObj::getFilter(void) const +{ + SolarMutexGuard aGuard; + ::rtl::OUString aRet; + ScTableLink* pLink = GetLink_Impl(); + if (pLink) + aRet = pLink->GetFilterName(); + return aRet; +} + +void ScSheetLinkObj::setFilter(const ::rtl::OUString& Filter) +{ + SolarMutexGuard aGuard; + ScTableLink* pLink = GetLink_Impl(); + if (pLink) + { + String aFilterStr = Filter; + pLink->Refresh( aFileName, aFilterStr, NULL, pLink->GetRefreshDelay() ); + } +} + +::rtl::OUString ScSheetLinkObj::getFilterOptions(void) const +{ + SolarMutexGuard aGuard; + ::rtl::OUString aRet; + ScTableLink* pLink = GetLink_Impl(); + if (pLink) + aRet = pLink->GetOptions(); + return aRet; +} + +void ScSheetLinkObj::setFilterOptions(const ::rtl::OUString& FilterOptions) +{ + SolarMutexGuard aGuard; + ScTableLink* pLink = GetLink_Impl(); + if (pLink) + { + String aOptStr = FilterOptions; + pLink->Refresh( aFileName, pLink->GetFilterName(), &aOptStr, pLink->GetRefreshDelay() ); + } +} + +sal_Int32 ScSheetLinkObj::getRefreshDelay(void) const +{ + SolarMutexGuard aGuard; + sal_Int32 nRet = 0; + ScTableLink* pLink = GetLink_Impl(); + if (pLink) + nRet = (sal_Int32) pLink->GetRefreshDelay(); + return nRet; +} + +void ScSheetLinkObj::setRefreshDelay(sal_Int32 nRefreshDelay) +{ + SolarMutexGuard aGuard; + ModifyRefreshDelay_Impl( nRefreshDelay ); +} + +//------------------------------------------------------------------------ + +ScSheetLinksObj::ScSheetLinksObj(ScDocShell* pDocSh) : + pDocShell( pDocSh ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScSheetLinksObj::~ScSheetLinksObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScSheetLinksObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XSheetLinks + +ScSheetLinkObj* ScSheetLinksObj::GetObjectByIndex_Impl(INT32 nIndex) +{ + if (pDocShell) + { + INT32 nCount = 0; + StrCollection aNames; // um doppelte wegzulassen + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nTabCount = pDoc->GetTableCount(); + for (USHORT nTab=0; nTab<nTabCount; nTab++) + if (pDoc->IsLinked(nTab)) + { + String aLinkDoc = pDoc->GetLinkDoc( nTab ); + StrData* pData = new StrData(aLinkDoc); + if (aNames.Insert(pData)) + { + if ( nCount == nIndex ) + return new ScSheetLinkObj( pDocShell, aLinkDoc ); + ++nCount; + } + else + delete pData; + } + } + return NULL; // kein Dokument oder Index zu gross +} + +ScSheetLinkObj* ScSheetLinksObj::GetObjectByName_Impl(const ::rtl::OUString& aName) +{ + // Name ist der Dateiname + + if (pDocShell) + { + String aNameStr = aName; + + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nTabCount = pDoc->GetTableCount(); + for (USHORT nTab=0; nTab<nTabCount; nTab++) + if (pDoc->IsLinked(nTab)) + { + //! case-insensitiv ??? + String aLinkDoc = pDoc->GetLinkDoc( nTab ); + if ( aLinkDoc == aNameStr ) + return new ScSheetLinkObj( pDocShell, aNameStr ); + } + } + + return NULL; +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScSheetLinksObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.SheetLinksEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScSheetLinksObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + INT32 nCount = 0; + if (pDocShell) + { + StrCollection aNames; // um doppelte wegzulassen + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nTabCount = pDoc->GetTableCount(); + for (USHORT nTab=0; nTab<nTabCount; nTab++) + if (pDoc->IsLinked(nTab)) + { + String aLinkDoc = pDoc->GetLinkDoc( nTab ); + StrData* pData = new StrData(aLinkDoc); + if (aNames.Insert(pData)) + ++nCount; + else + delete pData; + } + } + return nCount; +} + +uno::Any SAL_CALL ScSheetLinksObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<beans::XPropertySet> xLink = GetObjectByIndex_Impl(nIndex); + uno::Any aAny; + if (xLink.is()) + aAny <<= xLink; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScSheetLinksObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<beans::XPropertySet>*)0); +} + +sal_Bool SAL_CALL ScSheetLinksObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +uno::Any SAL_CALL ScSheetLinksObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<beans::XPropertySet> xLink = GetObjectByName_Impl(aName); + uno::Any aAny; + if (xLink.is()) + aAny <<= xLink; + else + throw container::NoSuchElementException(); + return aAny; +} + +sal_Bool SAL_CALL ScSheetLinksObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + // Name ist der Dateiname + + if (pDocShell) + { + String aNameStr = aName; + + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nTabCount = pDoc->GetTableCount(); + for (USHORT nTab=0; nTab<nTabCount; nTab++) + if (pDoc->IsLinked(nTab)) + { + //! case-insensitiv ??? + String aLinkDoc = pDoc->GetLinkDoc( nTab ); + if ( aLinkDoc == aNameStr ) + return TRUE; + } + } + return FALSE; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScSheetLinksObj::getElementNames() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + // Name ist der Dateiname + + if (pDocShell) + { + StrCollection aNames; // um doppelte wegzulassen + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nTabCount = pDoc->GetTableCount(); + String aName; + + INT32 nLinkCount = getCount(); + uno::Sequence< ::rtl::OUString> aSeq(nLinkCount); + ::rtl::OUString* pAry = aSeq.getArray(); + USHORT nPos = 0; + for (USHORT nTab=0; nTab<nTabCount; nTab++) + { + if (pDoc->IsLinked(nTab)) + { + String aLinkDoc = pDoc->GetLinkDoc( nTab ); + StrData* pData = new StrData(aLinkDoc); + if (aNames.Insert(pData)) + pAry[nPos++] = aLinkDoc; + else + delete pData; + } + } + DBG_ASSERT( nPos==nLinkCount, "verzaehlt" ); + return aSeq; + } + return uno::Sequence< ::rtl::OUString>(); +} + +//------------------------------------------------------------------------ + +ScAreaLink* lcl_GetAreaLink( ScDocShell* pDocShell, USHORT nPos ) +{ + if (pDocShell) + { + SvxLinkManager* pLinkManager = pDocShell->GetDocument()->GetLinkManager(); + USHORT nTotalCount = pLinkManager->GetLinks().Count(); + USHORT nAreaCount = 0; + for (USHORT i=0; i<nTotalCount; i++) + { + ::binfilter::SvBaseLink* pBase = *pLinkManager->GetLinks()[i]; + if (pBase->ISA(ScAreaLink)) + { + if ( nAreaCount == nPos ) + return (ScAreaLink*)pBase; + ++nAreaCount; + } + } + } + return NULL; // nicht gefunden +} + +ScAreaLinkObj::ScAreaLinkObj(ScDocShell* pDocSh, USHORT nP) : + aPropSet( lcl_GetSheetLinkMap() ), + pDocShell( pDocSh ), + nPos( nP ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScAreaLinkObj::~ScAreaLinkObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScAreaLinkObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + //! notify if links in document are changed + // UpdateRef is not needed here + + if ( rHint.ISA( SfxSimpleHint ) ) + { + if ( ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + pDocShell = NULL; // pointer is invalid + } + else if ( rHint.ISA( ScLinkRefreshedHint ) ) + { + const ScLinkRefreshedHint& rLH = (const ScLinkRefreshedHint&) rHint; + if ( rLH.GetLinkType() == SC_LINKREFTYPE_AREA ) + { + // get this link to compare dest position + ScAreaLink* pLink = lcl_GetAreaLink(pDocShell, nPos); + if ( pLink && pLink->GetDestArea().aStart == rLH.GetDestPos() ) + Refreshed_Impl(); + } + } +} + +// XFileLink + +void ScAreaLinkObj::Modify_Impl( const ::rtl::OUString* pNewFile, const ::rtl::OUString* pNewFilter, + const ::rtl::OUString* pNewOptions, const ::rtl::OUString* pNewSource, + const table::CellRangeAddress* pNewDest ) +{ + ScAreaLink* pLink = lcl_GetAreaLink(pDocShell, nPos); + if (pLink) + { + String aFile = pLink->GetFile(); + String aFilter = pLink->GetFilter(); + String aOptions = pLink->GetOptions(); + String aSource = pLink->GetSource(); + ScRange aDest = pLink->GetDestArea(); + ULONG nRefresh = pLink->GetRefreshDelay(); + + //! Undo fuer Loeschen + //! Undo zusammenfassen + + SvxLinkManager* pLinkManager = pDocShell->GetDocument()->GetLinkManager(); + pLinkManager->Remove( pLink ); + pLink = NULL; // bei Remove geloescht + + BOOL bFitBlock = TRUE; // verschieben, wenn durch Update Groesse geaendert + if (pNewFile) + { + aFile = String( *pNewFile ); + aFile = ScGlobal::GetAbsDocName( aFile, pDocShell ); //! in InsertAreaLink? + } + if (pNewFilter) + aFilter = String( *pNewFilter ); + if (pNewOptions) + aOptions = String( *pNewOptions ); + if (pNewSource) + aSource = String( *pNewSource ); + if (pNewDest) + { + ScUnoConversion::FillScRange( aDest, *pNewDest ); + bFitBlock = FALSE; // neuer Bereich angegeben -> keine Inhalte verschieben + } + + ScDocFunc aFunc(*pDocShell); + aFunc.InsertAreaLink( aFile, aFilter, aOptions, aSource, aDest, nRefresh, bFitBlock, TRUE ); + } +} + +void ScAreaLinkObj::ModifyRefreshDelay_Impl( sal_Int32 nRefresh ) +{ + ScAreaLink* pLink = lcl_GetAreaLink( pDocShell, nPos ); + if( pLink ) + pLink->SetRefreshDelay( (ULONG) nRefresh ); +} + +// XRefreshable + +void SAL_CALL ScAreaLinkObj::refresh() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAreaLink* pLink = lcl_GetAreaLink(pDocShell, nPos); + if (pLink) + pLink->Refresh( pLink->GetFile(), pLink->GetFilter(), pLink->GetSource(), pLink->GetRefreshDelay() ); +} + +void SAL_CALL ScAreaLinkObj::addRefreshListener( + const uno::Reference<util::XRefreshListener >& xListener ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<util::XRefreshListener>* pObj = + new uno::Reference<util::XRefreshListener>( xListener ); + aRefreshListeners.Insert( pObj, aRefreshListeners.Count() ); + + // hold one additional ref to keep this object alive as long as there are listeners + if ( aRefreshListeners.Count() == 1 ) + acquire(); +} + +void SAL_CALL ScAreaLinkObj::removeRefreshListener( + const uno::Reference<util::XRefreshListener >& xListener ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nCount = aRefreshListeners.Count(); + for ( USHORT n=nCount; n--; ) + { + uno::Reference<util::XRefreshListener>* pObj = aRefreshListeners[n]; + if ( *pObj == xListener ) + { + aRefreshListeners.DeleteAndDestroy( n ); + if ( aRefreshListeners.Count() == 0 ) + release(); // release ref for listeners + break; + } + } +} + +void ScAreaLinkObj::Refreshed_Impl() +{ + lang::EventObject aEvent; + aEvent.Source = (cppu::OWeakObject*)this; + for ( USHORT n=0; n<aRefreshListeners.Count(); n++ ) + (*aRefreshListeners[n])->refreshed( aEvent ); +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScAreaLinkObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference<beans::XPropertySetInfo> aRef = + new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ); + return aRef; +} + +void SAL_CALL ScAreaLinkObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + ::rtl::OUString aValStr; + if ( aNameString.EqualsAscii( SC_UNONAME_LINKURL ) ) + { + if ( aValue >>= aValStr ) + setFileName( aValStr ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_FILTER ) ) + { + if ( aValue >>= aValStr ) + setFilter( aValStr ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_FILTOPT ) ) + { + if ( aValue >>= aValStr ) + setFilterOptions( aValStr ); + } + else if ( aNameString.EqualsAscii( SC_UNONAME_REFDELAY ) ) + { + sal_Int32 nRefresh; + if ( aValue >>= nRefresh ) + setRefreshDelay( nRefresh ); + } +} + +uno::Any SAL_CALL ScAreaLinkObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + uno::Any aRet; + if ( aNameString.EqualsAscii( SC_UNONAME_LINKURL ) ) + aRet <<= getFileName(); + else if ( aNameString.EqualsAscii( SC_UNONAME_FILTER ) ) + aRet <<= getFilter(); + else if ( aNameString.EqualsAscii( SC_UNONAME_FILTOPT ) ) + aRet <<= getFilterOptions(); + else if ( aNameString.EqualsAscii( SC_UNONAME_REFDELAY ) ) + aRet <<= getRefreshDelay(); + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScAreaLinkObj ) + +// internal: + +::rtl::OUString ScAreaLinkObj::getFileName(void) const +{ + SolarMutexGuard aGuard; + ::rtl::OUString aRet; + ScAreaLink* pLink = lcl_GetAreaLink(pDocShell, nPos); + if (pLink) + aRet = pLink->GetFile(); + return aRet; +} + +void ScAreaLinkObj::setFileName(const ::rtl::OUString& rNewName) +{ + SolarMutexGuard aGuard; + Modify_Impl( &rNewName, NULL, NULL, NULL, NULL ); +} + +::rtl::OUString ScAreaLinkObj::getFilter(void) const +{ + SolarMutexGuard aGuard; + ::rtl::OUString aRet; + ScAreaLink* pLink = lcl_GetAreaLink(pDocShell, nPos); + if (pLink) + aRet = pLink->GetFilter(); + return aRet; +} + +void ScAreaLinkObj::setFilter(const ::rtl::OUString& Filter) +{ + SolarMutexGuard aGuard; + Modify_Impl( NULL, &Filter, NULL, NULL, NULL ); +} + +::rtl::OUString ScAreaLinkObj::getFilterOptions(void) const +{ + SolarMutexGuard aGuard; + ::rtl::OUString aRet; + ScAreaLink* pLink = lcl_GetAreaLink(pDocShell, nPos); + if (pLink) + aRet = pLink->GetOptions(); + return aRet; +} + +void ScAreaLinkObj::setFilterOptions(const ::rtl::OUString& FilterOptions) +{ + SolarMutexGuard aGuard; + Modify_Impl( NULL, NULL, &FilterOptions, NULL, NULL ); +} + +sal_Int32 ScAreaLinkObj::getRefreshDelay(void) const +{ + SolarMutexGuard aGuard; + sal_Int32 nRet = 0; + ScAreaLink* pLink = lcl_GetAreaLink(pDocShell, nPos); + if (pLink) + nRet = (sal_Int32) pLink->GetRefreshDelay(); + return nRet; +} + +void ScAreaLinkObj::setRefreshDelay(sal_Int32 nRefreshDelay) +{ + SolarMutexGuard aGuard; + ModifyRefreshDelay_Impl( nRefreshDelay ); +} + +// XAreaLink + +::rtl::OUString SAL_CALL ScAreaLinkObj::getSourceArea() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ::rtl::OUString aRet; + ScAreaLink* pLink = lcl_GetAreaLink(pDocShell, nPos); + if (pLink) + aRet = pLink->GetSource(); + return aRet; +} + +void SAL_CALL ScAreaLinkObj::setSourceArea( const ::rtl::OUString& aSourceArea ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + Modify_Impl( NULL, NULL, NULL, &aSourceArea, NULL ); +} + +table::CellRangeAddress SAL_CALL ScAreaLinkObj::getDestArea() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellRangeAddress aRet; + ScAreaLink* pLink = lcl_GetAreaLink(pDocShell, nPos); + if (pLink) + ScUnoConversion::FillApiRange( aRet, pLink->GetDestArea() ); + return aRet; +} + +void SAL_CALL ScAreaLinkObj::setDestArea( const table::CellRangeAddress& aDestArea ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + Modify_Impl( NULL, NULL, NULL, NULL, &aDestArea ); +} + +//------------------------------------------------------------------------ + +ScAreaLinksObj::ScAreaLinksObj(ScDocShell* pDocSh) : + pDocShell( pDocSh ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScAreaLinksObj::~ScAreaLinksObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScAreaLinksObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XAreaLinks + +ScAreaLinkObj* ScAreaLinksObj::GetObjectByIndex_Impl(INT32 nIndex) +{ + if ( pDocShell && nIndex >= 0 && nIndex < getCount() ) + return new ScAreaLinkObj( pDocShell, (USHORT)nIndex ); + + return NULL; // nicht gefunden +} + +void SAL_CALL ScAreaLinksObj::insertAtPosition( const table::CellAddress& aDestPos, + const ::rtl::OUString& aFileName, + const ::rtl::OUString& aSourceArea, + const ::rtl::OUString& aFilter, + const ::rtl::OUString& aFilterOptions ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + String aFileStr = aFileName; + String aFilterStr = aFilter; + String aOptionStr = aFilterOptions; + String aSourceStr = aSourceArea; + ScAddress aDestAddr( (USHORT)aDestPos.Column, (USHORT)aDestPos.Row, aDestPos.Sheet ); + + aFileStr = ScGlobal::GetAbsDocName( aFileStr, pDocShell ); //! in InsertAreaLink ??? + + ScDocFunc aFunc(*pDocShell); + aFunc.InsertAreaLink( aFileStr, aFilterStr, aOptionStr, + aSourceStr, ScRange(aDestAddr), + 0, FALSE, TRUE ); // keine Inhalte verschieben + } +} + +void SAL_CALL ScAreaLinksObj::removeByIndex( sal_Int32 nIndex ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAreaLink* pLink = lcl_GetAreaLink(pDocShell, (USHORT)nIndex); + if (pLink) + { + //! SetAddUndo oder so + + SvxLinkManager* pLinkManager = pDocShell->GetDocument()->GetLinkManager(); + pLinkManager->Remove( pLink ); + } +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScAreaLinksObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.CellAreaLinksEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScAreaLinksObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + INT32 nAreaCount = 0; + if (pDocShell) + { + SvxLinkManager* pLinkManager = pDocShell->GetDocument()->GetLinkManager(); + USHORT nTotalCount = pLinkManager->GetLinks().Count(); + for (USHORT i=0; i<nTotalCount; i++) + { + ::binfilter::SvBaseLink* pBase = *pLinkManager->GetLinks()[i]; + if (pBase->ISA(ScAreaLink)) + ++nAreaCount; + } + } + return nAreaCount; +} + +uno::Any SAL_CALL ScAreaLinksObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XAreaLink> xLink = GetObjectByIndex_Impl(nIndex); + uno::Any aAny; + if (xLink.is()) + aAny <<= xLink; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScAreaLinksObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<sheet::XAreaLink>*)0); +} + +sal_Bool SAL_CALL ScAreaLinksObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +//------------------------------------------------------------------------ + +ScDDELinkObj::ScDDELinkObj(ScDocShell* pDocSh, const String& rA, + const String& rT, const String& rI) : + pDocShell( pDocSh ), + aAppl( rA ), + aTopic( rT ), + aItem( rI ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScDDELinkObj::~ScDDELinkObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScDDELinkObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + //! notify if links in document are changed + // UpdateRef is not needed here + + if ( rHint.ISA( SfxSimpleHint ) ) + { + if ( ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + pDocShell = NULL; // pointer is invalid + } + else if ( rHint.ISA( ScLinkRefreshedHint ) ) + { + const ScLinkRefreshedHint& rLH = (const ScLinkRefreshedHint&) rHint; + if ( rLH.GetLinkType() == SC_LINKREFTYPE_DDE && + rLH.GetDdeAppl() == aAppl && + rLH.GetDdeTopic() == aTopic && + rLH.GetDdeItem() == aItem ) //! mode is ignored + Refreshed_Impl(); + } +} + +// XNamed + +String lcl_BuildDDEName( const String& rAppl, const String& rTopic, const String& rItem ) +{ + // Appl|Topic!Item (wie Excel) + String aRet = rAppl; + aRet += '|'; + aRet += rTopic; + aRet += '!'; + aRet += rItem; + return aRet; +} + +::rtl::OUString SAL_CALL ScDDELinkObj::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return lcl_BuildDDEName( aAppl, aTopic, aItem ); +} + +void SAL_CALL ScDDELinkObj::setName( const ::rtl::OUString& aName ) throw(uno::RuntimeException) +{ + // name can't be changed (formulas wouldn't find the link) + throw uno::RuntimeException(); +} + +// XDDELink + +::rtl::OUString SAL_CALL ScDDELinkObj::getApplication() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + //! Test, ob Link noch im Dokument enthalten? + + return aAppl; +} + +::rtl::OUString SAL_CALL ScDDELinkObj::getTopic() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + //! Test, ob Link noch im Dokument enthalten? + + return aTopic; +} + +::rtl::OUString SAL_CALL ScDDELinkObj::getItem() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + //! Test, ob Link noch im Dokument enthalten? + + return aItem; +} + +// XRefreshable + +void SAL_CALL ScDDELinkObj::refresh() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + BOOL bOk = pDoc->UpdateDdeLink( aAppl, aTopic, aItem ); + //! Fehler abfragen + } +} + +void SAL_CALL ScDDELinkObj::addRefreshListener( + const uno::Reference<util::XRefreshListener >& xListener ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<util::XRefreshListener>* pObj = + new uno::Reference<util::XRefreshListener>( xListener ); + aRefreshListeners.Insert( pObj, aRefreshListeners.Count() ); + + // hold one additional ref to keep this object alive as long as there are listeners + if ( aRefreshListeners.Count() == 1 ) + acquire(); +} + +void SAL_CALL ScDDELinkObj::removeRefreshListener( + const uno::Reference<util::XRefreshListener >& xListener ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + USHORT nCount = aRefreshListeners.Count(); + for ( USHORT n=nCount; n--; ) + { + uno::Reference<util::XRefreshListener>* pObj = aRefreshListeners[n]; + if ( *pObj == xListener ) + { + aRefreshListeners.DeleteAndDestroy( n ); + if ( aRefreshListeners.Count() == 0 ) + release(); // release ref for listeners + break; + } + } +} + +void ScDDELinkObj::Refreshed_Impl() +{ + lang::EventObject aEvent; + aEvent.Source = (cppu::OWeakObject*)this; + for ( USHORT n=0; n<aRefreshListeners.Count(); n++ ) + (*aRefreshListeners[n])->refreshed( aEvent ); +} + +//------------------------------------------------------------------------ + +ScDDELinksObj::ScDDELinksObj(ScDocShell* pDocSh) : + pDocShell( pDocSh ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScDDELinksObj::~ScDDELinksObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScDDELinksObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XDDELinks + +ScDDELinkObj* ScDDELinksObj::GetObjectByIndex_Impl(INT32 nIndex) +{ + if (pDocShell) + { + String aAppl, aTopic, aItem; + if ( nIndex <= USHRT_MAX && + pDocShell->GetDocument()->GetDdeLinkData( (USHORT)nIndex, aAppl, aTopic, aItem ) ) + return new ScDDELinkObj( pDocShell, aAppl, aTopic, aItem ); + } + return NULL; +} + +ScDDELinkObj* ScDDELinksObj::GetObjectByName_Impl(const ::rtl::OUString& aName) +{ + if (pDocShell) + { + String aNamStr = aName; + String aAppl, aTopic, aItem; + + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nCount = pDoc->GetDdeLinkCount(); + for (USHORT i=0; i<nCount; i++) + { + pDoc->GetDdeLinkData( i, aAppl, aTopic, aItem ); + if ( lcl_BuildDDEName(aAppl, aTopic, aItem) == aNamStr ) + return new ScDDELinkObj( pDocShell, aAppl, aTopic, aItem ); + } + } + return NULL; +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScDDELinksObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.DDELinksEnumeration"))); +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScDDELinksObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + INT32 nAreaCount = 0; + if (pDocShell) + nAreaCount = pDocShell->GetDocument()->GetDdeLinkCount(); + return nAreaCount; +} + +uno::Any SAL_CALL ScDDELinksObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XDDELink> xLink = GetObjectByIndex_Impl(nIndex); + uno::Any aAny; + if (xLink.is()) + aAny <<= xLink; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScDDELinksObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<sheet::XDDELink>*)0); +} + +sal_Bool SAL_CALL ScDDELinksObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +uno::Any SAL_CALL ScDDELinksObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference<sheet::XDDELink> xLink = GetObjectByName_Impl(aName); + uno::Any aAny; + if (xLink.is()) + aAny <<= xLink; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScDDELinksObj::getElementNames() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + String aAppl, aTopic, aItem; + + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nCount = pDoc->GetDdeLinkCount(); + uno::Sequence< ::rtl::OUString> aSeq(nCount); + ::rtl::OUString* pAry = aSeq.getArray(); + + for (USHORT i=0; i<nCount; i++) + { + pDoc->GetDdeLinkData( i, aAppl, aTopic, aItem ); + pAry[i] = lcl_BuildDDEName(aAppl, aTopic, aItem); + } + return aSeq; + } + return uno::Sequence< ::rtl::OUString>(); +} + +sal_Bool SAL_CALL ScDDELinksObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + String aNamStr = aName; + String aAppl, aTopic, aItem; + + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nCount = pDoc->GetDdeLinkCount(); + for (USHORT i=0; i<nCount; i++) + { + pDoc->GetDdeLinkData( i, aAppl, aTopic, aItem ); + if ( lcl_BuildDDEName(aAppl, aTopic, aItem) == aNamStr ) + return TRUE; + } + } + return FALSE; +} + +//------------------------------------------------------------------------ + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_miscuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_miscuno.cxx new file mode 100644 index 000000000000..f217117761f6 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_miscuno.cxx @@ -0,0 +1,386 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <tools/debug.hxx> + +#include "miscuno.hxx" +#include <vcl/svapp.hxx> +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +SC_SIMPLE_SERVICE_INFO( ScEmptyEnumeration, "ScEmptyEnumeration", "stardiv.unknown" ) +SC_SIMPLE_SERVICE_INFO( ScEmptyEnumerationAccess, "ScEmptyEnumerationAccess", "stardiv.unknown" ) +//SC_SIMPLE_SERVICE_INFO( ScIndexEnumeration, "ScIndexEnumeration", "stardiv.unknown" ) +SC_SIMPLE_SERVICE_INFO( ScPrintSettingsObj, "ScPrintSettingsObj", "stardiv.unknown" ) + +SC_SIMPLE_SERVICE_INFO( ScNameToIndexAccess, "ScNameToIndexAccess", "stardiv.unknown" ) + +//------------------------------------------------------------------------ + +// static +uno::Reference<uno::XInterface> ScUnoHelpFunctions::AnyToInterface( const uno::Any& rAny ) +{ + if ( rAny.getValueTypeClass() == uno::TypeClass_INTERFACE ) + { + uno::Reference<uno::XInterface> xInterface; + rAny >>= xInterface; + return xInterface; + } + return uno::Reference<uno::XInterface>(); //! Exception? +} + +// static +sal_Bool ScUnoHelpFunctions::GetBoolProperty( const uno::Reference<beans::XPropertySet>& xProp, + const ::rtl::OUString& rName, sal_Bool bDefault ) +{ + sal_Bool bRet = bDefault; + if ( xProp.is() ) + { + try + { + uno::Any aAny = xProp->getPropertyValue( rName ); + //! type conversion??? + // operator >>= shouldn't be used for bool (?) + if ( aAny.getValueTypeClass() == uno::TypeClass_BOOLEAN ) + { + //! safe way to get bool value from any??? + bRet = *(sal_Bool*)aAny.getValue(); + } + } + catch(uno::Exception&) + { + // keep default + } + } + return bRet; +} + +// static +sal_Int32 ScUnoHelpFunctions::GetLongProperty( const uno::Reference<beans::XPropertySet>& xProp, + const ::rtl::OUString& rName, long nDefault ) +{ + sal_Int32 nRet = nDefault; + if ( xProp.is() ) + { + try + { + uno::Any aAny = xProp->getPropertyValue( rName ); + //! type conversion??? + aAny >>= nRet; + } + catch(uno::Exception&) + { + // keep default + } + } + return nRet; +} + +// static +sal_Int32 ScUnoHelpFunctions::GetEnumProperty( const uno::Reference<beans::XPropertySet>& xProp, + const ::rtl::OUString& rName, long nDefault ) +{ + sal_Int32 nRet = nDefault; + if ( xProp.is() ) + { + try + { + uno::Any aAny = xProp->getPropertyValue( rName ); + + if ( aAny.getValueTypeClass() == uno::TypeClass_ENUM ) + { + //! get enum value from any??? + nRet = *(sal_Int32*)aAny.getValue(); + } + else + { + //! type conversion??? + aAny >>= nRet; + } + } + catch(uno::Exception&) + { + // keep default + } + } + return nRet; +} + +// static +sal_Bool ScUnoHelpFunctions::GetBoolFromAny( const uno::Any& aAny ) +{ + if ( aAny.getValueTypeClass() == uno::TypeClass_BOOLEAN ) + return *(sal_Bool*)aAny.getValue(); + return FALSE; +} + +// static +sal_Int16 ScUnoHelpFunctions::GetInt16FromAny( const uno::Any& aAny ) +{ + sal_Int16 nRet; + if ( aAny >>= nRet ) + return nRet; + return 0; +} + +// static +sal_Int32 ScUnoHelpFunctions::GetInt32FromAny( const uno::Any& aAny ) +{ + sal_Int32 nRet; + if ( aAny >>= nRet ) + return nRet; + return 0; +} + +// static +sal_Int32 ScUnoHelpFunctions::GetEnumFromAny( const uno::Any& aAny ) +{ + sal_Int32 nRet = 0; + if ( aAny.getValueTypeClass() == uno::TypeClass_ENUM ) + nRet = *(sal_Int32*)aAny.getValue(); + else + aAny >>= nRet; + return nRet; +} + +// static +void ScUnoHelpFunctions::SetBoolInAny( uno::Any& rAny, sal_Bool bValue ) +{ + rAny.setValue( &bValue, getBooleanCppuType() ); +} + +//------------------------------------------------------------------------ + +ScIndexEnumeration::ScIndexEnumeration(const uno::Reference<container::XIndexAccess>& rInd, + const ::rtl::OUString& rServiceName) : + xIndex( rInd ), + sServiceName(rServiceName), + nPos( 0 ) +{ +} + +ScIndexEnumeration::~ScIndexEnumeration() +{ +} + +// XEnumeration + +sal_Bool SAL_CALL ScIndexEnumeration::hasMoreElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( nPos < xIndex->getCount() ); +} + +uno::Any SAL_CALL ScIndexEnumeration::nextElement() throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Any aReturn; + try + { + aReturn = xIndex->getByIndex(nPos++); + } + catch (lang::IndexOutOfBoundsException&) + { + throw container::NoSuchElementException(); + } + return aReturn; +} + +::rtl::OUString SAL_CALL ScIndexEnumeration::getImplementationName() + throw(::com::sun::star::uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii("ScIndexEnumeration"); +} + +sal_Bool SAL_CALL ScIndexEnumeration::supportsService( const ::rtl::OUString& ServiceName ) + throw(::com::sun::star::uno::RuntimeException) +{ + return sServiceName == ServiceName; +} + +::com::sun::star::uno::Sequence< ::rtl::OUString > + SAL_CALL ScIndexEnumeration::getSupportedServiceNames(void) + throw(::com::sun::star::uno::RuntimeException) +{ + ::com::sun::star::uno::Sequence< ::rtl::OUString > aRet(1); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = sServiceName; + return aRet; +} + +//------------------------------------------------------------------------ + +ScEmptyEnumerationAccess::~ScEmptyEnumerationAccess() +{ +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScEmptyEnumerationAccess::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScEmptyEnumeration; +} + +uno::Type SAL_CALL ScEmptyEnumerationAccess::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return getCppuType((uno::Reference<uno::XInterface>*)0); // or what? +} + +sal_Bool SAL_CALL ScEmptyEnumerationAccess::hasElements() throw(uno::RuntimeException) +{ + return FALSE; +} + +//------------------------------------------------------------------------ + +ScEmptyEnumeration::ScEmptyEnumeration() +{ +} + +ScEmptyEnumeration::~ScEmptyEnumeration() +{ +} + +// XEnumeration + +sal_Bool SAL_CALL ScEmptyEnumeration::hasMoreElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return FALSE; +} + +uno::Any SAL_CALL ScEmptyEnumeration::nextElement() throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return uno::Any(); +} + +//------------------------------------------------------------------------ + +ScNameToIndexAccess::ScNameToIndexAccess( const ::com::sun::star::uno::Reference< + ::com::sun::star::container::XNameAccess>& rNameObj ) : + xNameAccess( rNameObj ) +{ + //! test for XIndexAccess interface at rNameObj, use that instead! + + if ( xNameAccess.is() ) + aNames = xNameAccess->getElementNames(); +} + +ScNameToIndexAccess::~ScNameToIndexAccess() +{ +} + +// XIndexAccess + +sal_Int32 SAL_CALL ScNameToIndexAccess::getCount( ) throw(::com::sun::star::uno::RuntimeException) +{ + return aNames.getLength(); +} + +::com::sun::star::uno::Any SAL_CALL ScNameToIndexAccess::getByIndex( sal_Int32 nIndex ) + throw(::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException) +{ + if ( xNameAccess.is() && nIndex >= 0 && nIndex < aNames.getLength() ) + return xNameAccess->getByName( aNames.getConstArray()[nIndex] ); + + throw lang::IndexOutOfBoundsException(); + return uno::Any(); +} + +// XElementAccess + +::com::sun::star::uno::Type SAL_CALL ScNameToIndexAccess::getElementType( ) + throw(::com::sun::star::uno::RuntimeException) +{ + if ( xNameAccess.is() ) + return xNameAccess->getElementType(); + else + return uno::Type(); +} + +sal_Bool SAL_CALL ScNameToIndexAccess::hasElements( ) throw(::com::sun::star::uno::RuntimeException) +{ + return getCount() > 0; +} + +//------------------------------------------------------------------------ + +ScPrintSettingsObj::~ScPrintSettingsObj() +{ +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScPrintSettingsObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + return NULL; +} + +void SAL_CALL ScPrintSettingsObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + //! later... +} + +uno::Any SAL_CALL ScPrintSettingsObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + //! later... + return uno::Any(); +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScPrintSettingsObj ) + + +//------------------------------------------------------------------------ + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_nameuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_nameuno.cxx new file mode 100644 index 000000000000..06e1dbdbfac0 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_nameuno.cxx @@ -0,0 +1,937 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <com/sun/star/beans/PropertyAttribute.hpp> +#include <com/sun/star/sheet/NamedRangeFlag.hpp> +#include <com/sun/star/awt/XBitmap.hpp> + +using namespace ::com::sun::star; + + +#include "nameuno.hxx" +#include "miscuno.hxx" +#include "cellsuno.hxx" +#include "convuno.hxx" +#include "targuno.hxx" +#include "docsh.hxx" +#include "docfunc.hxx" +#include "rangenam.hxx" +#include "namecrea.hxx" // NAME_TOP etc. +#include <vcl/svapp.hxx> +#include "unonames.hxx" +namespace binfilter { + +//------------------------------------------------------------------------ + +const SfxItemPropertyMap* lcl_GetNamedRangeMap() +{ + static SfxItemPropertyMap aNamedRangeMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNO_LINKDISPBIT), 0, &getCppuType((uno::Reference<awt::XBitmap>*)0), beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNO_LINKDISPNAME), 0, &getCppuType((::rtl::OUString*)0), beans::PropertyAttribute::READONLY, 0 }, + {0,0,0,0} + }; + return aNamedRangeMap_Impl; +} + +//------------------------------------------------------------------------ + +#define SCNAMEDRANGEOBJ_SERVICE "com.sun.star.sheet.NamedRange" + +SC_SIMPLE_SERVICE_INFO( ScLabelRangeObj, "ScLabelRangeObj", "com.sun.star.sheet.LabelRange" ) +SC_SIMPLE_SERVICE_INFO( ScLabelRangesObj, "ScLabelRangesObj", "com.sun.star.sheet.LabelRanges" ) +SC_SIMPLE_SERVICE_INFO( ScNamedRangesObj, "ScNamedRangesObj", "com.sun.star.sheet.NamedRanges" ) + +//------------------------------------------------------------------------ + +sal_Bool lcl_UserVisibleName( const ScRangeData* pData ) +{ + //! als Methode an ScRangeData + + return ( pData && !pData->HasType( RT_DATABASE ) && !pData->HasType( RT_SHARED ) ); +} + +//------------------------------------------------------------------------ + +ScNamedRangeObj::ScNamedRangeObj(ScDocShell* pDocSh, const String& rNm) : + pDocShell( pDocSh ), + aName( rNm ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScNamedRangeObj::~ScNamedRangeObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScNamedRangeObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Ref-Update interessiert nicht + + if ( rHint.ISA( SfxSimpleHint ) && ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + pDocShell = NULL; // ungueltig geworden +} + +// Hilfsfuntionen + +ScRangeData* ScNamedRangeObj::GetRangeData_Impl() +{ + ScRangeData* pRet = NULL; + if (pDocShell) + { + ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName(); + if (pNames) + { + sal_uInt16 nPos = 0; + if (pNames->SearchName( aName, nPos )) + { + pRet = (*pNames)[nPos]; + pRet->ValidateTabRefs(); // adjust relative tab refs to valid tables + } + } + } + return pRet; +} + +// sheet::XNamedRange + +void ScNamedRangeObj::Modify_Impl( const String* pNewName, const String* pNewContent, + const ScAddress* pNewPos, const sal_uInt16* pNewType ) +{ + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScRangeName* pNames = pDoc->GetRangeName(); + if (pNames) + { + ScRangeName aNewRanges( *pNames ); + sal_uInt16 nPos = 0; + if (aNewRanges.SearchName( aName, nPos )) + { + ScRangeData* pOld = (*pNames)[nPos]; + + String aInsName = pOld->GetName(); + if (pNewName) + aInsName = *pNewName; + String aContent; // Inhalt immer ueber Strings -> + pOld->GetEnglishSymbol(aContent); // keine Probleme mit geaenderter Position etc. + if (pNewContent) + aContent = *pNewContent; + ScAddress aPos = pOld->GetPos(); + if (pNewPos) + aPos = *pNewPos; + sal_uInt16 nType = pOld->GetType(); + if (pNewType) + nType = *pNewType; + + ScRangeData* pNew = new ScRangeData( pDoc, aInsName, aContent, + aPos, nType, sal_True ); + pNew->SetIndex( pOld->GetIndex() ); + + aNewRanges.AtFree( nPos ); + if ( aNewRanges.Insert(pNew) ) + { + ScDocFunc aFunc(*pDocShell); + aFunc.ModifyRangeNames( aNewRanges, sal_True ); + + aName = aInsName; //! broadcast? + } + else + delete pNew; //! uno::Exception/Fehler oder so + } + } + } +} + + +::rtl::OUString SAL_CALL ScNamedRangeObj::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aName; +} + +void SAL_CALL ScNamedRangeObj::setName( const ::rtl::OUString& aNewName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + //! Formeln anpassen ????? + + String aNewStr = aNewName; + Modify_Impl( &aNewStr, NULL, NULL, NULL ); + + if ( aName != aNewStr ) // some error occured... + throw uno::RuntimeException(); // no other exceptions specified +} + +::rtl::OUString SAL_CALL ScNamedRangeObj::getContent() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aContent; + ScRangeData* pData = GetRangeData_Impl(); + if (pData) + pData->GetEnglishSymbol(aContent); + return aContent; +} + +void SAL_CALL ScNamedRangeObj::setContent( const ::rtl::OUString& aContent ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aContStr = aContent; + Modify_Impl( NULL, &aContStr, NULL, NULL ); +} + +table::CellAddress SAL_CALL ScNamedRangeObj::getReferencePosition() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAddress aPos; + ScRangeData* pData = GetRangeData_Impl(); + if (pData) + aPos = pData->GetPos(); + table::CellAddress aAddress; + aAddress.Column = aPos.Col(); + aAddress.Row = aPos.Row(); + aAddress.Sheet = aPos.Tab(); + if (pDocShell) + { + USHORT nDocTabs = pDocShell->GetDocument()->GetTableCount(); + if ( aAddress.Sheet >= nDocTabs && nDocTabs > 0 ) + { + // Even after ValidateTabRefs, the position can be invalid if + // the content points to preceding tables. The resulting string + // is invalid in any case, so the position is just shifted. + aAddress.Sheet = nDocTabs - 1; + } + } + return aAddress; +} + +void SAL_CALL ScNamedRangeObj::setReferencePosition( const table::CellAddress& aReferencePosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAddress aPos( (USHORT)aReferencePosition.Column, (USHORT)aReferencePosition.Row, aReferencePosition.Sheet ); + Modify_Impl( NULL, NULL, &aPos, NULL ); +} + +sal_Int32 SAL_CALL ScNamedRangeObj::getType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + sal_Int32 nType=0; + ScRangeData* pData = GetRangeData_Impl(); + if (pData) + { + // interne RT_* Flags werden weggelassen + + if ( pData->HasType(RT_CRITERIA) ) nType |= sheet::NamedRangeFlag::FILTER_CRITERIA; + if ( pData->HasType(RT_PRINTAREA) ) nType |= sheet::NamedRangeFlag::PRINT_AREA; + if ( pData->HasType(RT_COLHEADER) ) nType |= sheet::NamedRangeFlag::COLUMN_HEADER; + if ( pData->HasType(RT_ROWHEADER) ) nType |= sheet::NamedRangeFlag::ROW_HEADER; + } + return nType; +} + +void SAL_CALL ScNamedRangeObj::setType( sal_Int32 nUnoType ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + sal_uInt16 nNewType = RT_NAME; + if ( nUnoType & sheet::NamedRangeFlag::FILTER_CRITERIA ) nNewType |= RT_CRITERIA; + if ( nUnoType & sheet::NamedRangeFlag::PRINT_AREA ) nNewType |= RT_PRINTAREA; + if ( nUnoType & sheet::NamedRangeFlag::COLUMN_HEADER ) nNewType |= RT_COLHEADER; + if ( nUnoType & sheet::NamedRangeFlag::ROW_HEADER ) nNewType |= RT_ROWHEADER; + + Modify_Impl( NULL, NULL, NULL, &nNewType ); +} + +// XCellRangeSource + +uno::Reference<table::XCellRange> SAL_CALL ScNamedRangeObj::getReferredCells() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRange aRange; + ScRangeData* pData = GetRangeData_Impl(); + if ( pData && pData->IsReference( aRange ) ) + { + //! static Funktion um ScCellObj/ScCellRangeObj zu erzeugen am ScCellRangeObj ??? + + if ( aRange.aStart == aRange.aEnd ) + return new ScCellObj( pDocShell, aRange.aStart ); + else + return new ScCellRangeObj( pDocShell, aRange ); + } + return NULL; +} + +// beans::XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScNamedRangeObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + static uno::Reference< beans::XPropertySetInfo > aRef = new SfxItemPropertySetInfo( lcl_GetNamedRangeMap() ); + return aRef; +} + +void SAL_CALL ScNamedRangeObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + // everything is read-only +} + +uno::Any SAL_CALL ScNamedRangeObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Any aRet; + String aString = aPropertyName; + if ( aString.EqualsAscii( SC_UNO_LINKDISPBIT ) ) + { + // no target bitmaps for individual entries (would be all equal) + // ScLinkTargetTypeObj::SetLinkTargetBitmap( aRet, SC_LINKTARGETTYPE_RANGENAME ); + } + else if ( aString.EqualsAscii( SC_UNO_LINKDISPNAME ) ) + aRet <<= ::rtl::OUString( aName ); + return aRet; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScNamedRangeObj ) + +// lang::XServiceInfo + +::rtl::OUString SAL_CALL ScNamedRangeObj::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScNamedRangeObj" ); +} + +sal_Bool SAL_CALL ScNamedRangeObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr( rServiceName ); + return aServiceStr.EqualsAscii( SCNAMEDRANGEOBJ_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScNamedRangeObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(1); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCNAMEDRANGEOBJ_SERVICE ); + return aRet; +} + +//------------------------------------------------------------------------ + +ScNamedRangesObj::ScNamedRangesObj(ScDocShell* pDocSh) : + pDocShell( pDocSh ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScNamedRangesObj::~ScNamedRangesObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScNamedRangesObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// sheet::XNamedRanges + +ScNamedRangeObj* ScNamedRangesObj::GetObjectByIndex_Impl(sal_uInt16 nIndex) +{ + if (pDocShell) + { + ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName(); + if (pNames) + { + sal_uInt16 nCount = pNames->GetCount(); + sal_uInt16 nPos = 0; + for (sal_uInt16 i=0; i<nCount; i++) + { + ScRangeData* pData = (*pNames)[i]; + if (lcl_UserVisibleName(pData)) // interne weglassen + { + if ( nPos == nIndex ) + return new ScNamedRangeObj( pDocShell, pData->GetName() ); + ++nPos; + } + } + } + } + return NULL; +} + +ScNamedRangeObj* ScNamedRangesObj::GetObjectByName_Impl(const ::rtl::OUString& aName) +{ + if ( pDocShell && hasByName(aName) ) + { + String aString = aName; + return new ScNamedRangeObj( pDocShell, aString ); + } + return NULL; +} + +void SAL_CALL ScNamedRangesObj::addNewByName( const ::rtl::OUString& aName, + const ::rtl::OUString& aContent, const table::CellAddress& aPosition, + sal_Int32 nUnoType ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameStr = aName; + String aContStr = aContent; + ScAddress aPos( (USHORT)aPosition.Column, (USHORT)aPosition.Row, aPosition.Sheet ); + + sal_uInt16 nNewType = RT_NAME; + if ( nUnoType & sheet::NamedRangeFlag::FILTER_CRITERIA ) nNewType |= RT_CRITERIA; + if ( nUnoType & sheet::NamedRangeFlag::PRINT_AREA ) nNewType |= RT_PRINTAREA; + if ( nUnoType & sheet::NamedRangeFlag::COLUMN_HEADER ) nNewType |= RT_COLHEADER; + if ( nUnoType & sheet::NamedRangeFlag::ROW_HEADER ) nNewType |= RT_ROWHEADER; + + BOOL bDone = FALSE; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScRangeName* pNames = pDoc->GetRangeName(); + USHORT nIndex = 0; + if (pNames && !pNames->SearchName(aNameStr, nIndex)) + { + ScRangeName aNewRanges( *pNames ); + ScRangeData* pNew = new ScRangeData( pDoc, aNameStr, aContStr, + aPos, nNewType, sal_True ); + if ( aNewRanges.Insert(pNew) ) + { + ScDocFunc aFunc(*pDocShell); + aFunc.ModifyRangeNames( aNewRanges, sal_True ); + bDone = TRUE; + } + else + delete pNew; + } + } + + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +void SAL_CALL ScNamedRangesObj::addNewFromTitles( const table::CellRangeAddress& aSource, + sheet::Border aBorder ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + //! das darf kein enum sein, weil mehrere Bits gesetzt sein koennen !!! + + sal_Bool bTop = ( aBorder == sheet::Border_TOP ); + sal_Bool bLeft = ( aBorder == sheet::Border_LEFT ); + sal_Bool bBottom = ( aBorder == sheet::Border_BOTTOM ); + sal_Bool bRight = ( aBorder == sheet::Border_RIGHT ); + + ScRange aRange; + ScUnoConversion::FillScRange( aRange, aSource ); + + sal_uInt16 nFlags = 0; + if (bTop) nFlags |= NAME_TOP; + if (bLeft) nFlags |= NAME_LEFT; + if (bBottom) nFlags |= NAME_BOTTOM; + if (bRight) nFlags |= NAME_RIGHT; + + if (nFlags) + { + ScDocFunc aFunc(*pDocShell); + aFunc.CreateNames( aRange, nFlags, sal_True ); + } +} + +void SAL_CALL ScNamedRangesObj::removeByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if (pDocShell) + { + ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName(); + if (pNames) + { + String aString = aName; + sal_uInt16 nPos = 0; + if (pNames->SearchName( aString, nPos )) + if ( lcl_UserVisibleName((*pNames)[nPos]) ) + { + ScRangeName aNewRanges(*pNames); + aNewRanges.AtFree(nPos); + ScDocFunc aFunc(*pDocShell); + aFunc.ModifyRangeNames( aNewRanges, sal_True ); + bDone = TRUE; + } + } + } + + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +void SAL_CALL ScNamedRangesObj::outputList( const table::CellAddress& aOutputPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScAddress aPos( (USHORT)aOutputPosition.Column, (USHORT)aOutputPosition.Row, aOutputPosition.Sheet ); + if (pDocShell) + { + ScDocFunc aFunc(*pDocShell); + aFunc.InsertNameList( aPos, sal_True ); + } +} + +// container::XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScNamedRangesObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.NamedRangesEnumeration"))); +} + +// container::XIndexAccess + +sal_Int32 SAL_CALL ScNamedRangesObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + long nRet = 0; + if (pDocShell) + { + ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName(); + if (pNames) + { + sal_uInt16 nCount = pNames->GetCount(); + for (sal_uInt16 i=0; i<nCount; i++) + if (lcl_UserVisibleName( (*pNames)[i] )) // interne weglassen + ++nRet; + } + } + return nRet; +} + +uno::Any SAL_CALL ScNamedRangesObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference< sheet::XNamedRange > xRange = GetObjectByIndex_Impl((sal_uInt16)nIndex); + uno::Any aAny; + if ( xRange.is() ) + aAny <<= xRange; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScNamedRangesObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ::getCppuType((const uno::Reference< sheet::XNamedRange >*)0); // muss zu getByIndex passen +} + +sal_Bool SAL_CALL ScNamedRangesObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +uno::Any SAL_CALL ScNamedRangesObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference< sheet::XNamedRange > xRange = GetObjectByName_Impl(aName); + uno::Any aAny; + if ( xRange.is() ) + aAny <<= xRange; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScNamedRangesObj::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName(); + if (pNames) + { + long nVisCount = getCount(); // Namen mit lcl_UserVisibleName + uno::Sequence< ::rtl::OUString> aSeq(nVisCount); + ::rtl::OUString* pAry = aSeq.getArray(); + + sal_uInt16 nCount = pNames->GetCount(); + sal_uInt16 nVisPos = 0; + for (sal_uInt16 i=0; i<nCount; i++) + { + ScRangeData* pData = (*pNames)[i]; + if ( lcl_UserVisibleName(pData) ) + pAry[nVisPos++] = pData->GetName(); + } +// DBG_ASSERT(nVisPos == nVisCount, "huch, verzaehlt?"); + return aSeq; + } + } + return uno::Sequence< ::rtl::OUString>(0); +} + +sal_Bool SAL_CALL ScNamedRangesObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScRangeName* pNames = pDocShell->GetDocument()->GetRangeName(); + if (pNames) + { + String aString = aName; + sal_uInt16 nPos = 0; + if (pNames->SearchName( aString, nPos )) + if ( lcl_UserVisibleName((*pNames)[nPos]) ) + return sal_True; + } + } + return sal_False; +} + +//------------------------------------------------------------------------ + +ScLabelRangeObj::ScLabelRangeObj(ScDocShell* pDocSh, sal_Bool bCol, const ScRange& rR) : + pDocShell( pDocSh ), + bColumn( bCol ), + aRange( rR ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScLabelRangeObj::~ScLabelRangeObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScLabelRangeObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + //! Ref-Update !!! + + if ( rHint.ISA( SfxSimpleHint ) && ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + pDocShell = NULL; // ungueltig geworden +} + +// Hilfsfuntionen + +ScRangePair* ScLabelRangeObj::GetData_Impl() +{ + ScRangePair* pRet = NULL; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScRangePairList* pList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges(); + if (pList) + pRet = pList->Find( aRange ); + } + return pRet; +} + +void ScLabelRangeObj::Modify_Impl( const ScRange* pLabel, const ScRange* pData ) +{ + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScRangePairList* pOldList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges(); + if (pOldList) + { + ScRangePairListRef xNewList = pOldList->Clone(); + ScRangePair* pEntry = xNewList->Find( aRange ); + if (pEntry) + { + xNewList->Remove( pEntry ); // nur aus der Liste entfernt, nicht geloescht + + if ( pLabel ) + pEntry->GetRange(0) = *pLabel; + if ( pData ) + pEntry->GetRange(1) = *pData; + + xNewList->Join( *pEntry ); + delete pEntry; + + if (bColumn) + pDoc->GetColNameRangesRef() = xNewList; + else + pDoc->GetRowNameRangesRef() = xNewList; + + pDoc->CompileColRowNameFormula(); + pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID ); + pDocShell->SetDocumentModified(); + + //! Undo ?!?! (hier und aus Dialog) + + if ( pLabel ) + aRange = *pLabel; // Objekt anpassen, um Range wiederzufinden + } + } + } +} + +// sheet::XLabelRange + +table::CellRangeAddress SAL_CALL ScLabelRangeObj::getLabelArea() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellRangeAddress aRet; + ScRangePair* pData = GetData_Impl(); + if (pData) + ScUnoConversion::FillApiRange( aRet, pData->GetRange(0) ); + return aRet; +} + +void SAL_CALL ScLabelRangeObj::setLabelArea( const table::CellRangeAddress& aLabelArea ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRange aLabelRange; + ScUnoConversion::FillScRange( aLabelRange, aLabelArea ); + Modify_Impl( &aLabelRange, NULL ); +} + +table::CellRangeAddress SAL_CALL ScLabelRangeObj::getDataArea() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellRangeAddress aRet; + ScRangePair* pData = GetData_Impl(); + if (pData) + ScUnoConversion::FillApiRange( aRet, pData->GetRange(1) ); + return aRet; +} + +void SAL_CALL ScLabelRangeObj::setDataArea( const table::CellRangeAddress& aDataArea ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScRange aDataRange; + ScUnoConversion::FillScRange( aDataRange, aDataArea ); + Modify_Impl( NULL, &aDataRange ); +} + +//------------------------------------------------------------------------ + +ScLabelRangesObj::ScLabelRangesObj(ScDocShell* pDocSh, sal_Bool bCol) : + pDocShell( pDocSh ), + bColumn( bCol ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScLabelRangesObj::~ScLabelRangesObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScLabelRangesObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// sheet::XLabelRanges + +ScLabelRangeObj* ScLabelRangesObj::GetObjectByIndex_Impl(sal_uInt16 nIndex) +{ + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScRangePairList* pList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges(); + if ( pList && nIndex < pList->Count() ) + { + ScRangePair* pData = pList->GetObject(nIndex); + if (pData) + return new ScLabelRangeObj( pDocShell, bColumn, pData->GetRange(0) ); + } + } + return NULL; +} + +void SAL_CALL ScLabelRangesObj::addNew( const table::CellRangeAddress& aLabelArea, + const table::CellRangeAddress& aDataArea ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScRangePairList* pOldList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges(); + if (pOldList) + { + ScRangePairListRef xNewList = pOldList->Clone(); + + ScRange aLabelRange; + ScRange aDataRange; + ScUnoConversion::FillScRange( aLabelRange, aLabelArea ); + ScUnoConversion::FillScRange( aDataRange, aDataArea ); + xNewList->Join( ScRangePair( aLabelRange, aDataRange ) ); + + if (bColumn) + pDoc->GetColNameRangesRef() = xNewList; + else + pDoc->GetRowNameRangesRef() = xNewList; + + pDoc->CompileColRowNameFormula(); + pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID ); + pDocShell->SetDocumentModified(); + + //! Undo ?!?! (hier und aus Dialog) + } + } +} + +void SAL_CALL ScLabelRangesObj::removeByIndex( sal_Int32 nIndex ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScRangePairList* pOldList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges(); + + if ( pOldList && nIndex < (sal_Int32)pOldList->Count() ) + { + ScRangePairListRef xNewList = pOldList->Clone(); + + ScRangePair* pEntry = xNewList->GetObject( nIndex ); + if (pEntry) + { + xNewList->Remove( pEntry ); + delete pEntry; + + if (bColumn) + pDoc->GetColNameRangesRef() = xNewList; + else + pDoc->GetRowNameRangesRef() = xNewList; + + pDoc->CompileColRowNameFormula(); + pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID ); + pDocShell->SetDocumentModified(); + bDone = TRUE; + + //! Undo ?!?! (hier und aus Dialog) + } + } + } + if (!bDone) + throw uno::RuntimeException(); // no other exceptions specified +} + +// container::XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScLabelRangesObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScIndexEnumeration(this, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.LabelRangesEnumeration"))); +} + +// container::XIndexAccess + +sal_Int32 SAL_CALL ScLabelRangesObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScRangePairList* pList = bColumn ? pDoc->GetColNameRanges() : pDoc->GetRowNameRanges(); + if (pList) + return pList->Count(); + } + return 0; +} + +uno::Any SAL_CALL ScLabelRangesObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference< sheet::XLabelRange > xRange = GetObjectByIndex_Impl((sal_uInt16)nIndex); + uno::Any aAny; + if ( xRange.is() ) + aAny <<= xRange; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScLabelRangesObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ::getCppuType((const uno::Reference< sheet::XLabelRange >*)0); // muss zu getByIndex passen + +} + +sal_Bool SAL_CALL ScLabelRangesObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +//------------------------------------------------------------------------ + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_notesuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_notesuno.cxx new file mode 100644 index 000000000000..be6b2fa28cc4 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_notesuno.cxx @@ -0,0 +1,315 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + + +#include "notesuno.hxx" +#include "textuno.hxx" +#include "cellsuno.hxx" // getParent +#include "docsh.hxx" +#include "docfunc.hxx" +#include "hints.hxx" +#include "editsrc.hxx" +#include "miscuno.hxx" + +// setVisible: +#include <bf_svx/svdundo.hxx> +#include "drwlayer.hxx" +#include "detfunc.hxx" +#include "undocell.hxx" +#include <vcl/svapp.hxx> +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +// keine Properties fuer Text in Notizen +const SfxItemPropertyMap* lcl_GetAnnotationPropertyMap() +{ + static SfxItemPropertyMap aAnnotationPropertyMap_Impl[] = + { + {0,0,0,0} + }; + return aAnnotationPropertyMap_Impl; +} + +//------------------------------------------------------------------------ + +SC_SIMPLE_SERVICE_INFO( ScAnnotationObj, "ScAnnotationObj", "com.sun.star.sheet.CellAnnotation" ) + +//------------------------------------------------------------------------ + +ScAnnotationObj::ScAnnotationObj(ScDocShell* pDocSh, const ScAddress& rPos) : + pDocShell( pDocSh ), + aCellPos( rPos ), + pUnoText( NULL ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); + + // pUnoText is allocated on demand (GetUnoText) + // can't be aggregated because getString/setString is handled here +} + +SvxUnoText& ScAnnotationObj::GetUnoText() +{ + if (!pUnoText) + { + ScAnnotationEditSource aEditSource( pDocShell, aCellPos ); + pUnoText = new SvxUnoText( &aEditSource, lcl_GetAnnotationPropertyMap(), + uno::Reference<text::XText>() ); + pUnoText->acquire(); + } + return *pUnoText; +} + +ScAnnotationObj::~ScAnnotationObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); + + if (pUnoText) + pUnoText->release(); +} + +void ScAnnotationObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; + + //! Ref-Update + } + else if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + + +// XChild + +uno::Reference<uno::XInterface> SAL_CALL ScAnnotationObj::getParent() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + // Parent der Notiz ist die zugehoerige Zelle + //! existierendes Objekt finden und zurueckgeben ??? + + if (pDocShell) + return (cppu::OWeakObject*)new ScCellObj( pDocShell, aCellPos ); + + return NULL; +} + +void SAL_CALL ScAnnotationObj::setParent( const uno::Reference<uno::XInterface>& Parent ) + throw(lang::NoSupportException, uno::RuntimeException) +{ + // hamma nich + //! Exception oder so ??! +} + +// XSimpleText + +uno::Reference<text::XTextCursor> SAL_CALL ScAnnotationObj::createTextCursor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + // Notizen brauchen keine Extrawurst + return GetUnoText().createTextCursor(); +} + +uno::Reference<text::XTextCursor> SAL_CALL ScAnnotationObj::createTextCursorByRange( + const uno::Reference<text::XTextRange>& aTextPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + // Notizen brauchen keine Extrawurst + return GetUnoText().createTextCursorByRange(aTextPosition); +} + +::rtl::OUString SAL_CALL ScAnnotationObj::getString() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScPostIt aNote; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + pDoc->GetNote( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(), aNote ); + } + return aNote.GetText(); +} + +void SAL_CALL ScAnnotationObj::setString( const ::rtl::OUString& aText ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell ) + { + String aString = aText; + ScDocFunc aFunc(*pDocShell); + aFunc.SetNoteText( aCellPos, aString, TRUE ); + + // don't create pUnoText here if not there + if (pUnoText) + pUnoText->SetSelection(ESelection( 0,0, 0,aString.Len() )); + } +} + +void SAL_CALL ScAnnotationObj::insertString( const uno::Reference<text::XTextRange>& xRange, + const ::rtl::OUString& aString, sal_Bool bAbsorb ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + GetUnoText().insertString( xRange, aString, bAbsorb ); +} + +void SAL_CALL ScAnnotationObj::insertControlCharacter( const uno::Reference<text::XTextRange>& xRange, + sal_Int16 nControlCharacter, sal_Bool bAbsorb ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + GetUnoText().insertControlCharacter( xRange, nControlCharacter, bAbsorb ); +} + +uno::Reference<text::XText> SAL_CALL ScAnnotationObj::getText() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return GetUnoText().getText(); +} + +uno::Reference<text::XTextRange> SAL_CALL ScAnnotationObj::getStart() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return GetUnoText().getStart(); +} + +uno::Reference<text::XTextRange> SAL_CALL ScAnnotationObj::getEnd() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return GetUnoText().getEnd(); +} + +// XSheetAnnotation + +table::CellAddress SAL_CALL ScAnnotationObj::getPosition() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + table::CellAddress aAdr; + aAdr.Sheet = aCellPos.Tab(); + aAdr.Column = aCellPos.Col(); + aAdr.Row = aCellPos.Row(); + return aAdr; +} + +::rtl::OUString SAL_CALL ScAnnotationObj::getAuthor() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScPostIt aNote; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + pDoc->GetNote( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(), aNote ); + } + return aNote.GetAuthor(); +} + +::rtl::OUString SAL_CALL ScAnnotationObj::getDate() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScPostIt aNote; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + pDoc->GetNote( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(), aNote ); + } + return aNote.GetDate(); +} + +sal_Bool SAL_CALL ScAnnotationObj::getIsVisible() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ScPostIt aNote; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + pDoc->GetNote( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(), aNote ); + } + return aNote.IsShown(); +} + +void SAL_CALL ScAnnotationObj::setIsVisible( sal_Bool bIsVisible ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bDone = FALSE; + if ( pDocShell ) + { + //! Funktion an docfunc oder so + + BOOL bSet = bIsVisible ? TRUE : FALSE; + ScDocument* pDoc = pDocShell->GetDocument(); + USHORT nCol = aCellPos.Col(); + USHORT nRow = aCellPos.Row(); + USHORT nTab = aCellPos.Tab(); + ScPostIt aNote; + if ( pDoc->GetNote( nCol, nRow, nTab, aNote ) ) + { + BOOL bHad = pDoc->HasNoteObject( nCol, nRow, nTab ); + if ( bHad != bSet ) + { + pDocShell->MakeDrawLayer(); + ScDrawLayer* pModel = pDoc->GetDrawLayer(); + + ScDetectiveFunc aFunc( pDoc,nTab ); + if ( bSet ) + bDone = ( aFunc.ShowComment( nCol, nRow, FALSE ) != NULL ); + else + bDone = aFunc.HideComment( nCol, nRow ); + if (bDone) + { + aNote.SetShown( bSet ); + pDoc->SetNote( nCol, nRow, nTab, aNote ); + + pDocShell->SetDocumentModified(); + } + } + } + } +} + +//------------------------------------------------------------------------ + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_optuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_optuno.cxx new file mode 100644 index 000000000000..318a906d6e89 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_optuno.cxx @@ -0,0 +1,210 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + + +#include <com/sun/star/util/Date.hpp> + +#include "optuno.hxx" +#include "miscuno.hxx" +#include "unonames.hxx" +#include <vcl/svapp.hxx> +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +// static +const SfxItemPropertyMap* ScDocOptionsHelper::GetPropertyMap() +{ + static SfxItemPropertyMap aMap[] = + { + {MAP_CHAR_LEN(SC_UNO_CALCASSHOWN), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_DEFTABSTOP), 0, &getCppuType((sal_Int16*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_IGNORECASE), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_ITERENABLED), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_ITERCOUNT), 0, &getCppuType((sal_Int32*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_ITEREPSILON), 0, &getCppuType((double*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_LOOKUPLABELS), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_MATCHWHOLE), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_NULLDATE), 0, &getCppuType((util::Date*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_SPELLONLINE), 0, &getBooleanCppuType(), 0}, + {MAP_CHAR_LEN(SC_UNO_STANDARDDEC), 0, &getCppuType((sal_Int16*)0), 0}, + {MAP_CHAR_LEN(SC_UNO_REGEXENABLED), 0, &getBooleanCppuType(), 0}, + {0,0,0,0} + }; + return aMap; +} + +// static +sal_Bool ScDocOptionsHelper::setPropertyValue( ScDocOptions& rOptions, + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) +{ + //! use map (with new identifiers) + + sal_Bool bKnown = sal_True; + String aString = aPropertyName; + + if ( aString.EqualsAscii( SC_UNO_CALCASSHOWN ) ) + rOptions.SetCalcAsShown( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aString.EqualsAscii( SC_UNO_IGNORECASE ) ) + rOptions.SetIgnoreCase( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aString.EqualsAscii( SC_UNO_ITERENABLED ) ) + rOptions.SetIter( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aString.EqualsAscii( SC_UNO_REGEXENABLED ) ) + rOptions.SetFormulaRegexEnabled( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aString.EqualsAscii( SC_UNO_LOOKUPLABELS ) ) + rOptions.SetLookUpColRowNames( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aString.EqualsAscii( SC_UNO_MATCHWHOLE ) ) + rOptions.SetMatchWholeCell( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aString.EqualsAscii( SC_UNO_SPELLONLINE ) ) + rOptions.SetAutoSpell( ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); + else if ( aString.EqualsAscii( SC_UNO_DEFTABSTOP ) ) + { + sal_Int16 nIntVal; + if ( aValue >>= nIntVal ) + rOptions.SetTabDistance( nIntVal ); + } + else if ( aString.EqualsAscii( SC_UNO_ITERCOUNT ) ) + { + sal_Int32 nIntVal; + if ( aValue >>= nIntVal ) + rOptions.SetIterCount( (USHORT)nIntVal ); + } + else if ( aString.EqualsAscii( SC_UNO_STANDARDDEC ) ) + { + sal_Int16 nIntVal; + if ( aValue >>= nIntVal ) + rOptions.SetStdPrecision( nIntVal ); + } + else if ( aString.EqualsAscii( SC_UNO_ITEREPSILON ) ) + { + double fDoubleVal; + if ( aValue >>= fDoubleVal ) + rOptions.SetIterEps( fDoubleVal ); + } + else if ( aString.EqualsAscii( SC_UNO_NULLDATE ) ) + { + util::Date aDate; + if ( aValue >>= aDate ) + rOptions.SetDate( aDate.Day, aDate.Month, aDate.Year ); + } + else + bKnown = sal_False; + + return bKnown; +} + +// static +uno::Any ScDocOptionsHelper::getPropertyValue( + const ScDocOptions& rOptions, const ::rtl::OUString& aPropertyName ) +{ + //! use map (with new identifiers) + + String aString = aPropertyName; + uno::Any aRet; + + if ( aString.EqualsAscii( SC_UNO_CALCASSHOWN ) ) + ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsCalcAsShown() ); + else if ( aString.EqualsAscii( SC_UNO_IGNORECASE ) ) + ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsIgnoreCase() ); + else if ( aString.EqualsAscii( SC_UNO_ITERENABLED ) ) + ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsIter() ); + else if ( aString.EqualsAscii( SC_UNO_REGEXENABLED ) ) + ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsFormulaRegexEnabled() ); + else if ( aString.EqualsAscii( SC_UNO_LOOKUPLABELS ) ) + ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsLookUpColRowNames() ); + else if ( aString.EqualsAscii( SC_UNO_MATCHWHOLE ) ) + ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsMatchWholeCell() ); + else if ( aString.EqualsAscii( SC_UNO_SPELLONLINE ) ) + ScUnoHelpFunctions::SetBoolInAny( aRet, rOptions.IsAutoSpell() ); + else if ( aString.EqualsAscii( SC_UNO_DEFTABSTOP ) ) + aRet <<= (sal_Int16)( rOptions.GetTabDistance() ); + else if ( aString.EqualsAscii( SC_UNO_ITERCOUNT ) ) + aRet <<= (sal_Int32)( rOptions.GetIterCount() ); + else if ( aString.EqualsAscii( SC_UNO_STANDARDDEC ) ) + aRet <<= (sal_Int16)( rOptions.GetStdPrecision() ); + else if ( aString.EqualsAscii( SC_UNO_ITEREPSILON ) ) + aRet <<= (double)( rOptions.GetIterEps() ); + else if ( aString.EqualsAscii( SC_UNO_NULLDATE ) ) + { + USHORT nD, nM, nY; + rOptions.GetDate( nD, nM, nY ); + util::Date aDate( nD, nM, nY ); + aRet <<= aDate; + } + + return aRet; +} + +//------------------------------------------------------------------------ + +ScDocOptionsObj::ScDocOptionsObj( const ScDocOptions& rOpt ) : + ScModelObj( NULL ), + aOptions( rOpt ) +{ +} + +ScDocOptionsObj::~ScDocOptionsObj() +{ +} + +void SAL_CALL ScDocOptionsObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + BOOL bDone = ScDocOptionsHelper::setPropertyValue( aOptions, aPropertyName, aValue ); + + if (!bDone) + ScModelObj::setPropertyValue( aPropertyName, aValue ); +} + +uno::Any SAL_CALL ScDocOptionsObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Any aRet = ScDocOptionsHelper::getPropertyValue( aOptions, aPropertyName ); + if ( !aRet.hasValue() ) + aRet = ScModelObj::getPropertyValue( aPropertyName ); + + return aRet; +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_pageuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_pageuno.cxx new file mode 100644 index 000000000000..89d235a068e3 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_pageuno.cxx @@ -0,0 +1,85 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "pageuno.hxx" +#include "shapeuno.hxx" + +#include <tools/string.hxx> + +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +ScPageObj::ScPageObj( SdrPage* pPage ) : + SvxFmDrawPage( pPage ) +{ +} + +ScPageObj::~ScPageObj() throw() +{ +} + +uno::Reference<drawing::XShape > ScPageObj::_CreateShape( SdrObject *pObj ) const throw() +{ + uno::Reference<drawing::XShape> xShape = SvxFmDrawPage::_CreateShape( pObj ); + + new ScShapeObj( xShape ); // aggregates object and modifies xShape + + return xShape; +} + +::rtl::OUString SAL_CALL ScPageObj::getImplementationName() + throw(uno::RuntimeException) +{ + return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ScPageObj")); +} + +sal_Bool SAL_CALL ScPageObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + String aServiceStr = rServiceName; + return aServiceStr.EqualsAscii( "com.sun.star.sheet.SpreadsheetDrawPage" ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScPageObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + uno::Sequence< ::rtl::OUString> aRet(1); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.SpreadsheetDrawPage")); + return aRet; +} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_servuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_servuno.cxx new file mode 100644 index 000000000000..fff0c0aa6e44 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_servuno.cxx @@ -0,0 +1,297 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <bf_svtools/unoimap.hxx> +#include <bf_svx/unofill.hxx> + +#include <bf_svx/unonrule.hxx> + +#include "servuno.hxx" +#include "cellsuno.hxx" +#include "fielduno.hxx" +#include "styleuno.hxx" +#include "afmtuno.hxx" +#include "defltuno.hxx" +#include "drdefuno.hxx" +#include "docsh.hxx" +#include "drwlayer.hxx" +#include "confuno.hxx" +#include "shapeuno.hxx" + +// #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver +#include <bf_svx/xmleohlp.hxx> + +#include <bf_svx/xmlgrhlp.hxx> +namespace binfilter { + +using namespace ::com::sun::star; + + +//------------------------------------------------------------------------ + +static const sal_Char* __FAR_DATA aProvNames[SC_SERVICE_COUNT] = + { + "com.sun.star.sheet.Spreadsheet", // SC_SERVICE_SHEET + "com.sun.star.text.TextField.URL", // SC_SERVICE_URLFIELD + "com.sun.star.text.TextField.PageNumber", // SC_SERVICE_PAGEFIELD + "com.sun.star.text.TextField.PageCount", // SC_SERVICE_PAGESFIELD + "com.sun.star.text.TextField.Date", // SC_SERVICE_DATEFIELD + "com.sun.star.text.TextField.Time", // SC_SERVICE_TIMEFIELD + "com.sun.star.text.TextField.DocumentTitle",// SC_SERVICE_TITLEFIELD + "com.sun.star.text.TextField.FileName", // SC_SERVICE_FILEFIELD + "com.sun.star.text.TextField.SheetName", // SC_SERVICE_SHEETFIELD + "com.sun.star.style.CellStyle", // SC_SERVICE_CELLSTYLE + "com.sun.star.style.PageStyle", // SC_SERVICE_PAGESTYLE + "com.sun.star.sheet.TableAutoFormat", // SC_SERVICE_AUTOFORMAT + "com.sun.star.sheet.SheetCellRanges", // SC_SERVICE_CELLRANGES + "com.sun.star.drawing.GradientTable", // SC_SERVICE_GRADTAB + "com.sun.star.drawing.HatchTable", // SC_SERVICE_HATCHTAB + "com.sun.star.drawing.BitmapTable", // SC_SERVICE_BITMAPTAB + "com.sun.star.drawing.TransparencyGradientTable", // SC_SERVICE_TRGRADTAB + "com.sun.star.drawing.MarkerTable", // SC_SERVICE_MARKERTAB + "com.sun.star.drawing.DashTable", // SC_SERVICE_DASHTAB + "com.sun.star.text.NumberingRules", // SC_SERVICE_NUMRULES + "com.sun.star.sheet.Defaults", // SC_SERVICE_DOCDEFLTS + "com.sun.star.drawing.Defaults", // SC_SERVICE_DRAWDEFLTS + "com.sun.star.comp.SpreadsheetSettings", // SC_SERVICE_DOCSPRSETT + "com.sun.star.document.Settings", // SC_SERVICE_DOCCONF + "com.sun.star.image.ImageMapRectangleObject",// SC_SERVICE_IMAP_RECT + "com.sun.star.image.ImageMapCircleObject", // SC_SERVICE_IMAP_CIRC + "com.sun.star.image.ImageMapPolygonObject", // SC_SERVICE_IMAP_POLY + + // #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver + "com.sun.star.document.ExportGraphicObjectResolver", // SC_SERVICE_EXPORT_GOR + "com.sun.star.document.ImportGraphicObjectResolver", // SC_SERVICE_IMPORT_GOR + "com.sun.star.document.ExportEmbeddedObjectResolver", // SC_SERVICE_EXPORT_EOR + "com.sun.star.document.ImportEmbeddedObjectResolver" // SC_SERVICE_IMPORT_EOR + }; + +// +// old service names that were in 567 still work in createInstance, +// in case some macro is still using them +// + +static const sal_Char* __FAR_DATA aOldNames[SC_SERVICE_COUNT] = + { + "", // SC_SERVICE_SHEET + "stardiv.one.text.TextField.URL", // SC_SERVICE_URLFIELD + "stardiv.one.text.TextField.PageNumber", // SC_SERVICE_PAGEFIELD + "stardiv.one.text.TextField.PageCount", // SC_SERVICE_PAGESFIELD + "stardiv.one.text.TextField.Date", // SC_SERVICE_DATEFIELD + "stardiv.one.text.TextField.Time", // SC_SERVICE_TIMEFIELD + "stardiv.one.text.TextField.DocumentTitle", // SC_SERVICE_TITLEFIELD + "stardiv.one.text.TextField.FileName", // SC_SERVICE_FILEFIELD + "stardiv.one.text.TextField.SheetName", // SC_SERVICE_SHEETFIELD + "stardiv.one.style.CellStyle", // SC_SERVICE_CELLSTYLE + "stardiv.one.style.PageStyle", // SC_SERVICE_PAGESTYLE + "", // SC_SERVICE_AUTOFORMAT + "", // SC_SERVICE_CELLRANGES + "", // SC_SERVICE_GRADTAB + "", // SC_SERVICE_HATCHTAB + "", // SC_SERVICE_BITMAPTAB + "", // SC_SERVICE_TRGRADTAB + "", // SC_SERVICE_MARKERTAB + "", // SC_SERVICE_DASHTAB + "", // SC_SERVICE_NUMRULES + "", // SC_SERVICE_DOCDEFLTS + "", // SC_SERVICE_DRAWDEFLTS + "", // SC_SERVICE_DOCSPRSETT + "", // SC_SERVICE_DOCCONF + "", // SC_SERVICE_IMAP_RECT + "", // SC_SERVICE_IMAP_CIRC + "", // SC_SERVICE_IMAP_POLY + + // #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver + "", // SC_SERVICE_EXPORT_GOR + "", // SC_SERVICE_IMPORT_GOR + "", // SC_SERVICE_EXPORT_EOR + "" // SC_SERVICE_IMPORT_EOR + }; + + + + +//------------------------------------------------------------------------ + +// alles static + +sal_uInt16 ScServiceProvider::GetProviderType(const String& rServiceName) +{ + if (rServiceName.Len()) + { + USHORT i; + for (i=0; i<SC_SERVICE_COUNT; i++) + if (rServiceName.EqualsAscii( aProvNames[i] )) + return i; + + for (i=0; i<SC_SERVICE_COUNT; i++) + if (rServiceName.EqualsAscii( aOldNames[i] )) + { + DBG_ERROR("old service name used"); + return i; + } + } + return SC_SERVICE_INVALID; +} + +uno::Reference<uno::XInterface> ScServiceProvider::MakeInstance( + sal_uInt16 nType, ScDocShell* pDocShell ) +{ + uno::Reference<uno::XInterface> xRet; + switch (nType) + { + case SC_SERVICE_SHEET: + // noch nicht eingefuegt - DocShell=Null + xRet = (sheet::XSpreadsheet*)new ScTableSheetObj(NULL,0); + break; + case SC_SERVICE_URLFIELD: + xRet = (text::XTextField*)new ScCellFieldObj( NULL, ScAddress(), ESelection() ); + break; + case SC_SERVICE_PAGEFIELD: + case SC_SERVICE_PAGESFIELD: + case SC_SERVICE_DATEFIELD: + case SC_SERVICE_TIMEFIELD: + case SC_SERVICE_TITLEFIELD: + case SC_SERVICE_FILEFIELD: + case SC_SERVICE_SHEETFIELD: + xRet = (text::XTextField*)new ScHeaderFieldObj( NULL, 0, nType, ESelection() ); + break; + case SC_SERVICE_CELLSTYLE: + xRet = (style::XStyle*)new ScStyleObj( NULL, SFX_STYLE_FAMILY_PARA, String() ); + break; + case SC_SERVICE_PAGESTYLE: + xRet = (style::XStyle*)new ScStyleObj( NULL, SFX_STYLE_FAMILY_PAGE, String() ); + break; + case SC_SERVICE_AUTOFORMAT: + xRet = (container::XIndexAccess*)new ScAutoFormatObj( SC_AFMTOBJ_INVALID ); + break; + case SC_SERVICE_CELLRANGES: + // wird nicht eingefuegt, sondern gefuellt + // -> DocShell muss gesetzt sein, aber leere Ranges + if (pDocShell) + xRet = (sheet::XSheetCellRanges*)new ScCellRangesObj( pDocShell, ScRangeList() ); + break; + + case SC_SERVICE_DOCDEFLTS: + if (pDocShell) + xRet = (beans::XPropertySet*)new ScDocDefaultsObj( pDocShell ); + break; + case SC_SERVICE_DRAWDEFLTS: + if (pDocShell) + xRet = (beans::XPropertySet*)new ScDrawDefaultsObj( pDocShell ); + break; + + // Drawing layer tables are not in SvxUnoDrawMSFactory, + // because SvxUnoDrawMSFactory doesn't have a SdrModel pointer. + // Drawing layer is always allocated if not there (MakeDrawLayer). + + case SC_SERVICE_GRADTAB: + if (pDocShell) + xRet = SvxUnoGradientTable_createInstance( pDocShell->MakeDrawLayer() ); + break; + case SC_SERVICE_HATCHTAB: + if (pDocShell) + xRet = SvxUnoHatchTable_createInstance( pDocShell->MakeDrawLayer() ); + break; + case SC_SERVICE_BITMAPTAB: + if (pDocShell) + xRet = SvxUnoBitmapTable_createInstance( pDocShell->MakeDrawLayer() ); + break; + case SC_SERVICE_TRGRADTAB: + if (pDocShell) + xRet = SvxUnoTransGradientTable_createInstance( pDocShell->MakeDrawLayer() ); + break; + case SC_SERVICE_MARKERTAB: + if (pDocShell) + xRet = SvxUnoMarkerTable_createInstance( pDocShell->MakeDrawLayer() ); + break; + case SC_SERVICE_DASHTAB: + if (pDocShell) + xRet = SvxUnoDashTable_createInstance( pDocShell->MakeDrawLayer() ); + break; + case SC_SERVICE_NUMRULES: + if (pDocShell) + xRet = SvxCreateNumRule( pDocShell->MakeDrawLayer() ); + break; + case SC_SERVICE_DOCSPRSETT: + case SC_SERVICE_DOCCONF: + if (pDocShell) + xRet = (beans::XPropertySet*)new ScDocumentConfiguration(pDocShell); + break; + + case SC_SERVICE_IMAP_RECT: + xRet = SvUnoImageMapRectangleObject_createInstance( ScShapeObj::GetSupportedMacroItems() ); + break; + case SC_SERVICE_IMAP_CIRC: + xRet = SvUnoImageMapCircleObject_createInstance( ScShapeObj::GetSupportedMacroItems() ); + break; + case SC_SERVICE_IMAP_POLY: + xRet = SvUnoImageMapPolygonObject_createInstance( ScShapeObj::GetSupportedMacroItems() ); + break; + + // #100263# Support creation of GraphicObjectResolver and EmbeddedObjectResolver + case SC_SERVICE_EXPORT_GOR: + xRet = (::cppu::OWeakObject * )new SvXMLGraphicHelper( GRAPHICHELPER_MODE_WRITE ); + break; + + case SC_SERVICE_IMPORT_GOR: + xRet = (::cppu::OWeakObject * )new SvXMLGraphicHelper( GRAPHICHELPER_MODE_READ ); + break; + + case SC_SERVICE_EXPORT_EOR: + if (pDocShell) + xRet = (::cppu::OWeakObject * )new SvXMLEmbeddedObjectHelper( *pDocShell, EMBEDDEDOBJECTHELPER_MODE_WRITE ); + break; + + case SC_SERVICE_IMPORT_EOR: + if (pDocShell) + xRet = (::cppu::OWeakObject * )new SvXMLEmbeddedObjectHelper( *pDocShell, EMBEDDEDOBJECTHELPER_MODE_READ ); + break; + } + return xRet; +} + +uno::Sequence< ::rtl::OUString> ScServiceProvider::GetAllServiceNames() +{ + uno::Sequence< ::rtl::OUString> aRet(SC_SERVICE_COUNT); + ::rtl::OUString* pArray = aRet.getArray(); + for (sal_uInt16 i = 0; i < SC_SERVICE_COUNT; i++) + pArray[i] = ::rtl::OUString::createFromAscii( aProvNames[i] ); + return aRet; +} + + + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_shapeuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_shapeuno.cxx new file mode 100644 index 000000000000..80d3d11113aa --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_shapeuno.cxx @@ -0,0 +1,800 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <comphelper/uno3.hxx> +#include <bf_svtools/unoevent.hxx> +#include <bf_svtools/unoimap.hxx> +#include <bf_svx/unoshape.hxx> +#include <bf_svx/unofield.hxx> + + +#include "shapeuno.hxx" +#include "miscuno.hxx" +#include "cellsuno.hxx" +#include "textuno.hxx" +#include "fielduno.hxx" +#include "docsh.hxx" +#include "drwlayer.hxx" +#include "userdat.hxx" +#include "unonames.hxx" +#include <vcl/svapp.hxx> + +#include <comphelper/stl_types.hxx> +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +DECLARE_STL_USTRINGACCESS_MAP( uno::Sequence< sal_Int8 > *, ScShapeImplementationIdMap ); + +static ScShapeImplementationIdMap aImplementationIdMap; + +const SfxItemPropertyMap* lcl_GetShapeMap() +{ + static SfxItemPropertyMap aShapeMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_IMAGEMAP), 0, &getCppuType((uno::Reference<container::XIndexContainer>*)0), 0, 0 }, + {0,0,0,0} + }; + return aShapeMap_Impl; +} + +// static +const SvEventDescription* ScShapeObj::GetSupportedMacroItems() +{ + static const SvEventDescription aMacroDescriptionsImpl[] = + { + { 0, NULL } + }; + return aMacroDescriptionsImpl; +} + +//------------------------------------------------------------------------ + +ScShapeObj::ScShapeObj( uno::Reference<drawing::XShape>& xShape ) + : pImplementationId(NULL), + bIsTextShape(FALSE) +{ + ::comphelper::increment( m_refCount ); + + { + mxShapeAgg = uno::Reference<uno::XAggregation>( xShape, uno::UNO_QUERY ); + // extra block to force deletion of the temporary before setDelegator + } + + if (mxShapeAgg.is()) + { + xShape = NULL; // during setDelegator, mxShapeAgg must be the only ref + + mxShapeAgg->setDelegator( (cppu::OWeakObject*)this ); + + xShape = uno::Reference<drawing::XShape>( mxShapeAgg, uno::UNO_QUERY ); + + bIsTextShape = ( SvxUnoTextBase::getImplementation( mxShapeAgg ) != NULL ); + } + + ::comphelper::decrement( m_refCount ); +} + +ScShapeObj::~ScShapeObj() +{ +// if (mxShapeAgg.is()) +// mxShapeAgg->setDelegator(uno::Reference<uno::XInterface>()); +} + +// XInterface + +uno::Any SAL_CALL ScShapeObj::queryInterface( const uno::Type& rType ) + throw(uno::RuntimeException) +{ + SC_QUERYINTERFACE( beans::XPropertySet ) + SC_QUERYINTERFACE( beans::XPropertyState ) + SC_QUERYINTERFACE( text::XTextContent ) + SC_QUERYINTERFACE( lang::XComponent ) + if ( bIsTextShape ) + { + // #105585# for text shapes, XText (and parent interfaces) must + // be handled here, too (for ScCellFieldObj handling): + SC_QUERYINTERFACE( text::XText ) + SC_QUERYINTERFACE( text::XSimpleText ) + SC_QUERYINTERFACE( text::XTextRange ) + } + SC_QUERYINTERFACE( lang::XTypeProvider ) + + uno::Any aRet = OWeakObject::queryInterface( rType ); + if ( !aRet.hasValue() && mxShapeAgg.is() ) + aRet = mxShapeAgg->queryAggregation( rType ); + + return aRet; +} + +void SAL_CALL ScShapeObj::acquire() throw() +{ + OWeakObject::acquire(); +} + +void SAL_CALL ScShapeObj::release() throw() +{ + OWeakObject::release(); +} + +uno::Reference<beans::XPropertySet> lcl_GetPropertySet( const uno::Reference<uno::XAggregation>& xAgg ) +{ + uno::Reference<beans::XPropertySet> xRet; + if ( xAgg.is() ) + xAgg->queryAggregation( getCppuType((uno::Reference<beans::XPropertySet>*) 0) ) >>= xRet; + return xRet; +} + +uno::Reference<beans::XPropertyState> lcl_GetPropertyState( const uno::Reference<uno::XAggregation>& xAgg ) +{ + uno::Reference<beans::XPropertyState> xRet; + if ( xAgg.is() ) + xAgg->queryAggregation( getCppuType((uno::Reference<beans::XPropertyState>*) 0) ) >>= xRet; + return xRet; +} + +uno::Reference<lang::XComponent> lcl_GetComponent( const uno::Reference<uno::XAggregation>& xAgg ) +{ + uno::Reference<lang::XComponent> xRet; + if ( xAgg.is() ) + xAgg->queryAggregation( getCppuType((uno::Reference<lang::XComponent>*) 0) ) >>= xRet; + return xRet; +} + +uno::Reference<text::XText> lcl_GetText( const uno::Reference<uno::XAggregation>& xAgg ) +{ + uno::Reference<text::XText> xRet; + if ( xAgg.is() ) + xAgg->queryAggregation( getCppuType((uno::Reference<text::XText>*) 0) ) >>= xRet; + return xRet; +} + +uno::Reference<text::XSimpleText> lcl_GetSimpleText( const uno::Reference<uno::XAggregation>& xAgg ) +{ + uno::Reference<text::XSimpleText> xRet; + if ( xAgg.is() ) + xAgg->queryAggregation( getCppuType((uno::Reference<text::XSimpleText>*) 0) ) >>= xRet; + return xRet; +} + +uno::Reference<text::XTextRange> lcl_GetTextRange( const uno::Reference<uno::XAggregation>& xAgg ) +{ + uno::Reference<text::XTextRange> xRet; + if ( xAgg.is() ) + xAgg->queryAggregation( getCppuType((uno::Reference<text::XTextRange>*) 0) ) >>= xRet; + return xRet; +} + +// XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScShapeObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + // mix own and aggregated properties: + uno::Reference<beans::XPropertySetInfo> xRet; + uno::Reference<beans::XPropertySet> xAggProp = lcl_GetPropertySet(mxShapeAgg); + if ( xAggProp.is() ) + { + uno::Reference<beans::XPropertySetInfo> xAggInfo = xAggProp->getPropertySetInfo(); + const uno::Sequence<beans::Property> aPropSeq = xAggInfo->getProperties(); + xRet = new SfxExtItemPropertySetInfo( lcl_GetShapeMap(), aPropSeq ); + } + return xRet; +} + +void SAL_CALL ScShapeObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + + if ( aNameString.EqualsAscii( SC_UNONAME_IMAGEMAP ) ) + { + SdrObject* pObj = GetSdrObject(); + if ( pObj ) + { + ImageMap aImageMap; + uno::Reference< uno::XInterface > xImageMapInt; + aValue >>= xImageMapInt; + + if( !xImageMapInt.is() || !SvUnoImageMap_fillImageMap( xImageMapInt, aImageMap ) ) + throw lang::IllegalArgumentException(); + + ScIMapInfo* pIMapInfo = ScDrawLayer::GetIMapInfo(pObj); + if( pIMapInfo ) + { + // replace existing image map + pIMapInfo->SetImageMap( aImageMap ); + } + else + { + // insert new user data with image map + pObj->InsertUserData(new ScIMapInfo(aImageMap) ); + } + } + } + else + { + uno::Reference<beans::XPropertySet> xAggProp = lcl_GetPropertySet(mxShapeAgg); + if ( xAggProp.is() ) + xAggProp->setPropertyValue( aPropertyName, aValue ); + } +} + +uno::Any SAL_CALL ScShapeObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + + uno::Any aAny; + if ( aNameString.EqualsAscii( SC_UNONAME_IMAGEMAP ) ) + { + uno::Reference< uno::XInterface > xImageMap; + SdrObject* pObj = GetSdrObject(); + if ( pObj ) + { + ScIMapInfo* pIMapInfo = ScDrawLayer::GetIMapInfo(GetSdrObject()); + if( pIMapInfo ) + { + const ImageMap& rIMap = pIMapInfo->GetImageMap(); + xImageMap = SvUnoImageMap_createInstance( rIMap, GetSupportedMacroItems() ); + } + else + xImageMap = SvUnoImageMap_createInstance( GetSupportedMacroItems() ); + } + aAny <<= uno::Reference< container::XIndexContainer >::query( xImageMap ); + } + else + { + uno::Reference<beans::XPropertySet> xAggProp = lcl_GetPropertySet(mxShapeAgg); + if ( xAggProp.is() ) + aAny = xAggProp->getPropertyValue( aPropertyName ); + } + + return aAny; +} + +void SAL_CALL ScShapeObj::addPropertyChangeListener( const ::rtl::OUString& aPropertyName, + const uno::Reference<beans::XPropertyChangeListener>& aListener) + throw(beans::UnknownPropertyException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<beans::XPropertySet> xAggProp = lcl_GetPropertySet(mxShapeAgg); + if ( xAggProp.is() ) + xAggProp->addPropertyChangeListener( aPropertyName, aListener ); +} + +void SAL_CALL ScShapeObj::removePropertyChangeListener( const ::rtl::OUString& aPropertyName, + const uno::Reference<beans::XPropertyChangeListener>& aListener) + throw(beans::UnknownPropertyException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<beans::XPropertySet> xAggProp = lcl_GetPropertySet(mxShapeAgg); + if ( xAggProp.is() ) + xAggProp->removePropertyChangeListener( aPropertyName, aListener ); +} + +void SAL_CALL ScShapeObj::addVetoableChangeListener( const ::rtl::OUString& aPropertyName, + const uno::Reference<beans::XVetoableChangeListener>& aListener) + throw(beans::UnknownPropertyException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<beans::XPropertySet> xAggProp = lcl_GetPropertySet(mxShapeAgg); + if ( xAggProp.is() ) + xAggProp->addVetoableChangeListener( aPropertyName, aListener ); +} + +void SAL_CALL ScShapeObj::removeVetoableChangeListener( const ::rtl::OUString& aPropertyName, + const uno::Reference<beans::XVetoableChangeListener>& aListener) + throw(beans::UnknownPropertyException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<beans::XPropertySet> xAggProp = lcl_GetPropertySet(mxShapeAgg); + if ( xAggProp.is() ) + xAggProp->removeVetoableChangeListener( aPropertyName, aListener ); +} + +// XPropertyState + +beans::PropertyState SAL_CALL ScShapeObj::getPropertyState( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + + beans::PropertyState eRet = beans::PropertyState_DIRECT_VALUE; + if ( aNameString.EqualsAscii( SC_UNONAME_IMAGEMAP ) ) + { + // ImageMap is always "direct" + } + else + { + uno::Reference<beans::XPropertyState> xAggState = lcl_GetPropertyState(mxShapeAgg); + if ( xAggState.is() ) + eRet = xAggState->getPropertyState( aPropertyName ); + } + + return eRet; +} + +uno::Sequence<beans::PropertyState> SAL_CALL ScShapeObj::getPropertyStates( + const uno::Sequence< ::rtl::OUString>& aPropertyNames ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + // simple loop to get own and aggregated states + + const ::rtl::OUString* pNames = aPropertyNames.getConstArray(); + uno::Sequence<beans::PropertyState> aRet(aPropertyNames.getLength()); + beans::PropertyState* pStates = aRet.getArray(); + for(sal_Int32 i = 0; i < aPropertyNames.getLength(); i++) + pStates[i] = getPropertyState(pNames[i]); + return aRet; +} + +void SAL_CALL ScShapeObj::setPropertyToDefault( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + + if ( aNameString.EqualsAscii( SC_UNONAME_IMAGEMAP ) ) + { + SdrObject* pObj = GetSdrObject(); + if ( pObj ) + { + ScIMapInfo* pIMapInfo = ScDrawLayer::GetIMapInfo(pObj); + if( pIMapInfo ) + { + ImageMap aEmpty; + pIMapInfo->SetImageMap( aEmpty ); // replace with empty image map + } + else + { + // nothing to do (no need to insert user data for an empty map) + } + } + } + else + { + uno::Reference<beans::XPropertyState> xAggState = lcl_GetPropertyState(mxShapeAgg); + if ( xAggState.is() ) + xAggState->setPropertyToDefault( aPropertyName ); + } +} + +uno::Any SAL_CALL ScShapeObj::getPropertyDefault( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameString = aPropertyName; + + uno::Any aAny; + if ( aNameString.EqualsAscii( SC_UNONAME_IMAGEMAP ) ) + { + // default: empty ImageMap + uno::Reference< uno::XInterface > xImageMap = SvUnoImageMap_createInstance( GetSupportedMacroItems() ); + aAny <<= uno::Reference< container::XIndexContainer >::query( xImageMap ); + } + else + { + uno::Reference<beans::XPropertyState> xAggState = lcl_GetPropertyState(mxShapeAgg); + if ( xAggState.is() ) + aAny = xAggState->getPropertyDefault( aPropertyName ); + } + + return aAny; +} + +// XTextContent + +void SAL_CALL ScShapeObj::attach( const uno::Reference<text::XTextRange>& xTextRange ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + throw lang::IllegalArgumentException(); // anchor cannot be changed +} + +BOOL lcl_GetPageNum( SdrPage* pPage, SdrModel& rModel, USHORT& rNum ) +{ + USHORT nCount = rModel.GetPageCount(); + for (USHORT i=0; i<nCount; i++) + if ( rModel.GetPage(i) == pPage ) + { + rNum = i; + return TRUE; + } + + return FALSE; +} + +uno::Reference<text::XTextRange> SAL_CALL ScShapeObj::getAnchor() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<text::XTextRange> xRet; + + SdrObject* pObj = GetSdrObject(); + if( pObj ) + { + ScDrawLayer* pModel = (ScDrawLayer*)pObj->GetModel(); + SdrPage* pPage = pObj->GetPage(); + if ( pModel ) + { + ScDocument* pDoc = pModel->GetDocument(); + if ( pDoc ) + { + SfxObjectShell* pObjSh = pDoc->GetDocumentShell(); + if ( pObjSh && pObjSh->ISA(ScDocShell) ) + { + ScDocShell* pDocSh = (ScDocShell*)pObjSh; + + USHORT nTab = 0; + if ( lcl_GetPageNum( pPage, *pModel, nTab ) ) + { + Point aPos = pObj->GetBoundRect().TopLeft(); + ScRange aRange = pDoc->GetRange( nTab, Rectangle( aPos, aPos ) ); + + // anchor is always the cell + + xRet = new ScCellObj( pDocSh, aRange.aStart ); + } + } + } + } + } + + return xRet; +} + +// XComponent + +void SAL_CALL ScShapeObj::dispose() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<lang::XComponent> xAggComp = lcl_GetComponent(mxShapeAgg); + if ( xAggComp.is() ) + xAggComp->dispose(); +} + +void SAL_CALL ScShapeObj::addEventListener( + const uno::Reference<lang::XEventListener>& xListener ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<lang::XComponent> xAggComp = lcl_GetComponent(mxShapeAgg); + if ( xAggComp.is() ) + xAggComp->addEventListener(xListener); +} + +void SAL_CALL ScShapeObj::removeEventListener( + const uno::Reference<lang::XEventListener>& xListener ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<lang::XComponent> xAggComp = lcl_GetComponent(mxShapeAgg); + if ( xAggComp.is() ) + xAggComp->removeEventListener(xListener); +} + +// XText +// (special handling for ScCellFieldObj) + +void lcl_CopyOneProperty( beans::XPropertySet& rDest, beans::XPropertySet& rSource, const sal_Char* pName ) +{ + ::rtl::OUString aNameStr = ::rtl::OUString::createFromAscii(pName); + try + { + uno::Any aValue = rSource.getPropertyValue( aNameStr ); + rDest.setPropertyValue( aNameStr, aValue ); + } + catch (uno::Exception&) + { + DBG_ERROR("Exception in text field"); + } +} + +void SAL_CALL ScShapeObj::insertTextContent( const uno::Reference<text::XTextRange>& xRange, + const uno::Reference<text::XTextContent>& xContent, + sal_Bool bAbsorb ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<text::XTextContent> xEffContent; + + ScCellFieldObj* pCellField = ScCellFieldObj::getImplementation( xContent ); + if ( pCellField ) + { + // #105585# createInstance("TextField.URL") from the document creates a ScCellFieldObj. + // To insert it into drawing text, a SvxUnoTextField is needed instead. + // The ScCellFieldObj object is left in non-inserted state. + + SvxUnoTextField* pDrawField = new SvxUnoTextField( ID_URLFIELD ); + xEffContent = pDrawField; + lcl_CopyOneProperty( *pDrawField, *pCellField, SC_UNONAME_URL ); + lcl_CopyOneProperty( *pDrawField, *pCellField, SC_UNONAME_REPR ); + lcl_CopyOneProperty( *pDrawField, *pCellField, SC_UNONAME_TARGET ); + } + else + xEffContent = xContent; + + uno::Reference<text::XText> xAggText = lcl_GetText(mxShapeAgg); + if ( xAggText.is() ) + xAggText->insertTextContent( xRange, xEffContent, bAbsorb ); +} + +void SAL_CALL ScShapeObj::removeTextContent( const uno::Reference<text::XTextContent>& xContent ) + throw(container::NoSuchElementException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + // ScCellFieldObj can't be used here. + + uno::Reference<text::XText> xAggText = lcl_GetText(mxShapeAgg); + if ( xAggText.is() ) + xAggText->removeTextContent( xContent ); +} + +// XSimpleText (parent of XText) +// Use own SvxUnoTextCursor subclass - everything is just passed to aggregated object + +uno::Reference<text::XTextCursor> SAL_CALL ScShapeObj::createTextCursor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( mxShapeAgg.is() ) + { + // ScDrawTextCursor must be used to ensure the ScShapeObj is returned by getText + + SvxUnoTextBase* pText = SvxUnoTextBase::getImplementation( mxShapeAgg ); + if (pText) + return new ScDrawTextCursor( this, *pText ); + } + + return uno::Reference<text::XTextCursor>(); +} + +uno::Reference<text::XTextCursor> SAL_CALL ScShapeObj::createTextCursorByRange( + const uno::Reference<text::XTextRange>& aTextPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if ( mxShapeAgg.is() && aTextPosition.is() ) + { + // ScDrawTextCursor must be used to ensure the ScShapeObj is returned by getText + + SvxUnoTextBase* pText = SvxUnoTextBase::getImplementation( mxShapeAgg ); + SvxUnoTextRangeBase* pRange = SvxUnoTextRangeBase::getImplementation( aTextPosition ); + if ( pText && pRange ) + { + SvxUnoTextCursor* pCursor = new ScDrawTextCursor( this, *pText ); + uno::Reference<text::XTextCursor> xCursor( pCursor ); + pCursor->SetSelection( pRange->GetSelection() ); + return xCursor; + } + } + + return uno::Reference<text::XTextCursor>(); +} + +void SAL_CALL ScShapeObj::insertString( const uno::Reference<text::XTextRange>& xRange, + const ::rtl::OUString& aString, sal_Bool bAbsorb ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<text::XSimpleText> xAggSimpleText = lcl_GetSimpleText(mxShapeAgg); + if ( xAggSimpleText.is() ) + xAggSimpleText->insertString( xRange, aString, bAbsorb ); + else + throw uno::RuntimeException(); +} + +void SAL_CALL ScShapeObj::insertControlCharacter( const uno::Reference<text::XTextRange>& xRange, + sal_Int16 nControlCharacter, sal_Bool bAbsorb ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<text::XSimpleText> xAggSimpleText = lcl_GetSimpleText(mxShapeAgg); + if ( xAggSimpleText.is() ) + xAggSimpleText->insertControlCharacter( xRange, nControlCharacter, bAbsorb ); + else + throw uno::RuntimeException(); +} + +// XTextRange +// (parent of XSimpleText) + +uno::Reference<text::XText> SAL_CALL ScShapeObj::getText() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return this; +} + +uno::Reference<text::XTextRange> SAL_CALL ScShapeObj::getStart() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<text::XTextRange> xAggTextRange = lcl_GetTextRange(mxShapeAgg); + if ( xAggTextRange.is() ) + return xAggTextRange->getStart(); + else + throw uno::RuntimeException(); + + return uno::Reference<text::XTextRange>(); +} + +uno::Reference<text::XTextRange> SAL_CALL ScShapeObj::getEnd() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<text::XTextRange> xAggTextRange = lcl_GetTextRange(mxShapeAgg); + if ( xAggTextRange.is() ) + return xAggTextRange->getEnd(); + else + throw uno::RuntimeException(); + + return uno::Reference<text::XTextRange>(); +} + +::rtl::OUString SAL_CALL ScShapeObj::getString() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<text::XTextRange> xAggTextRange = lcl_GetTextRange(mxShapeAgg); + if ( xAggTextRange.is() ) + return xAggTextRange->getString(); + else + throw uno::RuntimeException(); + + return ::rtl::OUString(); +} + +void SAL_CALL ScShapeObj::setString( const ::rtl::OUString& aText ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + uno::Reference<text::XTextRange> xAggTextRange = lcl_GetTextRange(mxShapeAgg); + if ( xAggTextRange.is() ) + xAggTextRange->setString( aText ); + else + throw uno::RuntimeException(); +} + +// XTypeProvider + +uno::Sequence<uno::Type> SAL_CALL ScShapeObj::getTypes() throw(uno::RuntimeException) +{ + uno::Sequence< uno::Type > aTypeSequence; + + uno::Reference<lang::XTypeProvider> xBaseProvider; + if ( mxShapeAgg.is() ) + mxShapeAgg->queryAggregation( getCppuType((uno::Reference<lang::XTypeProvider>*) 0) ) >>= xBaseProvider; + + DBG_ASSERT( xBaseProvider.is(), "ScShapeObj: No XTypeProvider from aggregated shape!" ); + if( xBaseProvider.is() ) + { + aTypeSequence = xBaseProvider->getTypes(); + long nBaseLen = aTypeSequence.getLength(); + + aTypeSequence.realloc( nBaseLen + 1 ); + uno::Type* pPtr = aTypeSequence.getArray(); + pPtr[nBaseLen + 0] = getCppuType((const uno::Reference<text::XTextContent>*)0); + } + return aTypeSequence; +} + +uno::Sequence<sal_Int8> SAL_CALL ScShapeObj::getImplementationId() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + // do we need to compute the implementation id for this instance? + if( !pImplementationId && mxShapeAgg.is()) + { + uno::Reference< drawing::XShape > xAggShape; + mxShapeAgg->queryAggregation( ::getCppuType((uno::Reference< drawing::XShape >*)0) ) >>= xAggShape; + + if( xAggShape.is() ) + { + const ::rtl::OUString aShapeType( xAggShape->getShapeType() ); + // did we already compute an implementation id for the agregated shape type? + ScShapeImplementationIdMap::iterator aIter( aImplementationIdMap.find(aShapeType ) ); + if( aIter == aImplementationIdMap.end() ) + { + // we need to create a new implementation id for this + // note: this memory is not free'd until application exists + // but since we have a fixed set of shapetypes and the + // memory will be reused this is ok. + pImplementationId = new uno::Sequence< sal_Int8 >( 16 ); + rtl_createUuid( (sal_uInt8 *) pImplementationId->getArray(), 0, sal_True ); + aImplementationIdMap[ aShapeType ] = pImplementationId; + } + else + { + // use the already computed implementation id + pImplementationId = (*aIter).second; + } + } + } + if( NULL == pImplementationId ) + { + DBG_ERROR( "Could not create an implementation id for a ScXShape!" ); + return uno::Sequence< sal_Int8 > (); + } + else + { + return *pImplementationId; + } +} + +SdrObject* ScShapeObj::GetSdrObject() const throw() +{ + if(mxShapeAgg.is()) + { + SvxShape* pShape = SvxShape::getImplementation( mxShapeAgg ); + if(pShape) + return pShape->GetSdrObject(); + } + + return NULL; +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_styleuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_styleuno.cxx new file mode 100644 index 000000000000..fff6fd805154 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_styleuno.cxx @@ -0,0 +1,1921 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "scitems.hxx" +#include <bf_svx/algitem.hxx> +#include <bf_svx/langitem.hxx> +#include <bf_svx/numitem.hxx> +#include <bf_svx/pageitem.hxx> +#include <bf_svx/pbinitem.hxx> +#include <bf_svx/unonrule.hxx> +#include <bf_sfx2/printer.hxx> +#include <vcl/virdev.hxx> +#include <bf_svtools/itempool.hxx> +#include <bf_svtools/zformat.hxx> +#include <rtl/uuid.h> + +#include <com/sun/star/table/CellVertJustify.hpp> +#include <com/sun/star/table/TableBorder.hpp> +#include <com/sun/star/table/ShadowFormat.hpp> +#include <com/sun/star/table/CellHoriJustify.hpp> +#include <com/sun/star/table/CellOrientation.hpp> +#include <com/sun/star/style/PageStyleLayout.hpp> +#include <com/sun/star/style/GraphicLocation.hpp> +#include <com/sun/star/sheet/XHeaderFooterContent.hpp> +#include <com/sun/star/util/CellProtection.hpp> +#include <com/sun/star/awt/FontSlant.hpp> +#include <com/sun/star/awt/Size.hpp> +#include <com/sun/star/beans/PropertyAttribute.hpp> + +#include "styleuno.hxx" +#include "docsh.hxx" +#include "attrib.hxx" +#include "stlpool.hxx" +#include <vcl/svapp.hxx> +#include "miscuno.hxx" +#include "tablink.hxx" +#include "unonames.hxx" +#include "unowids.hxx" +#include "globstr.hrc" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +const SfxItemPropertyMap* lcl_GetCellStyleMap() +{ + static SfxItemPropertyMap aCellStyleMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &::getCppuType((const util::CellProtection*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&::getBooleanCppuType(), 0, MID_CROSSED_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, + {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &::getCppuType((const sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, + {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, + {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, + {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((::rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, + {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &::getCppuType((const float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&::getCppuType((const float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&::getCppuType((const float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &::getCppuType((const lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&::getCppuType((const lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&::getCppuType((const lang::Locale*)0), 0, MID_LANG_LOCALE }, + {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &::getCppuType((const awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&::getCppuType((const awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&::getCppuType((const awt::FontSlant*)0), 0, MID_POSTURE }, + {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, + {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&::getCppuType((const sal_Int16*)0), 0, MID_UNDERLINE }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_UL_COLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_UL_HASCOLOR }, + {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &::getCppuType((const float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&::getCppuType((const float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&::getCppuType((const float*)0), 0, MID_WEIGHT }, + {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_DISPNAME), SC_WID_UNO_DISPNAME,&::getCppuType((::rtl::OUString*)0), beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &::getCppuType((const table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, + {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &::getCppuType((const sal_Int32*)0), 0, 0 }, +// {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_ORIENTATION, &::getCppuType((const table::CellOrientation*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &::getCppuType((const sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS + {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, + {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &::getCppuType((const table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &::getCppuType((const table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &::getCppuType((const table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &::getCppuType((const table::CellVertJustify*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, + {0,0,0,0} + }; + return aCellStyleMap_Impl; +} + +// Map mit allen Seitenattributen, incl. Kopf-/Fusszeilenattribute + +const SfxItemPropertyMap* lcl_GetPageStyleMap() +{ + static SfxItemPropertyMap aPageStyleMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNO_PAGE_BACKCOLOR), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNO_PAGE_GRAPHICFILT), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_FILTER }, + {MAP_CHAR_LEN(SC_UNO_PAGE_GRAPHICLOC), ATTR_BACKGROUND, &::getCppuType((const style::GraphicLocation*)0), 0, MID_GRAPHIC_POSITION }, + {MAP_CHAR_LEN(SC_UNO_PAGE_GRAPHICURL), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_URL }, + {MAP_CHAR_LEN(SC_UNO_PAGE_BACKTRANS), ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_BACKCOLOR), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNO_PAGE_BORDERDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_BOTTBORDER), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_BOTTBRDDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BOTTOM_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_BOTTMARGIN), ATTR_ULSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_LO_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_CENTERHOR), ATTR_PAGE_HORCENTER,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_CENTERVER), ATTR_PAGE_VERCENTER,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_DISPNAME), SC_WID_UNO_DISPNAME,&::getCppuType((::rtl::OUString*)0), beans::PropertyAttribute::READONLY, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FIRSTPAGE), ATTR_PAGE_FIRSTPAGENO,&::getCppuType((const sal_Int16*)0), 0, 0 }, +// + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKCOL), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFFILT), SC_WID_UNO_FOOTERSET,&::getCppuType((const ::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFLOC), SC_WID_UNO_FOOTERSET,&::getCppuType((const style::GraphicLocation*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFURL), SC_WID_UNO_FOOTERSET,&::getCppuType((const ::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKTRAN), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKCOL), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBODYDIST), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBRDDIST), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBOR), SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBDIS), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRDYNAMIC), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRHEIGHT), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRDYNAMIC), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRON), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHARED), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBOR), SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBDIS), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTMAR), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRON), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBOR), SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBDIS),SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTMAR), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHADOW), SC_WID_UNO_FOOTERSET,&::getCppuType((const table::ShadowFormat*)0), 0, 0 }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRSHARED), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBOR), SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBDIS), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, +// + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKCOL), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFFILT), SC_WID_UNO_HEADERSET,&::getCppuType((const ::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFLOC), SC_WID_UNO_HEADERSET,&::getCppuType((const style::GraphicLocation*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFURL), SC_WID_UNO_HEADERSET,&::getCppuType((const ::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKTRAN), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKCOL), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBODYDIST), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBRDDIST), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBOR), SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBDIS), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRDYNAMIC), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRHEIGHT), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRDYNAMIC), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRON), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHARED), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBOR), SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBDIS), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTMAR), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRON), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBOR), SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBDIS),SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTMAR), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHADOW), SC_WID_UNO_HEADERSET,&::getCppuType((const table::ShadowFormat*)0), 0, 0 }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRSHARED), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBOR), SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBDIS), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 }, +// + {MAP_CHAR_LEN(SC_UNO_PAGE_HEIGHT), ATTR_PAGE_SIZE, &::getCppuType((const sal_Int32*)0), 0, MID_SIZE_HEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_BACKTRANS), ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {MAP_CHAR_LEN(SC_UNO_PAGE_LANDSCAPE), ATTR_PAGE, &::getBooleanCppuType(), 0, MID_PAGE_ORIENTATION }, + {MAP_CHAR_LEN(SC_UNO_PAGE_LEFTBORDER), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_LEFTBRDDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, LEFT_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_LEFTMARGIN), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_L_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_LEFTFTRCONT), ATTR_PAGE_FOOTERLEFT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_LEFTHDRCONT), ATTR_PAGE_HEADERLEFT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_NUMBERTYPE), ATTR_PAGE, &::getCppuType((const sal_Int16*)0), 0, MID_PAGE_NUMTYPE }, + {MAP_CHAR_LEN(SC_UNO_PAGE_SCALEVAL), ATTR_PAGE_SCALE, &::getCppuType((const sal_Int16*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_SYTLELAYOUT), ATTR_PAGE, &::getCppuType((const style::PageStyleLayout*)0), 0, MID_PAGE_LAYOUT }, + {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTANNOT), ATTR_PAGE_NOTES, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTCHARTS), ATTR_PAGE_CHARTS, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTDOWN), ATTR_PAGE_TOPDOWN, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTDRAW), ATTR_PAGE_DRAWINGS, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTFORMUL), ATTR_PAGE_FORMULAS, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTGRID), ATTR_PAGE_GRID, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTHEADER), ATTR_PAGE_HEADERS, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTOBJS), ATTR_PAGE_OBJECTS, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTZERO), ATTR_PAGE_NULLVALS, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_PAPERTRAY), ATTR_PAGE_PAPERBIN, &::getCppuType((const ::rtl::OUString*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTBORDER), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTBRDDIST),ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, RIGHT_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTMARGIN), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_R_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTFTRCON), ATTR_PAGE_FOOTERRIGHT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTHDRCON), ATTR_PAGE_HEADERRIGHT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_SCALETOPAG), ATTR_PAGE_SCALETOPAGES,&::getCppuType((const sal_Int16*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_SHADOWFORM), ATTR_SHADOW, &::getCppuType((const table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_SIZE), ATTR_PAGE_SIZE, &::getCppuType((const awt::Size*)0), 0, MID_SIZE_SIZE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_TOPBORDER), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_TOPBRDDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, TOP_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_TOPMARGIN), ATTR_ULSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_UP_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKTRAN),SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKTRAN),SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_WIDTH), ATTR_PAGE_SIZE, &::getCppuType((const sal_Int32*)0), 0, MID_SIZE_WIDTH | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, + {0,0,0,0} + }; + return aPageStyleMap_Impl; +} + +// Map mit Inhalten des Header-Item-Sets + +const SfxItemPropertyMap* lcl_GetHeaderStyleMap() +{ + static SfxItemPropertyMap aHeaderStyleMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKCOL), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFFILT), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_FILTER }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFLOC), ATTR_BACKGROUND, &::getCppuType((const style::GraphicLocation*)0), 0, MID_GRAPHIC_POSITION }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFURL), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_URL }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKTRAN), ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKCOL), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBODYDIST), ATTR_ULSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_LO_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBRDDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BOTTOM_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRDYNAMIC), ATTR_PAGE_DYNAMIC, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRHEIGHT), ATTR_PAGE_SIZE, &::getCppuType((const sal_Int32*)0), 0, MID_SIZE_HEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRDYNAMIC), ATTR_PAGE_DYNAMIC, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRON), ATTR_PAGE_ON, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHARED), ATTR_PAGE_SHARED, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, LEFT_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTMAR), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_L_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRON), ATTR_PAGE_ON, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBDIS),ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, RIGHT_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTMAR), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_R_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHADOW), ATTR_SHADOW, &::getCppuType((const table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRSHARED), ATTR_PAGE_SHARED, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, TOP_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKTRAN),ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {0,0,0,0} + }; + return aHeaderStyleMap_Impl; +} + +// Map mit Inhalten des Footer-Item-Sets + +const SfxItemPropertyMap* lcl_GetFooterStyleMap() +{ + static SfxItemPropertyMap aFooterStyleMap_Impl[] = + { + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKCOL), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFFILT), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_FILTER }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFLOC), ATTR_BACKGROUND, &::getCppuType((const style::GraphicLocation*)0), 0, MID_GRAPHIC_POSITION }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFURL), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_URL }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKTRAN), ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKCOL), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBODYDIST), ATTR_ULSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_UP_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBRDDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BOTTOM_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRDYNAMIC), ATTR_PAGE_DYNAMIC, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRHEIGHT), ATTR_PAGE_SIZE, &::getCppuType((const sal_Int32*)0), 0, MID_SIZE_HEIGHT | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRDYNAMIC), ATTR_PAGE_DYNAMIC, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRON), ATTR_PAGE_ON, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHARED), ATTR_PAGE_SHARED, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, LEFT_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTMAR), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_L_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRON), ATTR_PAGE_ON, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBDIS),ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, RIGHT_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTMAR), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_R_MARGIN | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHADOW), ATTR_SHADOW, &::getCppuType((const table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRSHARED), ATTR_PAGE_SHARED, &::getBooleanCppuType(), 0, 0 }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, + {MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, TOP_BORDER_DISTANCE | CONVERT_TWIPS }, + {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKTRAN),ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, + {0,0,0,0} + }; + return aFooterStyleMap_Impl; +} + + +//------------------------------------------------------------------------ + +// Index-Access auf die Style-Typen: 0 = Cell, 1 = Page + +#define SC_STYLE_FAMILY_COUNT 2 + +#define SC_FAMILYNAME_CELL "CellStyles" +#define SC_FAMILYNAME_PAGE "PageStyles" + +static UINT16 aStyleFamilyTypes[SC_STYLE_FAMILY_COUNT] = { SFX_STYLE_FAMILY_PARA, SFX_STYLE_FAMILY_PAGE }; + +//------------------------------------------------------------------------ + +//! diese Funktionen in einen allgemeinen Header verschieben +inline long TwipsToHMM(long nTwips) { return (nTwips * 127 + 36) / 72; } +inline long HMMToTwips(long nHMM) { return (nHMM * 72 + 63) / 127; } + +//------------------------------------------------------------------------ + +#define SCSTYLE_SERVICE "com.sun.star.style.Style" +#define SCCELLSTYLE_SERVICE "com.sun.star.style.CellStyle" +#define SCPAGESTYLE_SERVICE "com.sun.star.style.PageStyle" + +SC_SIMPLE_SERVICE_INFO( ScStyleFamiliesObj, "ScStyleFamiliesObj", "com.sun.star.style.StyleFamilies" ) +SC_SIMPLE_SERVICE_INFO( ScStyleFamilyObj, "ScStyleFamilyObj", "com.sun.star.style.StyleFamily" ) + +//------------------------------------------------------------------------ + +#define SC_PAPERBIN_DEFAULTNAME "[From printer settings]" + +//------------------------------------------------------------------------ + +// conversion programmatic <-> display (visible) name +// currently, the core always has the visible names +// the api is required to use programmatic names for default styles +// these programmatic names must never change! + +#define SC_STYLE_PROG_STANDARD "Default" +#define SC_STYLE_PROG_RESULT "Result" +#define SC_STYLE_PROG_RESULT1 "Result2" +#define SC_STYLE_PROG_HEADLINE "Heading" +#define SC_STYLE_PROG_HEADLINE1 "Heading1" +#define SC_STYLE_PROG_REPORT "Report" + +struct ScDisplayNameMap +{ + String aDispName; + String aProgName; +}; + +const ScDisplayNameMap* lcl_GetStyleNameMap( UINT16 nType ) +{ + if ( nType == SFX_STYLE_FAMILY_PARA ) + { + static BOOL bCellMapFilled = FALSE; + static ScDisplayNameMap aCellMap[6]; + if ( !bCellMapFilled ) + { + aCellMap[0].aDispName = ScGlobal::GetRscString( STR_STYLENAME_STANDARD ); + aCellMap[0].aProgName = String::CreateFromAscii( SC_STYLE_PROG_STANDARD ); + + aCellMap[1].aDispName = ScGlobal::GetRscString( STR_STYLENAME_RESULT ); + aCellMap[1].aProgName = String::CreateFromAscii( SC_STYLE_PROG_RESULT ); + + aCellMap[2].aDispName = ScGlobal::GetRscString( STR_STYLENAME_RESULT1 ); + aCellMap[2].aProgName = String::CreateFromAscii( SC_STYLE_PROG_RESULT1 ); + + aCellMap[3].aDispName = ScGlobal::GetRscString( STR_STYLENAME_HEADLINE ); + aCellMap[3].aProgName = String::CreateFromAscii( SC_STYLE_PROG_HEADLINE ); + + aCellMap[4].aDispName = ScGlobal::GetRscString( STR_STYLENAME_HEADLINE1 ); + aCellMap[4].aProgName = String::CreateFromAscii( SC_STYLE_PROG_HEADLINE1 ); + + // last entry remains empty + + bCellMapFilled = TRUE; + } + return aCellMap; + } + else if ( nType == SFX_STYLE_FAMILY_PAGE ) + { + static BOOL bPageMapFilled = FALSE; + static ScDisplayNameMap aPageMap[3]; + if ( !bPageMapFilled ) + { + aPageMap[0].aDispName = ScGlobal::GetRscString( STR_STYLENAME_STANDARD ); + aPageMap[0].aProgName = String::CreateFromAscii( SC_STYLE_PROG_STANDARD ); + + aPageMap[1].aDispName = ScGlobal::GetRscString( STR_STYLENAME_REPORT ); + aPageMap[1].aProgName = String::CreateFromAscii( SC_STYLE_PROG_REPORT ); + + // last entry remains empty + + bPageMapFilled = TRUE; + } + return aPageMap; + } + DBG_ERROR("invalid family"); + return NULL; +} + +// programmatic name suffix for display names that match other programmatic names +// is " (user)" including a space + +#define SC_SUFFIX_USER " (user)" +#define SC_SUFFIX_USER_LEN 7 + +BOOL lcl_EndsWithUser( const String& rString ) +{ + const sal_Unicode *pChar = rString.GetBuffer(); + xub_StrLen nLen = rString.Len(); + return nLen >= SC_SUFFIX_USER_LEN && + pChar[nLen-7] == ' ' && + pChar[nLen-6] == '(' && + pChar[nLen-5] == 'u' && + pChar[nLen-4] == 's' && + pChar[nLen-3] == 'e' && + pChar[nLen-2] == 'r' && + pChar[nLen-1] == ')'; +} + +// static +String ScStyleNameConversion::DisplayToProgrammaticName( const String& rDispName, UINT16 nType ) +{ + BOOL bDisplayIsProgrammatic = FALSE; + + const ScDisplayNameMap* pNames = lcl_GetStyleNameMap( nType ); + if (pNames) + { + do + { + if (pNames->aDispName == rDispName) + return pNames->aProgName; + else if (pNames->aProgName == rDispName) + bDisplayIsProgrammatic = TRUE; // display name matches any programmatic name + } + while( (++pNames)->aDispName.Len() ); + } + + if ( bDisplayIsProgrammatic || lcl_EndsWithUser( rDispName ) ) + { + // add the (user) suffix if the display name matches any style's programmatic name + // or if it already contains the suffix + + String aRet = rDispName; + aRet.AppendAscii( RTL_CONSTASCII_STRINGPARAM( SC_SUFFIX_USER ) ); + return aRet; + } + + return rDispName; +} + +// static +String ScStyleNameConversion::ProgrammaticToDisplayName( const String& rProgName, UINT16 nType ) +{ + if ( lcl_EndsWithUser( rProgName ) ) + { + // remove the (user) suffix, don't compare to map entries + return rProgName.Copy( 0, rProgName.Len() - SC_SUFFIX_USER_LEN ); + } + + const ScDisplayNameMap* pNames = lcl_GetStyleNameMap( nType ); + if (pNames) + { + do + { + if (pNames->aProgName == rProgName) + return pNames->aDispName; + } + while( (++pNames)->aDispName.Len() ); + } + return rProgName; +} + +//------------------------------------------------------------------------ + +sal_Bool lcl_AnyTabProtected( ScDocument& rDoc ) +{ + USHORT nTabCount = rDoc.GetTableCount(); + for (USHORT i=0; i<nTabCount; i++) + if (rDoc.IsTabProtected(i)) + return sal_True; + return sal_False; +} + +//------------------------------------------------------------------------ + +ScStyleFamiliesObj::ScStyleFamiliesObj(ScDocShell* pDocSh) : + pDocShell( pDocSh ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScStyleFamiliesObj::~ScStyleFamiliesObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScStyleFamiliesObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XStyleFamilies + +ScStyleFamilyObj*ScStyleFamiliesObj::GetObjectByType_Impl(UINT16 Type) const +{ + if ( pDocShell ) + { + if ( Type == SFX_STYLE_FAMILY_PARA ) + return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PARA ); + else if ( Type == SFX_STYLE_FAMILY_PAGE ) + return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PAGE ); + } + DBG_ERROR("getStyleFamilyByType: keine DocShell oder falscher Typ"); + return NULL; +} + +ScStyleFamilyObj* ScStyleFamiliesObj::GetObjectByIndex_Impl(UINT32 nIndex) const +{ + if ( nIndex < SC_STYLE_FAMILY_COUNT ) + return GetObjectByType_Impl(aStyleFamilyTypes[nIndex]); + + return NULL; // ungueltiger Index +} + +ScStyleFamilyObj* ScStyleFamiliesObj::GetObjectByName_Impl(const ::rtl::OUString& aName) const +{ + if ( pDocShell ) + { + String aNameStr( aName ); + if ( aNameStr.EqualsAscii( SC_FAMILYNAME_CELL ) ) + return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PARA ); + else if ( aNameStr.EqualsAscii( SC_FAMILYNAME_PAGE ) ) + return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PAGE ); + } + // no assertion - called directly from getByName + return NULL; +} + +// container::XIndexAccess + +sal_Int32 SAL_CALL ScStyleFamiliesObj::getCount() throw(uno::RuntimeException) +{ + return SC_STYLE_FAMILY_COUNT; +} + +uno::Any SAL_CALL ScStyleFamiliesObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference< container::XNameContainer > xFamily = GetObjectByIndex_Impl(nIndex); + uno::Any aAny; + if (xFamily.is()) + aAny <<= xFamily; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScStyleFamiliesObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ::getCppuType((const uno::Reference< container::XNameContainer >*)0); // muss zu getByIndex passen +} + +sal_Bool SAL_CALL ScStyleFamiliesObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +// container::XNameAccess + +uno::Any SAL_CALL ScStyleFamiliesObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference< container::XNameContainer > xFamily = GetObjectByName_Impl(aName); + uno::Any aAny; + if (xFamily.is()) + aAny <<= xFamily; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScStyleFamiliesObj::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Sequence< ::rtl::OUString> aNames(SC_STYLE_FAMILY_COUNT); + ::rtl::OUString* pNames = aNames.getArray(); + pNames[0] = ::rtl::OUString::createFromAscii( SC_FAMILYNAME_CELL ); + pNames[1] = ::rtl::OUString::createFromAscii( SC_FAMILYNAME_PAGE ); + return aNames; +} + +sal_Bool SAL_CALL ScStyleFamiliesObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aNameStr( aName ); + return ( aNameStr.EqualsAscii( SC_FAMILYNAME_CELL ) || aNameStr.EqualsAscii( SC_FAMILYNAME_PAGE ) ); +} + +// style::XStyleLoader + +void SAL_CALL ScStyleFamiliesObj::loadStylesFromURL( const ::rtl::OUString& aURL, + const uno::Sequence<beans::PropertyValue>& aOptions ) + throw(io::IOException, uno::RuntimeException) +{ + //! use aOptions (like Writer) + //! set flag to disable filter option dialogs when importing + + String aFilter; // empty - detect + String aFiltOpt; + ScDocumentLoader aLoader( aURL, aFilter, aFiltOpt ); + + ScDocShell* pSource = aLoader.GetDocShell(); + if ( pSource && pDocShell ) + { + // collect options + + BOOL bLoadReplace = TRUE; // defaults + BOOL bLoadCellStyles = TRUE; + BOOL bLoadPageStyles = TRUE; + + const beans::PropertyValue* pPropArray = aOptions.getConstArray(); + long nPropCount = aOptions.getLength(); + for (long i = 0; i < nPropCount; i++) + { + const beans::PropertyValue& rProp = pPropArray[i]; + String aPropName = rProp.Name; + + if (aPropName.EqualsAscii( SC_UNONAME_OVERWSTL )) + bLoadReplace = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value ); + else if (aPropName.EqualsAscii( SC_UNONAME_LOADCELL )) + bLoadCellStyles = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value ); + else if (aPropName.EqualsAscii( SC_UNONAME_LOADPAGE )) + bLoadPageStyles = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value ); + } + + pDocShell->LoadStylesArgs( *pSource, bLoadReplace, bLoadCellStyles, bLoadPageStyles ); + pDocShell->SetDocumentModified(); // paint is inside LoadStyles + } +} + +uno::Sequence<beans::PropertyValue> SAL_CALL ScStyleFamiliesObj::getStyleLoaderOptions() + throw(uno::RuntimeException) +{ + // return defaults for options (?) + + uno::Sequence<beans::PropertyValue> aSequence(3); + beans::PropertyValue* pArray = aSequence.getArray(); + + pArray[0].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_OVERWSTL ); + ScUnoHelpFunctions::SetBoolInAny( pArray[0].Value, TRUE ); + + pArray[1].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_LOADCELL ); + ScUnoHelpFunctions::SetBoolInAny( pArray[1].Value, TRUE ); + + pArray[2].Name = ::rtl::OUString::createFromAscii( SC_UNONAME_LOADPAGE ); + ScUnoHelpFunctions::SetBoolInAny( pArray[2].Value, TRUE ); + + return aSequence; +} + +//------------------------------------------------------------------------ + +ScStyleFamilyObj::ScStyleFamilyObj(ScDocShell* pDocSh, SfxStyleFamily eFam) : + pDocShell( pDocSh ), + eFamily( eFam ) +{ + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScStyleFamilyObj::~ScStyleFamilyObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +void ScStyleFamilyObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +// XStyleFamily + +ScStyleObj* ScStyleFamilyObj::GetObjectByIndex_Impl(UINT32 nIndex) +{ + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); + + SfxStyleSheetIterator aIter( pStylePool, eFamily ); + if ( nIndex < aIter.Count() ) + { + SfxStyleSheetBase* pStyle = aIter[(USHORT)nIndex]; + if ( pStyle ) + { + String aName = pStyle->GetName(); + return new ScStyleObj( pDocShell, eFamily, aName ); + } + } + } + return NULL; +} + +ScStyleObj* ScStyleFamilyObj::GetObjectByName_Impl(const ::rtl::OUString& aName) +{ + if ( pDocShell ) + { + String aString = aName; + + ScDocument* pDoc = pDocShell->GetDocument(); + ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); + if ( pStylePool->Find( aString, eFamily ) ) + return new ScStyleObj( pDocShell, eFamily, aString ); + } + return NULL; +} + +void SAL_CALL ScStyleFamilyObj::insertByName( const ::rtl::OUString& aName, const uno::Any& aElement ) + throw(lang::IllegalArgumentException, container::ElementExistException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + sal_Bool bDone = sal_False; + // Reflection muss nicht uno::XInterface sein, kann auch irgendein Interface sein... + uno::Reference< uno::XInterface > xInterface; + if ( aElement >>= xInterface ) + { + ScStyleObj* pStyleObj = ScStyleObj::getImplementation( xInterface ); + if ( pStyleObj && pStyleObj->GetFamily() == eFamily && + !pStyleObj->IsInserted() ) // noch nicht eingefuegt? + { + String aNameStr = ScStyleNameConversion::ProgrammaticToDisplayName( aName, eFamily ); + + ScDocument* pDoc = pDocShell->GetDocument(); + ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); + + //! DocFunc-Funktion?? + //! Undo ????????????? + + if ( !pStylePool->Find( aNameStr, eFamily ) ) // noch nicht vorhanden + { + SfxStyleSheetBase& rStyle = pStylePool->Make( aNameStr, eFamily, SFXSTYLEBIT_USERDEF ); + + pStyleObj->InitDoc( pDocShell, aNameStr ); // Objekt kann benutzt werden + + pDocShell->SetDocumentModified(); // verwendet wird der neue Style noch nicht + bDone = sal_True; + } + else + throw container::ElementExistException(); + } + } + + if (!bDone) + { + // other errors are handled above + throw lang::IllegalArgumentException(); + } +} + +void SAL_CALL ScStyleFamilyObj::replaceByName( const ::rtl::OUString& aName, const uno::Any& aElement ) + throw(lang::IllegalArgumentException, container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + //! zusammenfassen? + removeByName( aName ); + insertByName( aName, aElement ); +} + +void SAL_CALL ScStyleFamilyObj::removeByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + BOOL bFound = FALSE; + if ( pDocShell ) + { + String aString = ScStyleNameConversion::ProgrammaticToDisplayName( aName, eFamily ); + + ScDocument* pDoc = pDocShell->GetDocument(); + ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); + + //! DocFunc-Funktion?? + //! Undo ????????????? + + SfxStyleSheetBase* pStyle = pStylePool->Find( aString, eFamily ); + if (pStyle) + { + bFound = TRUE; + if ( eFamily == SFX_STYLE_FAMILY_PARA ) + { + // wie ScViewFunc::RemoveStyleSheetInUse + VirtualDevice aVDev; + Point aLogic = aVDev.LogicToPixel( Point(1000,1000), MAP_TWIP ); + double nPPTX = aLogic.X() / 1000.0; + double nPPTY = aLogic.Y() / 1000.0; + Fraction aZoom(1,1); + pDoc->StyleSheetChanged( pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom ); + pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT ); + pDocShell->SetDocumentModified(); + + pStylePool->Erase( pStyle ); + + } + else + { + if ( pDoc->RemovePageStyleInUse( aString ) ) + pDocShell->PageStyleModified( ScGlobal::GetRscString(STR_STYLENAME_STANDARD), sal_True ); + + pStylePool->Erase( pStyle ); + + pDocShell->SetDocumentModified(); + } + } + } + + if (!bFound) + throw container::NoSuchElementException(); +} + +// container::XIndexAccess + +sal_Int32 SAL_CALL ScStyleFamilyObj::getCount() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); + + SfxStyleSheetIterator aIter( pStylePool, eFamily ); + return aIter.Count(); + } + return 0; +} + +uno::Any SAL_CALL ScStyleFamilyObj::getByIndex( sal_Int32 nIndex ) + throw(lang::IndexOutOfBoundsException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference< style::XStyle > xObj = GetObjectByIndex_Impl(nIndex); + uno::Any aAny; + if (xObj.is()) + aAny <<= xObj; + else + throw lang::IndexOutOfBoundsException(); + return aAny; +} + +uno::Type SAL_CALL ScStyleFamilyObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ::getCppuType((const uno::Reference< style::XStyle >*)0); // muss zu getByIndex passen +} + +sal_Bool SAL_CALL ScStyleFamilyObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return ( getCount() != 0 ); +} + +// container::XNameAccess + +uno::Any SAL_CALL ScStyleFamilyObj::getByName( const ::rtl::OUString& aName ) + throw(container::NoSuchElementException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + uno::Reference< style::XStyle > xObj = + GetObjectByName_Impl( ScStyleNameConversion::ProgrammaticToDisplayName( aName, eFamily ) ); + uno::Any aAny; + if (xObj.is()) + aAny <<= xObj; + else + throw container::NoSuchElementException(); + return aAny; +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScStyleFamilyObj::getElementNames() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); + + SfxStyleSheetIterator aIter( pStylePool, eFamily ); + UINT16 nCount = aIter.Count(); + + String aName; + uno::Sequence< ::rtl::OUString> aSeq(nCount); + ::rtl::OUString* pAry = aSeq.getArray(); + SfxStyleSheetBase* pStyle = aIter.First(); + UINT16 nPos = 0; + while (pStyle) + { + DBG_ASSERT( nPos<nCount, "Anzahl durcheinandergekommen" ); + if (nPos<nCount) + pAry[nPos++] = ScStyleNameConversion::DisplayToProgrammaticName( + pStyle->GetName(), eFamily ); + pStyle = aIter.Next(); + } + return aSeq; + } + return uno::Sequence< ::rtl::OUString>(); +} + +sal_Bool SAL_CALL ScStyleFamilyObj::hasByName( const ::rtl::OUString& aName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( pDocShell ) + { + String aString = ScStyleNameConversion::ProgrammaticToDisplayName( aName, eFamily ); + + ScDocument* pDoc = pDocShell->GetDocument(); + ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); + if ( pStylePool->Find( aString, eFamily ) ) + return sal_True; + } + return sal_False; +} + +//------------------------------------------------------------------------ + +ScStyleObj::ScStyleObj(ScDocShell* pDocSh, SfxStyleFamily eFam, const String& rName) : + pDocShell( pDocSh ), + eFamily( eFam ), + aStyleName( rName ), + aPropSet( (eFam == SFX_STYLE_FAMILY_PARA) ? lcl_GetCellStyleMap() : lcl_GetPageStyleMap() ) +{ + // pDocShell ist Null, wenn per ServiceProvider erzeugt + + if (pDocShell) + pDocShell->GetDocument()->AddUnoObject(*this); +} + +void ScStyleObj::InitDoc( ScDocShell* pNewDocSh, const String& rNewName ) +{ + if ( pNewDocSh && !pDocShell ) + { + aStyleName = rNewName; + pDocShell = pNewDocSh; + pDocShell->GetDocument()->AddUnoObject(*this); + } +} + +ScStyleObj::~ScStyleObj() +{ + if (pDocShell) + pDocShell->GetDocument()->RemoveUnoObject(*this); +} + +// XUnoTunnel + +sal_Int64 SAL_CALL ScStyleObj::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return 0; +} + +// static +const uno::Sequence<sal_Int8>& ScStyleObj::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScStyleObj* ScStyleObj::getImplementation( + const uno::Reference<uno::XInterface> xObj ) +{ + ScStyleObj* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScStyleObj*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +void ScStyleObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + // Referenz-Update interessiert hier nicht + + if ( rHint.ISA( SfxSimpleHint ) && + ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) + { + pDocShell = NULL; // ungueltig geworden + } +} + +SfxStyleSheetBase* ScStyleObj::GetStyle_Impl() +{ + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); + return pStylePool->Find( aStyleName, eFamily ); + } + return NULL; +} + +// style::XStyle + +sal_Bool SAL_CALL ScStyleObj::isUserDefined() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SfxStyleSheetBase* pStyle = GetStyle_Impl(); + if (pStyle) + return pStyle->IsUserDefined(); + return sal_False; +} + +sal_Bool SAL_CALL ScStyleObj::isInUse() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SfxStyleSheetBase* pStyle = GetStyle_Impl(); + if (pStyle) + return pStyle->IsUsed(); + return sal_False; +} + +::rtl::OUString SAL_CALL ScStyleObj::getParentStyle() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SfxStyleSheetBase* pStyle = GetStyle_Impl(); + if (pStyle) + return ScStyleNameConversion::DisplayToProgrammaticName( pStyle->GetParent(), eFamily ); + return ::rtl::OUString(); +} + +void SAL_CALL ScStyleObj::setParentStyle( const ::rtl::OUString& rParentStyle ) + throw(container::NoSuchElementException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SfxStyleSheetBase* pStyle = GetStyle_Impl(); + if (pStyle) + { + // #70909# cell styles cannot be modified if any sheet is protected + if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) ) + return; //! exception? + + //! DocFunc-Funktion?? + //! Undo ????????????? + + String aString = ScStyleNameConversion::ProgrammaticToDisplayName( rParentStyle, eFamily ); + sal_Bool bOk = pStyle->SetParent( aString ); + if (bOk) + { + // wie bei setPropertyValue + + ScDocument* pDoc = pDocShell->GetDocument(); + if ( eFamily == SFX_STYLE_FAMILY_PARA ) + { + // Zeilenhoehen anpassen... + + VirtualDevice aVDev; + Point aLogic = aVDev.LogicToPixel( Point(1000,1000), MAP_TWIP ); + double nPPTX = aLogic.X() / 1000.0; + double nPPTY = aLogic.Y() / 1000.0; + Fraction aZoom(1,1); + pDoc->StyleSheetChanged( pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom ); + + pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT ); + pDocShell->SetDocumentModified(); + } + else + { + //! ModifyStyleSheet am Dokument (alte Werte merken) + + pDocShell->PageStyleModified( aStyleName, sal_True ); + } + } + } +} + +// container::XNamed + +::rtl::OUString SAL_CALL ScStyleObj::getName() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SfxStyleSheetBase* pStyle = GetStyle_Impl(); + if (pStyle) + return ScStyleNameConversion::DisplayToProgrammaticName( pStyle->GetName(), eFamily ); + return ::rtl::OUString(); +} + +void SAL_CALL ScStyleObj::setName( const ::rtl::OUString& aNewName ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + SfxStyleSheetBase* pStyle = GetStyle_Impl(); + if (pStyle) + { + // #71225# cell styles cannot be renamed if any sheet is protected + if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) ) + return; //! exception? + + //! DocFunc-Funktion?? + //! Undo ????????????? + + String aString = aNewName; + sal_Bool bOk = pStyle->SetName( aString ); + if (bOk) + { + aStyleName = aString; //! notify other objects for this style? + + // Zellvorlagen = 2, Seitenvorlagen = 4 + UINT16 nId = ( eFamily == SFX_STYLE_FAMILY_PARA ) ? + SID_STYLE_FAMILY2 : SID_STYLE_FAMILY4; + } + } +} + +// static +uno::Reference<container::XIndexReplace> ScStyleObj::CreateEmptyNumberingRules() +{ + SvxNumRule aRule( 0, 0, TRUE ); // nothing supported + return SvxCreateNumRule( &aRule ); +} + +// beans::XPropertyState + +const SfxItemSet* ScStyleObj::GetStyleItemSet_Impl( const String& rPropName, + const SfxItemPropertyMap*& rpResultEntry ) +{ + //! OUString as argument? + + SfxStyleSheetBase* pStyle = GetStyle_Impl(); + if (pStyle) + { + const SfxItemPropertyMap* pMap = NULL; + if ( eFamily == SFX_STYLE_FAMILY_PAGE ) + { + pMap = SfxItemPropertyMap::GetByName( lcl_GetHeaderStyleMap(), rPropName ); + if ( pMap ) // only item-wids in header/footer map + { + rpResultEntry = pMap; + return &((const SvxSetItem&)pStyle->GetItemSet().Get(ATTR_PAGE_HEADERSET)).GetItemSet(); + } + pMap = SfxItemPropertyMap::GetByName( lcl_GetFooterStyleMap(), rPropName ); + if ( pMap ) // only item-wids in header/footer map + { + rpResultEntry = pMap; + return &((const SvxSetItem&)pStyle->GetItemSet().Get(ATTR_PAGE_FOOTERSET)).GetItemSet(); + } + } + pMap = SfxItemPropertyMap::GetByName( aPropSet.getPropertyMap(), rPropName ); + if ( pMap && IsScItemWid( pMap->nWID ) ) + { + rpResultEntry = pMap; + return &pStyle->GetItemSet(); + } + } + + rpResultEntry = NULL; + return NULL; +} + +beans::PropertyState SAL_CALL ScStyleObj::getPropertyState( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + beans::PropertyState eRet = beans::PropertyState_DIRECT_VALUE; + String aString = aPropertyName; + + const SfxItemPropertyMap* pResultEntry = NULL; + const SfxItemSet* pItemSet = GetStyleItemSet_Impl( aString, pResultEntry ); + + if ( pItemSet && pResultEntry ) + { + USHORT nWhich = pResultEntry->nWID; + SfxItemState eState = pItemSet->GetItemState( nWhich, sal_False ); + + // if no rotate value is set, look at orientation + //! also for a fixed value of 0 (in case orientation is ambiguous)? + if ( nWhich == ATTR_ROTATE_VALUE && eState == SFX_ITEM_DEFAULT ) + eState = pItemSet->GetItemState( ATTR_ORIENTATION, sal_False ); + + if ( eState == SFX_ITEM_SET ) + eRet = beans::PropertyState_DIRECT_VALUE; + else if ( eState == SFX_ITEM_DEFAULT ) + eRet = beans::PropertyState_DEFAULT_VALUE; + else if ( eState == SFX_ITEM_DONTCARE ) + eRet = beans::PropertyState_AMBIGUOUS_VALUE; // kann eigentlich nicht sein... + else + DBG_ERROR("unbekannter ItemState"); + } + return eRet; +} + +uno::Sequence<beans::PropertyState> SAL_CALL ScStyleObj::getPropertyStates( + const uno::Sequence< ::rtl::OUString>& aPropertyNames ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + // duemmliche Default-Implementierung: alles einzeln per getPropertyState holen + //! sollte optimiert werden! + + SolarMutexGuard aGuard; + const ::rtl::OUString* pNames = aPropertyNames.getConstArray(); + uno::Sequence<beans::PropertyState> aRet(aPropertyNames.getLength()); + beans::PropertyState* pStates = aRet.getArray(); + for(sal_Int32 i = 0; i < aPropertyNames.getLength(); i++) + pStates[i] = getPropertyState(pNames[i]); + return aRet; +} + +void SAL_CALL ScStyleObj::setPropertyToDefault( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + const SfxItemPropertyMap* pMap = aPropSet.getPropertyMap(); + pMap = SfxItemPropertyMap::GetByName( pMap, aPropertyName ); + if ( !pMap ) + throw beans::UnknownPropertyException(); + + SetOnePropertyValue( pMap, NULL ); +} + +uno::Any SAL_CALL ScStyleObj::getPropertyDefault( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString = aPropertyName; + uno::Any aAny; + + const SfxItemPropertyMap* pResultEntry = NULL; + const SfxItemSet* pStyleSet = GetStyleItemSet_Impl( aString, pResultEntry ); + + if ( pStyleSet && pResultEntry ) + { + USHORT nWhich = pResultEntry->nWID; + + // Default ist Default vom ItemPool, nicht vom Standard-Style, + // damit es zu setPropertyToDefault passt + SfxItemSet aEmptySet( *pStyleSet->GetPool(), pStyleSet->GetRanges() ); + // #65253# Default-Items mit falscher Slot-ID funktionieren im SfxItemPropertySet3 nicht + //! Slot-IDs aendern... + if ( aEmptySet.GetPool()->GetSlotId(nWhich) == nWhich && + aEmptySet.GetItemState(nWhich, sal_False) == SFX_ITEM_DEFAULT ) + { + aEmptySet.Put( aEmptySet.Get( nWhich ) ); + } + const SfxItemSet* pItemSet = &aEmptySet; + + switch ( nWhich ) // fuer Item-Spezial-Behandlungen + { + case ATTR_VALUE_FORMAT: + // default has no language set + aAny <<= sal_Int32( ((const SfxUInt32Item&)pItemSet->Get(nWhich)).GetValue() ); + break; + case ATTR_INDENT: + aAny <<= sal_Int16( TwipsToHMM(((const SfxUInt16Item&) + pItemSet->Get(nWhich)).GetValue()) ); + break; + case ATTR_PAGE_SCALE: + case ATTR_PAGE_SCALETOPAGES: + case ATTR_PAGE_FIRSTPAGENO: + aAny <<= sal_Int16( ((const SfxUInt16Item&)pItemSet->Get(nWhich)).GetValue() ); + break; + case ATTR_PAGE_CHARTS: + case ATTR_PAGE_OBJECTS: + case ATTR_PAGE_DRAWINGS: + //! sal_Bool-MID fuer ScViewObjectModeItem definieren? + aAny <<= sal_Bool( ((const ScViewObjectModeItem&)pItemSet->Get(nWhich)). + GetValue() == VOBJ_MODE_SHOW ); + break; + default: + aAny = aPropSet.getPropertyValue( *pResultEntry, *pItemSet ); + } + } + return aAny; +} + +// XMultiPropertySet + +void SAL_CALL ScStyleObj::setPropertyValues( const uno::Sequence< ::rtl::OUString >& aPropertyNames, + const uno::Sequence< uno::Any >& aValues ) + throw (beans::PropertyVetoException, lang::IllegalArgumentException, + lang::WrappedTargetException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + sal_Int32 nCount = aPropertyNames.getLength(); + if ( aValues.getLength() != nCount ) + throw lang::IllegalArgumentException(); + + if ( nCount ) + { + const ::rtl::OUString* pNames = aPropertyNames.getConstArray(); + const uno::Any* pValues = aValues.getConstArray(); + + const SfxItemPropertyMap* pPropertyMap = aPropSet.getPropertyMap(); + const SfxItemPropertyMap* pMap = pPropertyMap; + for (sal_Int32 i = 0; i < nCount; i++) + { + String aNameString = pNames[i]; + pMap = SfxItemPropertyMap::GetByName( pMap, aNameString ); + SetOnePropertyValue( pMap, &pValues[i] ); + if (!pMap) + pMap = pPropertyMap; + else + pMap++; + } + } +} + +uno::Sequence<uno::Any> SAL_CALL ScStyleObj::getPropertyValues( + const uno::Sequence< ::rtl::OUString >& aPropertyNames ) + throw (uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! optimize + + sal_Int32 nCount = aPropertyNames.getLength(); + uno::Sequence<uno::Any> aSequence( nCount ); + if ( nCount ) + { + uno::Any* pValues = aSequence.getArray(); + for (sal_Int32 i=0; i<nCount; i++) + pValues[i] = getPropertyValue( aPropertyNames[i] ); + } + return aSequence; +} + +void SAL_CALL ScStyleObj::addPropertiesChangeListener( const uno::Sequence< ::rtl::OUString>& aPropertyNames, + const uno::Reference<beans::XPropertiesChangeListener>& xListener ) + throw (uno::RuntimeException) +{ + // no bound properties +} + +void SAL_CALL ScStyleObj::removePropertiesChangeListener( + const uno::Reference<beans::XPropertiesChangeListener>& xListener ) + throw (uno::RuntimeException) +{ + // no bound properties +} + +void SAL_CALL ScStyleObj::firePropertiesChangeEvent( const uno::Sequence< ::rtl::OUString>& aPropertyNames, + const uno::Reference<beans::XPropertiesChangeListener>& xListener ) + throw (uno::RuntimeException) +{ + // no bound properties +} + +// XMultiPropertyStates +// getPropertyStates already defined for XPropertyState + +void SAL_CALL ScStyleObj::setAllPropertiesToDefault() throw (uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + SfxStyleSheetBase* pStyle = GetStyle_Impl(); + if ( pStyle ) + { + // #70909# cell styles cannot be modified if any sheet is protected + if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) ) + throw uno::RuntimeException(); + + SfxItemSet& rSet = pStyle->GetItemSet(); + rSet.ClearItem(); // set all items to default + + //! merge with SetOneProperty + + ScDocument* pDoc = pDocShell->GetDocument(); + if ( eFamily == SFX_STYLE_FAMILY_PARA ) + { + // row heights + + VirtualDevice aVDev; + Point aLogic = aVDev.LogicToPixel( Point(1000,1000), MAP_TWIP ); + double nPPTX = aLogic.X() / 1000.0; + double nPPTY = aLogic.Y() / 1000.0; + Fraction aZoom(1,1); + pDoc->StyleSheetChanged( pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom ); + + pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT ); + pDocShell->SetDocumentModified(); + } + else + { + pDocShell->PageStyleModified( aStyleName, sal_True ); + } + } +} + +void SAL_CALL ScStyleObj::setPropertiesToDefault( const uno::Sequence< ::rtl::OUString>& aPropertyNames ) + throw (beans::UnknownPropertyException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + sal_Int32 nCount = aPropertyNames.getLength(); + if ( nCount ) + { + const ::rtl::OUString* pNames = aPropertyNames.getConstArray(); + + const SfxItemPropertyMap* pPropertyMap = aPropSet.getPropertyMap(); + const SfxItemPropertyMap* pMap = pPropertyMap; + for (sal_Int32 i = 0; i < nCount; i++) + { + String aNameString = pNames[i]; + pMap = SfxItemPropertyMap::GetByName( pMap, aNameString ); + SetOnePropertyValue( pMap, NULL ); + if (!pMap) + pMap = pPropertyMap; + else + pMap++; + } + } +} + +uno::Sequence<uno::Any> SAL_CALL ScStyleObj::getPropertyDefaults( + const uno::Sequence< ::rtl::OUString>& aPropertyNames ) + throw (beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! optimize + + sal_Int32 nCount = aPropertyNames.getLength(); + uno::Sequence<uno::Any> aSequence( nCount ); + if ( nCount ) + { + uno::Any* pValues = aSequence.getArray(); + for (sal_Int32 i=0; i<nCount; i++) + pValues[i] = getPropertyDefault( aPropertyNames[i] ); + } + return aSequence; +} + +// beans::XPropertySet + +uno::Reference<beans::XPropertySetInfo> SAL_CALL ScStyleObj::getPropertySetInfo() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return aPropSet.getPropertySetInfo(); +} + +void SAL_CALL ScStyleObj::setPropertyValue( + const ::rtl::OUString& aPropertyName, const uno::Any& aValue ) + throw(beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + const SfxItemPropertyMap* pMap = aPropSet.getPropertyMap(); + pMap = SfxItemPropertyMap::GetByName( pMap, aPropertyName ); + if ( !pMap ) + throw beans::UnknownPropertyException(); + + SetOnePropertyValue( pMap, &aValue ); +} + +void ScStyleObj::SetOnePropertyValue( const SfxItemPropertyMap* pMap, const uno::Any* pValue ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SfxStyleSheetBase* pStyle = GetStyle_Impl(); + if ( pStyle && pMap ) + { + // #70909# cell styles cannot be modified if any sheet is protected + if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) ) + throw uno::RuntimeException(); + + String aString = String::CreateFromAscii( pMap->pName ); + + SfxItemSet& rSet = pStyle->GetItemSet(); // direkt im lebenden Style aendern... + sal_Bool bDone = sal_False; + if ( eFamily == SFX_STYLE_FAMILY_PAGE ) + { + const SfxItemPropertyMap* pHeaderMap = + SfxItemPropertyMap::GetByName( lcl_GetHeaderStyleMap(), aString ); + if ( pHeaderMap ) // only item-wids in header/footer map + { + SvxSetItem aNewHeader( (const SvxSetItem&)rSet.Get(ATTR_PAGE_HEADERSET) ); + if (pValue) + aPropSet.setPropertyValue( *pHeaderMap, *pValue, aNewHeader.GetItemSet() ); + else + aNewHeader.GetItemSet().ClearItem( pHeaderMap->nWID ); + rSet.Put( aNewHeader ); + bDone = sal_True; + } + else + { + const SfxItemPropertyMap* pFooterMap = + SfxItemPropertyMap::GetByName( lcl_GetFooterStyleMap(), aString ); + if ( pFooterMap ) // only item-wids in header/footer map + { + SvxSetItem aNewFooter( (const SvxSetItem&)rSet.Get(ATTR_PAGE_FOOTERSET) ); + if (pValue) + aPropSet.setPropertyValue( *pFooterMap, *pValue, aNewFooter.GetItemSet() ); + else + aNewFooter.GetItemSet().ClearItem( pFooterMap->nWID ); + rSet.Put( aNewFooter ); + bDone = sal_True; + } + } + } + if (!bDone) + { + const SfxItemPropertyMap* pMap = + SfxItemPropertyMap::GetByName( aPropSet.getPropertyMap(), aString ); + if ( pMap && IsScItemWid( pMap->nWID ) ) + { + if (pValue) + { + switch ( pMap->nWID ) // fuer Item-Spezial-Behandlungen + { + case ATTR_VALUE_FORMAT: + { + // #67847# language for number formats + SvNumberFormatter* pFormatter = + pDocShell->GetDocument()->GetFormatTable(); + UINT32 nOldFormat = ((const SfxUInt32Item&) + rSet.Get( ATTR_VALUE_FORMAT )).GetValue(); + LanguageType eOldLang = ((const SvxLanguageItem&) + rSet.Get( ATTR_LANGUAGE_FORMAT )).GetLanguage(); + nOldFormat = pFormatter-> + GetFormatForLanguageIfBuiltIn( nOldFormat, eOldLang ); + + UINT32 nNewFormat; + *pValue >>= nNewFormat; + rSet.Put( SfxUInt32Item( ATTR_VALUE_FORMAT, nNewFormat ) ); + + const SvNumberformat* pNewEntry = pFormatter->GetEntry( nNewFormat ); + LanguageType eNewLang = + pNewEntry ? pNewEntry->GetLanguage() : LANGUAGE_DONTKNOW; + if ( eNewLang != eOldLang && eNewLang != LANGUAGE_DONTKNOW ) + rSet.Put( SvxLanguageItem( eNewLang, ATTR_LANGUAGE_FORMAT ) ); + + //! keep default state of number format if only language changed? + } + break; + case ATTR_INDENT: + { + sal_Int16 nVal; + *pValue >>= nVal; + rSet.Put( SfxUInt16Item( pMap->nWID, (USHORT)HMMToTwips(nVal) ) ); + } + break; + case ATTR_ROTATE_VALUE: + { + sal_Int32 nRotVal; + if ( *pValue >>= nRotVal ) + { + // stored value is always between 0 and 360 deg. + nRotVal %= 36000; + if ( nRotVal < 0 ) + nRotVal += 36000; + + // always set rotation value and orientation + + SvxCellOrientation eOrient = SVX_ORIENTATION_STANDARD; + BOOL bSetOrient = TRUE; + + if ( nRotVal == 9000 ) + eOrient = SVX_ORIENTATION_BOTTOMTOP; + else if ( nRotVal == 27000 ) + eOrient = SVX_ORIENTATION_TOPBOTTOM; + else if ( nRotVal == 0 ) + { + // don't overwrite stacked orientation by setting + // rotation to 0 + + SvxCellOrientation eOld = (SvxCellOrientation) + ((const SvxOrientationItem&)rSet.Get(ATTR_ORIENTATION)). + GetValue(); + if ( eOld == SVX_ORIENTATION_STACKED ) + bSetOrient = FALSE; + } + + rSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, nRotVal ) ); + if (bSetOrient) + rSet.Put( SvxOrientationItem( eOrient, ATTR_ORIENTATION ) ); + } + } + break; + case ATTR_PAGE_SCALE: + case ATTR_PAGE_SCALETOPAGES: + case ATTR_PAGE_FIRSTPAGENO: + { + sal_Int16 nVal; + *pValue >>= nVal; + rSet.Put( SfxUInt16Item( pMap->nWID, nVal ) ); + } + break; + case ATTR_PAGE_CHARTS: + case ATTR_PAGE_OBJECTS: + case ATTR_PAGE_DRAWINGS: + { + sal_Bool bBool; + *pValue >>= bBool; + //! sal_Bool-MID fuer ScViewObjectModeItem definieren? + rSet.Put( ScViewObjectModeItem( pMap->nWID, + bBool ? VOBJ_MODE_SHOW : VOBJ_MODE_HIDE ) ); + } + break; + case ATTR_PAGE_PAPERBIN: + { + BYTE nTray = PAPERBIN_PRINTER_SETTINGS; + BOOL bFound = FALSE; + + ::rtl::OUString aName; + if ( *pValue >>= aName ) + { + if ( aName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SC_PAPERBIN_DEFAULTNAME ) ) ) + bFound = TRUE; + else + { + Printer* pPrinter = pDocShell->GetPrinter(); + if (pPrinter) + { + String aNameStr = aName; + USHORT nCount = pPrinter->GetPaperBinCount(); + for (USHORT i=0; i<nCount; i++) + if ( aNameStr == pPrinter->GetPaperBinName(i) ) + { + nTray = (BYTE) i; + bFound = TRUE; + break; + } + } + } + } + if ( bFound ) + rSet.Put( SvxPaperBinItem( ATTR_PAGE_PAPERBIN, nTray ) ); + else + throw lang::IllegalArgumentException(); + } + break; + default: + // #65253# Default-Items mit falscher Slot-ID + // funktionieren im SfxItemPropertySet3 nicht + //! Slot-IDs aendern... + if ( rSet.GetPool()->GetSlotId(pMap->nWID) == pMap->nWID && + rSet.GetItemState(pMap->nWID, sal_False) == SFX_ITEM_DEFAULT ) + { + rSet.Put( rSet.Get(pMap->nWID) ); + } + aPropSet.setPropertyValue( *pMap, *pValue, rSet ); + } + } + else + { + rSet.ClearItem( pMap->nWID ); + // #67847# language for number formats + if ( pMap->nWID == ATTR_VALUE_FORMAT ) + rSet.ClearItem( ATTR_LANGUAGE_FORMAT ); + + //! for ATTR_ROTATE_VALUE, also reset ATTR_ORIENTATION? + } + } + } + + //! DocFunc-Funktion?? + //! Undo ????????????? + + ScDocument* pDoc = pDocShell->GetDocument(); + if ( eFamily == SFX_STYLE_FAMILY_PARA ) + { + // Zeilenhoehen anpassen... + + VirtualDevice aVDev; + Point aLogic = aVDev.LogicToPixel( Point(1000,1000), MAP_TWIP ); + double nPPTX = aLogic.X() / 1000.0; + double nPPTY = aLogic.Y() / 1000.0; + Fraction aZoom(1,1); + pDoc->StyleSheetChanged( pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom ); + + pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT ); + pDocShell->SetDocumentModified(); + } + else + { + //! ModifyStyleSheet am Dokument (alte Werte merken) + + pDocShell->PageStyleModified( aStyleName, sal_True ); + } + } +} + +uno::Any SAL_CALL ScStyleObj::getPropertyValue( const ::rtl::OUString& aPropertyName ) + throw(beans::UnknownPropertyException, lang::WrappedTargetException, + uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString = aPropertyName; + uno::Any aAny; + + const SfxItemPropertyMap* pResultEntry = NULL; + const SfxItemSet* pItemSet = GetStyleItemSet_Impl( aString, pResultEntry ); + + if ( pItemSet && pResultEntry ) + { + USHORT nWhich = pResultEntry->nWID; + + switch ( nWhich ) // fuer Item-Spezial-Behandlungen + { + case ATTR_VALUE_FORMAT: + if ( pDocShell ) + { + UINT32 nOldFormat = ((const SfxUInt32Item&) + pItemSet->Get( ATTR_VALUE_FORMAT )).GetValue(); + LanguageType eOldLang = ((const SvxLanguageItem&) + pItemSet->Get( ATTR_LANGUAGE_FORMAT )).GetLanguage(); + nOldFormat = pDocShell->GetDocument()->GetFormatTable()-> + GetFormatForLanguageIfBuiltIn( nOldFormat, eOldLang ); + aAny <<= nOldFormat; + } + break; + case ATTR_INDENT: + aAny <<= sal_Int16( TwipsToHMM(((const SfxUInt16Item&) + pItemSet->Get(nWhich)).GetValue()) ); + break; + case ATTR_ROTATE_VALUE: + { + // if value is 0 and orientation topbottom or bottomtop, + // adjust value + + sal_Int32 nRotVal = ((const SfxInt32Item&) + pItemSet->Get(ATTR_ROTATE_VALUE)).GetValue(); + if ( nRotVal == 0 ) + { + SvxCellOrientation eOrient = (SvxCellOrientation) + ((const SvxOrientationItem&)pItemSet->Get(ATTR_ORIENTATION)). + GetValue(); + if ( eOrient == SVX_ORIENTATION_BOTTOMTOP ) + nRotVal = 9000; + else if ( eOrient == SVX_ORIENTATION_TOPBOTTOM ) + nRotVal = 27000; + } + aAny <<= nRotVal; + } + break; + case ATTR_PAGE_SCALE: + case ATTR_PAGE_SCALETOPAGES: + case ATTR_PAGE_FIRSTPAGENO: + aAny <<= sal_Int16( ((const SfxUInt16Item&)pItemSet->Get(nWhich)).GetValue() ); + break; + case ATTR_PAGE_CHARTS: + case ATTR_PAGE_OBJECTS: + case ATTR_PAGE_DRAWINGS: + //! sal_Bool-MID fuer ScViewObjectModeItem definieren? + aAny <<= sal_Bool( ((const ScViewObjectModeItem&)pItemSet-> + Get(nWhich)).GetValue() == VOBJ_MODE_SHOW ); + break; + case ATTR_PAGE_PAPERBIN: + { + // property PrinterPaperTray is the name of the tray + + BYTE nValue = ((const SvxPaperBinItem&)pItemSet->Get(nWhich)).GetValue(); + ::rtl::OUString aName; + if ( nValue == PAPERBIN_PRINTER_SETTINGS ) + aName = ::rtl::OUString::createFromAscii( SC_PAPERBIN_DEFAULTNAME ); + else + { + Printer* pPrinter = pDocShell->GetPrinter(); + if (pPrinter) + aName = pPrinter->GetPaperBinName( nValue ); + } + aAny <<= aName; + } + break; + default: + // #65253# Default-Items mit falscher Slot-ID + // funktionieren im SfxItemPropertySet3 nicht + //! Slot-IDs aendern... + if ( pItemSet->GetPool()->GetSlotId(nWhich) == nWhich && + pItemSet->GetItemState(nWhich, sal_False) == SFX_ITEM_DEFAULT ) + { + SfxItemSet aNoEmptySet( *pItemSet ); + aNoEmptySet.Put( aNoEmptySet.Get( nWhich ) ); + aAny = aPropSet.getPropertyValue( *pResultEntry, aNoEmptySet ); + } + else + aAny = aPropSet.getPropertyValue( *pResultEntry, *pItemSet ); + } + } + else if ( aString.EqualsAscii( SC_UNONAME_DISPNAME ) ) // read-only + { + // core always has the display name + SfxStyleSheetBase* pStyle = GetStyle_Impl(); + if (pStyle) + aAny <<= ::rtl::OUString( pStyle->GetName() ); + } + + return aAny; +} + +SC_IMPL_DUMMY_PROPERTY_LISTENER( ScStyleObj ) + +// lang::XServiceInfo + +::rtl::OUString SAL_CALL ScStyleObj::getImplementationName() throw(uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii( "ScStyleObj" ); +} + +sal_Bool SAL_CALL ScStyleObj::supportsService( const ::rtl::OUString& rServiceName ) + throw(uno::RuntimeException) +{ + BOOL bPage = ( eFamily == SFX_STYLE_FAMILY_PAGE ); + String aServiceStr( rServiceName ); + return aServiceStr.EqualsAscii( SCSTYLE_SERVICE ) || + aServiceStr.EqualsAscii( bPage ? SCPAGESTYLE_SERVICE + : SCCELLSTYLE_SERVICE ); +} + +uno::Sequence< ::rtl::OUString> SAL_CALL ScStyleObj::getSupportedServiceNames() + throw(uno::RuntimeException) +{ + BOOL bPage = ( eFamily == SFX_STYLE_FAMILY_PAGE ); + uno::Sequence< ::rtl::OUString> aRet(2); + ::rtl::OUString* pArray = aRet.getArray(); + pArray[0] = ::rtl::OUString::createFromAscii( SCSTYLE_SERVICE ); + pArray[1] = ::rtl::OUString::createFromAscii( bPage ? SCPAGESTYLE_SERVICE + : SCCELLSTYLE_SERVICE ); + return aRet; +} + +//------------------------------------------------------------------------ + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_targuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_targuno.cxx new file mode 100644 index 000000000000..6b21d6591ff6 --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_targuno.cxx @@ -0,0 +1,29 @@ +/* -*- 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. + * + ************************************************************************/ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_textuno.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_textuno.cxx new file mode 100644 index 000000000000..fdd9b0c6da6b --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_textuno.cxx @@ -0,0 +1,1155 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "scitems.hxx" +#define ITEMID_FIELD EE_FEATURE_FIELD + +#include <bf_svx/editobj.hxx> + + + +#include <bf_svx/itemdata.hxx> + +#include <tools/date.hxx> + +#include <tools/time.hxx> + +#include <bf_svx/flditem.hxx> +#include <bf_svx/unofored.hxx> +#include <rtl/uuid.h> +#include <vcl/virdev.hxx> + +#define _SVSTDARR_USHORTS +#include <bf_svtools/svstdarr.hxx> + + +#include "textuno.hxx" +#include "fielduno.hxx" +#include "servuno.hxx" +#include "editsrc.hxx" +#include "docsh.hxx" +#include "editutil.hxx" +#include <vcl/svapp.hxx> +#include "miscuno.hxx" +#include "cellsuno.hxx" +#include "hints.hxx" +#include "patattr.hxx" +#include "cell.hxx" +#include "docfunc.hxx" +#include "scmod.hxx" +namespace binfilter { + +using namespace ::com::sun::star; + +//------------------------------------------------------------------------ + +const SfxItemPropertyMap* lcl_GetHdFtPropertyMap() +{ + static SfxItemPropertyMap aHdFtPropertyMap_Impl[] = + { + SVX_UNOEDIT_CHAR_PROPERTIES, + SVX_UNOEDIT_FONT_PROPERTIES, + SVX_UNOEDIT_PARA_PROPERTIES, + SVX_UNOEDIT_NUMBERING_PROPERTIE, // for completeness of service ParagraphProperties + {0,0,0,0} + }; + static BOOL bTwipsSet = FALSE; + + if (!bTwipsSet) + { + // modify PropertyMap to include CONVERT_TWIPS flag for font height + // (headers/footers are in twips) + + SfxItemPropertyMap* pEntry = aHdFtPropertyMap_Impl; + while (pEntry->pName) + { + if ( ( pEntry->nWID == EE_CHAR_FONTHEIGHT || + pEntry->nWID == EE_CHAR_FONTHEIGHT_CJK || + pEntry->nWID == EE_CHAR_FONTHEIGHT_CTL ) && + pEntry->nMemberId == MID_FONTHEIGHT ) + { + pEntry->nMemberId |= CONVERT_TWIPS; + } + + ++pEntry; + } + bTwipsSet = TRUE; + } + + return aHdFtPropertyMap_Impl; +} + +//------------------------------------------------------------------------ + +SC_SIMPLE_SERVICE_INFO( ScHeaderFooterContentObj, "ScHeaderFooterContentObj", "com.sun.star.sheet.HeaderFooterContent" ) +SC_SIMPLE_SERVICE_INFO( ScHeaderFooterTextObj, "ScHeaderFooterTextObj", "stardiv.one.Text.Text" ) + +//------------------------------------------------------------------------ + +ScHeaderFooterContentObj::ScHeaderFooterContentObj( const EditTextObject* pLeft, + const EditTextObject* pCenter, + const EditTextObject* pRight ) : + pLeftText ( NULL ), + pCenterText ( NULL ), + pRightText ( NULL ) +{ + if ( pLeft ) + pLeftText = pLeft->Clone(); + if ( pCenter ) + pCenterText = pCenter->Clone(); + if ( pRight ) + pRightText = pRight->Clone(); +} + +ScHeaderFooterContentObj::~ScHeaderFooterContentObj() +{ + delete pLeftText; + delete pCenterText; + delete pRightText; +} + +void ScHeaderFooterContentObj::AddListener( SfxListener& rListener ) +{ + rListener.StartListening( aBC ); +} + +void ScHeaderFooterContentObj::RemoveListener( SfxListener& rListener ) +{ + rListener.EndListening( aBC ); +} + +void ScHeaderFooterContentObj::UpdateText( USHORT nPart, EditEngine& rSource ) +{ + EditTextObject* pNew = rSource.CreateTextObject(); + switch (nPart) + { + case SC_HDFT_LEFT: + delete pLeftText; + pLeftText = pNew; + break; + case SC_HDFT_CENTER: + delete pCenterText; + pCenterText = pNew; + break; + default: // SC_HDFT_RIGHT + delete pRightText; + pRightText = pNew; + break; + } + + aBC.Broadcast( ScHeaderFooterChangedHint( nPart ) ); +} + +// XHeaderFooterContent + +uno::Reference<text::XText> SAL_CALL ScHeaderFooterContentObj::getLeftText() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScHeaderFooterTextObj( *this, SC_HDFT_LEFT ); +} + +uno::Reference<text::XText> SAL_CALL ScHeaderFooterContentObj::getCenterText() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScHeaderFooterTextObj( *this, SC_HDFT_CENTER ); +} + +uno::Reference<text::XText> SAL_CALL ScHeaderFooterContentObj::getRightText() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScHeaderFooterTextObj( *this, SC_HDFT_RIGHT ); +} + +// XUnoTunnel + +sal_Int64 SAL_CALL ScHeaderFooterContentObj::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return 0; +} + +// static +const uno::Sequence<sal_Int8>& ScHeaderFooterContentObj::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScHeaderFooterContentObj* ScHeaderFooterContentObj::getImplementation( + const uno::Reference<sheet::XHeaderFooterContent> xObj ) +{ + ScHeaderFooterContentObj* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScHeaderFooterContentObj*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + + +//------------------------------------------------------------------------ + +ScHeaderFooterTextData::ScHeaderFooterTextData( ScHeaderFooterContentObj& rContent, + USHORT nP ) : + rContentObj( rContent ), + nPart( nP ), + pEditEngine( NULL ), + pForwarder( NULL ), + bDataValid( FALSE ), + bInUpdate( FALSE ) +{ + rContentObj.acquire(); // must not go away + rContentObj.AddListener( *this ); +} + +ScHeaderFooterTextData::~ScHeaderFooterTextData() +{ + SolarMutexGuard aGuard; // needed for EditEngine dtor + + rContentObj.RemoveListener( *this ); + + delete pForwarder; + delete pEditEngine; + + rContentObj.release(); +} + +void ScHeaderFooterTextData::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScHeaderFooterChangedHint ) ) + { + if ( ((const ScHeaderFooterChangedHint&)rHint).GetPart() == nPart ) + { + if (!bInUpdate) // not for own updates + bDataValid = FALSE; // text has to be fetched again + } + } +} + +SvxTextForwarder* ScHeaderFooterTextData::GetTextForwarder() +{ + if (!pEditEngine) + { + SfxItemPool* pEnginePool = EditEngine::CreatePool(); + pEnginePool->FreezeIdRanges(); + ScHeaderEditEngine* pHdrEngine = new ScHeaderEditEngine( pEnginePool, TRUE ); + + pHdrEngine->EnableUndo( FALSE ); + pHdrEngine->SetRefMapMode( MAP_TWIP ); + + // default font must be set, independently of document + // -> use global pool from module + + SfxItemSet aDefaults( pHdrEngine->GetEmptyItemSet() ); + const ScPatternAttr& rPattern = (const ScPatternAttr&)SC_MOD()->GetPool().GetDefaultItem(ATTR_PATTERN); + rPattern.FillEditItemSet( &aDefaults ); + // FillEditItemSet adjusts font height to 1/100th mm, + // but for header/footer twips is needed, as in the PatternAttr: + aDefaults.Put( rPattern.GetItem(ATTR_FONT_HEIGHT), EE_CHAR_FONTHEIGHT ); + aDefaults.Put( rPattern.GetItem(ATTR_CJK_FONT_HEIGHT), EE_CHAR_FONTHEIGHT_CJK ); + aDefaults.Put( rPattern.GetItem(ATTR_CTL_FONT_HEIGHT), EE_CHAR_FONTHEIGHT_CTL ); + pHdrEngine->SetDefaults( aDefaults ); + + ScHeaderFieldData aData; + ScHeaderFooterTextObj::FillDummyFieldData( aData ); + pHdrEngine->SetData( aData ); + + pEditEngine = pHdrEngine; + pForwarder = new SvxEditEngineForwarder(*pEditEngine); + } + + if (bDataValid) + return pForwarder; + + const EditTextObject* pData; + if (nPart == SC_HDFT_LEFT) + pData = rContentObj.GetLeftEditObject(); + else if (nPart == SC_HDFT_CENTER) + pData = rContentObj.GetCenterEditObject(); + else + pData = rContentObj.GetRightEditObject(); + + if (pData) + { + pEditEngine->SetText(*pData); + + // #i75599# If there's an invalid field ID in a binary file, the result is + // a SvxFieldItem with NULL as SvxFieldData. These have to be removed here. + + USHORT nParCount = pEditEngine->GetParagraphCount(); + for (USHORT nPar=0; nPar<nParCount; nPar++) + { + SvUShorts aPortions; + pEditEngine->GetPortions( nPar, aPortions ); + + for ( USHORT nPos = aPortions.Count(); nPos; ) + { + --nPos; + USHORT nEnd = aPortions.GetObject( nPos ); + USHORT nStart = nPos ? aPortions.GetObject( nPos - 1 ) : 0; + // fields are single characters + if ( nEnd == nStart+1 ) + { + ESelection aFieldSel( nPar, nStart, nPar, nEnd ); + SfxItemSet aSet = pEditEngine->GetAttribs( aFieldSel ); + const SfxPoolItem* pItem = NULL; + if ( aSet.GetItemState( EE_FEATURE_FIELD, FALSE, &pItem ) == SFX_ITEM_ON ) + { + const SvxFieldItem* pFieldItem = static_cast<const SvxFieldItem*>(pItem); + const SvxFieldData* pData = pFieldItem->GetField(); + if ( !pData ) + { + // remove the invalid field + pEditEngine->QuickDelete( aFieldSel ); + } + } + } + } + } + } + + bDataValid = TRUE; + return pForwarder; +} + +void ScHeaderFooterTextData::UpdateData() +{ + if ( pEditEngine ) + { + bInUpdate = TRUE; // don't reset bDataValid during UpdateText + + rContentObj.UpdateText( nPart, *pEditEngine ); + + bInUpdate = FALSE; + } +} + +//------------------------------------------------------------------------ + +ScHeaderFooterTextObj::ScHeaderFooterTextObj( ScHeaderFooterContentObj& rContent, + USHORT nP ) : + aTextData( rContent, nP ), + pUnoText( NULL ) +{ + // ScHeaderFooterTextData acquires rContent + // pUnoText is created on demand (getString/setString work without it) +} + +void ScHeaderFooterTextObj::CreateUnoText_Impl() +{ + if ( !pUnoText ) + { + // can't be aggregated because getString/setString is handled here + ScSharedHeaderFooterEditSource aEditSource( &aTextData ); + pUnoText = new SvxUnoText( &aEditSource, lcl_GetHdFtPropertyMap(), uno::Reference<text::XText>() ); + pUnoText->acquire(); + } +} + +ScHeaderFooterTextObj::~ScHeaderFooterTextObj() +{ + if (pUnoText) + pUnoText->release(); +} + +const SvxUnoText& ScHeaderFooterTextObj::GetUnoText() +{ + if (!pUnoText) + CreateUnoText_Impl(); + return *pUnoText; +} + +// XText + +uno::Reference<text::XTextCursor> SAL_CALL ScHeaderFooterTextObj::createTextCursor() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return new ScHeaderFooterTextCursor( *this ); +} + +uno::Reference<text::XTextCursor> SAL_CALL ScHeaderFooterTextObj::createTextCursorByRange( + const uno::Reference<text::XTextRange>& aTextPosition ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pUnoText) + CreateUnoText_Impl(); + return pUnoText->createTextCursorByRange(aTextPosition); + //! wie ScCellObj::createTextCursorByRange, wenn SvxUnoTextRange_getReflection verfuegbar +} + +void ScHeaderFooterTextObj::FillDummyFieldData( ScHeaderFieldData& rData ) // static +{ + String aDummy = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM( "???" )); + rData.aTitle = aDummy; + rData.aLongDocName = aDummy; + rData.aShortDocName = aDummy; + rData.aTabName = aDummy; + rData.nPageNo = 1; + rData.nTotalPages = 99; +} + +::rtl::OUString SAL_CALL ScHeaderFooterTextObj::getString() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + ::rtl::OUString aRet; + const EditTextObject* pData; + + USHORT nPart = aTextData.GetPart(); + ScHeaderFooterContentObj& rContentObj = aTextData.GetContentObj(); + + if (nPart == SC_HDFT_LEFT) + pData = rContentObj.GetLeftEditObject(); + else if (nPart == SC_HDFT_CENTER) + pData = rContentObj.GetCenterEditObject(); + else + pData = rContentObj.GetRightEditObject(); + if (pData) + { + // for pure text, no font info is needed in pool defaults + ScHeaderEditEngine aEditEngine( EditEngine::CreatePool(), TRUE ); + + ScHeaderFieldData aData; + FillDummyFieldData( aData ); + aEditEngine.SetData( aData ); + + aEditEngine.SetText(*pData); + aRet = ScEditUtil::GetSpaceDelimitedString( aEditEngine ); + } + return aRet; +} + +void SAL_CALL ScHeaderFooterTextObj::setString( const ::rtl::OUString& aText ) throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + String aString = aText; + + // for pure text, no font info is needed in pool defaults + ScHeaderEditEngine aEditEngine( EditEngine::CreatePool(), TRUE ); + aEditEngine.SetText( aString ); + + aTextData.GetContentObj().UpdateText( aTextData.GetPart(), aEditEngine ); +} + +void SAL_CALL ScHeaderFooterTextObj::insertString( const uno::Reference<text::XTextRange>& xRange, + const ::rtl::OUString& aString, sal_Bool bAbsorb ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pUnoText) + CreateUnoText_Impl(); + pUnoText->insertString( xRange, aString, bAbsorb ); +} + +void SAL_CALL ScHeaderFooterTextObj::insertControlCharacter( + const uno::Reference<text::XTextRange>& xRange, + sal_Int16 nControlCharacter, sal_Bool bAbsorb ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pUnoText) + CreateUnoText_Impl(); + pUnoText->insertControlCharacter( xRange, nControlCharacter, bAbsorb ); +} + +void SAL_CALL ScHeaderFooterTextObj::insertTextContent( + const uno::Reference<text::XTextRange >& xRange, + const uno::Reference<text::XTextContent >& xContent, + sal_Bool bAbsorb ) + throw(lang::IllegalArgumentException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( xContent.is() && xRange.is() ) + { + ScHeaderFieldObj* pHeaderField = ScHeaderFieldObj::getImplementation( xContent ); + + SvxUnoTextRangeBase* pTextRange = + ScHeaderFooterTextCursor::getImplementation( xRange ); + +#if 0 + if (!pTextRange) + pTextRange = (SvxUnoTextRange*)xRange->getImplementation( + SvxUnoTextRange_getReflection() ); + //! bei SvxUnoTextRange testen, ob in passendem Objekt !!! +#endif + + if ( pHeaderField && !pHeaderField->IsInserted() && pTextRange ) + { + SvxEditSource* pEditSource = pTextRange->GetEditSource(); + ESelection aSelection = pTextRange->GetSelection(); + + if (!bAbsorb) + { + // don't replace -> append at end + aSelection.Adjust(); + aSelection.nStartPara = aSelection.nEndPara; + aSelection.nStartPos = aSelection.nEndPos; + } + + SvxFieldItem aItem = pHeaderField->CreateFieldItem(); + + SvxTextForwarder* pForwarder = pEditSource->GetTextForwarder(); + pForwarder->QuickInsertField( aItem, aSelection ); + pEditSource->UpdateData(); + + // neue Selektion: ein Zeichen + aSelection.Adjust(); + aSelection.nEndPara = aSelection.nStartPara; + aSelection.nEndPos = aSelection.nStartPos + 1; + pHeaderField->InitDoc( &aTextData.GetContentObj(), aTextData.GetPart(), aSelection ); + + // #91431# for bAbsorb=FALSE, the new selection must be behind the inserted content + // (the xml filter relies on this) + if (!bAbsorb) + aSelection.nStartPos = aSelection.nEndPos; + + pTextRange->SetSelection( aSelection ); + + return; + } + } + + if (!pUnoText) + CreateUnoText_Impl(); + pUnoText->insertTextContent( xRange, xContent, bAbsorb ); +} + +void SAL_CALL ScHeaderFooterTextObj::removeTextContent( + const uno::Reference<text::XTextContent>& xContent ) + throw(container::NoSuchElementException, uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if ( xContent.is() ) + { + ScHeaderFieldObj* pHeaderField = ScHeaderFieldObj::getImplementation( xContent ); + if ( pHeaderField && pHeaderField->IsInserted() ) + { + //! Testen, ob das Feld in dieser Zelle ist + pHeaderField->DeleteField(); + return; + } + } + if (!pUnoText) + CreateUnoText_Impl(); + pUnoText->removeTextContent( xContent ); +} + +uno::Reference<text::XText> SAL_CALL ScHeaderFooterTextObj::getText() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pUnoText) + CreateUnoText_Impl(); + return pUnoText->getText(); +} + +uno::Reference<text::XTextRange> SAL_CALL ScHeaderFooterTextObj::getStart() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pUnoText) + CreateUnoText_Impl(); + return pUnoText->getStart(); +} + +uno::Reference<text::XTextRange> SAL_CALL ScHeaderFooterTextObj::getEnd() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pUnoText) + CreateUnoText_Impl(); + return pUnoText->getEnd(); +} + +// XTextFieldsSupplier + +uno::Reference<container::XEnumerationAccess> SAL_CALL ScHeaderFooterTextObj::getTextFields() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + // all fields + return new ScHeaderFieldsObj( &aTextData.GetContentObj(), aTextData.GetPart(), SC_SERVICE_INVALID ); +} + +uno::Reference<container::XNameAccess> SAL_CALL ScHeaderFooterTextObj::getTextFieldMasters() + throw(uno::RuntimeException) +{ + // sowas gibts nicht im Calc (?) + return NULL; +} + +// XTextRangeMover + +void SAL_CALL ScHeaderFooterTextObj::moveTextRange( + const uno::Reference<text::XTextRange>& xRange, + sal_Int16 nParagraphs ) + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pUnoText) + CreateUnoText_Impl(); + pUnoText->moveTextRange( xRange, nParagraphs ); +} + +// XEnumerationAccess + +uno::Reference<container::XEnumeration> SAL_CALL ScHeaderFooterTextObj::createEnumeration() + throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pUnoText) + CreateUnoText_Impl(); + return pUnoText->createEnumeration(); +} + +// XElementAccess + +uno::Type SAL_CALL ScHeaderFooterTextObj::getElementType() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pUnoText) + CreateUnoText_Impl(); + return pUnoText->getElementType(); +} + +sal_Bool SAL_CALL ScHeaderFooterTextObj::hasElements() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + if (!pUnoText) + CreateUnoText_Impl(); + return pUnoText->hasElements(); +} + +//------------------------------------------------------------------------ + +ScCellTextCursor::ScCellTextCursor(const ScCellTextCursor& rOther) : + SvxUnoTextCursor( rOther ), + rTextObj( rOther.rTextObj ) +{ + rTextObj.acquire(); +} + +ScCellTextCursor::ScCellTextCursor(ScCellObj& rText) : + SvxUnoTextCursor( rText.GetUnoText() ), + rTextObj( rText ) +{ + rTextObj.acquire(); +} + +ScCellTextCursor::~ScCellTextCursor() throw() +{ + rTextObj.release(); +} + +// SvxUnoTextCursor methods reimplemented here to return the right objects: + +uno::Reference<text::XText> SAL_CALL ScCellTextCursor::getText() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return &rTextObj; +} + +uno::Reference<text::XTextRange> SAL_CALL ScCellTextCursor::getStart() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! use other object for range than cursor? + + ScCellTextCursor* pNew = new ScCellTextCursor( *this ); + uno::Reference<text::XTextRange> xRange( static_cast<SvxUnoTextRangeBase*>(pNew) ); + + ESelection aNewSel = GetSelection(); + aNewSel.nEndPara = aNewSel.nStartPara; + aNewSel.nEndPos = aNewSel.nStartPos; + pNew->SetSelection( aNewSel ); + + return xRange; +} + +uno::Reference<text::XTextRange> SAL_CALL ScCellTextCursor::getEnd() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! use other object for range than cursor? + + ScCellTextCursor* pNew = new ScCellTextCursor( *this ); + uno::Reference<text::XTextRange> xRange( static_cast<SvxUnoTextRangeBase*>(pNew) ); + + ESelection aNewSel = GetSelection(); + aNewSel.nStartPara = aNewSel.nEndPara; + aNewSel.nStartPos = aNewSel.nEndPos; + pNew->SetSelection( aNewSel ); + + return xRange; +} + +// XUnoTunnel + +sal_Int64 SAL_CALL ScCellTextCursor::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return SvxUnoTextCursor::getSomething( rId ); +} + +// static +const uno::Sequence<sal_Int8>& ScCellTextCursor::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScCellTextCursor* ScCellTextCursor::getImplementation( const uno::Reference<uno::XInterface> xObj ) +{ + ScCellTextCursor* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScCellTextCursor*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +//------------------------------------------------------------------------ + +ScHeaderFooterTextCursor::ScHeaderFooterTextCursor(const ScHeaderFooterTextCursor& rOther) : + SvxUnoTextCursor( rOther ), + rTextObj( rOther.rTextObj ) +{ + rTextObj.acquire(); +} + +ScHeaderFooterTextCursor::ScHeaderFooterTextCursor(ScHeaderFooterTextObj& rText) : + SvxUnoTextCursor( rText.GetUnoText() ), + rTextObj( rText ) +{ + rTextObj.acquire(); +} + +ScHeaderFooterTextCursor::~ScHeaderFooterTextCursor() throw() +{ + rTextObj.release(); +} + +// SvxUnoTextCursor methods reimplemented here to return the right objects: + +uno::Reference<text::XText> SAL_CALL ScHeaderFooterTextCursor::getText() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return &rTextObj; +} + +uno::Reference<text::XTextRange> SAL_CALL ScHeaderFooterTextCursor::getStart() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! use other object for range than cursor? + + ScHeaderFooterTextCursor* pNew = new ScHeaderFooterTextCursor( *this ); + uno::Reference<text::XTextRange> xRange( static_cast<SvxUnoTextRangeBase*>(pNew) ); + + ESelection aNewSel = GetSelection(); + aNewSel.nEndPara = aNewSel.nStartPara; + aNewSel.nEndPos = aNewSel.nStartPos; + pNew->SetSelection( aNewSel ); + + return xRange; +} + +uno::Reference<text::XTextRange> SAL_CALL ScHeaderFooterTextCursor::getEnd() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! use other object for range than cursor? + + ScHeaderFooterTextCursor* pNew = new ScHeaderFooterTextCursor( *this ); + uno::Reference<text::XTextRange> xRange( static_cast<SvxUnoTextRangeBase*>(pNew) ); + + ESelection aNewSel = GetSelection(); + aNewSel.nStartPara = aNewSel.nEndPara; + aNewSel.nStartPos = aNewSel.nEndPos; + pNew->SetSelection( aNewSel ); + + return xRange; +} + +// XUnoTunnel + +sal_Int64 SAL_CALL ScHeaderFooterTextCursor::getSomething( + const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) +{ + if ( rId.getLength() == 16 && + 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return SvxUnoTextCursor::getSomething( rId ); +} + +// static +const uno::Sequence<sal_Int8>& ScHeaderFooterTextCursor::getUnoTunnelId() +{ + static uno::Sequence<sal_Int8> * pSeq = 0; + if( !pSeq ) + { + osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); + if( !pSeq ) + { + static uno::Sequence< sal_Int8 > aSeq( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + pSeq = &aSeq; + } + } + return *pSeq; +} + +// static +ScHeaderFooterTextCursor* ScHeaderFooterTextCursor::getImplementation( + const uno::Reference<uno::XInterface> xObj ) +{ + ScHeaderFooterTextCursor* pRet = NULL; + uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); + if (xUT.is()) + pRet = (ScHeaderFooterTextCursor*) xUT->getSomething( getUnoTunnelId() ); + return pRet; +} + +//------------------------------------------------------------------------ + +ScDrawTextCursor::ScDrawTextCursor(const ScDrawTextCursor& rOther) : + SvxUnoTextCursor( rOther ), + xParentText( rOther.xParentText ) +{ +} + +ScDrawTextCursor::ScDrawTextCursor( const uno::Reference<text::XText>& xParent, + const SvxUnoTextBase& rText ) : + SvxUnoTextCursor( rText ), + xParentText( xParent ) + +{ +} + +ScDrawTextCursor::~ScDrawTextCursor() throw() +{ +} + +// SvxUnoTextCursor methods reimplemented here to return the right objects: + +uno::Reference<text::XText> SAL_CALL ScDrawTextCursor::getText() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return xParentText; +} + +uno::Reference<text::XTextRange> SAL_CALL ScDrawTextCursor::getStart() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! use other object for range than cursor? + + ScDrawTextCursor* pNew = new ScDrawTextCursor( *this ); + uno::Reference<text::XTextRange> xRange( static_cast<SvxUnoTextRangeBase*>(pNew) ); + + ESelection aNewSel = GetSelection(); + aNewSel.nEndPara = aNewSel.nStartPara; + aNewSel.nEndPos = aNewSel.nStartPos; + pNew->SetSelection( aNewSel ); + + return xRange; +} + +uno::Reference<text::XTextRange> SAL_CALL ScDrawTextCursor::getEnd() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + //! use other object for range than cursor? + + ScDrawTextCursor* pNew = new ScDrawTextCursor( *this ); + uno::Reference<text::XTextRange> xRange( static_cast<SvxUnoTextRangeBase*>(pNew) ); + + ESelection aNewSel = GetSelection(); + aNewSel.nStartPara = aNewSel.nEndPara; + aNewSel.nStartPos = aNewSel.nEndPos; + pNew->SetSelection( aNewSel ); + + return xRange; +} + +//------------------------------------------------------------------------ + +ScSimpleEditSourceHelper::ScSimpleEditSourceHelper() +{ + SfxItemPool* pEnginePool = EditEngine::CreatePool(); + pEnginePool->SetDefaultMetric( SFX_MAPUNIT_100TH_MM ); + pEnginePool->FreezeIdRanges(); + + pEditEngine = new ScFieldEditEngine( pEnginePool, NULL, TRUE ); // TRUE: become owner of pool + pForwarder = new SvxEditEngineForwarder( *pEditEngine ); + pOriginalSource = new ScSimpleEditSource( pForwarder ); +} + +ScSimpleEditSourceHelper::~ScSimpleEditSourceHelper() +{ + SolarMutexGuard aGuard; // needed for EditEngine dtor + + delete pOriginalSource; + delete pForwarder; + delete pEditEngine; +} + +ScEditEngineTextObj::ScEditEngineTextObj() : + SvxUnoText( GetOriginalSource(), ScCellObj::GetEditPropertyMap(), uno::Reference<text::XText>() ) +{ +} + +ScEditEngineTextObj::~ScEditEngineTextObj() throw() +{ +} + +void ScEditEngineTextObj::SetText( const EditTextObject& rTextObject ) +{ + GetEditEngine()->SetText( rTextObject ); + + ESelection aSel; + ::binfilter::GetSelection( aSel, GetEditSource()->GetTextForwarder() ); + SetSelection( aSel ); +} + +EditTextObject* ScEditEngineTextObj::CreateTextObject() +{ + return GetEditEngine()->CreateTextObject(); +} + +//------------------------------------------------------------------------ + +ScCellTextData::ScCellTextData(ScDocShell* pDocSh, const ScAddress& rP) : + pDocShell( pDocSh ), + aCellPos( rP ), + pEditEngine( NULL ), + pForwarder( NULL ), + bDataValid( FALSE ), + bInUpdate( FALSE ), + pOriginalSource( NULL ), + bDirty( FALSE ), + bDoUpdate( TRUE ) +{ + if (pDocShell) + pDocShell->GetDocument()->AddUnoObject(*this); +} + +ScCellTextData::~ScCellTextData() +{ + SolarMutexGuard aGuard; // needed for EditEngine dtor + + if (pDocShell) + { + pDocShell->GetDocument()->RemoveUnoObject(*this); + pDocShell->GetDocument()->DisposeFieldEditEngine(pEditEngine); + } + else + delete pEditEngine; + + delete pForwarder; + + delete pOriginalSource; +} + +ScSharedCellEditSource* ScCellTextData::GetOriginalSource() +{ + if (!pOriginalSource) + pOriginalSource = new ScSharedCellEditSource( this ); + return pOriginalSource; +} + +void ScCellTextData::GetCellText(const ScAddress& rCellPos, String& rText) +{ + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + pDoc->GetInputString( rCellPos.Col(), rCellPos.Row(), rCellPos.Tab(), rText ); + } +} + +SvxTextForwarder* ScCellTextData::GetTextForwarder() +{ + if (!pEditEngine) + { + if ( pDocShell ) + { + ScDocument* pDoc = pDocShell->GetDocument(); + pEditEngine = pDoc->CreateFieldEditEngine(); + } + else + { + SfxItemPool* pEnginePool = EditEngine::CreatePool(); + pEnginePool->FreezeIdRanges(); + pEditEngine = new ScFieldEditEngine( pEnginePool, NULL, TRUE ); + } + // currently, GetPortions doesn't work if UpdateMode is FALSE, + // this will be fixed (in EditEngine) by src600 +// pEditEngine->SetUpdateMode( FALSE ); + pEditEngine->EnableUndo( FALSE ); + if (pDocShell) + pEditEngine->SetRefDevice(pDocShell->GetVirtualDevice_100th_mm()); + else + pEditEngine->SetRefMapMode( MAP_100TH_MM ); + pForwarder = new SvxEditEngineForwarder(*pEditEngine); + } + + if (bDataValid) + return pForwarder; + + String aText; + + if (pDocShell) + { + ScDocument* pDoc = pDocShell->GetDocument(); + + SfxItemSet aDefaults( pEditEngine->GetEmptyItemSet() ); + const ScPatternAttr* pPattern = + pDoc->GetPattern( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab() ); + pPattern->FillEditItemSet( &aDefaults ); + pPattern->FillEditParaItems( &aDefaults ); // including alignment etc. (for reading) + + const ScBaseCell* pCell = pDoc->GetCell( aCellPos ); + if ( pCell && pCell->GetCellType() == CELLTYPE_EDIT ) + pEditEngine->SetTextNewDefaults( *((const ScEditCell*)pCell)->GetData(), aDefaults ); + else + { + GetCellText( aCellPos, aText ); + if (aText.Len()) + pEditEngine->SetTextNewDefaults( aText, aDefaults ); + else + pEditEngine->SetDefaults(aDefaults); + } + } + + bDataValid = TRUE; + return pForwarder; +} + +void ScCellTextData::UpdateData() +{ + if ( bDoUpdate ) + { + DBG_ASSERT(pEditEngine != NULL, "no EditEngine for UpdateData()"); + if ( pDocShell && pEditEngine ) + { + // during the own UpdateData call, bDataValid must not be reset, + // or things like attributes after the text would be lost + // (are not stored in the cell) + + bInUpdate = TRUE; // prevents bDataValid from being reset + + ScDocFunc aFunc(*pDocShell); + aFunc.PutData( aCellPos, *pEditEngine, FALSE, TRUE ); // always as text + + bInUpdate = FALSE; + bDirty = FALSE; + } + } + else + bDirty = TRUE; +} + +void ScCellTextData::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) +{ + if ( rHint.ISA( ScUpdateRefHint ) ) + { + const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; + + //! Ref-Update + } + else if ( rHint.ISA( SfxSimpleHint ) ) + { + ULONG nId = ((const SfxSimpleHint&)rHint).GetId(); + if ( nId == SFX_HINT_DYING ) + { + pDocShell = NULL; // invalid now + + DELETEZ( pForwarder ); + DELETEZ( pEditEngine ); // EditEngine uses document's pool + } + else if ( nId == SFX_HINT_DATACHANGED ) + { + if (!bInUpdate) // not for own UpdateData calls + bDataValid = FALSE; // text has to be read from the cell again + } + } +} + +ScCellTextObj::ScCellTextObj(ScDocShell* pDocSh, const ScAddress& rP) : + ScCellTextData( pDocSh, rP ), + SvxUnoText( GetOriginalSource(), ScCellObj::GetEditPropertyMap(), uno::Reference<text::XText>() ) +{ +} + +ScCellTextObj::~ScCellTextObj() throw() +{ +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/unoobj/sc_unodoc.cxx b/binfilter/bf_sc/source/ui/unoobj/sc_unodoc.cxx new file mode 100644 index 000000000000..10efeafc60cc --- /dev/null +++ b/binfilter/bf_sc/source/ui/unoobj/sc_unodoc.cxx @@ -0,0 +1,80 @@ +/* -*- 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. + * + ************************************************************************/ + +// System - Includes ----------------------------------------------------- + + + +#include "scmod.hxx" + +#include <osl/mutex.hxx> +#include <vcl/svapp.hxx> +namespace binfilter { + +using namespace ::com::sun::star; + +::rtl::OUString SAL_CALL ScDocument_getImplementationName() throw() +{ + return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.Calc.SpreadsheetDocument" ) ); +} + +uno::Sequence< ::rtl::OUString > SAL_CALL ScDocument_getSupportedServiceNames() throw() +{ + //useable for component registration only! + uno::Sequence< ::rtl::OUString > aSeq( 1 ); + aSeq[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sheet.SpreadsheetDocument" )); + return aSeq; +} + +uno::Reference< uno::XInterface > SAL_CALL ScDocument_createInstance( + const uno::Reference< lang::XMultiServiceFactory > & rSMgr ) throw( uno::Exception ) +{ + SolarMutexGuard aGuard; + + // to create the service the SW_MOD should be already initialized + DBG_ASSERT( SC_MOD(), "No StarCalc module!" ); + + if ( SC_MOD() ) + { + ::rtl::OUString aFactoryURL( RTL_CONSTASCII_USTRINGPARAM ( "private:factory/scalc" ) ); + const SfxObjectFactory* pFactory = SfxObjectFactory::GetFactory( aFactoryURL ); + if ( pFactory ) + { + SfxObjectShell* pShell = pFactory->CreateObject(); + if( pShell ) + return uno::Reference< uno::XInterface >( pShell->GetModel() ); + } + } + + return uno::Reference< uno::XInterface >(); +} + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/view/makefile.mk b/binfilter/bf_sc/source/ui/view/makefile.mk new file mode 100644 index 000000000000..2814dff424af --- /dev/null +++ b/binfilter/bf_sc/source/ui/view/makefile.mk @@ -0,0 +1,52 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* + +EXTERNAL_WARNINGS_NOT_ERRORS := TRUE +PRJ=..$/..$/..$/.. +BFPRJ=..$/..$/.. +ENABLE_EXCEPTIONS=TRUE + +PRJNAME=binfilter +TARGET=sc_view + +NO_HIDS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk +.INCLUDE : $(BFPRJ)$/util$/makefile.pmk +INC+= -I$(PRJ)$/inc$/bf_sc + +SLOFILES = \ + $(SLO)$/sc_printfun.obj \ + $(SLO)$/sc_viewdata.obj + + +# --- Targets ------------------------------------------------------- + +.INCLUDE : target.mk + diff --git a/binfilter/bf_sc/source/ui/view/sc_printfun.cxx b/binfilter/bf_sc/source/ui/view/sc_printfun.cxx new file mode 100644 index 000000000000..152d1efa0d85 --- /dev/null +++ b/binfilter/bf_sc/source/ui/view/sc_printfun.cxx @@ -0,0 +1,1067 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include "scitems.hxx" +#define ITEMID_FIELD EE_FEATURE_FIELD + +#include <bf_svx/svxids.hrc> +#include <bf_svx/adjitem.hxx> +#include <bf_svx/boxitem.hxx> +#include <bf_svx/editstat.hxx> // EE_CNTRL_RTFSTYLESHEETS +#include <bf_svx/lrspitem.hxx> +#include <bf_svx/paperinf.hxx> +#include <bf_svx/shaditem.hxx> +#include <bf_svx/sizeitem.hxx> +#include <bf_svx/ulspitem.hxx> +#include <bf_sfx2/printer.hxx> +#include <bf_sfx2/docfile.hxx> +#include <tools/urlobj.hxx> + +#ifdef MAC +#define RGBColor MAC_RGBColor +#undef RGBColor +#else +#endif + +#include "docsh.hxx" +#include "stlpool.hxx" +#include "attrib.hxx" +#include "patattr.hxx" +#include "docpool.hxx" +#include "dociter.hxx" +#include "cell.hxx" +#include "globstr.hrc" +#include "bf_sc.hrc" +#include "printopt.hxx" + +#define _PRINTFUN_CXX +#include "printfun.hxx" +namespace binfilter { + + + +#define ZOOM_MIN 10 + +#define GET_BOOL(set,which) ((const SfxBoolItem&)(set)->Get((which))).GetValue() +#define GET_USHORT(set,which) ((const SfxUInt16Item&)(set)->Get((which))).GetValue() +#define GET_SHOW(set,which) ( VOBJ_MODE_SHOW == ScVObjMode( ((const ScViewObjectModeItem&)(set)->Get((which))).GetValue()) ) + +//------------------------------------------------------------------------ + + + +/*N*/ void ScPageRowEntry::SetPagesX(USHORT nNew) +/*N*/ { +/*N*/ if (pHidden) +/*N*/ { +/*N*/ DBG_ERROR("SetPagesX nicht nach SetHidden"); +/*N*/ delete[] pHidden; +/*N*/ pHidden = NULL; +/*N*/ } +/*N*/ nPagesX = nNew; +/*N*/ } + + + + +//------------------------------------------------------------------------ + +/*N*/ long lcl_LineTotal(const SvxBorderLine* pLine) +/*N*/ { +/*N*/ return pLine ? ( pLine->GetOutWidth() + pLine->GetInWidth() + pLine->GetDistance() ) : 0; +/*N*/ } + +/*M*/ void ScPrintFunc::Construct( const ScPrintOptions* pOptions ) +/*M*/ { +/*M*/ pDoc = pDocShell->GetDocument(); +/*M*/ +/*M*/ SfxPrinter* pDocPrinter = pDoc->GetPrinter(); // auch fuer Preview den Drucker nehmen +/*M*/ if (pDocPrinter) +/*M*/ aOldPrinterMode = pDocPrinter->GetMapMode(); +/*M*/ +/*M*/ // einheitlicher MapMode ueber alle Aufrufe (z.B. Repaint !!!), +/*M*/ // weil die EditEngine sonst unterschiedliche Texthoehen liefert +/*M*/ pDev->SetMapMode(MAP_PIXEL); +/*M*/ +/*M*/ pPageEndX = NULL; +/*M*/ pPageEndY = NULL; +/*M*/ pPageRows = NULL; +/*M*/ pBorderItem = NULL; +/*M*/ pBackgroundItem = NULL; +/*M*/ pShadowItem = NULL; +/*M*/ +/*M*/ pEditEngine = NULL; +/*M*/ pEditDefaults = NULL; +/*M*/ +/*M*/ ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool(); +/*M*/ SfxStyleSheetBase* pStyleSheet = pStylePool->Find( +/*M*/ pDoc->GetPageStyle( nPrintTab ), +/*M*/ SFX_STYLE_FAMILY_PAGE ); +/*M*/ if (pStyleSheet) +/*M*/ pParamSet = &pStyleSheet->GetItemSet(); +/*M*/ else +/*M*/ { +/*M*/ DBG_ERROR("Seitenvorlage nicht gefunden" ); +/*M*/ pParamSet = NULL; +/*M*/ } +/*M*/ +/*M*/ if (!bState) +/*M*/ nZoom = 100; +/*M*/ nManualZoom = 100; +/*M*/ bClearWin = FALSE; +/*M*/ bUseStyleColor = FALSE; +/*M*/ bIsRender = FALSE; +/*M*/ +/*M*/ InitParam(pOptions); +/*M*/ +/*M*/ pPageData = NULL; // wird nur zur Initialisierung gebraucht +/*M*/ } + +/*N*/ ScPrintFunc::ScPrintFunc( ScDocShell* pShell, SfxPrinter* pNewPrinter, USHORT nTab, +/*N*/ long nPage, long nDocP, const ScRange* pArea, +/*N*/ const ScPrintOptions* pOptions, +/*N*/ ScPageBreakData* pData ) +/*N*/ : pDocShell ( pShell ), +/*N*/ pPrinter ( pNewPrinter ), +/*N*/ pDrawView ( NULL ), +/*N*/ nPrintTab ( nTab ), +/*N*/ nPageStart ( nPage ), +/*N*/ nDocPages ( nDocP ), +/*N*/ pUserArea ( pArea ), +/*N*/ pPageData ( pData ), +/*N*/ nTotalPages ( 0 ), +/*N*/ nTabPages ( 0 ), +/*N*/ bState ( FALSE ), +/*N*/ bPrintCurrentTable ( FALSE ), +/*N*/ bMultiArea ( FALSE ), +/*N*/ bSourceRangeValid ( FALSE ) +/*N*/ { +/*N*/ pDev = pPrinter; +/*N*/ aSrcOffset = pPrinter->PixelToLogic( pPrinter->GetPageOffsetPixel(), MAP_100TH_MM ); +/*N*/ Construct( pOptions ); +/*N*/ } + +/*N*/ ScPrintFunc::~ScPrintFunc() +/*N*/ { +/*N*/ ScTripel* pTripel = (ScTripel*) aNotePosList.First(); +/*N*/ while (pTripel) +/*N*/ { +/*?*/ delete pTripel; +/*?*/ pTripel = (ScTripel*) aNotePosList.Next(); +/*N*/ } +/*N*/ aNotePosList.Clear(); +/*N*/ +/*N*/ delete[] pPageEndX; +/*N*/ delete[] pPageEndY; +/*N*/ delete[] pPageRows; +/*N*/ delete pEditDefaults; +/*N*/ delete pEditEngine; +/*N*/ +/*N*/ // Druckereinstellungen werden jetzt von aussen wiederhergestellt +/*N*/ +/*N*/ // #64294# Fuer DrawingLayer/Charts muss der MapMode am Drucker (RefDevice) immer stimmen +/*N*/ SfxPrinter* pDocPrinter = pDoc->GetPrinter(); // auch fuer Preview den Drucker nehmen +/*N*/ if (pDocPrinter) +/*N*/ pDocPrinter->SetMapMode(aOldPrinterMode); +/*N*/ } + +// +// Drucken +// + +/*N*/ void lcl_FillHFParam( ScPrintHFParam& rParam, const SfxItemSet* pHFSet ) +/*N*/ { +/*N*/ // nDistance muss vorher unterschiedlich initalisiert sein +/*N*/ +/*N*/ if ( pHFSet == NULL ) +/*N*/ { +/*N*/ rParam.bEnable = FALSE; +/*N*/ rParam.pBorder = NULL; +/*N*/ rParam.pBack = NULL; +/*N*/ rParam.pShadow = NULL; +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ rParam.bEnable = ((const SfxBoolItem&) pHFSet->Get(ATTR_PAGE_ON)).GetValue(); +/*N*/ rParam.bDynamic = ((const SfxBoolItem&) pHFSet->Get(ATTR_PAGE_DYNAMIC)).GetValue(); +/*N*/ rParam.bShared = ((const SfxBoolItem&) pHFSet->Get(ATTR_PAGE_SHARED)).GetValue(); +/*N*/ rParam.nHeight = ((const SvxSizeItem&) pHFSet->Get(ATTR_PAGE_SIZE)).GetSize().Height(); +/*N*/ const SvxLRSpaceItem* pHFLR = &(const SvxLRSpaceItem&) pHFSet->Get(ATTR_LRSPACE); +/*N*/ long nTmp; +/*N*/ nTmp = pHFLR->GetLeft(); +/*N*/ rParam.nLeft = nTmp < 0 ? 0 : USHORT(nTmp); +/*N*/ nTmp = pHFLR->GetRight(); +/*N*/ rParam.nRight = nTmp < 0 ? 0 : USHORT(nTmp); +/*N*/ rParam.pBorder = (const SvxBoxItem*) &pHFSet->Get(ATTR_BORDER); +/*N*/ rParam.pBack = (const SvxBrushItem*) &pHFSet->Get(ATTR_BACKGROUND); +/*N*/ rParam.pShadow = (const SvxShadowItem*)&pHFSet->Get(ATTR_SHADOW);; +/*N*/ +/*N*/ // jetzt doch wieder schon im Dialog: +/*N*/ // rParam.nHeight += rParam.nDistance; // nicht mehr im Dialog ??? +/*N*/ +/*N*/ if (rParam.pBorder) +/*N*/ rParam.nHeight += lcl_LineTotal( rParam.pBorder->GetTop() ) + +/*N*/ lcl_LineTotal( rParam.pBorder->GetBottom() ); +/*N*/ +/*N*/ rParam.nManHeight = rParam.nHeight; +/*N*/ } +/*N*/ +/*N*/ if (!rParam.bEnable) +/*N*/ rParam.nHeight = 0; +/*N*/ } + +// bNew = TRUE: benutzten Bereich aus dem Dokument suchen +// bNew = FALSE: nur ganze Zeilen/Spalten begrenzen + +/*N*/ BOOL ScPrintFunc::AdjustPrintArea( BOOL bNew ) +/*N*/ { +/*N*/ USHORT nOldEndCol = nEndCol; // nur wichtig bei !bNew +/*N*/ USHORT nOldEndRow = nEndRow; +/*N*/ BOOL bChangeCol = TRUE; // bei bNew werden beide angepasst +/*N*/ BOOL bChangeRow = TRUE; +/*N*/ +/*N*/ BOOL bNotes = aTableParam.bNotes; +/*N*/ if ( bNew ) +/*N*/ { +/*N*/ nStartCol = nStartRow = 0; +/*N*/ if (!pDoc->GetPrintArea( nPrintTab, nEndCol, nEndRow, bNotes )) +/*N*/ return FALSE; // nix +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ BOOL bFound = TRUE; +/*N*/ bChangeCol = ( nStartCol == 0 && nEndCol == MAXCOL ); +/*N*/ bChangeRow = ( nStartRow == 0 && nEndRow == MAXROW ); +/*N*/ if ( bChangeCol && bChangeRow ) +/*?*/ bFound = pDoc->GetPrintArea( nPrintTab, nEndCol, nEndRow, bNotes ); +/*N*/ else if ( bChangeCol ) +/*?*/ {DBG_BF_ASSERT(0, "STRIP");} //STRIP001 bFound = pDoc->GetPrintAreaHor( nPrintTab, nStartRow, nEndRow, nEndCol, bNotes ); +/*N*/ else if ( bChangeRow ) +/*?*/ {DBG_BF_ASSERT(0, "STRIP");}//STRIP001 bFound = pDoc->GetPrintAreaVer( nPrintTab, nStartCol, nEndCol, nEndRow, bNotes ); +/*N*/ +/*N*/ if (!bFound) +/*N*/ return FALSE; // leer +/*N*/ } +/*N*/ +/*N*/ pDoc->ExtendMerge( nStartCol,nStartRow, nEndCol,nEndRow, nPrintTab, +/*N*/ FALSE, TRUE ); // kein Refresh, incl. Attrs +/*N*/ +/*N*/ if ( bChangeCol ) +/*N*/ { +/*N*/ OutputDevice* pRefDev = pDoc->GetPrinter(); // auch fuer Preview den Drucker nehmen +/*N*/ pRefDev->SetMapMode( MAP_PIXEL ); // wichtig fuer GetNeededSize +/*N*/ +/*N*/ pDoc->ExtendPrintArea( pRefDev, +/*N*/ nPrintTab, nStartCol, nStartRow, nEndCol, nEndRow ); +/*N*/ // nEndCol wird veraendert +/*N*/ } +/*N*/ +/*N*/ if ( nEndCol < MAXCOL && pDoc->HasAttrib( +/*N*/ nEndCol,nStartRow,nPrintTab, nEndCol,nEndRow,nPrintTab, HASATTR_SHADOW_RIGHT ) ) +/*N*/ ++nEndCol; +/*N*/ if ( nEndRow < MAXROW && pDoc->HasAttrib( +/*N*/ nStartCol,nEndRow,nPrintTab, nEndCol,nEndRow,nPrintTab, HASATTR_SHADOW_DOWN ) ) +/*N*/ ++nEndRow; +/*N*/ +/*N*/ if (!bChangeCol) nEndCol = nOldEndCol; +/*N*/ if (!bChangeRow) nEndRow = nOldEndRow; +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +/*N*/ long ScPrintFunc::TextHeight( const EditTextObject* pObject ) +/*N*/ { +/*N*/ if (!pObject) +/*N*/ return 0; +/*N*/ +/*N*/ // pEditEngine->SetPageNo( nTotalPages ); +/*N*/ pEditEngine->SetTextNewDefaults( *pObject, *pEditDefaults, FALSE ); +/*N*/ +/*N*/ return (long) pEditEngine->GetTextHeight(); +/*N*/ } + +// nZoom muss gesetzt sein !!! +// und der entsprechende Twip-MapMode eingestellt + +/*N*/ void ScPrintFunc::UpdateHFHeight( ScPrintHFParam& rParam ) +/*N*/ { +/*N*/ DBG_ASSERT( aPageSize.Width(), "UpdateHFHeight ohne aPageSize"); +/*N*/ +/*N*/ if (rParam.bEnable && rParam.bDynamic) +/*N*/ { +/*N*/ // nHeight aus Inhalten berechnen +/*N*/ +/*N*/ MakeEditEngine(); +/*N*/ long nPaperWidth = ( aPageSize.Width() - nLeftMargin - nRightMargin - +/*N*/ rParam.nLeft - rParam.nRight ) * 100 / nZoom; +/*N*/ if (rParam.pBorder) +/*N*/ nPaperWidth -= ( rParam.pBorder->GetDistance(BOX_LINE_LEFT) + +/*N*/ rParam.pBorder->GetDistance(BOX_LINE_RIGHT) + +/*N*/ lcl_LineTotal(rParam.pBorder->GetLeft()) + +/*N*/ lcl_LineTotal(rParam.pBorder->GetRight()) ) * 100 / nZoom; +/*N*/ +/*N*/ if (rParam.pShadow && rParam.pShadow->GetLocation() != SVX_SHADOW_NONE) +/*N*/ nPaperWidth -= ( rParam.pShadow->CalcShadowSpace(SHADOW_LEFT) + +/*N*/ rParam.pShadow->CalcShadowSpace(SHADOW_RIGHT) ) * 100L / nZoom; +/*N*/ +/*N*/ pEditEngine->SetPaperSize( Size( nPaperWidth, 10000 ) ); +/*N*/ +/*N*/ long nMaxHeight = 0; +/*N*/ if ( rParam.pLeft ) +/*N*/ { +/*N*/ nMaxHeight = Max( nMaxHeight, TextHeight( rParam.pLeft->GetLeftArea() ) ); +/*N*/ nMaxHeight = Max( nMaxHeight, TextHeight( rParam.pLeft->GetCenterArea() ) ); +/*N*/ nMaxHeight = Max( nMaxHeight, TextHeight( rParam.pLeft->GetRightArea() ) ); +/*N*/ } +/*N*/ if ( rParam.pRight ) +/*N*/ { +/*N*/ nMaxHeight = Max( nMaxHeight, TextHeight( rParam.pRight->GetLeftArea() ) ); +/*N*/ nMaxHeight = Max( nMaxHeight, TextHeight( rParam.pRight->GetCenterArea() ) ); +/*N*/ nMaxHeight = Max( nMaxHeight, TextHeight( rParam.pRight->GetRightArea() ) ); +/*N*/ } +/*N*/ +/*N*/ rParam.nHeight = nMaxHeight + rParam.nDistance; +/*N*/ if (rParam.pBorder) +/*N*/ rParam.nHeight += rParam.pBorder->GetDistance(BOX_LINE_TOP) + +/*N*/ rParam.pBorder->GetDistance(BOX_LINE_BOTTOM) + +/*N*/ lcl_LineTotal( rParam.pBorder->GetTop() ) + +/*N*/ lcl_LineTotal( rParam.pBorder->GetBottom() ); +/*N*/ if (rParam.pShadow && rParam.pShadow->GetLocation() != SVX_SHADOW_NONE) +/*N*/ rParam.nHeight += rParam.pShadow->CalcShadowSpace(SHADOW_TOP) + +/*N*/ rParam.pShadow->CalcShadowSpace(SHADOW_BOTTOM); +/*N*/ +/*N*/ if (rParam.nHeight < rParam.nManHeight) +/*N*/ rParam.nHeight = rParam.nManHeight; // eingestelltes Minimum +/*N*/ } +/*N*/ } + +/*N*/ void ScPrintFunc::InitParam( const ScPrintOptions* pOptions ) +/*N*/ { +/*N*/ if (!pParamSet) +/*N*/ return; +/*N*/ +/*N*/ // TabPage "Seite" +/*N*/ const SvxLRSpaceItem* pLRItem = (const SvxLRSpaceItem*) &pParamSet->Get( ATTR_LRSPACE ); +/*N*/ long nTmp; +/*N*/ nTmp = pLRItem->GetLeft(); +/*N*/ nLeftMargin = nTmp < 0 ? 0 : USHORT(nTmp); +/*N*/ nTmp = pLRItem->GetRight(); +/*N*/ nRightMargin = nTmp < 0 ? 0 : USHORT(nTmp); +/*N*/ const SvxULSpaceItem* pULItem = (const SvxULSpaceItem*) &pParamSet->Get( ATTR_ULSPACE ); +/*N*/ nTopMargin = pULItem->GetUpper(); +/*N*/ nBottomMargin = pULItem->GetLower(); +/*N*/ +/*N*/ const SvxPageItem* pPageItem = (const SvxPageItem*) &pParamSet->Get( ATTR_PAGE ); +/*N*/ nPageUsage = pPageItem->GetPageUsage(); +/*N*/ bLandscape = pPageItem->IsLandscape(); +/*N*/ aFieldData.eNumType = pPageItem->GetNumType(); +/*N*/ +/*N*/ bCenterHor = ((const SfxBoolItem&) pParamSet->Get(ATTR_PAGE_HORCENTER)).GetValue(); +/*N*/ bCenterVer = ((const SfxBoolItem&) pParamSet->Get(ATTR_PAGE_VERCENTER)).GetValue(); +/*N*/ +/*N*/ aPageSize = ((const SvxSizeItem&) pParamSet->Get(ATTR_PAGE_SIZE)).GetSize(); +/*N*/ if ( !aPageSize.Width() || !aPageSize.Height() ) +/*N*/ { +/*?*/ DBG_ERROR("PageSize Null ?!?!?"); +/*?*/ aPageSize = SvxPaperInfo::GetPaperSize( SVX_PAPER_A4 ); +/*N*/ } +/*N*/ +/*N*/ pBorderItem = (const SvxBoxItem*) &pParamSet->Get(ATTR_BORDER); +/*N*/ pBackgroundItem = (const SvxBrushItem*) &pParamSet->Get(ATTR_BACKGROUND); +/*N*/ pShadowItem = (const SvxShadowItem*) &pParamSet->Get(ATTR_SHADOW); +/*N*/ +/*N*/ // TabPage "Kopfzeile" +/*N*/ +/*N*/ aHdr.pLeft = (const ScPageHFItem*) &pParamSet->Get(ATTR_PAGE_HEADERLEFT); // Inhalt +/*N*/ aHdr.pRight = (const ScPageHFItem*) &pParamSet->Get(ATTR_PAGE_HEADERRIGHT); +/*N*/ +/*N*/ const SvxSetItem* pHeaderSetItem; +/*N*/ const SfxItemSet* pHeaderSet = NULL; +/*N*/ if ( pParamSet->GetItemState( ATTR_PAGE_HEADERSET, FALSE, +/*N*/ (const SfxPoolItem**)&pHeaderSetItem ) == SFX_ITEM_SET ) +/*N*/ { +/*N*/ pHeaderSet = &pHeaderSetItem->GetItemSet(); +/*N*/ // Kopfzeile hat unteren Abstand +/*N*/ aHdr.nDistance = ((const SvxULSpaceItem&) pHeaderSet->Get(ATTR_ULSPACE)).GetLower(); +/*N*/ } +/*N*/ lcl_FillHFParam( aHdr, pHeaderSet ); +/*N*/ +/*N*/ // TabPage "Fusszeile" +/*N*/ +/*N*/ aFtr.pLeft = (const ScPageHFItem*) &pParamSet->Get(ATTR_PAGE_FOOTERLEFT); // Inhalt +/*N*/ aFtr.pRight = (const ScPageHFItem*) &pParamSet->Get(ATTR_PAGE_FOOTERRIGHT); +/*N*/ +/*N*/ const SvxSetItem* pFooterSetItem; +/*N*/ const SfxItemSet* pFooterSet = NULL; +/*N*/ if ( pParamSet->GetItemState( ATTR_PAGE_FOOTERSET, FALSE, +/*N*/ (const SfxPoolItem**)&pFooterSetItem ) == SFX_ITEM_SET ) +/*N*/ { +/*N*/ pFooterSet = &pFooterSetItem->GetItemSet(); +/*N*/ // Fusszeile hat oberen Abstand +/*N*/ aFtr.nDistance = ((const SvxULSpaceItem&) pFooterSet->Get(ATTR_ULSPACE)).GetUpper(); +/*N*/ } +/*N*/ lcl_FillHFParam( aFtr, pFooterSet ); +/*N*/ +/*N*/ //------------------------------------------------------ +/*N*/ // Table-/Area-Params aus einzelnen Items zusammenbauen: +/*N*/ //------------------------------------------------------ +/*N*/ // TabPage "Tabelle" +/*N*/ +/*N*/ const SfxUInt16Item* pScaleItem = NULL; +/*N*/ const SfxUInt16Item* pScaleToPagesItem = NULL; +/*N*/ SfxItemState eState; +/*N*/ +/*N*/ eState = pParamSet->GetItemState( ATTR_PAGE_SCALE, FALSE, +/*N*/ (const SfxPoolItem**)&pScaleItem ); +/*N*/ if ( SFX_ITEM_DEFAULT == eState ) +/*N*/ pScaleItem = (const SfxUInt16Item*) +/*N*/ &pParamSet->GetPool()-> +/*N*/ GetDefaultItem( ATTR_PAGE_SCALE ); +/*N*/ +/*N*/ eState = pParamSet->GetItemState( ATTR_PAGE_SCALETOPAGES, FALSE, +/*N*/ (const SfxPoolItem**)&pScaleToPagesItem ); +/*N*/ if ( SFX_ITEM_DEFAULT == eState ) +/*N*/ pScaleToPagesItem = (const SfxUInt16Item*) +/*N*/ &pParamSet->GetPool()-> +/*N*/ GetDefaultItem( ATTR_PAGE_SCALETOPAGES ); +/*N*/ +/*N*/ DBG_ASSERT( pScaleItem && pScaleToPagesItem, "Missing ScaleItem! :-/" ); +/*N*/ +/*N*/ aTableParam.bNotes = GET_BOOL(pParamSet,ATTR_PAGE_NOTES); +/*N*/ aTableParam.bGrid = GET_BOOL(pParamSet,ATTR_PAGE_GRID); +/*N*/ aTableParam.bHeaders = GET_BOOL(pParamSet,ATTR_PAGE_HEADERS); +/*N*/ aTableParam.bFormulas = GET_BOOL(pParamSet,ATTR_PAGE_FORMULAS); +/*N*/ aTableParam.bNullVals = GET_BOOL(pParamSet,ATTR_PAGE_NULLVALS); +/*N*/ aTableParam.bCharts = GET_SHOW(pParamSet,ATTR_PAGE_CHARTS); +/*N*/ aTableParam.bObjects = GET_SHOW(pParamSet,ATTR_PAGE_OBJECTS); +/*N*/ aTableParam.bDrawings = GET_SHOW(pParamSet,ATTR_PAGE_DRAWINGS); +/*N*/ aTableParam.bTopDown = GET_BOOL(pParamSet,ATTR_PAGE_TOPDOWN); +/*N*/ aTableParam.bLeftRight = !aTableParam.bLeftRight; +/*N*/ aTableParam.nFirstPageNo = GET_USHORT(pParamSet,ATTR_PAGE_FIRSTPAGENO); +/*N*/ if (!aTableParam.nFirstPageNo) +/*N*/ aTableParam.nFirstPageNo = (USHORT) nPageStart; // von vorheriger Tabelle +/*N*/ +/*N*/ if ( pScaleItem && pScaleToPagesItem ) +/*N*/ { +/*N*/ UINT16 nScaleAll = pScaleItem->GetValue(); +/*N*/ UINT16 nScaleToPages = pScaleToPagesItem->GetValue(); +/*N*/ +/*N*/ aTableParam.bScaleNone = (nScaleAll == 100); +/*N*/ aTableParam.bScaleAll = (nScaleAll > 0 ); +/*N*/ aTableParam.bScalePageNum = (nScaleToPages > 0 ); +/*N*/ aTableParam.nScaleAll = nScaleAll; +/*N*/ aTableParam.nScalePageNum = nScaleToPages; +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ aTableParam.bScaleNone = TRUE; +/*N*/ aTableParam.bScaleAll = FALSE; +/*N*/ aTableParam.bScalePageNum = FALSE; +/*N*/ aTableParam.nScaleAll = 0; +/*N*/ aTableParam.nScalePageNum = 0; +/*N*/ } +/*N*/ +/*N*/ // skip empty pages only if options with that flag are passed +/*N*/ aTableParam.bSkipEmpty = pOptions && pOptions->GetSkipEmpty(); +/*N*/ if ( pPageData ) +/*N*/ aTableParam.bSkipEmpty = FALSE; +/*N*/ // Wenn pPageData gesetzt ist, interessieren fuer die Umbruch-Vorschau +/*N*/ // nur die Umbrueche, leere Seiten werden nicht speziell behandelt +/*N*/ +/*N*/ //------------------------------------------------------ +/*N*/ // TabPage "Bereiche": +/*N*/ //------------------------------------------------------ +/*N*/ +/*N*/ //! alle PrintAreas der Tabelle durchgehen !!! +/*N*/ const ScRange* pPrintArea = pDoc->GetPrintRange( nPrintTab, 0 ); +/*N*/ const ScRange* pRepeatCol = pDoc->GetRepeatColRange( nPrintTab ); +/*N*/ const ScRange* pRepeatRow = pDoc->GetRepeatRowRange( nPrintTab ); +/*N*/ +/*N*/ // ATTR_PAGE_PRINTTABLES wird ignoriert +/*N*/ +/*N*/ if ( pUserArea ) // UserArea (Selektion) hat Vorrang +/*N*/ { +/*?*/ bPrintCurrentTable = +/*?*/ aAreaParam.bPrintArea = TRUE; // Selektion +/*?*/ aAreaParam.aPrintArea = *pUserArea; +/*?*/ +/*?*/ // Die Tabellen-Abfrage ist schon in DocShell::Print, hier immer +/*?*/ aAreaParam.aPrintArea.aStart.SetTab(nPrintTab); +/*?*/ aAreaParam.aPrintArea.aEnd.SetTab(nPrintTab); +/*?*/ +/*?*/ // lcl_LimitRange( aAreaParam.aPrintArea, nPrintTab ); // ganze Zeilen/Spalten... +/*N*/ } +/*N*/ else if ( pDoc->HasPrintRange() ) +/*N*/ { +/*N*/ if ( pPrintArea ) // mindestens eine gesetzt ? +/*N*/ { +/*N*/ bPrintCurrentTable = +/*N*/ aAreaParam.bPrintArea = TRUE; +/*N*/ aAreaParam.aPrintArea = *pPrintArea; +/*N*/ +/*N*/ bMultiArea = ( pDoc->GetPrintRangeCount(nPrintTab) > 1 ); +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ aAreaParam.bPrintArea = TRUE; +/*N*/ bPrintCurrentTable = FALSE; +/*N*/ } +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ // #74834# don't print hidden tables if there's no print range defined there +/*N*/ if ( pDoc->IsVisible( nPrintTab ) ) +/*N*/ { +/*N*/ aAreaParam.bPrintArea = FALSE; +/*N*/ bPrintCurrentTable = TRUE; +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ aAreaParam.bPrintArea = TRUE; // otherwise the table is always counted +/*N*/ bPrintCurrentTable = FALSE; +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ if ( pRepeatCol ) +/*N*/ { +/*N*/ aAreaParam.bRepeatCol = TRUE; +/*N*/ aAreaParam.aRepeatCol = *pRepeatCol; +/*N*/ nRepeatStartCol = pRepeatCol->aStart.Col(); +/*N*/ nRepeatEndCol = pRepeatCol->aEnd .Col(); +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ aAreaParam.bRepeatCol = FALSE; +/*N*/ nRepeatStartCol = nRepeatEndCol = REPEAT_NONE; +/*N*/ } +/*N*/ +/*N*/ if ( pRepeatRow ) +/*N*/ { +/*?*/ aAreaParam.bRepeatRow = TRUE; +/*?*/ aAreaParam.aRepeatRow = *pRepeatRow; +/*?*/ nRepeatStartRow = pRepeatRow->aStart.Row(); +/*?*/ nRepeatEndRow = pRepeatRow->aEnd .Row(); +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ aAreaParam.bRepeatRow = FALSE; +/*N*/ nRepeatStartRow = nRepeatEndRow = REPEAT_NONE; +/*N*/ } +/*N*/ +/*N*/ // +/*N*/ // Seiten aufteilen +/*N*/ // +/*N*/ +/*N*/ if (!bState) +/*N*/ { +/*N*/ nTabPages = CountPages(); // berechnet auch Zoom +/*N*/ nTotalPages = nTabPages; +/*N*/ nTotalPages += CountNotePages(); +/*N*/ } +/*N*/ else +/*N*/ { +/*?*/ CalcPages(); // nur Umbrueche suchen +/*?*/ CountNotePages(); // Notizen zaehlen, auch wenn Seitenzahl schon bekannt +/*N*/ } +/*N*/ +/*N*/ if (nDocPages) +/*N*/ aFieldData.nTotalPages = nDocPages; +/*N*/ else +/*N*/ aFieldData.nTotalPages = nTotalPages; +/*N*/ +/*N*/ SetDateTime( Date(), Time() ); +/*N*/ +/*N*/ aFieldData.aTitle = pDocShell->GetTitle(); +/*N*/ const INetURLObject& rURLObj = pDocShell->GetMedium()->GetURLObject(); +/*N*/ aFieldData.aLongDocName = rURLObj.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ); +/*N*/ if ( aFieldData.aLongDocName.Len() ) +/*?*/ aFieldData.aShortDocName = rURLObj.GetName( INetURLObject::DECODE_UNAMBIGUOUS ); +/*N*/ else +/*N*/ aFieldData.aShortDocName = aFieldData.aLongDocName = aFieldData.aTitle; +/*N*/ +/*N*/ } + + + +/*N*/ void ScPrintFunc::SetDateTime( const Date& rDate, const Time& rTime ) +/*N*/ { +/*N*/ aFieldData.aDate = rDate; +/*N*/ aFieldData.aTime = rTime; +/*N*/ } + + +// Rahmen wird nach innen gezeichnet + + + + + + + + +/*!!!!!!!!!!! Notizen in Tabelle markieren ?????????????????????????? + + if (aTableParam.bNotes) + { + pDev->SetMapMode(aOffsetMode); + aOutputData.PrintNoteMarks(aNotePosList); + pDev->SetMapMode(aLogicMode); + } +*/ + + +/*N*/ void ScPrintFunc::MakeEditEngine() +/*N*/ { +/*N*/ if (!pEditEngine) +/*N*/ { +/*N*/ // can't use document's edit engine pool here, +/*N*/ // because pool must have twips as default metric +/*N*/ pEditEngine = new ScHeaderEditEngine( EditEngine::CreatePool(), TRUE ); +/*N*/ +/*N*/ pEditEngine->EnableUndo(FALSE); +/*N*/ pEditEngine->SetRefDevice( pDev ); +/*N*/ pEditEngine->SetWordDelimiters( +/*N*/ ScEditUtil::ModifyDelimiters( pEditEngine->GetWordDelimiters() ) ); +/*N*/ pEditEngine->SetControlWord( pEditEngine->GetControlWord() & ~EE_CNTRL_RTFSTYLESHEETS ); +/*N*/ pEditEngine->EnableAutoColor( bUseStyleColor ); +/*N*/ +/*N*/ // Default-Set fuer Ausrichtung +/*N*/ pEditDefaults = new SfxItemSet( pEditEngine->GetEmptyItemSet() ); +/*N*/ +/*N*/ const ScPatternAttr& rPattern = (const ScPatternAttr&)pDoc->GetPool()->GetDefaultItem(ATTR_PATTERN); +/*N*/ rPattern.FillEditItemSet( pEditDefaults ); +/*N*/ // FillEditItemSet adjusts font height to 1/100th mm, +/*N*/ // but for header/footer twips is needed, as in the PatternAttr: +/*N*/ pEditDefaults->Put( rPattern.GetItem(ATTR_FONT_HEIGHT), EE_CHAR_FONTHEIGHT ); +/*N*/ pEditDefaults->Put( rPattern.GetItem(ATTR_CJK_FONT_HEIGHT), EE_CHAR_FONTHEIGHT_CJK ); +/*N*/ pEditDefaults->Put( rPattern.GetItem(ATTR_CTL_FONT_HEIGHT), EE_CHAR_FONTHEIGHT_CTL ); +/*N*/ // #69193# dont use font color, because background color is not used +/*N*/ //! there's no way to set the background for note pages +/*N*/ pEditDefaults->ClearItem( EE_CHAR_COLOR ); +/*N*/ } +/*N*/ +/*N*/ pEditEngine->SetData( aFieldData ); // Seitennummer etc. setzen +/*N*/ } + +// +// UpdatePages wird nur von aussen gerufen, um die Umbrueche fuer die Anzeige +// richtig zu setzen - immer ohne UserArea +// + +/*N*/ BOOL ScPrintFunc::UpdatePages() +/*N*/ { +/*N*/ if (!pParamSet) +/*N*/ return FALSE; +/*N*/ +/*N*/ // Zoom +/*N*/ +/*N*/ nZoom = 100; +/*N*/ if (aTableParam.bScalePageNum) +/*N*/ nZoom = ZOOM_MIN; // stimmt fuer Umbrueche +/*N*/ else if (aTableParam.bScaleAll) +/*N*/ { +/*N*/ nZoom = aTableParam.nScaleAll; +/*N*/ if ( nZoom <= ZOOM_MIN ) +/*N*/ nZoom = ZOOM_MIN; +/*N*/ } +/*N*/ +/*N*/ String aName = pDoc->GetPageStyle( nPrintTab ); +/*N*/ USHORT nTabCount = pDoc->GetTableCount(); +/*N*/ for (USHORT nTab=0; nTab<nTabCount; nTab++) +/*N*/ if ( nTab==nPrintTab || pDoc->GetPageStyle(nTab)==aName ) +/*N*/ { +/*N*/ // Wiederholungszeilen / Spalten +/*N*/ pDoc->SetRepeatArea( nTab, nRepeatStartCol,nRepeatEndCol, nRepeatStartRow,nRepeatEndRow ); +/*N*/ +/*N*/ // Umbrueche setzen +/*N*/ ResetBreaks(nTab); +/*N*/ pDocShell->PostPaint(0,0,nTab, MAXCOL,MAXROW,nTab, PAINT_GRID); +/*N*/ } +/*N*/ +/*N*/ return TRUE; +/*N*/ } + +/*N*/ long ScPrintFunc::CountPages() // setzt auch nPagesX, nPagesY +/*N*/ { +/*N*/ BOOL bAreaOk = FALSE; +/*N*/ +/*N*/ if (pDoc->HasTable( nPrintTab )) +/*N*/ { +/*N*/ if (aAreaParam.bPrintArea) // Druckbereich angegeben? +/*N*/ { +/*N*/ if ( bPrintCurrentTable ) +/*N*/ { +/*N*/ ScRange& rRange = aAreaParam.aPrintArea; +/*N*/ +/*N*/ // hier kein Vergleich der Tabellen mehr, die Area gilt immer fuer diese Tabelle +/*N*/ // wenn hier verglichen werden soll, muss die Tabelle der Druckbereiche beim +/*N*/ // Einfuegen von Tabellen etc. angepasst werden ! +/*N*/ +/*N*/ nStartCol = rRange.aStart.Col(); +/*N*/ nStartRow = rRange.aStart.Row(); +/*N*/ nEndCol = rRange.aEnd .Col(); +/*N*/ nEndRow = rRange.aEnd .Row(); +/*N*/ bAreaOk = AdjustPrintArea(FALSE); // begrenzen +/*N*/ } +/*N*/ else +/*N*/ bAreaOk = FALSE; +/*N*/ } +/*N*/ else // aus Dokument suchen +/*N*/ bAreaOk = AdjustPrintArea(TRUE); +/*N*/ } +/*N*/ +/*N*/ if (bAreaOk) +/*N*/ { +/*N*/ long nPages = 0; +/*N*/ USHORT nY; +/*N*/ if (bMultiArea) +/*N*/ { +/*?*/ USHORT nRCount = pDoc->GetPrintRangeCount( nPrintTab ); +/*?*/ for (USHORT i=0; i<nRCount; i++) +/*?*/ { +/*?*/ CalcZoom(i); +/*?*/ if ( aTableParam.bSkipEmpty ) +/*?*/ for (nY=0; nY<nPagesY; nY++) + {DBG_BF_ASSERT(0, "STRIP");} //STRIP001 /*?*/ nPages += pPageRows[nY].CountVisible(); +/*?*/ else +/*?*/ nPages += ((long) nPagesX) * nPagesY; +/*?*/ if ( pPageData ) + {DBG_BF_ASSERT(0, "STRIP");} //STRIP001 /*?*/ FillPageData(); +/*?*/ } +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ CalcZoom(RANGENO_NORANGE); // Zoom berechnen +/*N*/ if ( aTableParam.bSkipEmpty ) +/*?*/ for (nY=0; nY<nPagesY; nY++) + {DBG_BF_ASSERT(0, "STRIP");} //STRIP001 /*?*/ nPages += pPageRows[nY].CountVisible(); +/*N*/ else +/*N*/ nPages += ((long) nPagesX) * nPagesY; +/*N*/ if ( pPageData ) + {DBG_BF_ASSERT(0, "STRIP");} //STRIP001 /*?*/ FillPageData(); +/*N*/ } +/*N*/ return nPages; +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ // nZoom = 100; // nZoom auf letztem Wert stehenlassen !!! +/*N*/ nPagesX = nPagesY = nTotalY = 0; +/*N*/ return 0; +/*N*/ } +/*N*/ } + +/*N*/ long ScPrintFunc::CountNotePages() +/*N*/ { +/*N*/ if ( !aTableParam.bNotes || !bPrintCurrentTable ) +/*N*/ return 0; +/*N*/ +/*?*/ long nCount=0; +/*?*/ USHORT nCol; +/*?*/ USHORT nRow; +/*?*/ +/*?*/ BOOL bError = FALSE; +/*?*/ if (!aAreaParam.bPrintArea) +/*?*/ bError = !AdjustPrintArea(TRUE); // komplett aus Dok suchen +/*?*/ +/*?*/ USHORT nRepeats = 1; // wie oft durchgehen ? +/*?*/ if (bMultiArea) +/*?*/ nRepeats = pDoc->GetPrintRangeCount(nPrintTab); +/*?*/ if (bError) +/*?*/ nRepeats = 0; +/*?*/ +/*?*/ for (USHORT nStep=0; nStep<nRepeats; nStep++) +/*?*/ { +/*?*/ BOOL bDoThis = TRUE; +/*?*/ if (bMultiArea) // alle Areas durchgehen +/*?*/ { +/*?*/ const ScRange* pThisRange = pDoc->GetPrintRange( nPrintTab, nStep ); +/*?*/ if ( pThisRange ) +/*?*/ { +/*?*/ nStartCol = pThisRange->aStart.Col(); +/*?*/ nStartRow = pThisRange->aStart.Row(); +/*?*/ nEndCol = pThisRange->aEnd .Col(); +/*?*/ nEndRow = pThisRange->aEnd .Row(); +/*?*/ bDoThis = AdjustPrintArea(FALSE); +/*?*/ } +/*?*/ } +/*?*/ +/*?*/ if (bDoThis) +/*?*/ { +/*?*/ ScHorizontalCellIterator aIter( pDoc, nPrintTab, nStartCol,nStartRow, nEndCol,nEndRow ); +/*?*/ ScBaseCell* pCell = aIter.GetNext( nCol, nRow ); +/*?*/ while (pCell) +/*?*/ { +/*?*/ if (pCell->GetNotePtr()) +/*?*/ { +/*?*/ aNotePosList.Insert( new ScTripel( nCol,nRow,nPrintTab ), LIST_APPEND ); +/*?*/ ++nCount; +/*?*/ } +/*?*/ +/*?*/ pCell = aIter.GetNext( nCol, nRow ); +/*?*/ } +/*?*/ } +/*?*/ } +/*?*/ +/*?*/ long nPages = 0; +/*?*/ long nNoteNr = 0; +/*?*/ long nNoteAdd; +/*?*/ do +/*?*/ {DBG_BF_ASSERT(0, "STRIP"); nNoteAdd=0;//STRIP001 +/*?*/ } +/*?*/ while (nNoteAdd); +/*?*/ +/*?*/ return nPages; +/*N*/ } + +/*N*/ void ScPrintFunc::InitModes() // aus nZoom etc. die MapModes setzen +/*N*/ { +/*N*/ aOffset = Point( aSrcOffset.X()*100/nZoom, aSrcOffset.Y()*100/nZoom ); +/*N*/ +/*N*/ long nEffZoom = nZoom * (long) nManualZoom; +/*N*/ +/*N*/ // nScaleX = nScaleY = 1.0; // Ausgabe in Twips +/*N*/ nScaleX = nScaleY = HMM_PER_TWIPS; // Ausgabe in 1/100 mm +/*N*/ +/*N*/ Fraction aZoomFract( nEffZoom,10000 ); +/*N*/ Fraction aHorFract = aZoomFract; +/*N*/ +/*N*/ if ( !pPrinter && !bIsRender ) // adjust scale for preview +/*N*/ { +/*?*/ double nFact = pDocShell->GetOutputFactor(); +/*?*/ aHorFract = Fraction( (long)( nEffZoom / nFact ), 10000 ); +/*N*/ } +/*N*/ +/*N*/ aLogicMode = MapMode( MAP_100TH_MM, Point(), aHorFract, aZoomFract ); +/*N*/ +/*N*/ Point aLogicOfs( -aOffset.X(), -aOffset.Y() ); +/*N*/ aOffsetMode = MapMode( MAP_100TH_MM, aLogicOfs, aHorFract, aZoomFract ); +/*N*/ +/*N*/ Point aTwipsOfs( (long) ( -aOffset.X() / nScaleX + 0.5 ), (long) ( -aOffset.Y() / nScaleY + 0.5 ) ); +/*N*/ aTwipMode = MapMode( MAP_TWIP, aTwipsOfs, aHorFract, aZoomFract ); +/*N*/ } + +/*N*/ void ScPrintFunc::CalcZoom( USHORT nRangeNo ) // Zoom berechnen +/*N*/ { +/*N*/ USHORT nRCount = pDoc->GetPrintRangeCount( nPrintTab ); +/*N*/ const ScRange* pThisRange = NULL; +/*N*/ if ( nRangeNo != RANGENO_NORANGE || nRangeNo < nRCount ) +/*?*/ pThisRange = pDoc->GetPrintRange( nPrintTab, nRangeNo ); +/*N*/ if ( pThisRange ) +/*N*/ { +/*?*/ nStartCol = pThisRange->aStart.Col(); +/*?*/ nStartRow = pThisRange->aStart.Row(); +/*?*/ nEndCol = pThisRange->aEnd .Col(); +/*?*/ nEndRow = pThisRange->aEnd .Row(); +/*N*/ } +/*N*/ +/*N*/ if (!AdjustPrintArea(FALSE)) // leer +/*N*/ { +/*N*/ nZoom = 100; +/*N*/ nPagesX = nPagesY = nTotalY = 0; +/*N*/ return; +/*N*/ } +/*N*/ +/*N*/ pDoc->SetRepeatArea( nPrintTab, nRepeatStartCol,nRepeatEndCol, nRepeatStartRow,nRepeatEndRow ); +/*N*/ +/*N*/ if (aTableParam.bScalePageNum) +/*N*/ { +/*N*/ nZoom = 100; +/*N*/ BOOL bFound = FALSE; +/*N*/ USHORT nPagesToFit = aTableParam.nScalePageNum; +/*N*/ while (!bFound) +/*N*/ { +/*N*/ CalcPages(); +/*N*/ if ( nPagesX * nPagesY <= nPagesToFit || nZoom <= ZOOM_MIN ) +/*N*/ bFound = TRUE; +/*N*/ else +/*N*/ --nZoom; +/*N*/ } +/*N*/ } +/*N*/ else if (aTableParam.bScaleAll) +/*N*/ { +/*N*/ nZoom = aTableParam.nScaleAll; +/*N*/ if ( nZoom <= ZOOM_MIN ) +/*N*/ nZoom = ZOOM_MIN; +/*N*/ CalcPages(); +/*N*/ } +/*N*/ else +/*N*/ { +/*N*/ DBG_ASSERT( aTableParam.bScaleNone, "kein Scale-Flag gesetzt" ); +/*N*/ nZoom = 100; +/*N*/ CalcPages(); +/*N*/ } +/*N*/ } + +/*N*/ Size ScPrintFunc::GetDocPageSize() +/*N*/ { +/*N*/ // Hoehe Kopf-/Fusszeile anpassen +/*N*/ +/*N*/ InitModes(); // aTwipMode aus nZoom initialisieren +/*N*/ pDev->SetMapMode( aTwipMode ); // Kopf-/Fusszeilen in Twips +/*N*/ UpdateHFHeight( aHdr ); +/*N*/ UpdateHFHeight( aFtr ); +/*N*/ +/*N*/ // Seitengroesse in Document-Twips +/*N*/ // Berechnung Left / Right auch in PrintPage +/*N*/ +/*N*/ aPageRect = Rectangle( Point(), aPageSize ); +/*N*/ aPageRect.Left() = ( aPageRect.Left() + nLeftMargin ) * 100 / nZoom; +/*N*/ aPageRect.Right() = ( aPageRect.Right() - nRightMargin ) * 100 / nZoom; +/*N*/ aPageRect.Top() = ( aPageRect.Top() + nTopMargin ) * 100 / nZoom + aHdr.nHeight; +/*N*/ aPageRect.Bottom() = ( aPageRect.Bottom() - nBottomMargin ) * 100 / nZoom - aFtr.nHeight; +/*N*/ +/*N*/ Size aDocPageSize = aPageRect.GetSize(); +/*N*/ if (aTableParam.bHeaders) +/*N*/ { +/*N*/ aDocPageSize.Width() -= (long) PRINT_HEADER_WIDTH; +/*N*/ aDocPageSize.Height() -= (long) PRINT_HEADER_HEIGHT; +/*N*/ } +/*N*/ if (pBorderItem) +/*N*/ { +/*N*/ aDocPageSize.Width() -= lcl_LineTotal(pBorderItem->GetLeft()) + +/*N*/ lcl_LineTotal(pBorderItem->GetRight()) + +/*N*/ pBorderItem->GetDistance(BOX_LINE_LEFT) + +/*N*/ pBorderItem->GetDistance(BOX_LINE_RIGHT); +/*N*/ aDocPageSize.Height() -= lcl_LineTotal(pBorderItem->GetTop()) + +/*N*/ lcl_LineTotal(pBorderItem->GetBottom()) + +/*N*/ pBorderItem->GetDistance(BOX_LINE_TOP) + +/*N*/ pBorderItem->GetDistance(BOX_LINE_BOTTOM); +/*N*/ } +/*N*/ if (pShadowItem && pShadowItem->GetLocation() != SVX_SHADOW_NONE) +/*N*/ { +/*?*/ aDocPageSize.Width() -= pShadowItem->CalcShadowSpace(SHADOW_LEFT) + +/*?*/ pShadowItem->CalcShadowSpace(SHADOW_RIGHT); +/*?*/ aDocPageSize.Height() -= pShadowItem->CalcShadowSpace(SHADOW_TOP) + +/*?*/ pShadowItem->CalcShadowSpace(SHADOW_BOTTOM); +/*N*/ } +/*N*/ return aDocPageSize; +/*N*/ } + +/*N*/ void ScPrintFunc::ResetBreaks( USHORT nTab ) // Breaks fuer Anzeige richtig setzen +/*N*/ { +/*N*/ pDoc->SetPageSize( nTab, GetDocPageSize() ); +/*N*/ pDoc->UpdatePageBreaks( nTab, NULL ); +/*N*/ } + + +/*N*/ void ScPrintFunc::CalcPages() // berechnet aPageRect und Seiten aus nZoom +/*N*/ { +/*N*/ if (!pPageEndX) pPageEndX = new USHORT[MAXCOL+1]; +/*N*/ if (!pPageEndY) pPageEndY = new USHORT[MAXROW+1]; +/*N*/ if (!pPageRows) pPageRows = new ScPageRowEntry[MAXROW+1]; //! vorher zaehlen !!!! +/*N*/ +/*N*/ pDoc->SetPageSize( nPrintTab, GetDocPageSize() ); +/*N*/ if (aAreaParam.bPrintArea) +/*N*/ { +/*N*/ ScRange aRange( nStartCol, nStartRow, nPrintTab, nEndCol, nEndRow, nPrintTab ); +/*N*/ pDoc->UpdatePageBreaks( nPrintTab, &aRange ); +/*N*/ } +/*N*/ else +/*N*/ pDoc->UpdatePageBreaks( nPrintTab, NULL ); // sonst wird das Ende markiert +/*N*/ +/*N*/ // +/*N*/ // Seiteneinteilung nach Umbruechen in Col/RowFlags +/*N*/ // Von mehreren Umbruechen in einem ausgeblendeten Bereich zaehlt nur einer. +/*N*/ // +/*N*/ +/*N*/ USHORT i; +/*N*/ nPagesX = 0; +/*N*/ nPagesY = 0; +/*N*/ nTotalY = 0; +/*N*/ +/*N*/ BOOL bVisCol = FALSE; +/*N*/ for (i=nStartCol; i<=nEndCol; i++) +/*N*/ { +/*N*/ BYTE nFlags = pDoc->GetColFlags(i,nPrintTab); +/*N*/ if ( i>nStartCol && bVisCol && (nFlags & CR_PAGEBREAK) ) +/*N*/ { +/*N*/ pPageEndX[nPagesX] = i-1; +/*N*/ ++nPagesX; +/*N*/ bVisCol = FALSE; +/*N*/ } +/*N*/ if (!(nFlags & CR_HIDDEN)) +/*N*/ bVisCol = TRUE; +/*N*/ } +/*N*/ if (bVisCol) // auch am Ende keine leeren Seiten +/*N*/ { +/*N*/ pPageEndX[nPagesX] = nEndCol; +/*N*/ ++nPagesX; +/*N*/ } +/*N*/ +/*N*/ BOOL bVisRow = FALSE; +/*N*/ USHORT nPageStartRow = nStartRow; +/*N*/ for (i=nStartRow; i<=nEndRow; i++) +/*N*/ { +/*N*/ BYTE nFlags = pDoc->GetRowFlags(i,nPrintTab); +/*N*/ if ( i>nStartRow && bVisRow && (nFlags & CR_PAGEBREAK) ) +/*N*/ { +/*N*/ pPageEndY[nTotalY] = i-1; +/*N*/ ++nTotalY; +/*N*/ +/*N*/ if ( !aTableParam.bSkipEmpty || +/*N*/ !pDoc->IsPrintEmpty( nPrintTab, nStartCol, nPageStartRow, nEndCol, i-1 ) ) +/*N*/ { +/*N*/ pPageRows[nPagesY].SetStartRow( nPageStartRow ); +/*N*/ pPageRows[nPagesY].SetEndRow( i-1 ); +/*N*/ pPageRows[nPagesY].SetPagesX( nPagesX ); +/*N*/ if (aTableParam.bSkipEmpty) + {DBG_BF_ASSERT(0, "STRIP");} //STRIP001 /*?*/ lcl_SetHidden( pDoc, nPrintTab, pPageRows[nPagesY], nStartCol, pPageEndX ); +/*N*/ ++nPagesY; +/*N*/ } +/*N*/ +/*N*/ nPageStartRow = i; +/*N*/ bVisRow = FALSE; +/*N*/ } +/*N*/ if (!(nFlags & CR_HIDDEN)) +/*N*/ bVisRow = TRUE; +/*N*/ } +/*N*/ if (bVisRow) +/*N*/ { +/*N*/ pPageEndY[nTotalY] = nEndRow; +/*N*/ ++nTotalY; +/*N*/ +/*N*/ if ( !aTableParam.bSkipEmpty || +/*N*/ !pDoc->IsPrintEmpty( nPrintTab, nStartCol, nPageStartRow, nEndCol, nEndRow ) ) +/*N*/ { +/*N*/ pPageRows[nPagesY].SetStartRow( nPageStartRow ); +/*N*/ pPageRows[nPagesY].SetEndRow( nEndRow ); +/*N*/ pPageRows[nPagesY].SetPagesX( nPagesX ); +/*N*/ if (aTableParam.bSkipEmpty) + {DBG_BF_ASSERT(0, "STRIP");} //STRIP001 /*?*/ lcl_SetHidden( pDoc, nPrintTab, pPageRows[nPagesY], nStartCol, pPageEndX ); +/*N*/ ++nPagesY; +/*N*/ } +/*N*/ } +/*N*/ } + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/binfilter/bf_sc/source/ui/view/sc_viewdata.cxx b/binfilter/bf_sc/source/ui/view/sc_viewdata.cxx new file mode 100644 index 000000000000..c9b8b95cd532 --- /dev/null +++ b/binfilter/bf_sc/source/ui/view/sc_viewdata.cxx @@ -0,0 +1,822 @@ +/* -*- 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. + * + ************************************************************************/ + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +// INCLUDE --------------------------------------------------------------- + +#include "scitems.hxx" + +#define ITEMID_FIELD EE_FEATURE_FIELD +#include <bf_svx/editview.hxx> +#include <bf_svx/outliner.hxx> +#include <bf_svx/zoomitem.hxx> +#include <bf_xmloff/xmluconv.hxx> +#include <rtl/ustrbuf.hxx> +#include <legacysmgr/legacy_binfilters_smgr.hxx> + +#include "viewdata.hxx" +#include "attrib.hxx" +#include "docsh.hxx" +#include "bf_sc.hrc" +#include "editutil.hxx" +#include "miscuno.hxx" +#include "unonames.hxx" +#include "tabcont.hxx" + +#include "ViewSettingsSequenceDefines.hxx" + +namespace binfilter { +using namespace ::com::sun::star; + +// STATIC DATA ----------------------------------------------------------- + +#define SC_GROWY_SMALL_EXTRA 100 +#define SC_GROWY_BIG_EXTRA 200 + +#define TAG_TABBARWIDTH "tw:" + +static BOOL bMoveArea = FALSE; //! Member? +USHORT nEditAdjust = SVX_ADJUST_LEFT; //! Member !!! + +//================================================================== + +/*N*/ ScViewDataTable::ScViewDataTable() : +/*N*/ nCurX( 0 ), +/*N*/ nCurY( 0 ), +/*N*/ bOldCurValid( FALSE ), +/*N*/ eHSplitMode( SC_SPLIT_NONE ), +/*N*/ eVSplitMode( SC_SPLIT_NONE ), +/*N*/ nHSplitPos( 0 ), +/*N*/ nVSplitPos( 0 ), +/*N*/ nFixPosX( 0 ), +/*N*/ nFixPosY( 0 ), +/*N*/ eWhichActive( SC_SPLIT_BOTTOMLEFT ) +/*N*/ { +/*N*/ nPosX[0]=nPosX[1]= +/*N*/ nPosY[0]=nPosY[1]=0; +/*N*/ nTPosX[0]=nTPosX[1]= +/*N*/ nTPosY[0]=nTPosY[1]=0; +/*N*/ nMPosX[0]=nMPosX[1]= +/*N*/ nMPosY[0]=nMPosY[1]=0; +/*N*/ nPixPosX[0]=nPixPosX[1]= +/*N*/ nPixPosY[0]=nPixPosY[1]=0; +/*N*/ } + + +/*N*/ ScViewDataTable::~ScViewDataTable() +/*N*/ { +/*N*/ } + +/*N*/ void ScViewDataTable::WriteUserDataSequence(uno::Sequence <beans::PropertyValue>& rSettings) +/*N*/ { +/*N*/ rSettings.realloc(SC_TABLE_VIEWSETTINGS_COUNT); +/*N*/ beans::PropertyValue* pSettings = rSettings.getArray(); +/*N*/ if (pSettings) +/*N*/ { +/*N*/ pSettings[SC_CURSOR_X].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_CURSORPOSITIONX)); +/*N*/ pSettings[SC_CURSOR_X].Value <<= sal_Int32(nCurX); +/*N*/ pSettings[SC_CURSOR_Y].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_CURSORPOSITIONY)); +/*N*/ pSettings[SC_CURSOR_Y].Value <<= sal_Int32(nCurY); +/*N*/ pSettings[SC_HORIZONTAL_SPLIT_MODE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_HORIZONTALSPLITMODE)); +/*N*/ pSettings[SC_HORIZONTAL_SPLIT_MODE].Value <<= sal_Int16(eHSplitMode); +/*N*/ pSettings[SC_VERTICAL_SPLIT_MODE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_VERTICALSPLITMODE)); +/*N*/ pSettings[SC_VERTICAL_SPLIT_MODE].Value <<= sal_Int16(eVSplitMode); +/*N*/ pSettings[SC_HORIZONTAL_SPLIT_POSITION].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_HORIZONTALSPLITPOSITION)); +/*N*/ if (eHSplitMode == SC_SPLIT_FIX) +/*N*/ pSettings[SC_HORIZONTAL_SPLIT_POSITION].Value <<= sal_Int32(nFixPosX); +/*N*/ else +/*N*/ pSettings[SC_HORIZONTAL_SPLIT_POSITION].Value <<= nHSplitPos; +/*N*/ pSettings[SC_VERTICAL_SPLIT_POSITION].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_VERTICALSPLITPOSITION)); +/*N*/ if (eVSplitMode == SC_SPLIT_FIX) +/*N*/ pSettings[SC_VERTICAL_SPLIT_POSITION].Value <<= sal_Int32(nFixPosY); +/*N*/ else +/*N*/ pSettings[SC_VERTICAL_SPLIT_POSITION].Value <<= nVSplitPos; +/*N*/ pSettings[SC_ACTIVE_SPLIT_RANGE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_ACTIVESPLITRANGE)); +/*N*/ pSettings[SC_ACTIVE_SPLIT_RANGE].Value <<= sal_Int16(eWhichActive); +/*N*/ pSettings[SC_POSITION_LEFT].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_POSITIONLEFT)); +/*N*/ pSettings[SC_POSITION_LEFT].Value <<= sal_Int32(nPosX[SC_SPLIT_LEFT]); +/*N*/ pSettings[SC_POSITION_RIGHT].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_POSITIONRIGHT)); +/*N*/ pSettings[SC_POSITION_RIGHT].Value <<= sal_Int32(nPosX[SC_SPLIT_RIGHT]); +/*N*/ pSettings[SC_POSITION_TOP].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_POSITIONTOP)); +/*N*/ pSettings[SC_POSITION_TOP].Value <<= sal_Int32(nPosY[SC_SPLIT_TOP]); +/*N*/ pSettings[SC_POSITION_BOTTOM].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_POSITIONBOTTOM)); +/*N*/ pSettings[SC_POSITION_BOTTOM].Value <<= sal_Int32(nPosY[SC_SPLIT_BOTTOM]); +/*N*/ } +/*N*/ } + +// #116578# +void ScViewDataTable::ReadUserDataSequence(const uno::Sequence <beans::PropertyValue>& aSettings) +{ + sal_Int32 nCount(aSettings.getLength()); + DBG_ASSERT(nCount == SC_TABLE_VIEWSETTINGS_COUNT, " wrong Table View Settings count"); + sal_Int32 nTemp32(0); + sal_Int16 nTemp16(0); + sal_Int32 nTempPosV(0); + sal_Int32 nTempPosH(0); + for (sal_Int32 i = 0; i < nCount; i++) + { + ::rtl::OUString sName(aSettings[i].Name); + if (sName.compareToAscii(SC_CURSORPOSITIONX) == 0) + { + aSettings[i].Value >>= nTemp32; + nCurX = static_cast<sal_uInt16>(nTemp32); + } + else if (sName.compareToAscii(SC_CURSORPOSITIONY) == 0) + { + aSettings[i].Value >>= nTemp32; + nCurY = static_cast<sal_uInt16>(nTemp32); + } + else if (sName.compareToAscii(SC_HORIZONTALSPLITMODE) == 0) + { + aSettings[i].Value >>= nTemp16; + eHSplitMode = static_cast<ScSplitMode>(nTemp16); + } + else if (sName.compareToAscii(SC_VERTICALSPLITMODE) == 0) + { + aSettings[i].Value >>= nTemp16; + eVSplitMode = static_cast<ScSplitMode>(nTemp16); + } + else if (sName.compareToAscii(SC_HORIZONTALSPLITPOSITION) == 0) + { + aSettings[i].Value >>= nTempPosH; + } + else if (sName.compareToAscii(SC_VERTICALSPLITPOSITION) == 0) + { + aSettings[i].Value >>= nTempPosV; + } + else if (sName.compareToAscii(SC_ACTIVESPLITRANGE) == 0) + { + aSettings[i].Value >>= nTemp16; + eWhichActive = static_cast<ScSplitPos>(nTemp16); + } + else if (sName.compareToAscii(SC_POSITIONLEFT) == 0) + { + aSettings[i].Value >>= nTemp32; + nPosX[SC_SPLIT_LEFT] = static_cast<sal_uInt16>(nTemp32); + } + else if (sName.compareToAscii(SC_POSITIONRIGHT) == 0) + { + aSettings[i].Value >>= nTemp32; + nPosX[SC_SPLIT_RIGHT] = static_cast<sal_uInt16>(nTemp32); + } + else if (sName.compareToAscii(SC_POSITIONTOP) == 0) + { + aSettings[i].Value >>= nTemp32; + nPosY[SC_SPLIT_TOP] = static_cast<sal_uInt16>(nTemp32); + } + else if (sName.compareToAscii(SC_POSITIONBOTTOM) == 0) + { + aSettings[i].Value >>= nTemp32; + nPosY[SC_SPLIT_BOTTOM] = static_cast<sal_uInt16>(nTemp32); + } + } + if (eHSplitMode == SC_SPLIT_FIX) + nFixPosX = static_cast<sal_uInt16>(nTempPosH); + else + nHSplitPos = nTempPosH; + if (eVSplitMode == SC_SPLIT_FIX) + nFixPosY = static_cast<sal_uInt16>(nTempPosV); + else + nVSplitPos = nTempPosV; +} + +//================================================================== + +/*N*/ ScViewData::ScViewData( ScDocShell* pDocSh ) +/*N*/ : pDocShell ( pDocSh ), +// pViewShell ( pViewSh ), +/*N*/ pDoc ( NULL ), +// pView ( pViewSh ), +/*N*/ pOptions ( new ScViewOptions ), +/*N*/ nTabNo ( 0 ), +/*N*/ nRefTabNo ( 0 ), +/*N*/ aZoomX ( 1,1 ), +/*N*/ aZoomY ( 1,1 ), +/*N*/ aPageZoomX ( 3,5 ), // Page-Default: 60% +/*N*/ aPageZoomY ( 3,5 ), +/*N*/ aLogicMode ( MAP_100TH_MM ), +/*N*/ bIsRefMode ( FALSE ), +/*N*/ eRefType ( SC_REFTYPE_NONE ), +/*N*/ nFillMode ( SC_FILL_NONE ), +/*N*/ bDelMarkValid( FALSE ), +/*N*/ bActive ( TRUE ), //! wie initialisieren? +/*N*/ bPagebreak ( FALSE ), + nTabBarWidth( 0 ), // #116578# +/*N*/ pSpellingView ( NULL ) +/*N*/ { +/*N*/ SetGridMode ( TRUE ); +/*N*/ SetSyntaxMode ( FALSE ); +/*N*/ SetHeaderMode ( TRUE ); +/*N*/ SetTabMode ( TRUE ); +/*N*/ SetVScrollMode ( TRUE ); +/*N*/ SetHScrollMode ( TRUE ); +/*N*/ SetOutlineMode ( TRUE ); +/*N*/ +/*N*/ aScrSize = Size( (long) ( STD_COL_WIDTH * PIXEL_PER_TWIPS * OLE_STD_CELLS_X ), +/*N*/ (long) ( ScGlobal::nStdRowHeight * PIXEL_PER_TWIPS * OLE_STD_CELLS_Y ) ); +/*N*/ pTabData[0] = new ScViewDataTable; +/*N*/ USHORT i; +/*N*/ for (i=1; i<=MAXTAB; i++) pTabData[i] = NULL; +/*N*/ pThisTab = pTabData[nTabNo]; +/*N*/ for (i=0; i<4; i++) +/*N*/ { +/*N*/ pEditView[i] = NULL; +/*N*/ bEditActive[i] = FALSE; +/*N*/ } +/*N*/ +/*N*/ nEditEndCol = nEditCol = nEditEndRow = nEditRow = 0; +/*N*/ nTabStartCol = SC_TABSTART_NONE; +/*N*/ +/*N*/ if (pDocShell) +/*N*/ { +/*N*/ pDoc = pDocShell->GetDocument(); +/*N*/ *pOptions = pDoc->GetViewOptions(); +/*N*/ } +/*N*/ +/*N*/ // keine ausgeblendete Tabelle anzeigen: +/*N*/ if (pDoc && !pDoc->IsVisible(nTabNo)) +/*N*/ { +/*?*/ while ( !pDoc->IsVisible(nTabNo) && pDoc->HasTable(nTabNo+1) ) +/*?*/ ++nTabNo; +/*?*/ +/*?*/ pTabData[nTabNo] = new ScViewDataTable; +/*?*/ pThisTab = pTabData[nTabNo]; +/*N*/ } +/*N*/ +/*N*/ CalcPPT(); +/*N*/ } + + + + + +/*N*/ ScDocument* ScViewData::GetDocument() const +/*N*/ { +/*N*/ if (pDoc) +/*N*/ return pDoc; +/*N*/ else if (pDocShell) +/*?*/ return pDocShell->GetDocument(); +/*N*/ +/*N*/ DBG_ERROR("kein Document an ViewData"); +/*N*/ return NULL; +/*N*/ } + +/*N*/ ScViewData::~ScViewData() +/*N*/ { +/*N*/ for (USHORT i=0; i<=MAXTAB; i++) +/*N*/ if (pTabData[i]) +/*N*/ delete pTabData[i]; +/*N*/ +/*N*/ KillEditView(); +/*N*/ delete pOptions; +/*N*/ } + +// #116578# +void ScViewData::SetPagebreakMode( BOOL bSet ) +{ + bPagebreak = bSet; + + CalcPPT(); + RecalcPixPos(); + aScenButSize = Size(0,0); + aLogicMode.SetScaleX( GetZoomX() ); + aLogicMode.SetScaleY( GetZoomY() ); +} + +/*N*/ void ScViewData::KillEditView() +/*N*/ { +/*N*/ for (USHORT i=0; i<4; i++) +/*N*/ if (pEditView[i]) +/*N*/ { +/*?*/ if (bEditActive[i]) +/*?*/ pEditView[i]->GetEditEngine()->RemoveView(pEditView[i]); +/*?*/ delete pEditView[i]; +/*?*/ pEditView[i] = NULL; +/*N*/ } +/*N*/ } + + +// #116578# +void ScViewData::SetTabNo( USHORT nNewTab ) +{ + if (nNewTab>MAXTAB) + { + DBG_ERROR("falsche Tabellennummer"); + return; + } + + nTabNo = nNewTab; + if (!pTabData[nTabNo]) + pTabData[nTabNo] = new ScViewDataTable; + pThisTab = pTabData[nTabNo]; + + CalcPPT(); // for common column width correction + RecalcPixPos(); //! nicht immer noetig! +} + + + + +/*N*/ void ScViewData::RecalcPixPos() // nach Zoom-Aenderungen +/*N*/ { +/*N*/ USHORT i; +/*N*/ +/*N*/ for (USHORT eWhich=0; eWhich<2; eWhich++) +/*N*/ { +/*N*/ long nPixPosX = 0; +/*N*/ USHORT nPosX = pThisTab->nPosX[eWhich]; +/*N*/ for (i=0; i<nPosX; i++) +/*?*/ nPixPosX -= ToPixel(pDoc->GetColWidth(i,nTabNo), nPPTX); +/*N*/ pThisTab->nPixPosX[eWhich] = nPixPosX; +/*N*/ +/*N*/ long nPixPosY = 0; +/*N*/ USHORT nPosY = pThisTab->nPosY[eWhich]; +/*N*/ for (i=0; i<nPosY; i++) +/*?*/ nPixPosY -= ToPixel(pDoc->FastGetRowHeight(i,nTabNo), nPPTY); +/*N*/ pThisTab->nPixPosY[eWhich] = nPixPosY; +/*N*/ } +/*N*/ } + +/*N*/ void ScViewData::CalcPPT() +/*N*/ { +/*N*/ nPPTX = ScGlobal::nScreenPPTX * (double) GetZoomX(); +/*N*/ if (pDocShell) +/*N*/ nPPTX = nPPTX / pDocShell->GetOutputFactor(); // Faktor ist Drucker zu Bildschirm +/*N*/ nPPTY = ScGlobal::nScreenPPTY * (double) GetZoomY(); +/*N*/ +/*N*/ // #83616# if detective objects are present, +/*N*/ // try to adjust horizontal scale so the most common column width has minimal rounding errors, +/*N*/ // to avoid differences between cell and drawing layer output +/*N*/ +/*N*/ if ( pDoc && pDoc->HasDetectiveObjects(nTabNo) ) +/*N*/ { +/*?*/ DBG_BF_ASSERT(0, "STRIP"); //STRIP001 USHORT nEndCol = 0; +/*N*/ } +/*N*/ } + +//------------------------------------------------------------------ + +#define SC_OLD_TABSEP '/' +#define SC_NEW_TABSEP '+' + +// #116578# WriteUserData must not access pView +/*N*/ void ScViewData::WriteUserData(String& rData) +/*N*/ { +/*N*/ // nZoom (bis 364v) oder nZoom/nPageZoom/bPageMode (ab 364w) +/*N*/ // nTab +/*N*/ // Tab-ControlBreite +/*N*/ // pro Tabelle: +/*N*/ // CursorX/CursorY/HSplitMode/VSplitMode/HSplitPos/VSplitPos/SplitActive/ +/*N*/ // PosX[links]/PosX[rechts]/PosY[oben]/PosY[unten] +/*N*/ // wenn Zeilen groesser 8192, "+" statt "/" +/*N*/ +/*N*/ USHORT nZoom = (USHORT)((aZoomY.GetNumerator() * 100) / aZoomY.GetDenominator()); +/*N*/ rData = String::CreateFromInt32( nZoom ); +/*N*/ rData += '/'; +/*N*/ nZoom = (USHORT)((aPageZoomY.GetNumerator() * 100) / aPageZoomY.GetDenominator()); +/*N*/ rData += String::CreateFromInt32( nZoom ); +/*N*/ rData += '/'; +/*N*/ if (bPagebreak) +/*N*/ rData += '1'; +/*N*/ else +/*N*/ rData += '0'; +/*N*/ +/*N*/ rData += ';'; +/*N*/ rData += String::CreateFromInt32( nTabNo ); +/*N*/ rData += ';'; +/*N*/ rData.AppendAscii(RTL_CONSTASCII_STRINGPARAM( TAG_TABBARWIDTH )); +/*N*/ rData += String::CreateFromInt32( nTabBarWidth ); // #116578# +/*N*/ +/*N*/ USHORT nTabCount = pDoc->GetTableCount(); +/*N*/ for (USHORT i=0; i<nTabCount; i++) +/*N*/ { +/*N*/ rData += ';'; // Numerierung darf auf keinen Fall durcheinanderkommen +/*N*/ if (pTabData[i]) +/*N*/ { +/*N*/ sal_Unicode cTabSep = SC_OLD_TABSEP; // wie 3.1 +/*N*/ if ( pTabData[i]->nCurY > MAXROW_30 || +/*N*/ pTabData[i]->nPosY[0] > MAXROW_30 || pTabData[i]->nPosY[1] > MAXROW_30 || +/*N*/ ( pTabData[i]->eVSplitMode == SC_SPLIT_FIX && +/*N*/ pTabData[i]->nFixPosY > MAXROW_30 ) ) +/*N*/ { +/*N*/ cTabSep = SC_NEW_TABSEP; // um eine 3.1-Version nicht umzubringen +/*N*/ } +/*N*/ +/*N*/ +/*N*/ rData += String::CreateFromInt32( pTabData[i]->nCurX ); +/*N*/ rData += cTabSep; +/*N*/ rData += String::CreateFromInt32( pTabData[i]->nCurY ); +/*N*/ rData += cTabSep; +/*N*/ rData += String::CreateFromInt32( pTabData[i]->eHSplitMode ); +/*N*/ rData += cTabSep; +/*N*/ rData += String::CreateFromInt32( pTabData[i]->eVSplitMode ); +/*N*/ rData += cTabSep; +/*N*/ if ( pTabData[i]->eHSplitMode == SC_SPLIT_FIX ) +/*N*/ rData += String::CreateFromInt32( pTabData[i]->nFixPosX ); +/*N*/ else +/*N*/ rData += String::CreateFromInt32( pTabData[i]->nHSplitPos ); +/*N*/ rData += cTabSep; +/*N*/ if ( pTabData[i]->eVSplitMode == SC_SPLIT_FIX ) +/*N*/ rData += String::CreateFromInt32( pTabData[i]->nFixPosY ); +/*N*/ else +/*N*/ rData += String::CreateFromInt32( pTabData[i]->nVSplitPos ); +/*N*/ rData += cTabSep; +/*N*/ rData += String::CreateFromInt32( pTabData[i]->eWhichActive ); +/*N*/ rData += cTabSep; +/*N*/ rData += String::CreateFromInt32( pTabData[i]->nPosX[0] ); +/*N*/ rData += cTabSep; +/*N*/ rData += String::CreateFromInt32( pTabData[i]->nPosX[1] ); +/*N*/ rData += cTabSep; +/*N*/ rData += String::CreateFromInt32( pTabData[i]->nPosY[0] ); +/*N*/ rData += cTabSep; +/*N*/ rData += String::CreateFromInt32( pTabData[i]->nPosY[1] ); +/*N*/ } +/*N*/ } +/*N*/ } + +// #116578# ReadUserData is needed, must not access pView +void ScViewData::ReadUserData(const String& rData) +{ + if (!rData.Len()) // Leerer String kommt bei "neu Laden" + return; // dann auch ohne Assertion beenden + + xub_StrLen nCount = rData.GetTokenCount(';'); + if ( nCount <= 2 ) + { + // #45208# beim Reload in der Seitenansicht sind evtl. die Preview-UserData + // stehengelassen worden. Den Zoom von der Preview will man hier nicht... + DBG_ERROR("ReadUserData: das sind nicht meine Daten"); + return; + } + + String aTabOpt; + xub_StrLen nTagLen = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(TAG_TABBARWIDTH)).Len(); + + //------------------- + // nicht pro Tabelle: + //------------------- + USHORT nTabStart = 2; + + String aZoomStr = rData.GetToken(0); // Zoom/PageZoom/Modus + USHORT nNormZoom = aZoomStr.GetToken(0,'/').ToInt32(); + if ( nNormZoom >= MINZOOM && nNormZoom <= MAXZOOM ) + aZoomX = aZoomY = Fraction( nNormZoom, 100 ); // "normaler" Zoom (immer) + USHORT nPageZoom = aZoomStr.GetToken(1,'/').ToInt32(); + if ( nPageZoom >= MINZOOM && nPageZoom <= MAXZOOM ) + aPageZoomX = aPageZoomY = Fraction( nPageZoom, 100 ); // Pagebreak-Zoom, wenn gesetzt + sal_Unicode cMode = aZoomStr.GetToken(2,'/').GetChar(0); // 0 oder "0"/"1" + SetPagebreakMode( cMode == '1' ); + // SetPagebreakMode muss immer gerufen werden wegen CalcPPT / RecalcPixPos() + + // + // Tabelle kann ungueltig geworden sein (z.B. letzte Version): + // + USHORT nNewTab = rData.GetToken(1).ToInt32(); + if (pDoc->HasTable( nNewTab )) + SetTabNo(nNewTab); + + // + // wenn vorhanden, TabBar-Breite holen: + // + aTabOpt = rData.GetToken(2); + + if ( nTagLen && aTabOpt.Copy(0,nTagLen).EqualsAscii(TAG_TABBARWIDTH) ) + { + // #116578# store tab bar width locally + nTabBarWidth = aTabOpt.Copy(nTagLen).ToInt32(); + nTabStart = 3; + } + + //------------- + // pro Tabelle: + //------------- + USHORT nPos = 0; + while ( nCount > nPos+nTabStart ) + { + aTabOpt = rData.GetToken(nPos+nTabStart); + if (!pTabData[nPos]) + pTabData[nPos] = new ScViewDataTable; + + sal_Unicode cTabSep = 0; + if (aTabOpt.GetTokenCount(SC_OLD_TABSEP) >= 11) + cTabSep = SC_OLD_TABSEP; +#ifndef SC_LIMIT_ROWS + else if (aTabOpt.GetTokenCount(SC_NEW_TABSEP) >= 11) + cTabSep = SC_NEW_TABSEP; + // '+' ist nur erlaubt, wenn wir mit Zeilen > 8192 umgehen koennen +#endif + + if (cTabSep) + { + pTabData[nPos]->nCurX = aTabOpt.GetToken(0,cTabSep).ToInt32(); + pTabData[nPos]->nCurY = aTabOpt.GetToken(1,cTabSep).ToInt32(); + pTabData[nPos]->eHSplitMode = (ScSplitMode) aTabOpt.GetToken(2,cTabSep).ToInt32(); + pTabData[nPos]->eVSplitMode = (ScSplitMode) aTabOpt.GetToken(3,cTabSep).ToInt32(); + + if ( pTabData[nPos]->eHSplitMode == SC_SPLIT_FIX ) + { + pTabData[nPos]->nFixPosX = aTabOpt.GetToken(4,cTabSep).ToInt32(); +// UpdateFixX(nPos); + } + else + pTabData[nPos]->nHSplitPos = aTabOpt.GetToken(4,cTabSep).ToInt32(); + + if ( pTabData[nPos]->eVSplitMode == SC_SPLIT_FIX ) + { + pTabData[nPos]->nFixPosY = aTabOpt.GetToken(5,cTabSep).ToInt32(); +// UpdateFixY(nPos); + } + else + pTabData[nPos]->nVSplitPos = aTabOpt.GetToken(5,cTabSep).ToInt32(); + + pTabData[nPos]->eWhichActive = (ScSplitPos) aTabOpt.GetToken(6,cTabSep).ToInt32(); + pTabData[nPos]->nPosX[0] = aTabOpt.GetToken(7,cTabSep).ToInt32(); + pTabData[nPos]->nPosX[1] = aTabOpt.GetToken(8,cTabSep).ToInt32(); + pTabData[nPos]->nPosY[0] = aTabOpt.GetToken(9,cTabSep).ToInt32(); + pTabData[nPos]->nPosY[1] = aTabOpt.GetToken(10,cTabSep).ToInt32(); + + // Test, ob der aktive Teil laut SplitMode ueberhaupt existiert + // (Bug #44516#) + ScSplitPos eTest = pTabData[nPos]->eWhichActive; + if ( ( WhichH( eTest ) == SC_SPLIT_RIGHT && + pTabData[nPos]->eHSplitMode == SC_SPLIT_NONE ) || + ( WhichV( eTest ) == SC_SPLIT_TOP && + pTabData[nPos]->eVSplitMode == SC_SPLIT_NONE ) ) + { + // dann wieder auf Default (unten links) + pTabData[nPos]->eWhichActive = SC_SPLIT_BOTTOMLEFT; + DBG_ERROR("SplitPos musste korrigiert werden"); + } + } + ++nPos; + } + + RecalcPixPos(); +} + + + +// #116578# WriteUserDataSequence must not access pView +/*N*/ void ScViewData::WriteUserDataSequence(uno::Sequence <beans::PropertyValue>& rSettings) +/*N*/ { +/*N*/ rSettings.realloc(SC_VIEWSETTINGS_COUNT); +/*N*/ // + 1, because we have to put the view id in the sequence +/*N*/ beans::PropertyValue* pSettings = rSettings.getArray(); +/*N*/ if (pSettings) +/*N*/ { + sal_uInt16 nViewID = 1; // #116578# always ScTabViewShell (ID from ScDLL::Init) +/*N*/ pSettings[SC_VIEW_ID].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_VIEWID)); +/*N*/ ::rtl::OUStringBuffer sBuffer(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_VIEW))); +/*N*/ SvXMLUnitConverter::convertNumber(sBuffer, static_cast<sal_Int32>(nViewID)); +/*N*/ pSettings[SC_VIEW_ID].Value <<= sBuffer.makeStringAndClear(); +/*N*/ +/*N*/ USHORT nTabCount (pDoc->GetTableCount()); +/*N*/ uno::Reference<lang::XMultiServiceFactory> xServiceFactory = +/*N*/ ::legacy_binfilters::getLegacyProcessServiceFactory(); +/*N*/ DBG_ASSERT( xServiceFactory.is(), "got no service manager" ); +/*N*/ if( xServiceFactory.is() ) +/*N*/ { +/*N*/ ::rtl::OUString sName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.NamedPropertyValues")); +/*N*/ uno::Reference<container::XNameContainer> xNameContainer = uno::Reference<container::XNameContainer>(xServiceFactory->createInstance(sName), uno::UNO_QUERY); +/*N*/ if (xNameContainer.is()) +/*N*/ { +/*N*/ for (USHORT nTab=0; nTab<nTabCount; nTab++) +/*N*/ { +/*N*/ if (pTabData[nTab]) +/*N*/ { +/*N*/ uno::Sequence <beans::PropertyValue> aTableViewSettings; +/*N*/ pTabData[nTab]->WriteUserDataSequence(aTableViewSettings); +/*N*/ String sName; +/*N*/ GetDocument()->GetName( nTab, sName ); +/*N*/ ::rtl::OUString sOUName(sName); +/*N*/ uno::Any aAny; +/*N*/ aAny <<= aTableViewSettings; +/*N*/ try +/*N*/ { +/*N*/ xNameContainer->insertByName(sName, aAny); +/*N*/ } +/*N*/ //#101739#; two tables with the same name are possible +/*N*/ catch ( container::ElementExistException& ) +/*N*/ { +/*N*/ DBG_ERRORFILE("seems there are two tables with the same name"); +/*N*/ } +/*N*/ catch ( uno::RuntimeException& ) +/*N*/ { +/*N*/ DBG_ERRORFILE("something went wrong"); +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ pSettings[SC_TABLE_VIEWSETTINGS].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_TABLES)); +/*N*/ pSettings[SC_TABLE_VIEWSETTINGS].Value <<= xNameContainer; +/*N*/ } +/*N*/ } +/*N*/ +/*N*/ String sName; +/*N*/ GetDocument()->GetName( nTabNo, sName ); +/*N*/ ::rtl::OUString sOUName(sName); +/*N*/ pSettings[SC_ACTIVE_TABLE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_ACTIVETABLE)); +/*N*/ pSettings[SC_ACTIVE_TABLE].Value <<= sOUName; +/*N*/ pSettings[SC_HORIZONTAL_SCROLL_BAR_WIDTH].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_HORIZONTALSCROLLBARWIDTH)); + pSettings[SC_HORIZONTAL_SCROLL_BAR_WIDTH].Value <<= sal_Int32( nTabBarWidth ); // #116578# use stored value +/*N*/ sal_Int32 nZoomValue ((aZoomY.GetNumerator() * 100) / aZoomY.GetDenominator()); +/*N*/ sal_Int32 nPageZoomValue ((aPageZoomY.GetNumerator() * 100) / aPageZoomY.GetDenominator()); +/*N*/ pSettings[SC_ZOOM_TYPE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_ZOOMTYPE)); + pSettings[SC_ZOOM_TYPE].Value <<= sal_Int16( SVX_ZOOM_PERCENT ); // #116578# always direct value for old files +/*N*/ pSettings[SC_ZOOM_VALUE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_ZOOMVALUE)); +/*N*/ pSettings[SC_ZOOM_VALUE].Value <<= nZoomValue; +/*N*/ pSettings[SC_PAGE_VIEW_ZOOM_VALUE].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_PAGEVIEWZOOMVALUE)); +/*N*/ pSettings[SC_PAGE_VIEW_ZOOM_VALUE].Value <<= nPageZoomValue; +/*N*/ pSettings[SC_PAGE_BREAK_PREVIEW].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_SHOWPAGEBREAKPREVIEW)); +/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_PAGE_BREAK_PREVIEW].Value, bPagebreak); +/*N*/ +/*N*/ if (pOptions) +/*N*/ { +/*N*/ pSettings[SC_SHOWZERO].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SHOWZERO)); +/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SHOWZERO].Value, pOptions->GetOption( VOPT_NULLVALS ) ); +/*N*/ pSettings[SC_SHOWNOTES].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SHOWNOTES)); +/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SHOWNOTES].Value, pOptions->GetOption( VOPT_NOTES ) ); +/*N*/ pSettings[SC_SHOWGRID].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SHOWGRID)); +/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SHOWGRID].Value, pOptions->GetOption( VOPT_GRID ) ); +/*N*/ pSettings[SC_GRIDCOLOR].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_GRIDCOLOR)); +/*N*/ String aColorName; +/*N*/ Color aColor = pOptions->GetGridColor(&aColorName); +/*N*/ pSettings[SC_GRIDCOLOR].Value <<= static_cast<sal_Int64>(aColor.GetColor()); +/*N*/ pSettings[SC_SHOWPAGEBR].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SHOWPAGEBR)); +/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SHOWPAGEBR].Value, pOptions->GetOption( VOPT_PAGEBREAKS ) ); +/*N*/ pSettings[SC_COLROWHDR].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_COLROWHDR)); +/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_COLROWHDR].Value, pOptions->GetOption( VOPT_HEADER ) ); +/*N*/ pSettings[SC_SHEETTABS].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SHEETTABS)); +/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SHEETTABS].Value, pOptions->GetOption( VOPT_TABCONTROLS ) ); +/*N*/ pSettings[SC_OUTLSYMB].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_OUTLSYMB)); +/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_OUTLSYMB].Value, pOptions->GetOption( VOPT_OUTLINER ) ); +/*N*/ +/*N*/ const ScGridOptions& aGridOpt = pOptions->GetGridOptions(); +/*N*/ pSettings[SC_SNAPTORASTER].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_SNAPTORASTER)); +/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_SNAPTORASTER].Value, aGridOpt.GetUseGridSnap() ); +/*N*/ pSettings[SC_RASTERVIS].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERVIS)); +/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_RASTERVIS].Value, aGridOpt.GetGridVisible() ); +/*N*/ pSettings[SC_RASTERRESX].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERRESX)); +/*N*/ pSettings[SC_RASTERRESX].Value <<= static_cast<sal_Int32> ( aGridOpt.GetFldDrawX() ); +/*N*/ pSettings[SC_RASTERRESY].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERRESY)); +/*N*/ pSettings[SC_RASTERRESY].Value <<= static_cast<sal_Int32> ( aGridOpt.GetFldDrawY() ); +/*N*/ pSettings[SC_RASTERSUBX].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERSUBX)); +/*N*/ pSettings[SC_RASTERSUBX].Value <<= static_cast<sal_Int32> ( aGridOpt.GetFldDivisionX() ); +/*N*/ pSettings[SC_RASTERSUBY].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERSUBY)); +/*N*/ pSettings[SC_RASTERSUBY].Value <<= static_cast<sal_Int32> ( aGridOpt.GetFldDivisionY() ); +/*N*/ pSettings[SC_RASTERSYNC].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_UNO_RASTERSYNC)); +/*N*/ ScUnoHelpFunctions::SetBoolInAny( pSettings[SC_RASTERSYNC].Value, aGridOpt.GetSynchronize() ); +/*N*/ } +/*N*/ } +/*N*/ } + +// #116578# ReadUserDataSequence is needed, must not access pView +void ScViewData::ReadUserDataSequence(const uno::Sequence <beans::PropertyValue>& rSettings) +{ + sal_Int32 nCount(rSettings.getLength()); + sal_Int32 nTemp32(0); + sal_Int16 nTemp16(0); + sal_Bool bPageMode(sal_False); + for (sal_Int32 i = 0; i < nCount; i++) + { + // SC_VIEWID has to parse and use by mba + ::rtl::OUString sName(rSettings[i].Name); + if (sName.compareToAscii(SC_TABLES) == 0) + { + uno::Reference<container::XNameContainer> xNameContainer; + if ((rSettings[i].Value >>= xNameContainer) && xNameContainer->hasElements()) + { + uno::Sequence< ::rtl::OUString > aNames(xNameContainer->getElementNames()); + for (sal_Int32 i = 0; i < aNames.getLength(); i++) + { + String sTabName(aNames[i]); + sal_uInt16 nTab(0); + if (GetDocument()->GetTable(sTabName, nTab)) + { + uno::Any aAny = xNameContainer->getByName(aNames[i]); + uno::Sequence<beans::PropertyValue> aTabSettings; + if (aAny >>= aTabSettings) + { + pTabData[nTab] = new ScViewDataTable; + pTabData[nTab]->ReadUserDataSequence(aTabSettings); + } + } + } + } + } + else if (sName.compareToAscii(SC_ACTIVETABLE) == 0) + { + ::rtl::OUString sName; + if(rSettings[i].Value >>= sName) + { + String sTabName(sName); + sal_uInt16 nTab(0); + if (GetDocument()->GetTable(sTabName, nTab)) + nTabNo = nTab; + } + } + else if (sName.compareToAscii(SC_HORIZONTALSCROLLBARWIDTH) == 0) + { + if (rSettings[i].Value >>= nTemp32) + nTabBarWidth = nTemp32; // #116578# store locally + } + else if (sName.compareToAscii(SC_ZOOMTYPE) == 0) + { + // #116578# zoom type is ignored for conversion to binary + } + else if (sName.compareToAscii(SC_ZOOMVALUE) == 0) + { + if (rSettings[i].Value >>= nTemp32) + { + Fraction aZoom(nTemp32, 100); + aZoomX = aZoomY = aZoom; + } + } + else if (sName.compareToAscii(SC_PAGEVIEWZOOMVALUE) == 0) + { + if (rSettings[i].Value >>= nTemp32) + { + Fraction aZoom(nTemp32, 100); + aPageZoomX = aPageZoomY = aZoom; + } + } + else if (sName.compareToAscii(SC_SHOWPAGEBREAKPREVIEW) == 0) + bPageMode = ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ); + else if ( sName.compareToAscii( SC_UNO_SHOWZERO ) == 0 ) + pOptions->SetOption(VOPT_NULLVALS, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) ); + else if ( sName.compareToAscii( SC_UNO_SHOWNOTES ) == 0 ) + pOptions->SetOption(VOPT_NOTES, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) ); + else if ( sName.compareToAscii( SC_UNO_SHOWGRID ) == 0 ) + pOptions->SetOption(VOPT_GRID, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) ); + else if ( sName.compareToAscii( SC_UNO_GRIDCOLOR ) == 0 ) + { + sal_Int64 nColor; + if (rSettings[i].Value >>= nColor) + { + String aColorName; + Color aColor(static_cast<sal_uInt32>(nColor)); + pOptions->SetGridColor(aColor, aColorName); + } + } + else if ( sName.compareToAscii( SC_UNO_SHOWPAGEBR ) == 0 ) + pOptions->SetOption(VOPT_PAGEBREAKS, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) ); + else if ( sName.compareToAscii( SC_UNO_COLROWHDR ) == 0 ) + pOptions->SetOption(VOPT_HEADER, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) ); + else if ( sName.compareToAscii( SC_UNO_SHEETTABS ) == 0 ) + pOptions->SetOption(VOPT_TABCONTROLS, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) ); + else if ( sName.compareToAscii( SC_UNO_OUTLSYMB ) == 0 ) + pOptions->SetOption(VOPT_OUTLINER, ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) ); + else + { + ScGridOptions aGridOpt(pOptions->GetGridOptions()); + if ( sName.compareToAscii( SC_UNO_SNAPTORASTER ) == 0 ) + aGridOpt.SetUseGridSnap( ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) ); + else if ( sName.compareToAscii( SC_UNO_RASTERVIS ) == 0 ) + aGridOpt.SetGridVisible( ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) ); + else if ( sName.compareToAscii( SC_UNO_RASTERRESX ) == 0 ) + aGridOpt.SetFldDrawX( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( rSettings[i].Value ) ) ); + else if ( sName.compareToAscii( SC_UNO_RASTERRESY ) == 0 ) + aGridOpt.SetFldDrawY( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( rSettings[i].Value ) ) ); + else if ( sName.compareToAscii( SC_UNO_RASTERSUBX ) == 0 ) + aGridOpt.SetFldDivisionX( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( rSettings[i].Value ) ) ); + else if ( sName.compareToAscii( SC_UNO_RASTERSUBY ) == 0 ) + aGridOpt.SetFldDivisionY( static_cast <sal_uInt32> ( ScUnoHelpFunctions::GetInt32FromAny( rSettings[i].Value ) ) ); + else if ( sName.compareToAscii( SC_UNO_RASTERSYNC ) == 0 ) + aGridOpt.SetSynchronize( ScUnoHelpFunctions::GetBoolFromAny( rSettings[i].Value ) ); + pOptions->SetGridOptions(aGridOpt); + } + } + if (nCount) + SetPagebreakMode( bPageMode ); +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |