summaryrefslogtreecommitdiff
path: root/binfilter/bf_sc/source/ui
diff options
context:
space:
mode:
Diffstat (limited to 'binfilter/bf_sc/source/ui')
-rw-r--r--binfilter/bf_sc/source/ui/app/makefile.mk75
-rw-r--r--binfilter/bf_sc/source/ui/app/sc_msgpool.cxx128
-rw-r--r--binfilter/bf_sc/source/ui/app/sc_rfindlst.cxx60
-rw-r--r--binfilter/bf_sc/source/ui/app/sc_scdll.cxx136
-rw-r--r--binfilter/bf_sc/source/ui/app/sc_sclib.cxx656
-rw-r--r--binfilter/bf_sc/source/ui/app/sc_scmod.cxx440
-rw-r--r--binfilter/bf_sc/source/ui/app/sc_scmod2.cxx88
-rw-r--r--binfilter/bf_sc/source/ui/app/sc_uiitems.cxx350
-rw-r--r--binfilter/bf_sc/source/ui/dbgui/asciiopt.hrc55
-rw-r--r--binfilter/bf_sc/source/ui/dbgui/imoptdlg.hrc43
-rw-r--r--binfilter/bf_sc/source/ui/dbgui/makefile.mk59
-rw-r--r--binfilter/bf_sc/source/ui/dbgui/pivot.hrc73
-rw-r--r--binfilter/bf_sc/source/ui/dbgui/pvglob.hxx47
-rw-r--r--binfilter/bf_sc/source/ui/dbgui/sc_asciiopt.cxx214
-rw-r--r--binfilter/bf_sc/source/ui/dbgui/sc_asciiopt.src66
-rw-r--r--binfilter/bf_sc/source/ui/dbgui/sc_imoptdlg.cxx72
-rw-r--r--binfilter/bf_sc/source/ui/dbgui/sc_imoptdlg.src43
-rw-r--r--binfilter/bf_sc/source/ui/dbgui/sc_outline.src37
-rw-r--r--binfilter/bf_sc/source/ui/dbgui/sc_pivot.src50
-rw-r--r--binfilter/bf_sc/source/ui/docshell/makefile.mk70
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_arealink.cxx392
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_dbdocfun.cxx996
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_dbdocimp.cxx569
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_docfunc.cxx1853
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_docsh.cxx1313
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_docsh2.cxx262
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_docsh3.cxx474
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_docsh4.cxx229
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_docsh5.cxx588
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_docsh6.cxx371
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_editable.cxx123
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_impex.cxx642
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_olinefun.cxx91
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_pntlock.cxx65
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_sizedev.cxx81
-rw-r--r--binfilter/bf_sc/source/ui/docshell/sc_tablink.cxx418
-rw-r--r--binfilter/bf_sc/source/ui/inc/AccessibleContextBase.hxx338
-rw-r--r--binfilter/bf_sc/source/ui/inc/AccessibleCsvControl.hxx683
-rw-r--r--binfilter/bf_sc/source/ui/inc/AccessibleText.hxx362
-rw-r--r--binfilter/bf_sc/source/ui/inc/DrawModelBroadcaster.hxx65
-rw-r--r--binfilter/bf_sc/source/ui/inc/areasdlg.hxx107
-rw-r--r--binfilter/bf_sc/source/ui/inc/asciiopt.hxx105
-rw-r--r--binfilter/bf_sc/source/ui/inc/auditsh.hxx58
-rw-r--r--binfilter/bf_sc/source/ui/inc/autostyl.hxx49
-rw-r--r--binfilter/bf_sc/source/ui/inc/cbutton.hxx73
-rw-r--r--binfilter/bf_sc/source/ui/inc/cellsh.hxx96
-rw-r--r--binfilter/bf_sc/source/ui/inc/chartsh.hxx56
-rw-r--r--binfilter/bf_sc/source/ui/inc/colrowba.hxx110
-rw-r--r--binfilter/bf_sc/source/ui/inc/content.hxx30
-rw-r--r--binfilter/bf_sc/source/ui/inc/csvcontrol.hxx315
-rw-r--r--binfilter/bf_sc/source/ui/inc/csvgrid.hxx150
-rw-r--r--binfilter/bf_sc/source/ui/inc/csvruler.hxx93
-rw-r--r--binfilter/bf_sc/source/ui/inc/csvsplits.hxx68
-rw-r--r--binfilter/bf_sc/source/ui/inc/csvtablebox.hxx48
-rw-r--r--binfilter/bf_sc/source/ui/inc/dbdocfun.hxx106
-rw-r--r--binfilter/bf_sc/source/ui/inc/dbfunc.hxx78
-rw-r--r--binfilter/bf_sc/source/ui/inc/docfunc.hxx165
-rw-r--r--binfilter/bf_sc/source/ui/inc/docsh.hxx330
-rw-r--r--binfilter/bf_sc/source/ui/inc/drawsh.hxx81
-rw-r--r--binfilter/bf_sc/source/ui/inc/drawutil.hxx54
-rw-r--r--binfilter/bf_sc/source/ui/inc/drawview.hxx109
-rw-r--r--binfilter/bf_sc/source/ui/inc/drformsh.hxx59
-rw-r--r--binfilter/bf_sc/source/ui/inc/drtxtob.hxx76
-rw-r--r--binfilter/bf_sc/source/ui/inc/drwtrans.hxx29
-rw-r--r--binfilter/bf_sc/source/ui/inc/dwfunctr.hxx70
-rw-r--r--binfilter/bf_sc/source/ui/inc/editable.hxx86
-rw-r--r--binfilter/bf_sc/source/ui/inc/editsh.hxx69
-rw-r--r--binfilter/bf_sc/source/ui/inc/expftext.hxx47
-rw-r--r--binfilter/bf_sc/source/ui/inc/fieldwnd.hxx213
-rw-r--r--binfilter/bf_sc/source/ui/inc/formatsh.hxx82
-rw-r--r--binfilter/bf_sc/source/ui/inc/formdata.hxx52
-rw-r--r--binfilter/bf_sc/source/ui/inc/fudraw.hxx68
-rw-r--r--binfilter/bf_sc/source/ui/inc/fuedipo.hxx67
-rw-r--r--binfilter/bf_sc/source/ui/inc/fupoor.hxx95
-rw-r--r--binfilter/bf_sc/source/ui/inc/fusel.hxx71
-rw-r--r--binfilter/bf_sc/source/ui/inc/graphsh.hxx60
-rw-r--r--binfilter/bf_sc/source/ui/inc/gridmerg.hxx65
-rw-r--r--binfilter/bf_sc/source/ui/inc/gridwin.hxx259
-rw-r--r--binfilter/bf_sc/source/ui/inc/hdrcont.hxx123
-rw-r--r--binfilter/bf_sc/source/ui/inc/hintwin.hxx46
-rw-r--r--binfilter/bf_sc/source/ui/inc/hiranges.hxx52
-rw-r--r--binfilter/bf_sc/source/ui/inc/imoptdlg.hxx112
-rw-r--r--binfilter/bf_sc/source/ui/inc/impex.hxx126
-rw-r--r--binfilter/bf_sc/source/ui/inc/inputhdl.hxx235
-rw-r--r--binfilter/bf_sc/source/ui/inc/inputwin.hxx176
-rw-r--r--binfilter/bf_sc/source/ui/inc/invmerge.hxx60
-rw-r--r--binfilter/bf_sc/source/ui/inc/msgpool.hxx78
-rw-r--r--binfilter/bf_sc/source/ui/inc/namecrea.hxx66
-rw-r--r--binfilter/bf_sc/source/ui/inc/navipi.hxx120
-rw-r--r--binfilter/bf_sc/source/ui/inc/navsett.hxx63
-rw-r--r--binfilter/bf_sc/source/ui/inc/notemark.hxx53
-rw-r--r--binfilter/bf_sc/source/ui/inc/oleobjsh.hxx56
-rw-r--r--binfilter/bf_sc/source/ui/inc/olinefun.hxx67
-rw-r--r--binfilter/bf_sc/source/ui/inc/olinewin.hxx98
-rw-r--r--binfilter/bf_sc/source/ui/inc/optload.hrc40
-rw-r--r--binfilter/bf_sc/source/ui/inc/optload.hxx68
-rw-r--r--binfilter/bf_sc/source/ui/inc/output.hxx212
-rw-r--r--binfilter/bf_sc/source/ui/inc/pagedata.hxx51
-rw-r--r--binfilter/bf_sc/source/ui/inc/pfuncache.hxx98
-rw-r--r--binfilter/bf_sc/source/ui/inc/pgbrksh.hxx55
-rw-r--r--binfilter/bf_sc/source/ui/inc/pivotobj.hxx39
-rw-r--r--binfilter/bf_sc/source/ui/inc/pivotsh.hxx57
-rw-r--r--binfilter/bf_sc/source/ui/inc/pntlock.hxx71
-rw-r--r--binfilter/bf_sc/source/ui/inc/popmenu.hxx40
-rw-r--r--binfilter/bf_sc/source/ui/inc/printfun.hxx282
-rw-r--r--binfilter/bf_sc/source/ui/inc/pvlaydlg.hxx84
-rw-r--r--binfilter/bf_sc/source/ui/inc/refundo.hxx51
-rw-r--r--binfilter/bf_sc/source/ui/inc/rfindlst.hxx72
-rw-r--r--binfilter/bf_sc/source/ui/inc/scsbx.hxx39
-rw-r--r--binfilter/bf_sc/source/ui/inc/select.hxx124
-rw-r--r--binfilter/bf_sc/source/ui/inc/sizedev.hxx59
-rw-r--r--binfilter/bf_sc/source/ui/inc/submenu.hrc68
-rw-r--r--binfilter/bf_sc/source/ui/inc/sumctl.hxx36
-rw-r--r--binfilter/bf_sc/source/ui/inc/tabcont.hxx29
-rw-r--r--binfilter/bf_sc/source/ui/inc/tabsplit.hxx60
-rw-r--r--binfilter/bf_sc/source/ui/inc/tabview.hxx366
-rw-r--r--binfilter/bf_sc/source/ui/inc/target.hxx56
-rw-r--r--binfilter/bf_sc/source/ui/inc/tbinsert.hrc32
-rw-r--r--binfilter/bf_sc/source/ui/inc/tbinsert.hxx67
-rw-r--r--binfilter/bf_sc/source/ui/inc/teamdlg.hxx58
-rw-r--r--binfilter/bf_sc/source/ui/inc/template.hxx39
-rw-r--r--binfilter/bf_sc/source/ui/inc/tpcalc.hxx49
-rw-r--r--binfilter/bf_sc/source/ui/inc/tphf.hxx103
-rw-r--r--binfilter/bf_sc/source/ui/inc/tphfedit.hxx238
-rw-r--r--binfilter/bf_sc/source/ui/inc/tpprint.hxx41
-rw-r--r--binfilter/bf_sc/source/ui/inc/tptable.hxx100
-rw-r--r--binfilter/bf_sc/source/ui/inc/tpusrlst.hxx53
-rw-r--r--binfilter/bf_sc/source/ui/inc/ui_pch.hxx352
-rw-r--r--binfilter/bf_sc/source/ui/inc/uiitems.hxx284
-rw-r--r--binfilter/bf_sc/source/ui/inc/undobase.hxx112
-rw-r--r--binfilter/bf_sc/source/ui/inc/undocell.hxx122
-rw-r--r--binfilter/bf_sc/source/ui/inc/undodat.hxx132
-rw-r--r--binfilter/bf_sc/source/ui/inc/undodraw.hxx57
-rw-r--r--binfilter/bf_sc/source/ui/inc/undoolk.hxx46
-rw-r--r--binfilter/bf_sc/source/ui/inc/undotab.hxx161
-rw-r--r--binfilter/bf_sc/source/ui/inc/viewdata.hxx401
-rw-r--r--binfilter/bf_sc/source/ui/inc/viewutil.hxx70
-rw-r--r--binfilter/bf_sc/source/ui/src/makefile.mk65
-rw-r--r--binfilter/bf_sc/source/ui/src/sc_globstr.src11325
-rw-r--r--binfilter/bf_sc/source/ui/src/sc_hdrcont.src729
-rw-r--r--binfilter/bf_sc/source/ui/src/sc_pseudo.src252
-rw-r--r--binfilter/bf_sc/source/ui/src/sc_sc.src94
-rw-r--r--binfilter/bf_sc/source/ui/src/sc_scerrors.src530
-rw-r--r--binfilter/bf_sc/source/ui/src/sc_scstring.src1708
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/makefile.mk81
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_afmtuno.cxx825
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_appluno.cxx1006
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_cellsuno.cxx8468
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_chartuno.cxx630
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_confuno.cxx406
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_convuno.cxx69
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_cursuno.cxx502
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_dapiuno.cxx1855
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_datauno.cxx2085
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_defltuno.cxx385
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_docuno.cxx2563
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_drdefuno.cxx87
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_editsrc.cxx352
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_fielduno.cxx1540
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_filtuno.cxx255
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_fmtuno.cxx861
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_forbiuno.cxx97
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_funcuno.cxx718
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_linkuno.cxx1347
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_miscuno.cxx386
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_nameuno.cxx937
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_notesuno.cxx315
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_optuno.cxx210
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_pageuno.cxx85
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_servuno.cxx297
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_shapeuno.cxx800
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_styleuno.cxx1921
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_targuno.cxx29
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_textuno.cxx1155
-rw-r--r--binfilter/bf_sc/source/ui/unoobj/sc_unodoc.cxx80
-rw-r--r--binfilter/bf_sc/source/ui/view/makefile.mk52
-rw-r--r--binfilter/bf_sc/source/ui/view/sc_printfun.cxx1067
-rw-r--r--binfilter/bf_sc/source/ui/view/sc_viewdata.cxx822
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: */