1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sc.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir #include "scitems.hxx" 33*cdf0e10cSrcweir #include <editeng/eeitem.hxx> 34*cdf0e10cSrcweir #include <svx/svdpool.hxx> 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir #include <svx/algitem.hxx> 37*cdf0e10cSrcweir #include <editeng/boxitem.hxx> 38*cdf0e10cSrcweir #include <editeng/brshitem.hxx> 39*cdf0e10cSrcweir #include <editeng/editeng.hxx> 40*cdf0e10cSrcweir #include <editeng/flditem.hxx> 41*cdf0e10cSrcweir #include <svx/fmdpage.hxx> 42*cdf0e10cSrcweir #include <editeng/langitem.hxx> 43*cdf0e10cSrcweir #include <sfx2/linkmgr.hxx> 44*cdf0e10cSrcweir #include <svl/srchitem.hxx> 45*cdf0e10cSrcweir #include <svx/unomid.hxx> 46*cdf0e10cSrcweir #include <editeng/unoprnms.hxx> 47*cdf0e10cSrcweir #include <editeng/unotext.hxx> 48*cdf0e10cSrcweir #include <svx/svdpage.hxx> 49*cdf0e10cSrcweir #include <sfx2/bindings.hxx> 50*cdf0e10cSrcweir #include <svl/zforlist.hxx> 51*cdf0e10cSrcweir #include <svl/zformat.hxx> 52*cdf0e10cSrcweir #include <rtl/uuid.h> 53*cdf0e10cSrcweir #include <float.h> // DBL_MIN 54*cdf0e10cSrcweir 55*cdf0e10cSrcweir #include <com/sun/star/awt/XBitmap.hpp> 56*cdf0e10cSrcweir #include <com/sun/star/util/CellProtection.hpp> 57*cdf0e10cSrcweir #include <com/sun/star/table/CellHoriJustify.hpp> 58*cdf0e10cSrcweir #include <com/sun/star/table/CellOrientation.hpp> 59*cdf0e10cSrcweir #include <com/sun/star/table/CellVertJustify.hpp> 60*cdf0e10cSrcweir #include <com/sun/star/table/ShadowFormat.hpp> 61*cdf0e10cSrcweir #include <com/sun/star/table/TableBorder.hpp> 62*cdf0e10cSrcweir #include <com/sun/star/sheet/CellFlags.hpp> 63*cdf0e10cSrcweir #include <com/sun/star/sheet/FormulaResult.hpp> 64*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp> 65*cdf0e10cSrcweir #include <com/sun/star/lang/Locale.hpp> 66*cdf0e10cSrcweir #include <com/sun/star/beans/TolerantPropertySetResultType.hpp> 67*cdf0e10cSrcweir #include <com/sun/star/beans/SetPropertyTolerantFailed.hpp> 68*cdf0e10cSrcweir #include <com/sun/star/text/WritingMode2.hpp> 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir #include "autoform.hxx" 71*cdf0e10cSrcweir #include "cellsuno.hxx" 72*cdf0e10cSrcweir #include "cursuno.hxx" 73*cdf0e10cSrcweir #include "textuno.hxx" 74*cdf0e10cSrcweir #include "editsrc.hxx" 75*cdf0e10cSrcweir #include "notesuno.hxx" 76*cdf0e10cSrcweir #include "fielduno.hxx" 77*cdf0e10cSrcweir #include "docuno.hxx" // ScTableColumnsObj etc 78*cdf0e10cSrcweir #include "datauno.hxx" 79*cdf0e10cSrcweir #include "dapiuno.hxx" 80*cdf0e10cSrcweir #include "chartuno.hxx" 81*cdf0e10cSrcweir #include "fmtuno.hxx" 82*cdf0e10cSrcweir #include "miscuno.hxx" 83*cdf0e10cSrcweir #include "convuno.hxx" 84*cdf0e10cSrcweir #include "srchuno.hxx" 85*cdf0e10cSrcweir #include "targuno.hxx" 86*cdf0e10cSrcweir #include "tokenuno.hxx" 87*cdf0e10cSrcweir #include "eventuno.hxx" 88*cdf0e10cSrcweir #include "docsh.hxx" 89*cdf0e10cSrcweir #include "markdata.hxx" 90*cdf0e10cSrcweir #include "patattr.hxx" 91*cdf0e10cSrcweir #include "docpool.hxx" 92*cdf0e10cSrcweir #include "docfunc.hxx" 93*cdf0e10cSrcweir #include "dbdocfun.hxx" 94*cdf0e10cSrcweir #include "olinefun.hxx" 95*cdf0e10cSrcweir #include "hints.hxx" 96*cdf0e10cSrcweir #include "cell.hxx" 97*cdf0e10cSrcweir #include "undocell.hxx" 98*cdf0e10cSrcweir #include "undotab.hxx" 99*cdf0e10cSrcweir #include "undoblk.hxx" // fuer lcl_ApplyBorder - nach docfunc verschieben! 100*cdf0e10cSrcweir #include "stlsheet.hxx" 101*cdf0e10cSrcweir #include "dbcolect.hxx" 102*cdf0e10cSrcweir #include "attrib.hxx" 103*cdf0e10cSrcweir #include "chartarr.hxx" 104*cdf0e10cSrcweir #include "chartlis.hxx" 105*cdf0e10cSrcweir #include "drwlayer.hxx" 106*cdf0e10cSrcweir #include "printfun.hxx" 107*cdf0e10cSrcweir #include "prnsave.hxx" 108*cdf0e10cSrcweir #include "tablink.hxx" 109*cdf0e10cSrcweir #include "dociter.hxx" 110*cdf0e10cSrcweir #include "rangeutl.hxx" 111*cdf0e10cSrcweir #include "conditio.hxx" 112*cdf0e10cSrcweir #include "validat.hxx" 113*cdf0e10cSrcweir #include "sc.hrc" 114*cdf0e10cSrcweir #include "brdcst.hxx" 115*cdf0e10cSrcweir #include "unoguard.hxx" 116*cdf0e10cSrcweir #include "cellform.hxx" 117*cdf0e10cSrcweir #include "globstr.hrc" 118*cdf0e10cSrcweir #include "unonames.hxx" 119*cdf0e10cSrcweir #include "styleuno.hxx" 120*cdf0e10cSrcweir #include "rangeseq.hxx" 121*cdf0e10cSrcweir #include "unowids.hxx" 122*cdf0e10cSrcweir #include "paramisc.hxx" 123*cdf0e10cSrcweir #include "formula/errorcodes.hxx" 124*cdf0e10cSrcweir #include "unoreflist.hxx" 125*cdf0e10cSrcweir #include "formula/grammar.hxx" 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir #include <list> 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir using namespace com::sun::star; 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir //------------------------------------------------------------------------ 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir class ScNamedEntry 135*cdf0e10cSrcweir { 136*cdf0e10cSrcweir String aName; 137*cdf0e10cSrcweir ScRange aRange; 138*cdf0e10cSrcweir 139*cdf0e10cSrcweir public: 140*cdf0e10cSrcweir ScNamedEntry(const String& rN, const ScRange& rR) : 141*cdf0e10cSrcweir aName(rN), aRange(rR) {} 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir const String& GetName() const { return aName; } 144*cdf0e10cSrcweir const ScRange& GetRange() const { return aRange; } 145*cdf0e10cSrcweir }; 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir //------------------------------------------------------------------------ 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir // Die Namen in den Maps muessen (nach strcmp) sortiert sein! 151*cdf0e10cSrcweir //! statt Which-ID 0 special IDs verwenden, und nicht ueber Namen vergleichen !!!!!!!!! 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir // Left/Right/Top/BottomBorder are mapped directly to the core items, 154*cdf0e10cSrcweir // not collected/applied to the borders of a range -> ATTR_BORDER can be used directly 155*cdf0e10cSrcweir 156*cdf0e10cSrcweir const SfxItemPropertySet* lcl_GetCellsPropertySet() 157*cdf0e10cSrcweir { 158*cdf0e10cSrcweir static SfxItemPropertyMapEntry aCellsPropertyMap_Impl[] = 159*cdf0e10cSrcweir { 160*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ABSNAME), SC_WID_UNO_ABSNAME, &getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 161*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, 162*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, 163*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, 164*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, 165*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 }, 166*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, 167*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, 168*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, 169*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, 170*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 171*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 172*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 173*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 174*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 175*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 176*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 177*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 178*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 179*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 180*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 181*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 182*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 183*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 184*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 185*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 186*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 187*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 188*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 189*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 190*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 191*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 192*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVER), ATTR_FONT_OVERLINE, &getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 193*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLCOL), ATTR_FONT_OVERLINE, &getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 194*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLHAS), ATTR_FONT_OVERLINE, &getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 195*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 196*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 197*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 198*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, 199*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, 200*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, 201*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 202*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 203*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 204*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, 205*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 206*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 207*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, 208*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, 209*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, 210*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 211*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 212*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 213*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 214*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 215*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, 216*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, 217*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, 218*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, 219*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, 220*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, 221*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_STACKED, &getCppuType((table::CellOrientation*)0), 0, 0 }, 222*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 223*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, 224*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS 225*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, 226*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, 227*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, 228*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, 229*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 230*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, 231*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, 232*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, 233*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, 234*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, 235*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 236*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, 237*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 }, 238*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, 239*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, 240*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, 241*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 242*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 243*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 244*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 245*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, 246*cdf0e10cSrcweir {0,0,0,0,0,0} 247*cdf0e10cSrcweir }; 248*cdf0e10cSrcweir static SfxItemPropertySet aCellsPropertySet( aCellsPropertyMap_Impl ); 249*cdf0e10cSrcweir return &aCellsPropertySet; 250*cdf0e10cSrcweir } 251*cdf0e10cSrcweir 252*cdf0e10cSrcweir // CellRange enthaelt alle Eintraege von Cells, zusaetzlich eigene Eintraege 253*cdf0e10cSrcweir // mit Which-ID 0 (werden nur fuer getPropertySetInfo benoetigt). 254*cdf0e10cSrcweir 255*cdf0e10cSrcweir const SfxItemPropertySet* lcl_GetRangePropertySet() 256*cdf0e10cSrcweir { 257*cdf0e10cSrcweir static SfxItemPropertyMapEntry aRangePropertyMap_Impl[] = 258*cdf0e10cSrcweir { 259*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ABSNAME), SC_WID_UNO_ABSNAME, &getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 260*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, 261*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, 262*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, 263*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, 264*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 }, 265*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, 266*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, 267*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, 268*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, 269*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 270*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 271*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 272*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 273*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 274*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 275*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 276*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 277*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 278*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 279*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 280*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 281*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 282*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 283*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 284*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 285*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 286*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 287*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 288*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 289*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 290*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 291*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVER), ATTR_FONT_OVERLINE, &getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 292*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLCOL), ATTR_FONT_OVERLINE, &getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 293*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLHAS), ATTR_FONT_OVERLINE, &getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 294*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 295*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 296*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 297*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, 298*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, 299*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, 300*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 301*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 302*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 303*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, 304*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 305*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 306*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, 307*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, 308*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, 309*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 310*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 311*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 312*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 313*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 314*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, 315*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, 316*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, 317*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, 318*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, 319*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, 320*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_STACKED, &getCppuType((table::CellOrientation*)0), 0, 0 }, 321*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 322*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, 323*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS 324*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, 325*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, 326*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, 327*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, 328*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 329*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, 330*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, 331*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, 332*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 333*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, 334*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, 335*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 336*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, 337*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 }, 338*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 339*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, 340*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, 341*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, 342*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 343*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 344*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 345*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 346*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, 347*cdf0e10cSrcweir {0,0,0,0,0,0} 348*cdf0e10cSrcweir }; 349*cdf0e10cSrcweir static SfxItemPropertySet aRangePropertySet( aRangePropertyMap_Impl ); 350*cdf0e10cSrcweir return &aRangePropertySet; 351*cdf0e10cSrcweir } 352*cdf0e10cSrcweir 353*cdf0e10cSrcweir // Cell enthaelt alle Eintraege von CellRange, zusaetzlich eigene Eintraege 354*cdf0e10cSrcweir // mit Which-ID 0 (werden nur fuer getPropertySetInfo benoetigt). 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir const SfxItemPropertySet* lcl_GetCellPropertySet() 357*cdf0e10cSrcweir { 358*cdf0e10cSrcweir static SfxItemPropertyMapEntry aCellPropertyMap_Impl[] = 359*cdf0e10cSrcweir { 360*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ABSNAME), SC_WID_UNO_ABSNAME, &getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 361*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, 362*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, 363*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, 364*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, 365*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 }, 366*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, 367*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, 368*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, 369*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, 370*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 371*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 372*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 373*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 374*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 375*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 376*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 377*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 378*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 379*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 380*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 381*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 382*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 383*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 384*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 385*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 386*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 387*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 388*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 389*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 390*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 391*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 392*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVER), ATTR_FONT_OVERLINE, &getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 393*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLCOL), ATTR_FONT_OVERLINE, &getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 394*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLHAS), ATTR_FONT_OVERLINE, &getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 395*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 396*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 397*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 398*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, 399*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, 400*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, 401*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 402*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 403*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 404*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, 405*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 406*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 407*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, 408*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, 409*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, 410*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 411*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 412*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 413*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 414*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 415*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_FORMLOC), SC_WID_UNO_FORMLOC, &getCppuType((rtl::OUString*)0), 0, 0 }, 416*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_FORMRT), SC_WID_UNO_FORMRT, &getCppuType((table::CellContentType*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 417*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, 418*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, 419*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, 420*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, 421*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, 422*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, 423*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_STACKED, &getCppuType((table::CellOrientation*)0), 0, 0 }, 424*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 425*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, 426*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS 427*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, 428*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, 429*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, 430*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, 431*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 432*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, 433*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, 434*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, 435*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 436*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, 437*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, 438*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 439*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, 440*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 }, 441*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 442*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, 443*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, 444*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, 445*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 446*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 447*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 448*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 449*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, 450*cdf0e10cSrcweir {0,0,0,0,0,0} 451*cdf0e10cSrcweir }; 452*cdf0e10cSrcweir static SfxItemPropertySet aCellPropertySet( aCellPropertyMap_Impl ); 453*cdf0e10cSrcweir return &aCellPropertySet; 454*cdf0e10cSrcweir } 455*cdf0e10cSrcweir 456*cdf0e10cSrcweir // Column und Row enthalten alle Eintraege von CellRange, zusaetzlich eigene Eintraege 457*cdf0e10cSrcweir // mit Which-ID 0 (werden nur fuer getPropertySetInfo benoetigt). 458*cdf0e10cSrcweir 459*cdf0e10cSrcweir const SfxItemPropertySet* lcl_GetColumnPropertySet() 460*cdf0e10cSrcweir { 461*cdf0e10cSrcweir static SfxItemPropertyMapEntry aColumnPropertyMap_Impl[] = 462*cdf0e10cSrcweir { 463*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ABSNAME), SC_WID_UNO_ABSNAME, &getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 464*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, 465*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, 466*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, 467*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, 468*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 }, 469*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, 470*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, 471*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, 472*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, 473*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 474*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 475*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 476*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 477*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 478*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 479*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 480*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 481*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 482*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 483*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 484*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 485*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 486*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 487*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 488*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 489*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 490*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 491*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 492*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 493*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 494*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 495*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVER), ATTR_FONT_OVERLINE, &getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 496*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLCOL), ATTR_FONT_OVERLINE, &getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 497*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLHAS), ATTR_FONT_OVERLINE, &getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 498*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 499*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 500*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 501*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, 502*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, 503*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, 504*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 505*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 506*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 507*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, 508*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 509*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 510*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, 511*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, 512*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, 513*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 514*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 515*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 516*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 517*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 518*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, 519*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, 520*cdf0e10cSrcweir // {MAP_CHAR_LEN(SC_UNONAME_CELLFILT), SC_WID_UNO_CELLFILT,&getBooleanCppuType(), 0, 0 }, 521*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_MANPAGE), SC_WID_UNO_MANPAGE, &getBooleanCppuType(), 0, 0 }, 522*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NEWPAGE), SC_WID_UNO_NEWPAGE, &getBooleanCppuType(), 0, 0 }, 523*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, 524*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLVIS), SC_WID_UNO_CELLVIS, &getBooleanCppuType(), 0, 0 }, 525*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, 526*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, 527*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, 528*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_OWIDTH), SC_WID_UNO_OWIDTH, &getBooleanCppuType(), 0, 0 }, 529*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_STACKED, &getCppuType((table::CellOrientation*)0), 0, 0 }, 530*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 531*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, 532*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS 533*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, 534*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, 535*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, 536*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, 537*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 538*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, 539*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, 540*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, 541*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 542*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, 543*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, 544*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 545*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, 546*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 }, 547*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 548*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, 549*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, 550*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, 551*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 552*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 553*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 554*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 555*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLWID), SC_WID_UNO_CELLWID, &getCppuType((sal_Int32*)0), 0, 0 }, 556*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, 557*cdf0e10cSrcweir {0,0,0,0,0,0} 558*cdf0e10cSrcweir }; 559*cdf0e10cSrcweir static SfxItemPropertySet aColumnPropertySet( aColumnPropertyMap_Impl ); 560*cdf0e10cSrcweir return &aColumnPropertySet; 561*cdf0e10cSrcweir } 562*cdf0e10cSrcweir 563*cdf0e10cSrcweir const SfxItemPropertySet* lcl_GetRowPropertySet() 564*cdf0e10cSrcweir { 565*cdf0e10cSrcweir static SfxItemPropertyMapEntry aRowPropertyMap_Impl[] = 566*cdf0e10cSrcweir { 567*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ABSNAME), SC_WID_UNO_ABSNAME, &getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 568*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, 569*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, 570*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, 571*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, 572*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 }, 573*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, 574*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, 575*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, 576*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, 577*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 578*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 579*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 580*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 581*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 582*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 583*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 584*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 585*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 586*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 587*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 588*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 589*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 590*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 591*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 592*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 593*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 594*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 595*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 596*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 597*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 598*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 599*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVER), ATTR_FONT_OVERLINE, &getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 600*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLCOL), ATTR_FONT_OVERLINE, &getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 601*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLHAS), ATTR_FONT_OVERLINE, &getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 602*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 603*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 604*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 605*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, 606*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, 607*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, 608*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 609*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 610*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 611*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, 612*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 613*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 614*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, 615*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, 616*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, 617*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 618*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 619*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 620*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 621*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 622*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLHGT), SC_WID_UNO_CELLHGT, &getCppuType((sal_Int32*)0), 0, 0 }, 623*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, 624*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, 625*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLFILT), SC_WID_UNO_CELLFILT,&getBooleanCppuType(), 0, 0 }, 626*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_MANPAGE), SC_WID_UNO_MANPAGE, &getBooleanCppuType(), 0, 0 }, 627*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NEWPAGE), SC_WID_UNO_NEWPAGE, &getBooleanCppuType(), 0, 0 }, 628*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, 629*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLVIS), SC_WID_UNO_CELLVIS, &getBooleanCppuType(), 0, 0 }, 630*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, 631*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, 632*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, 633*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_OHEIGHT), SC_WID_UNO_OHEIGHT, &getBooleanCppuType(), 0, 0 }, 634*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_STACKED, &getCppuType((table::CellOrientation*)0), 0, 0 }, 635*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 636*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, 637*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS 638*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, 639*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, 640*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, 641*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, 642*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 643*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, 644*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, 645*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, 646*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 647*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, 648*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, 649*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 650*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, 651*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 }, 652*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 653*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, 654*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, 655*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, 656*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 657*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 658*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 659*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 660*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, 661*cdf0e10cSrcweir {0,0,0,0,0,0} 662*cdf0e10cSrcweir }; 663*cdf0e10cSrcweir static SfxItemPropertySet aRowPropertySet( aRowPropertyMap_Impl ); 664*cdf0e10cSrcweir return &aRowPropertySet; 665*cdf0e10cSrcweir } 666*cdf0e10cSrcweir 667*cdf0e10cSrcweir const SfxItemPropertySet* lcl_GetSheetPropertySet() 668*cdf0e10cSrcweir { 669*cdf0e10cSrcweir static SfxItemPropertyMapEntry aSheetPropertyMap_Impl[] = 670*cdf0e10cSrcweir { 671*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ABSNAME), SC_WID_UNO_ABSNAME, &getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 672*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 }, 673*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_AUTOPRINT),SC_WID_UNO_AUTOPRINT,&getBooleanCppuType(), 0, 0 }, 674*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_BORDCOL), SC_WID_UNO_BORDCOL, &getCppuType((sal_Int32*)0), 0, 0 }, 675*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS }, 676*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &getCppuType((sal_Int32*)0), 0, MID_BACK_COLOR }, 677*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &getCppuType((util::CellProtection*)0), 0, 0 }, 678*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLSTYL), SC_WID_UNO_CELLSTYL,&getCppuType((rtl::OUString*)0), 0, 0 }, 679*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &getCppuType((sal_Int32*)0), 0, 0 }, 680*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &getBooleanCppuType(), 0, 0 }, 681*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&getBooleanCppuType(), 0, MID_CROSSED_OUT }, 682*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS }, 683*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 684*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 685*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 686*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET }, 687*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 688*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 689*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY }, 690*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 691*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 692*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME }, 693*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 694*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 695*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH }, 696*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 697*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 698*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME }, 699*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 700*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 701*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&getCppuType((float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS }, 702*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 703*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 704*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&getCppuType((lang::Locale*)0), 0, MID_LANG_LOCALE }, 705*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVER), ATTR_FONT_OVERLINE, &getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 706*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLCOL), ATTR_FONT_OVERLINE, &getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 707*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COVRLHAS), ATTR_FONT_OVERLINE, &getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 708*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 709*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 710*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&getCppuType((awt::FontSlant*)0), 0, MID_POSTURE }, 711*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF }, 712*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &getBooleanCppuType(), 0, 0 }, 713*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT }, 714*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int16*)0), 0, MID_TL_STYLE }, 715*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_TL_COLOR }, 716*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_TL_HASCOLOR }, 717*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &getCppuType((float*)0), 0, MID_WEIGHT }, 718*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 719*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&getCppuType((float*)0), 0, MID_WEIGHT }, 720*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 }, 721*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHCOLHDR), SC_WID_UNO_CHCOLHDR,&getBooleanCppuType(), 0, 0 }, 722*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CHROWHDR), SC_WID_UNO_CHROWHDR,&getBooleanCppuType(), 0, 0 }, 723*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDFMT), SC_WID_UNO_CONDFMT, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 724*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDLOC), SC_WID_UNO_CONDLOC, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 725*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CONDXML), SC_WID_UNO_CONDXML, &getCppuType((uno::Reference<sheet::XSheetConditionalEntries>*)0), 0, 0 }, 726*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COPYBACK), SC_WID_UNO_COPYBACK,&getBooleanCppuType(), 0, 0 }, 727*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COPYFORM), SC_WID_UNO_COPYFORM,&getBooleanCppuType(), 0, 0 }, 728*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_COPYSTYL), SC_WID_UNO_COPYSTYL,&getBooleanCppuType(), 0, 0 }, 729*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 730*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS }, 731*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &getCppuType((table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST }, 732*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ISACTIVE), SC_WID_UNO_ISACTIVE,&getBooleanCppuType(), 0, 0 }, 733*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT }, 734*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &getBooleanCppuType(), 0, 0 }, 735*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLVIS), SC_WID_UNO_CELLVIS, &getBooleanCppuType(), 0, 0 }, 736*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS }, 737*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_LINKDISPBIT), SC_WID_UNO_LINKDISPBIT,&getCppuType((uno::Reference<awt::XBitmap>*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 738*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_LINKDISPNAME), SC_WID_UNO_LINKDISPNAME,&getCppuType((rtl::OUString*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 739*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &getCppuType((sal_Int32*)0), 0, 0 }, 740*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 }, 741*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_STACKED, &getCppuType((table::CellOrientation*)0), 0, 0 }, 742*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PAGESTL), SC_WID_UNO_PAGESTL, &getCppuType((rtl::OUString*)0), 0, 0 }, 743*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 744*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS }, 745*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &getCppuType((sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS 746*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &getBooleanCppuType(), 0, 0 }, 747*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&getBooleanCppuType(), 0, 0 }, 748*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&getBooleanCppuType(), 0, 0 }, 749*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 }, 750*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST }, 751*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS }, 752*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS }, 753*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &getCppuType((sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS }, 754*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_POS), SC_WID_UNO_POS, &getCppuType((awt::Point*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 755*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PRINTBORD),SC_WID_UNO_PRINTBORD,&getBooleanCppuType(), 0, 0 }, 756*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_PROTECT), SC_WID_UNO_PROTECT, &getBooleanCppuType(), 0, 0 }, 757*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS }, 758*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &getCppuType((sal_Int32*)0), 0, 0 }, 759*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 760*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &getCppuType((table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS }, 761*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHOWBORD), SC_WID_UNO_SHOWBORD,&getBooleanCppuType(), 0, 0 }, 762*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 }, 763*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_SIZE), SC_WID_UNO_SIZE, &getCppuType((awt::Size*)0), 0 | beans::PropertyAttribute::READONLY, 0 }, 764*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &getCppuType((table::TableBorder*)0), 0, 0 | CONVERT_TWIPS }, 765*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TABLAYOUT),SC_WID_UNO_TABLAYOUT,&getCppuType((sal_Int16*)0), 0, 0 }, 766*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS }, 767*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 }, 768*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIDAT), SC_WID_UNO_VALIDAT, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 769*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALILOC), SC_WID_UNO_VALILOC, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 770*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 }, 771*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 }, 772*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 }, 773*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TABCOLOR), SC_WID_UNO_TABCOLOR, &getCppuType((sal_Int32*)0), 0, 0 }, 774*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNO_CODENAME), SC_WID_UNO_CODENAME, &getCppuType(static_cast< const rtl::OUString * >(0)), 0, 0}, 775*cdf0e10cSrcweir {0,0,0,0,0,0} 776*cdf0e10cSrcweir }; 777*cdf0e10cSrcweir static SfxItemPropertySet aSheetPropertySet( aSheetPropertyMap_Impl ); 778*cdf0e10cSrcweir return &aSheetPropertySet; 779*cdf0e10cSrcweir } 780*cdf0e10cSrcweir 781*cdf0e10cSrcweir const SfxItemPropertyMapEntry* lcl_GetEditPropertyMap() 782*cdf0e10cSrcweir { 783*cdf0e10cSrcweir static SfxItemPropertyMapEntry aEditPropertyMap_Impl[] = 784*cdf0e10cSrcweir { 785*cdf0e10cSrcweir SVX_UNOEDIT_CHAR_PROPERTIES, 786*cdf0e10cSrcweir SVX_UNOEDIT_FONT_PROPERTIES, 787*cdf0e10cSrcweir SVX_UNOEDIT_PARA_PROPERTIES, 788*cdf0e10cSrcweir SVX_UNOEDIT_NUMBERING_PROPERTIE, // for completeness of service ParagraphProperties 789*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_TEXTUSER), EE_CHAR_XMLATTRIBS, &getCppuType((const uno::Reference< container::XNameContainer >*)0), 0, 0}, 790*cdf0e10cSrcweir {MAP_CHAR_LEN(SC_UNONAME_USERDEF), EE_PARA_XMLATTRIBS, &getCppuType((const uno::Reference< container::XNameContainer >*)0), 0, 0}, 791*cdf0e10cSrcweir {0,0,0,0,0,0} 792*cdf0e10cSrcweir }; 793*cdf0e10cSrcweir return aEditPropertyMap_Impl; 794*cdf0e10cSrcweir } 795*cdf0e10cSrcweir const SvxItemPropertySet* lcl_GetEditPropertySet() 796*cdf0e10cSrcweir { 797*cdf0e10cSrcweir static SvxItemPropertySet aEditPropertySet( lcl_GetEditPropertyMap(), SdrObject::GetGlobalDrawObjectItemPool() ); 798*cdf0e10cSrcweir return &aEditPropertySet; 799*cdf0e10cSrcweir } 800*cdf0e10cSrcweir 801*cdf0e10cSrcweir 802*cdf0e10cSrcweir //------------------------------------------------------------------------ 803*cdf0e10cSrcweir 804*cdf0e10cSrcweir //! diese Funktionen in einen allgemeinen Header verschieben 805*cdf0e10cSrcweir inline long TwipsToHMM(long nTwips) { return (nTwips * 127 + 36) / 72; } 806*cdf0e10cSrcweir inline long HMMToTwips(long nHMM) { return (nHMM * 72 + 63) / 127; } 807*cdf0e10cSrcweir 808*cdf0e10cSrcweir //------------------------------------------------------------------------ 809*cdf0e10cSrcweir 810*cdf0e10cSrcweir #define SCCHARPROPERTIES_SERVICE "com.sun.star.style.CharacterProperties" 811*cdf0e10cSrcweir #define SCPARAPROPERTIES_SERVICE "com.sun.star.style.ParagraphProperties" 812*cdf0e10cSrcweir #define SCCELLPROPERTIES_SERVICE "com.sun.star.table.CellProperties" 813*cdf0e10cSrcweir #define SCCELLRANGE_SERVICE "com.sun.star.table.CellRange" 814*cdf0e10cSrcweir #define SCCELL_SERVICE "com.sun.star.table.Cell" 815*cdf0e10cSrcweir #define SCSHEETCELLRANGES_SERVICE "com.sun.star.sheet.SheetCellRanges" 816*cdf0e10cSrcweir #define SCSHEETCELLRANGE_SERVICE "com.sun.star.sheet.SheetCellRange" 817*cdf0e10cSrcweir #define SCSPREADSHEET_SERVICE "com.sun.star.sheet.Spreadsheet" 818*cdf0e10cSrcweir #define SCSHEETCELL_SERVICE "com.sun.star.sheet.SheetCell" 819*cdf0e10cSrcweir 820*cdf0e10cSrcweir SC_SIMPLE_SERVICE_INFO( ScCellFormatsEnumeration, "ScCellFormatsEnumeration", "com.sun.star.sheet.CellFormatRangesEnumeration" ) 821*cdf0e10cSrcweir SC_SIMPLE_SERVICE_INFO( ScCellFormatsObj, "ScCellFormatsObj", "com.sun.star.sheet.CellFormatRanges" ) 822*cdf0e10cSrcweir SC_SIMPLE_SERVICE_INFO( ScUniqueCellFormatsEnumeration, "ScUniqueCellFormatsEnumeration", "com.sun.star.sheet.UniqueCellFormatRangesEnumeration" ) 823*cdf0e10cSrcweir SC_SIMPLE_SERVICE_INFO( ScUniqueCellFormatsObj, "ScUniqueCellFormatsObj", "com.sun.star.sheet.UniqueCellFormatRanges" ) 824*cdf0e10cSrcweir SC_SIMPLE_SERVICE_INFO( ScCellRangesBase, "ScCellRangesBase", "stardiv.unknown" ) 825*cdf0e10cSrcweir SC_SIMPLE_SERVICE_INFO( ScCellsEnumeration, "ScCellsEnumeration", "com.sun.star.sheet.CellsEnumeration" ) 826*cdf0e10cSrcweir SC_SIMPLE_SERVICE_INFO( ScCellsObj, "ScCellsObj", "com.sun.star.sheet.Cells" ) 827*cdf0e10cSrcweir SC_SIMPLE_SERVICE_INFO( ScTableColumnObj, "ScTableColumnObj", "com.sun.star.table.TableColumn" ) 828*cdf0e10cSrcweir SC_SIMPLE_SERVICE_INFO( ScTableRowObj, "ScTableRowObj", "com.sun.star.table.TableRow" ) 829*cdf0e10cSrcweir 830*cdf0e10cSrcweir //------------------------------------------------------------------------ 831*cdf0e10cSrcweir 832*cdf0e10cSrcweir SV_IMPL_PTRARR( XModifyListenerArr_Impl, XModifyListenerPtr ); 833*cdf0e10cSrcweir SV_IMPL_PTRARR( ScNamedEntryArr_Impl, ScNamedEntryPtr ); 834*cdf0e10cSrcweir 835*cdf0e10cSrcweir //------------------------------------------------------------------------ 836*cdf0e10cSrcweir 837*cdf0e10cSrcweir //! ScLinkListener in anderes File verschieben !!! 838*cdf0e10cSrcweir 839*cdf0e10cSrcweir ScLinkListener::~ScLinkListener() 840*cdf0e10cSrcweir { 841*cdf0e10cSrcweir } 842*cdf0e10cSrcweir 843*cdf0e10cSrcweir void ScLinkListener::Notify( SvtBroadcaster&, const SfxHint& rHint ) 844*cdf0e10cSrcweir { 845*cdf0e10cSrcweir aLink.Call( (SfxHint*)&rHint ); 846*cdf0e10cSrcweir } 847*cdf0e10cSrcweir 848*cdf0e10cSrcweir //------------------------------------------------------------------------ 849*cdf0e10cSrcweir 850*cdf0e10cSrcweir void lcl_CopyProperties( beans::XPropertySet& rDest, beans::XPropertySet& rSource ) 851*cdf0e10cSrcweir { 852*cdf0e10cSrcweir uno::Reference<beans::XPropertySetInfo> xInfo(rSource.getPropertySetInfo()); 853*cdf0e10cSrcweir if (xInfo.is()) 854*cdf0e10cSrcweir { 855*cdf0e10cSrcweir uno::Sequence<beans::Property> aSeq(xInfo->getProperties()); 856*cdf0e10cSrcweir const beans::Property* pAry = aSeq.getConstArray(); 857*cdf0e10cSrcweir sal_uLong nCount = aSeq.getLength(); 858*cdf0e10cSrcweir for (sal_uLong i=0; i<nCount; i++) 859*cdf0e10cSrcweir { 860*cdf0e10cSrcweir rtl::OUString aName(pAry[i].Name); 861*cdf0e10cSrcweir rDest.setPropertyValue( aName, rSource.getPropertyValue( aName ) ); 862*cdf0e10cSrcweir } 863*cdf0e10cSrcweir } 864*cdf0e10cSrcweir } 865*cdf0e10cSrcweir 866*cdf0e10cSrcweir SCTAB lcl_FirstTab( const ScRangeList& rRanges ) 867*cdf0e10cSrcweir { 868*cdf0e10cSrcweir DBG_ASSERT(rRanges.Count() >= 1, "was fuer Ranges ?!?!"); 869*cdf0e10cSrcweir const ScRange* pFirst = rRanges.GetObject(0); 870*cdf0e10cSrcweir if (pFirst) 871*cdf0e10cSrcweir return pFirst->aStart.Tab(); 872*cdf0e10cSrcweir 873*cdf0e10cSrcweir return 0; // soll nicht sein 874*cdf0e10cSrcweir } 875*cdf0e10cSrcweir 876*cdf0e10cSrcweir sal_Bool lcl_WholeSheet( const ScRangeList& rRanges ) 877*cdf0e10cSrcweir { 878*cdf0e10cSrcweir if ( rRanges.Count() == 1 ) 879*cdf0e10cSrcweir { 880*cdf0e10cSrcweir ScRange* pRange = rRanges.GetObject(0); 881*cdf0e10cSrcweir if ( pRange && pRange->aStart.Col() == 0 && pRange->aEnd.Col() == MAXCOL && 882*cdf0e10cSrcweir pRange->aStart.Row() == 0 && pRange->aEnd.Row() == MAXROW ) 883*cdf0e10cSrcweir return sal_True; 884*cdf0e10cSrcweir } 885*cdf0e10cSrcweir return sal_False; 886*cdf0e10cSrcweir } 887*cdf0e10cSrcweir 888*cdf0e10cSrcweir //------------------------------------------------------------------------ 889*cdf0e10cSrcweir 890*cdf0e10cSrcweir ScSubTotalFunc lcl_SummaryToSubTotal( sheet::GeneralFunction eSummary ) 891*cdf0e10cSrcweir { 892*cdf0e10cSrcweir ScSubTotalFunc eSubTotal; 893*cdf0e10cSrcweir switch (eSummary) 894*cdf0e10cSrcweir { 895*cdf0e10cSrcweir case sheet::GeneralFunction_SUM: 896*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_SUM; 897*cdf0e10cSrcweir break; 898*cdf0e10cSrcweir case sheet::GeneralFunction_COUNT: 899*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_CNT2; 900*cdf0e10cSrcweir break; 901*cdf0e10cSrcweir case sheet::GeneralFunction_AVERAGE: 902*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_AVE; 903*cdf0e10cSrcweir break; 904*cdf0e10cSrcweir case sheet::GeneralFunction_MAX: 905*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_MAX; 906*cdf0e10cSrcweir break; 907*cdf0e10cSrcweir case sheet::GeneralFunction_MIN: 908*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_MIN; 909*cdf0e10cSrcweir break; 910*cdf0e10cSrcweir case sheet::GeneralFunction_PRODUCT: 911*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_PROD; 912*cdf0e10cSrcweir break; 913*cdf0e10cSrcweir case sheet::GeneralFunction_COUNTNUMS: 914*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_CNT; 915*cdf0e10cSrcweir break; 916*cdf0e10cSrcweir case sheet::GeneralFunction_STDEV: 917*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_STD; 918*cdf0e10cSrcweir break; 919*cdf0e10cSrcweir case sheet::GeneralFunction_STDEVP: 920*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_STDP; 921*cdf0e10cSrcweir break; 922*cdf0e10cSrcweir case sheet::GeneralFunction_VAR: 923*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_VAR; 924*cdf0e10cSrcweir break; 925*cdf0e10cSrcweir case sheet::GeneralFunction_VARP: 926*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_VARP; 927*cdf0e10cSrcweir break; 928*cdf0e10cSrcweir 929*cdf0e10cSrcweir case sheet::GeneralFunction_NONE: 930*cdf0e10cSrcweir case sheet::GeneralFunction_AUTO: 931*cdf0e10cSrcweir default: 932*cdf0e10cSrcweir eSubTotal = SUBTOTAL_FUNC_NONE; 933*cdf0e10cSrcweir break; 934*cdf0e10cSrcweir } 935*cdf0e10cSrcweir return eSubTotal; 936*cdf0e10cSrcweir } 937*cdf0e10cSrcweir 938*cdf0e10cSrcweir //------------------------------------------------------------------------ 939*cdf0e10cSrcweir 940*cdf0e10cSrcweir const SvxBorderLine* ScHelperFunctions::GetBorderLine( SvxBorderLine& rLine, const table::BorderLine& rStruct ) 941*cdf0e10cSrcweir { 942*cdf0e10cSrcweir // Calc braucht Twips, im Uno-Struct sind 1/100mm 943*cdf0e10cSrcweir 944*cdf0e10cSrcweir rLine.SetOutWidth( (sal_uInt16)HMMToTwips( rStruct.OuterLineWidth ) ); 945*cdf0e10cSrcweir rLine.SetInWidth( (sal_uInt16)HMMToTwips( rStruct.InnerLineWidth ) ); 946*cdf0e10cSrcweir rLine.SetDistance( (sal_uInt16)HMMToTwips( rStruct.LineDistance ) ); 947*cdf0e10cSrcweir rLine.SetColor( ColorData( rStruct.Color ) ); 948*cdf0e10cSrcweir 949*cdf0e10cSrcweir if ( rLine.GetOutWidth() || rLine.GetInWidth() || rLine.GetDistance() ) 950*cdf0e10cSrcweir return &rLine; 951*cdf0e10cSrcweir else 952*cdf0e10cSrcweir return NULL; 953*cdf0e10cSrcweir } 954*cdf0e10cSrcweir 955*cdf0e10cSrcweir void ScHelperFunctions::FillBoxItems( SvxBoxItem& rOuter, SvxBoxInfoItem& rInner, const table::TableBorder& rBorder ) 956*cdf0e10cSrcweir { 957*cdf0e10cSrcweir SvxBorderLine aLine; 958*cdf0e10cSrcweir rOuter.SetDistance( (sal_uInt16)HMMToTwips( rBorder.Distance ) ); 959*cdf0e10cSrcweir rOuter.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.TopLine ), BOX_LINE_TOP ); 960*cdf0e10cSrcweir rOuter.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.BottomLine ), BOX_LINE_BOTTOM ); 961*cdf0e10cSrcweir rOuter.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.LeftLine ), BOX_LINE_LEFT ); 962*cdf0e10cSrcweir rOuter.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.RightLine ), BOX_LINE_RIGHT ); 963*cdf0e10cSrcweir rInner.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.HorizontalLine ), BOXINFO_LINE_HORI ); 964*cdf0e10cSrcweir rInner.SetLine( ScHelperFunctions::GetBorderLine( aLine, rBorder.VerticalLine ), BOXINFO_LINE_VERT ); 965*cdf0e10cSrcweir rInner.SetValid( VALID_TOP, rBorder.IsTopLineValid ); 966*cdf0e10cSrcweir rInner.SetValid( VALID_BOTTOM, rBorder.IsBottomLineValid ); 967*cdf0e10cSrcweir rInner.SetValid( VALID_LEFT, rBorder.IsLeftLineValid ); 968*cdf0e10cSrcweir rInner.SetValid( VALID_RIGHT, rBorder.IsRightLineValid ); 969*cdf0e10cSrcweir rInner.SetValid( VALID_HORI, rBorder.IsHorizontalLineValid ); 970*cdf0e10cSrcweir rInner.SetValid( VALID_VERT, rBorder.IsVerticalLineValid ); 971*cdf0e10cSrcweir rInner.SetValid( VALID_DISTANCE, rBorder.IsDistanceValid ); 972*cdf0e10cSrcweir rInner.SetTable( sal_True ); 973*cdf0e10cSrcweir } 974*cdf0e10cSrcweir 975*cdf0e10cSrcweir void ScHelperFunctions::FillBorderLine( table::BorderLine& rStruct, const SvxBorderLine* pLine ) 976*cdf0e10cSrcweir { 977*cdf0e10cSrcweir if (pLine) 978*cdf0e10cSrcweir { 979*cdf0e10cSrcweir rStruct.Color = pLine->GetColor().GetColor(); 980*cdf0e10cSrcweir rStruct.InnerLineWidth = (sal_Int16)TwipsToHMM( pLine->GetInWidth() ); 981*cdf0e10cSrcweir rStruct.OuterLineWidth = (sal_Int16)TwipsToHMM( pLine->GetOutWidth() ); 982*cdf0e10cSrcweir rStruct.LineDistance = (sal_Int16)TwipsToHMM( pLine->GetDistance() ); 983*cdf0e10cSrcweir } 984*cdf0e10cSrcweir else 985*cdf0e10cSrcweir rStruct.Color = rStruct.InnerLineWidth = 986*cdf0e10cSrcweir rStruct.OuterLineWidth = rStruct.LineDistance = 0; 987*cdf0e10cSrcweir } 988*cdf0e10cSrcweir 989*cdf0e10cSrcweir void ScHelperFunctions::FillTableBorder( table::TableBorder& rBorder, 990*cdf0e10cSrcweir const SvxBoxItem& rOuter, const SvxBoxInfoItem& rInner ) 991*cdf0e10cSrcweir { 992*cdf0e10cSrcweir ScHelperFunctions::FillBorderLine( rBorder.TopLine, rOuter.GetTop() ); 993*cdf0e10cSrcweir ScHelperFunctions::FillBorderLine( rBorder.BottomLine, rOuter.GetBottom() ); 994*cdf0e10cSrcweir ScHelperFunctions::FillBorderLine( rBorder.LeftLine, rOuter.GetLeft() ); 995*cdf0e10cSrcweir ScHelperFunctions::FillBorderLine( rBorder.RightLine, rOuter.GetRight() ); 996*cdf0e10cSrcweir ScHelperFunctions::FillBorderLine( rBorder.HorizontalLine, rInner.GetHori() ); 997*cdf0e10cSrcweir ScHelperFunctions::FillBorderLine( rBorder.VerticalLine, rInner.GetVert() ); 998*cdf0e10cSrcweir 999*cdf0e10cSrcweir rBorder.Distance = rOuter.GetDistance(); 1000*cdf0e10cSrcweir rBorder.IsTopLineValid = rInner.IsValid(VALID_TOP); 1001*cdf0e10cSrcweir rBorder.IsBottomLineValid = rInner.IsValid(VALID_BOTTOM); 1002*cdf0e10cSrcweir rBorder.IsLeftLineValid = rInner.IsValid(VALID_LEFT); 1003*cdf0e10cSrcweir rBorder.IsRightLineValid = rInner.IsValid(VALID_RIGHT); 1004*cdf0e10cSrcweir rBorder.IsHorizontalLineValid = rInner.IsValid(VALID_HORI); 1005*cdf0e10cSrcweir rBorder.IsVerticalLineValid = rInner.IsValid(VALID_VERT); 1006*cdf0e10cSrcweir rBorder.IsDistanceValid = rInner.IsValid(VALID_DISTANCE); 1007*cdf0e10cSrcweir } 1008*cdf0e10cSrcweir 1009*cdf0e10cSrcweir //------------------------------------------------------------------------ 1010*cdf0e10cSrcweir 1011*cdf0e10cSrcweir //! lcl_ApplyBorder nach docfunc verschieben! 1012*cdf0e10cSrcweir 1013*cdf0e10cSrcweir void ScHelperFunctions::ApplyBorder( ScDocShell* pDocShell, const ScRangeList& rRanges, 1014*cdf0e10cSrcweir const SvxBoxItem& rOuter, const SvxBoxInfoItem& rInner ) 1015*cdf0e10cSrcweir { 1016*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1017*cdf0e10cSrcweir sal_Bool bUndo(pDoc->IsUndoEnabled()); 1018*cdf0e10cSrcweir ScDocument* pUndoDoc = NULL; 1019*cdf0e10cSrcweir if (bUndo) 1020*cdf0e10cSrcweir pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); 1021*cdf0e10cSrcweir sal_uLong nCount = rRanges.Count(); 1022*cdf0e10cSrcweir sal_uLong i; 1023*cdf0e10cSrcweir for (i=0; i<nCount; i++) 1024*cdf0e10cSrcweir { 1025*cdf0e10cSrcweir ScRange aRange(*rRanges.GetObject(i)); 1026*cdf0e10cSrcweir SCTAB nTab = aRange.aStart.Tab(); 1027*cdf0e10cSrcweir 1028*cdf0e10cSrcweir if (bUndo) 1029*cdf0e10cSrcweir { 1030*cdf0e10cSrcweir if ( i==0 ) 1031*cdf0e10cSrcweir pUndoDoc->InitUndo( pDoc, nTab, nTab ); 1032*cdf0e10cSrcweir else 1033*cdf0e10cSrcweir pUndoDoc->AddUndoTab( nTab, nTab ); 1034*cdf0e10cSrcweir pDoc->CopyToDocument( aRange, IDF_ATTRIB, sal_False, pUndoDoc ); 1035*cdf0e10cSrcweir } 1036*cdf0e10cSrcweir 1037*cdf0e10cSrcweir ScMarkData aMark; 1038*cdf0e10cSrcweir aMark.SetMarkArea( aRange ); 1039*cdf0e10cSrcweir aMark.SelectTable( nTab, sal_True ); 1040*cdf0e10cSrcweir 1041*cdf0e10cSrcweir pDoc->ApplySelectionFrame( aMark, &rOuter, &rInner ); 1042*cdf0e10cSrcweir // RowHeight bei Umrandung alleine nicht noetig 1043*cdf0e10cSrcweir } 1044*cdf0e10cSrcweir 1045*cdf0e10cSrcweir if (bUndo) 1046*cdf0e10cSrcweir { 1047*cdf0e10cSrcweir pDocShell->GetUndoManager()->AddUndoAction( 1048*cdf0e10cSrcweir new ScUndoBorder( pDocShell, rRanges, pUndoDoc, rOuter, rInner ) ); 1049*cdf0e10cSrcweir } 1050*cdf0e10cSrcweir 1051*cdf0e10cSrcweir for (i=0; i<nCount; i++) 1052*cdf0e10cSrcweir pDocShell->PostPaint( *rRanges.GetObject(i), PAINT_GRID, SC_PF_LINES | SC_PF_TESTMERGE ); 1053*cdf0e10cSrcweir 1054*cdf0e10cSrcweir pDocShell->SetDocumentModified(); 1055*cdf0e10cSrcweir } 1056*cdf0e10cSrcweir 1057*cdf0e10cSrcweir //! move lcl_PutDataArray to docfunc? 1058*cdf0e10cSrcweir //! merge loop with ScFunctionAccess::callFunction 1059*cdf0e10cSrcweir 1060*cdf0e10cSrcweir sal_Bool lcl_PutDataArray( ScDocShell& rDocShell, const ScRange& rRange, 1061*cdf0e10cSrcweir const uno::Sequence< uno::Sequence<uno::Any> >& aData ) 1062*cdf0e10cSrcweir { 1063*cdf0e10cSrcweir // sal_Bool bApi = sal_True; 1064*cdf0e10cSrcweir 1065*cdf0e10cSrcweir ScDocument* pDoc = rDocShell.GetDocument(); 1066*cdf0e10cSrcweir SCTAB nTab = rRange.aStart.Tab(); 1067*cdf0e10cSrcweir SCCOL nStartCol = rRange.aStart.Col(); 1068*cdf0e10cSrcweir SCROW nStartRow = rRange.aStart.Row(); 1069*cdf0e10cSrcweir SCCOL nEndCol = rRange.aEnd.Col(); 1070*cdf0e10cSrcweir SCROW nEndRow = rRange.aEnd.Row(); 1071*cdf0e10cSrcweir sal_Bool bUndo(pDoc->IsUndoEnabled()); 1072*cdf0e10cSrcweir 1073*cdf0e10cSrcweir if ( !pDoc->IsBlockEditable( nTab, nStartCol,nStartRow, nEndCol,nEndRow ) ) 1074*cdf0e10cSrcweir { 1075*cdf0e10cSrcweir //! error message 1076*cdf0e10cSrcweir return sal_False; 1077*cdf0e10cSrcweir } 1078*cdf0e10cSrcweir 1079*cdf0e10cSrcweir long nCols = 0; 1080*cdf0e10cSrcweir long nRows = aData.getLength(); 1081*cdf0e10cSrcweir const uno::Sequence<uno::Any>* pArray = aData.getConstArray(); 1082*cdf0e10cSrcweir if ( nRows ) 1083*cdf0e10cSrcweir nCols = pArray[0].getLength(); 1084*cdf0e10cSrcweir 1085*cdf0e10cSrcweir if ( nCols != nEndCol-nStartCol+1 || nRows != nEndRow-nStartRow+1 ) 1086*cdf0e10cSrcweir { 1087*cdf0e10cSrcweir //! error message? 1088*cdf0e10cSrcweir return sal_False; 1089*cdf0e10cSrcweir } 1090*cdf0e10cSrcweir 1091*cdf0e10cSrcweir ScDocument* pUndoDoc = NULL; 1092*cdf0e10cSrcweir if ( bUndo ) 1093*cdf0e10cSrcweir { 1094*cdf0e10cSrcweir pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); 1095*cdf0e10cSrcweir pUndoDoc->InitUndo( pDoc, nTab, nTab ); 1096*cdf0e10cSrcweir pDoc->CopyToDocument( rRange, IDF_CONTENTS|IDF_NOCAPTIONS, sal_False, pUndoDoc ); 1097*cdf0e10cSrcweir } 1098*cdf0e10cSrcweir 1099*cdf0e10cSrcweir pDoc->DeleteAreaTab( nStartCol, nStartRow, nEndCol, nEndRow, nTab, IDF_CONTENTS ); 1100*cdf0e10cSrcweir 1101*cdf0e10cSrcweir /* #164410# Use double allocation, which will speed up import filters 1102*cdf0e10cSrcweir using XCellRangeData::setDataArray() significantly. */ 1103*cdf0e10cSrcweir bool bDoubleAlloc = ScColumn::bDoubleAlloc; 1104*cdf0e10cSrcweir ScColumn::bDoubleAlloc = true; 1105*cdf0e10cSrcweir 1106*cdf0e10cSrcweir sal_Bool bError = sal_False; 1107*cdf0e10cSrcweir SCROW nDocRow = nStartRow; 1108*cdf0e10cSrcweir for (long nRow=0; nRow<nRows; nRow++) 1109*cdf0e10cSrcweir { 1110*cdf0e10cSrcweir const uno::Sequence<uno::Any>& rColSeq = pArray[nRow]; 1111*cdf0e10cSrcweir if ( rColSeq.getLength() == nCols ) 1112*cdf0e10cSrcweir { 1113*cdf0e10cSrcweir SCCOL nDocCol = nStartCol; 1114*cdf0e10cSrcweir const uno::Any* pColArr = rColSeq.getConstArray(); 1115*cdf0e10cSrcweir for (long nCol=0; nCol<nCols; nCol++) 1116*cdf0e10cSrcweir { 1117*cdf0e10cSrcweir const uno::Any& rElement = pColArr[nCol]; 1118*cdf0e10cSrcweir switch( rElement.getValueTypeClass() ) 1119*cdf0e10cSrcweir { 1120*cdf0e10cSrcweir case uno::TypeClass_VOID: 1121*cdf0e10cSrcweir { 1122*cdf0e10cSrcweir // void = "no value" 1123*cdf0e10cSrcweir pDoc->SetError( nDocCol, nDocRow, nTab, NOTAVAILABLE ); 1124*cdf0e10cSrcweir } 1125*cdf0e10cSrcweir break; 1126*cdf0e10cSrcweir 1127*cdf0e10cSrcweir // #87871# accept integer types because Basic passes a floating point 1128*cdf0e10cSrcweir // variable as byte, short or long if it's an integer number. 1129*cdf0e10cSrcweir case uno::TypeClass_BYTE: 1130*cdf0e10cSrcweir case uno::TypeClass_SHORT: 1131*cdf0e10cSrcweir case uno::TypeClass_UNSIGNED_SHORT: 1132*cdf0e10cSrcweir case uno::TypeClass_LONG: 1133*cdf0e10cSrcweir case uno::TypeClass_UNSIGNED_LONG: 1134*cdf0e10cSrcweir case uno::TypeClass_FLOAT: 1135*cdf0e10cSrcweir case uno::TypeClass_DOUBLE: 1136*cdf0e10cSrcweir { 1137*cdf0e10cSrcweir double fVal(0.0); 1138*cdf0e10cSrcweir rElement >>= fVal; 1139*cdf0e10cSrcweir pDoc->SetValue( nDocCol, nDocRow, nTab, fVal ); 1140*cdf0e10cSrcweir } 1141*cdf0e10cSrcweir break; 1142*cdf0e10cSrcweir 1143*cdf0e10cSrcweir case uno::TypeClass_STRING: 1144*cdf0e10cSrcweir { 1145*cdf0e10cSrcweir rtl::OUString aUStr; 1146*cdf0e10cSrcweir rElement >>= aUStr; 1147*cdf0e10cSrcweir if ( aUStr.getLength() ) 1148*cdf0e10cSrcweir pDoc->PutCell( nDocCol, nDocRow, nTab, new ScStringCell( aUStr ) ); 1149*cdf0e10cSrcweir } 1150*cdf0e10cSrcweir break; 1151*cdf0e10cSrcweir 1152*cdf0e10cSrcweir // accept Sequence<FormulaToken> for formula cells 1153*cdf0e10cSrcweir case uno::TypeClass_SEQUENCE: 1154*cdf0e10cSrcweir { 1155*cdf0e10cSrcweir uno::Sequence< sheet::FormulaToken > aTokens; 1156*cdf0e10cSrcweir if ( rElement >>= aTokens ) 1157*cdf0e10cSrcweir { 1158*cdf0e10cSrcweir ScTokenArray aTokenArray; 1159*cdf0e10cSrcweir ScTokenConversion::ConvertToTokenArray( *pDoc, aTokenArray, aTokens ); 1160*cdf0e10cSrcweir ScAddress aPos( nDocCol, nDocRow, nTab ); 1161*cdf0e10cSrcweir ScBaseCell* pNewCell = new ScFormulaCell( pDoc, aPos, &aTokenArray ); 1162*cdf0e10cSrcweir pDoc->PutCell( aPos, pNewCell ); 1163*cdf0e10cSrcweir } 1164*cdf0e10cSrcweir else 1165*cdf0e10cSrcweir bError = true; 1166*cdf0e10cSrcweir } 1167*cdf0e10cSrcweir break; 1168*cdf0e10cSrcweir 1169*cdf0e10cSrcweir default: 1170*cdf0e10cSrcweir bError = true; // invalid type 1171*cdf0e10cSrcweir } 1172*cdf0e10cSrcweir 1173*cdf0e10cSrcweir ++nDocCol; 1174*cdf0e10cSrcweir } 1175*cdf0e10cSrcweir } 1176*cdf0e10cSrcweir else 1177*cdf0e10cSrcweir bError = sal_True; // wrong size 1178*cdf0e10cSrcweir 1179*cdf0e10cSrcweir ++nDocRow; 1180*cdf0e10cSrcweir } 1181*cdf0e10cSrcweir ScColumn::bDoubleAlloc = bDoubleAlloc; 1182*cdf0e10cSrcweir 1183*cdf0e10cSrcweir sal_Bool bHeight = rDocShell.AdjustRowHeight( nStartRow, nEndRow, nTab ); 1184*cdf0e10cSrcweir 1185*cdf0e10cSrcweir if ( pUndoDoc ) 1186*cdf0e10cSrcweir { 1187*cdf0e10cSrcweir ScMarkData aDestMark; 1188*cdf0e10cSrcweir aDestMark.SelectOneTable( nTab ); 1189*cdf0e10cSrcweir rDocShell.GetUndoManager()->AddUndoAction( 1190*cdf0e10cSrcweir new ScUndoPaste( &rDocShell, 1191*cdf0e10cSrcweir nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab, aDestMark, 1192*cdf0e10cSrcweir pUndoDoc, NULL, IDF_CONTENTS, NULL,NULL,NULL,NULL, sal_False ) ); 1193*cdf0e10cSrcweir } 1194*cdf0e10cSrcweir 1195*cdf0e10cSrcweir if (!bHeight) 1196*cdf0e10cSrcweir rDocShell.PostPaint( rRange, PAINT_GRID ); // AdjustRowHeight may have painted already 1197*cdf0e10cSrcweir 1198*cdf0e10cSrcweir rDocShell.SetDocumentModified(); 1199*cdf0e10cSrcweir 1200*cdf0e10cSrcweir return !bError; 1201*cdf0e10cSrcweir } 1202*cdf0e10cSrcweir 1203*cdf0e10cSrcweir sal_Bool lcl_PutFormulaArray( ScDocShell& rDocShell, const ScRange& rRange, 1204*cdf0e10cSrcweir const uno::Sequence< uno::Sequence<rtl::OUString> >& aData, 1205*cdf0e10cSrcweir const ::rtl::OUString& rFormulaNmsp, const formula::FormulaGrammar::Grammar eGrammar ) 1206*cdf0e10cSrcweir { 1207*cdf0e10cSrcweir // sal_Bool bApi = sal_True; 1208*cdf0e10cSrcweir 1209*cdf0e10cSrcweir ScDocument* pDoc = rDocShell.GetDocument(); 1210*cdf0e10cSrcweir SCTAB nTab = rRange.aStart.Tab(); 1211*cdf0e10cSrcweir SCCOL nStartCol = rRange.aStart.Col(); 1212*cdf0e10cSrcweir SCROW nStartRow = rRange.aStart.Row(); 1213*cdf0e10cSrcweir SCCOL nEndCol = rRange.aEnd.Col(); 1214*cdf0e10cSrcweir SCROW nEndRow = rRange.aEnd.Row(); 1215*cdf0e10cSrcweir sal_Bool bUndo(pDoc->IsUndoEnabled()); 1216*cdf0e10cSrcweir 1217*cdf0e10cSrcweir if ( !pDoc->IsBlockEditable( nTab, nStartCol,nStartRow, nEndCol,nEndRow ) ) 1218*cdf0e10cSrcweir { 1219*cdf0e10cSrcweir //! error message 1220*cdf0e10cSrcweir return sal_False; 1221*cdf0e10cSrcweir } 1222*cdf0e10cSrcweir 1223*cdf0e10cSrcweir long nCols = 0; 1224*cdf0e10cSrcweir long nRows = aData.getLength(); 1225*cdf0e10cSrcweir const uno::Sequence<rtl::OUString>* pArray = aData.getConstArray(); 1226*cdf0e10cSrcweir if ( nRows ) 1227*cdf0e10cSrcweir nCols = pArray[0].getLength(); 1228*cdf0e10cSrcweir 1229*cdf0e10cSrcweir if ( nCols != nEndCol-nStartCol+1 || nRows != nEndRow-nStartRow+1 ) 1230*cdf0e10cSrcweir { 1231*cdf0e10cSrcweir //! error message? 1232*cdf0e10cSrcweir return sal_False; 1233*cdf0e10cSrcweir } 1234*cdf0e10cSrcweir 1235*cdf0e10cSrcweir ScDocument* pUndoDoc = NULL; 1236*cdf0e10cSrcweir if ( bUndo ) 1237*cdf0e10cSrcweir { 1238*cdf0e10cSrcweir pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); 1239*cdf0e10cSrcweir pUndoDoc->InitUndo( pDoc, nTab, nTab ); 1240*cdf0e10cSrcweir pDoc->CopyToDocument( rRange, IDF_CONTENTS, sal_False, pUndoDoc ); 1241*cdf0e10cSrcweir } 1242*cdf0e10cSrcweir 1243*cdf0e10cSrcweir pDoc->DeleteAreaTab( nStartCol, nStartRow, nEndCol, nEndRow, nTab, IDF_CONTENTS ); 1244*cdf0e10cSrcweir 1245*cdf0e10cSrcweir ScDocFunc aFunc( rDocShell ); // for InterpretEnglishString 1246*cdf0e10cSrcweir 1247*cdf0e10cSrcweir sal_Bool bError = sal_False; 1248*cdf0e10cSrcweir SCROW nDocRow = nStartRow; 1249*cdf0e10cSrcweir for (long nRow=0; nRow<nRows; nRow++) 1250*cdf0e10cSrcweir { 1251*cdf0e10cSrcweir const uno::Sequence<rtl::OUString>& rColSeq = pArray[nRow]; 1252*cdf0e10cSrcweir if ( rColSeq.getLength() == nCols ) 1253*cdf0e10cSrcweir { 1254*cdf0e10cSrcweir SCCOL nDocCol = nStartCol; 1255*cdf0e10cSrcweir const rtl::OUString* pColArr = rColSeq.getConstArray(); 1256*cdf0e10cSrcweir for (long nCol=0; nCol<nCols; nCol++) 1257*cdf0e10cSrcweir { 1258*cdf0e10cSrcweir String aText(pColArr[nCol]); 1259*cdf0e10cSrcweir ScAddress aPos( nDocCol, nDocRow, nTab ); 1260*cdf0e10cSrcweir ScBaseCell* pNewCell = aFunc.InterpretEnglishString( aPos, aText, rFormulaNmsp, eGrammar ); 1261*cdf0e10cSrcweir pDoc->PutCell( aPos, pNewCell ); 1262*cdf0e10cSrcweir 1263*cdf0e10cSrcweir ++nDocCol; 1264*cdf0e10cSrcweir } 1265*cdf0e10cSrcweir } 1266*cdf0e10cSrcweir else 1267*cdf0e10cSrcweir bError = sal_True; // wrong size 1268*cdf0e10cSrcweir 1269*cdf0e10cSrcweir ++nDocRow; 1270*cdf0e10cSrcweir } 1271*cdf0e10cSrcweir 1272*cdf0e10cSrcweir sal_Bool bHeight = rDocShell.AdjustRowHeight( nStartRow, nEndRow, nTab ); 1273*cdf0e10cSrcweir 1274*cdf0e10cSrcweir if ( pUndoDoc ) 1275*cdf0e10cSrcweir { 1276*cdf0e10cSrcweir ScMarkData aDestMark; 1277*cdf0e10cSrcweir aDestMark.SelectOneTable( nTab ); 1278*cdf0e10cSrcweir rDocShell.GetUndoManager()->AddUndoAction( 1279*cdf0e10cSrcweir new ScUndoPaste( &rDocShell, 1280*cdf0e10cSrcweir nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab, aDestMark, 1281*cdf0e10cSrcweir pUndoDoc, NULL, IDF_CONTENTS, NULL,NULL,NULL,NULL, sal_False ) ); 1282*cdf0e10cSrcweir } 1283*cdf0e10cSrcweir 1284*cdf0e10cSrcweir if (!bHeight) 1285*cdf0e10cSrcweir rDocShell.PostPaint( rRange, PAINT_GRID ); // AdjustRowHeight may have painted already 1286*cdf0e10cSrcweir 1287*cdf0e10cSrcweir rDocShell.SetDocumentModified(); 1288*cdf0e10cSrcweir 1289*cdf0e10cSrcweir return !bError; 1290*cdf0e10cSrcweir } 1291*cdf0e10cSrcweir 1292*cdf0e10cSrcweir // used in ScCellRangeObj::getFormulaArray and ScCellObj::GetInputString_Impl 1293*cdf0e10cSrcweir String lcl_GetInputString( ScDocument* pDoc, const ScAddress& rPosition, sal_Bool bEnglish ) 1294*cdf0e10cSrcweir { 1295*cdf0e10cSrcweir String aVal; 1296*cdf0e10cSrcweir if ( pDoc ) 1297*cdf0e10cSrcweir { 1298*cdf0e10cSrcweir ScBaseCell* pCell = pDoc->GetCell( rPosition ); 1299*cdf0e10cSrcweir if ( pCell && pCell->GetCellType() != CELLTYPE_NOTE ) 1300*cdf0e10cSrcweir { 1301*cdf0e10cSrcweir CellType eType = pCell->GetCellType(); 1302*cdf0e10cSrcweir if ( eType == CELLTYPE_FORMULA ) 1303*cdf0e10cSrcweir { 1304*cdf0e10cSrcweir ScFormulaCell* pForm = (ScFormulaCell*)pCell; 1305*cdf0e10cSrcweir pForm->GetFormula( aVal,formula::FormulaGrammar::mapAPItoGrammar( bEnglish, false)); 1306*cdf0e10cSrcweir } 1307*cdf0e10cSrcweir else 1308*cdf0e10cSrcweir { 1309*cdf0e10cSrcweir SvNumberFormatter* pFormatter = bEnglish ? ScGlobal::GetEnglishFormatter() : 1310*cdf0e10cSrcweir pDoc->GetFormatTable(); 1311*cdf0e10cSrcweir // Since the English formatter was constructed with 1312*cdf0e10cSrcweir // LANGUAGE_ENGLISH_US the "General" format has index key 0, 1313*cdf0e10cSrcweir // we don't have to query. 1314*cdf0e10cSrcweir sal_uInt32 nNumFmt = bEnglish ? 1315*cdf0e10cSrcweir // pFormatter->GetStandardIndex(LANGUAGE_ENGLISH_US) : 1316*cdf0e10cSrcweir 0 : 1317*cdf0e10cSrcweir pDoc->GetNumberFormat( rPosition ); 1318*cdf0e10cSrcweir 1319*cdf0e10cSrcweir if ( eType == CELLTYPE_EDIT ) 1320*cdf0e10cSrcweir { 1321*cdf0e10cSrcweir // GetString an der EditCell macht Leerzeichen aus Umbruechen, 1322*cdf0e10cSrcweir // hier werden die Umbrueche aber gebraucht 1323*cdf0e10cSrcweir const EditTextObject* pData = ((ScEditCell*)pCell)->GetData(); 1324*cdf0e10cSrcweir if (pData) 1325*cdf0e10cSrcweir { 1326*cdf0e10cSrcweir EditEngine& rEngine = pDoc->GetEditEngine(); 1327*cdf0e10cSrcweir rEngine.SetText( *pData ); 1328*cdf0e10cSrcweir aVal = rEngine.GetText( LINEEND_LF ); 1329*cdf0e10cSrcweir } 1330*cdf0e10cSrcweir } 1331*cdf0e10cSrcweir else 1332*cdf0e10cSrcweir ScCellFormat::GetInputString( pCell, nNumFmt, aVal, *pFormatter ); 1333*cdf0e10cSrcweir 1334*cdf0e10cSrcweir // ggf. ein ' davorhaengen wie in ScTabViewShell::UpdateInputHandler 1335*cdf0e10cSrcweir if ( eType == CELLTYPE_STRING || eType == CELLTYPE_EDIT ) 1336*cdf0e10cSrcweir { 1337*cdf0e10cSrcweir double fDummy; 1338*cdf0e10cSrcweir sal_Bool bIsNumberFormat(pFormatter->IsNumberFormat(aVal, nNumFmt, fDummy)); 1339*cdf0e10cSrcweir if ( bIsNumberFormat ) 1340*cdf0e10cSrcweir aVal.Insert('\'',0); 1341*cdf0e10cSrcweir else if ( aVal.Len() && aVal.GetChar(0) == '\'' ) 1342*cdf0e10cSrcweir { 1343*cdf0e10cSrcweir // if the string starts with a "'", add another one because setFormula 1344*cdf0e10cSrcweir // strips one (like text input, except for "text" number formats) 1345*cdf0e10cSrcweir if ( bEnglish || ( pFormatter->GetType(nNumFmt) != NUMBERFORMAT_TEXT ) ) 1346*cdf0e10cSrcweir aVal.Insert('\'',0); 1347*cdf0e10cSrcweir } 1348*cdf0e10cSrcweir } 1349*cdf0e10cSrcweir } 1350*cdf0e10cSrcweir } 1351*cdf0e10cSrcweir } 1352*cdf0e10cSrcweir return aVal; 1353*cdf0e10cSrcweir } 1354*cdf0e10cSrcweir 1355*cdf0e10cSrcweir //------------------------------------------------------------------------ 1356*cdf0e10cSrcweir 1357*cdf0e10cSrcweir // Default-ctor fuer SMART_REFLECTION Krempel 1358*cdf0e10cSrcweir ScCellRangesBase::ScCellRangesBase() : 1359*cdf0e10cSrcweir pPropSet(lcl_GetCellsPropertySet()), 1360*cdf0e10cSrcweir pDocShell( NULL ), 1361*cdf0e10cSrcweir pValueListener( NULL ), 1362*cdf0e10cSrcweir pCurrentFlat( NULL ), 1363*cdf0e10cSrcweir pCurrentDeep( NULL ), 1364*cdf0e10cSrcweir pCurrentDataSet( NULL ), 1365*cdf0e10cSrcweir pNoDfltCurrentDataSet( NULL ), 1366*cdf0e10cSrcweir pMarkData( NULL ), 1367*cdf0e10cSrcweir nObjectId( 0 ), 1368*cdf0e10cSrcweir bChartColAsHdr( sal_False ), 1369*cdf0e10cSrcweir bChartRowAsHdr( sal_False ), 1370*cdf0e10cSrcweir bCursorOnly( sal_False ), 1371*cdf0e10cSrcweir bGotDataChangedHint( sal_False ), 1372*cdf0e10cSrcweir aValueListeners( 0 ) 1373*cdf0e10cSrcweir { 1374*cdf0e10cSrcweir } 1375*cdf0e10cSrcweir 1376*cdf0e10cSrcweir ScCellRangesBase::ScCellRangesBase(ScDocShell* pDocSh, const ScRange& rR) : 1377*cdf0e10cSrcweir pPropSet(lcl_GetCellsPropertySet()), 1378*cdf0e10cSrcweir pDocShell( pDocSh ), 1379*cdf0e10cSrcweir pValueListener( NULL ), 1380*cdf0e10cSrcweir pCurrentFlat( NULL ), 1381*cdf0e10cSrcweir pCurrentDeep( NULL ), 1382*cdf0e10cSrcweir pCurrentDataSet( NULL ), 1383*cdf0e10cSrcweir pNoDfltCurrentDataSet( NULL ), 1384*cdf0e10cSrcweir pMarkData( NULL ), 1385*cdf0e10cSrcweir nObjectId( 0 ), 1386*cdf0e10cSrcweir bChartColAsHdr( sal_False ), 1387*cdf0e10cSrcweir bChartRowAsHdr( sal_False ), 1388*cdf0e10cSrcweir bCursorOnly( sal_False ), 1389*cdf0e10cSrcweir bGotDataChangedHint( sal_False ), 1390*cdf0e10cSrcweir aValueListeners( 0 ) 1391*cdf0e10cSrcweir { 1392*cdf0e10cSrcweir ScRange aCellRange(rR); 1393*cdf0e10cSrcweir aCellRange.Justify(); 1394*cdf0e10cSrcweir aRanges.Append( aCellRange ); 1395*cdf0e10cSrcweir 1396*cdf0e10cSrcweir if (pDocShell) // Null if created with createInstance 1397*cdf0e10cSrcweir { 1398*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1399*cdf0e10cSrcweir pDoc->AddUnoObject(*this); 1400*cdf0e10cSrcweir nObjectId = pDoc->GetNewUnoId(); 1401*cdf0e10cSrcweir } 1402*cdf0e10cSrcweir } 1403*cdf0e10cSrcweir 1404*cdf0e10cSrcweir ScCellRangesBase::ScCellRangesBase(ScDocShell* pDocSh, const ScRangeList& rR) : 1405*cdf0e10cSrcweir pPropSet(lcl_GetCellsPropertySet()), 1406*cdf0e10cSrcweir pDocShell( pDocSh ), 1407*cdf0e10cSrcweir pValueListener( NULL ), 1408*cdf0e10cSrcweir pCurrentFlat( NULL ), 1409*cdf0e10cSrcweir pCurrentDeep( NULL ), 1410*cdf0e10cSrcweir pCurrentDataSet( NULL ), 1411*cdf0e10cSrcweir pNoDfltCurrentDataSet( NULL ), 1412*cdf0e10cSrcweir pMarkData( NULL ), 1413*cdf0e10cSrcweir aRanges( rR ), 1414*cdf0e10cSrcweir nObjectId( 0 ), 1415*cdf0e10cSrcweir bChartColAsHdr( sal_False ), 1416*cdf0e10cSrcweir bChartRowAsHdr( sal_False ), 1417*cdf0e10cSrcweir bCursorOnly( sal_False ), 1418*cdf0e10cSrcweir bGotDataChangedHint( sal_False ), 1419*cdf0e10cSrcweir aValueListeners( 0 ) 1420*cdf0e10cSrcweir { 1421*cdf0e10cSrcweir if (pDocShell) // Null if created with createInstance 1422*cdf0e10cSrcweir { 1423*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1424*cdf0e10cSrcweir pDoc->AddUnoObject(*this); 1425*cdf0e10cSrcweir nObjectId = pDoc->GetNewUnoId(); 1426*cdf0e10cSrcweir } 1427*cdf0e10cSrcweir } 1428*cdf0e10cSrcweir 1429*cdf0e10cSrcweir ScCellRangesBase::~ScCellRangesBase() 1430*cdf0e10cSrcweir { 1431*cdf0e10cSrcweir // #107294# call RemoveUnoObject first, so no notification can happen 1432*cdf0e10cSrcweir // during ForgetCurrentAttrs 1433*cdf0e10cSrcweir 1434*cdf0e10cSrcweir if (pDocShell) 1435*cdf0e10cSrcweir pDocShell->GetDocument()->RemoveUnoObject(*this); 1436*cdf0e10cSrcweir 1437*cdf0e10cSrcweir ForgetCurrentAttrs(); 1438*cdf0e10cSrcweir ForgetMarkData(); 1439*cdf0e10cSrcweir 1440*cdf0e10cSrcweir delete pValueListener; 1441*cdf0e10cSrcweir 1442*cdf0e10cSrcweir //! XChartDataChangeEventListener abmelden ?? 1443*cdf0e10cSrcweir //! (ChartCollection haelt dann auch dieses Objekt fest!) 1444*cdf0e10cSrcweir } 1445*cdf0e10cSrcweir 1446*cdf0e10cSrcweir void ScCellRangesBase::ForgetCurrentAttrs() 1447*cdf0e10cSrcweir { 1448*cdf0e10cSrcweir delete pCurrentFlat; 1449*cdf0e10cSrcweir delete pCurrentDeep; 1450*cdf0e10cSrcweir delete pCurrentDataSet; 1451*cdf0e10cSrcweir delete pNoDfltCurrentDataSet; 1452*cdf0e10cSrcweir pCurrentFlat = NULL; 1453*cdf0e10cSrcweir pCurrentDeep = NULL; 1454*cdf0e10cSrcweir pCurrentDataSet = NULL; 1455*cdf0e10cSrcweir pNoDfltCurrentDataSet = NULL; 1456*cdf0e10cSrcweir 1457*cdf0e10cSrcweir // #i62483# pMarkData can remain unchanged, is deleted only if the range changes (RefChanged) 1458*cdf0e10cSrcweir } 1459*cdf0e10cSrcweir 1460*cdf0e10cSrcweir void ScCellRangesBase::ForgetMarkData() 1461*cdf0e10cSrcweir { 1462*cdf0e10cSrcweir delete pMarkData; 1463*cdf0e10cSrcweir pMarkData = NULL; 1464*cdf0e10cSrcweir } 1465*cdf0e10cSrcweir 1466*cdf0e10cSrcweir const ScPatternAttr* ScCellRangesBase::GetCurrentAttrsFlat() 1467*cdf0e10cSrcweir { 1468*cdf0e10cSrcweir // get and cache direct cell attributes for this object's range 1469*cdf0e10cSrcweir 1470*cdf0e10cSrcweir if ( !pCurrentFlat && pDocShell ) 1471*cdf0e10cSrcweir { 1472*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1473*cdf0e10cSrcweir pCurrentFlat = pDoc->CreateSelectionPattern( *GetMarkData(), sal_False ); 1474*cdf0e10cSrcweir } 1475*cdf0e10cSrcweir return pCurrentFlat; 1476*cdf0e10cSrcweir } 1477*cdf0e10cSrcweir 1478*cdf0e10cSrcweir const ScPatternAttr* ScCellRangesBase::GetCurrentAttrsDeep() 1479*cdf0e10cSrcweir { 1480*cdf0e10cSrcweir // get and cache cell attributes (incl. styles) for this object's range 1481*cdf0e10cSrcweir 1482*cdf0e10cSrcweir if ( !pCurrentDeep && pDocShell ) 1483*cdf0e10cSrcweir { 1484*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1485*cdf0e10cSrcweir pCurrentDeep = pDoc->CreateSelectionPattern( *GetMarkData(), sal_True ); 1486*cdf0e10cSrcweir } 1487*cdf0e10cSrcweir return pCurrentDeep; 1488*cdf0e10cSrcweir } 1489*cdf0e10cSrcweir 1490*cdf0e10cSrcweir SfxItemSet* ScCellRangesBase::GetCurrentDataSet(bool bNoDflt) 1491*cdf0e10cSrcweir { 1492*cdf0e10cSrcweir if(!pCurrentDataSet) 1493*cdf0e10cSrcweir { 1494*cdf0e10cSrcweir const ScPatternAttr* pPattern = GetCurrentAttrsDeep(); 1495*cdf0e10cSrcweir if ( pPattern ) 1496*cdf0e10cSrcweir { 1497*cdf0e10cSrcweir // Dontcare durch Default ersetzen, damit man immer eine Reflection hat 1498*cdf0e10cSrcweir pCurrentDataSet = new SfxItemSet( pPattern->GetItemSet() ); 1499*cdf0e10cSrcweir pNoDfltCurrentDataSet = new SfxItemSet( pPattern->GetItemSet() ); 1500*cdf0e10cSrcweir pCurrentDataSet->ClearInvalidItems(); 1501*cdf0e10cSrcweir } 1502*cdf0e10cSrcweir } 1503*cdf0e10cSrcweir return bNoDflt ? pNoDfltCurrentDataSet : pCurrentDataSet; 1504*cdf0e10cSrcweir } 1505*cdf0e10cSrcweir 1506*cdf0e10cSrcweir const ScMarkData* ScCellRangesBase::GetMarkData() 1507*cdf0e10cSrcweir { 1508*cdf0e10cSrcweir if (!pMarkData) 1509*cdf0e10cSrcweir { 1510*cdf0e10cSrcweir pMarkData = new ScMarkData(); 1511*cdf0e10cSrcweir pMarkData->MarkFromRangeList( aRanges, sal_False ); 1512*cdf0e10cSrcweir } 1513*cdf0e10cSrcweir return pMarkData; 1514*cdf0e10cSrcweir } 1515*cdf0e10cSrcweir 1516*cdf0e10cSrcweir void ScCellRangesBase::Notify( SfxBroadcaster&, const SfxHint& rHint ) 1517*cdf0e10cSrcweir { 1518*cdf0e10cSrcweir if ( rHint.ISA( ScUpdateRefHint ) ) 1519*cdf0e10cSrcweir { 1520*cdf0e10cSrcweir const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; 1521*cdf0e10cSrcweir 1522*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1523*cdf0e10cSrcweir ScRangeList* pUndoRanges = NULL; 1524*cdf0e10cSrcweir if ( pDoc->HasUnoRefUndo() ) 1525*cdf0e10cSrcweir pUndoRanges = new ScRangeList( aRanges ); 1526*cdf0e10cSrcweir 1527*cdf0e10cSrcweir if ( aRanges.UpdateReference( rRef.GetMode(), pDoc, rRef.GetRange(), 1528*cdf0e10cSrcweir rRef.GetDx(), rRef.GetDy(), rRef.GetDz() ) ) 1529*cdf0e10cSrcweir { 1530*cdf0e10cSrcweir if (rRef.GetMode() == URM_INSDEL && 1531*cdf0e10cSrcweir aRanges.Count() == 1 && 1532*cdf0e10cSrcweir ScTableSheetObj::getImplementation( (cppu::OWeakObject*)this )) 1533*cdf0e10cSrcweir { 1534*cdf0e10cSrcweir // #101755#; the range size of a sheet does not change 1535*cdf0e10cSrcweir ScRange* pR = aRanges.First(); 1536*cdf0e10cSrcweir if (pR) 1537*cdf0e10cSrcweir { 1538*cdf0e10cSrcweir pR->aStart.SetCol(0); 1539*cdf0e10cSrcweir pR->aStart.SetRow(0); 1540*cdf0e10cSrcweir pR->aEnd.SetCol(MAXCOL); 1541*cdf0e10cSrcweir pR->aEnd.SetRow(MAXROW); 1542*cdf0e10cSrcweir } 1543*cdf0e10cSrcweir } 1544*cdf0e10cSrcweir RefChanged(); 1545*cdf0e10cSrcweir 1546*cdf0e10cSrcweir // #129050# any change of the range address is broadcast to value (modify) listeners 1547*cdf0e10cSrcweir if ( aValueListeners.Count() ) 1548*cdf0e10cSrcweir bGotDataChangedHint = sal_True; 1549*cdf0e10cSrcweir 1550*cdf0e10cSrcweir if ( pUndoRanges ) 1551*cdf0e10cSrcweir pDoc->AddUnoRefChange( nObjectId, *pUndoRanges ); 1552*cdf0e10cSrcweir } 1553*cdf0e10cSrcweir 1554*cdf0e10cSrcweir delete pUndoRanges; 1555*cdf0e10cSrcweir } 1556*cdf0e10cSrcweir else if ( rHint.ISA( SfxSimpleHint ) ) 1557*cdf0e10cSrcweir { 1558*cdf0e10cSrcweir sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId(); 1559*cdf0e10cSrcweir if ( nId == SFX_HINT_DYING ) 1560*cdf0e10cSrcweir { 1561*cdf0e10cSrcweir ForgetCurrentAttrs(); 1562*cdf0e10cSrcweir pDocShell = NULL; // invalid 1563*cdf0e10cSrcweir 1564*cdf0e10cSrcweir if ( aValueListeners.Count() != 0 ) 1565*cdf0e10cSrcweir { 1566*cdf0e10cSrcweir // dispose listeners 1567*cdf0e10cSrcweir 1568*cdf0e10cSrcweir lang::EventObject aEvent; 1569*cdf0e10cSrcweir aEvent.Source.set(static_cast<cppu::OWeakObject*>(this)); 1570*cdf0e10cSrcweir for ( sal_uInt16 n=0; n<aValueListeners.Count(); n++ ) 1571*cdf0e10cSrcweir (*aValueListeners[n])->disposing( aEvent ); 1572*cdf0e10cSrcweir 1573*cdf0e10cSrcweir aValueListeners.DeleteAndDestroy( 0, aValueListeners.Count() ); 1574*cdf0e10cSrcweir 1575*cdf0e10cSrcweir // The listeners can't have the last ref to this, as it's still held 1576*cdf0e10cSrcweir // by the DocShell. 1577*cdf0e10cSrcweir } 1578*cdf0e10cSrcweir } 1579*cdf0e10cSrcweir else if ( nId == SFX_HINT_DATACHANGED ) 1580*cdf0e10cSrcweir { 1581*cdf0e10cSrcweir // document content changed -> forget cached attributes 1582*cdf0e10cSrcweir ForgetCurrentAttrs(); 1583*cdf0e10cSrcweir 1584*cdf0e10cSrcweir if ( bGotDataChangedHint && pDocShell ) 1585*cdf0e10cSrcweir { 1586*cdf0e10cSrcweir // This object was notified of content changes, so one call 1587*cdf0e10cSrcweir // for each listener is generated now. 1588*cdf0e10cSrcweir // The calls can't be executed directly because the document's 1589*cdf0e10cSrcweir // UNO broadcaster list must not be modified. 1590*cdf0e10cSrcweir // Instead, add to the document's list of listener calls, 1591*cdf0e10cSrcweir // which will be executed directly after the broadcast of 1592*cdf0e10cSrcweir // SFX_HINT_DATACHANGED. 1593*cdf0e10cSrcweir 1594*cdf0e10cSrcweir lang::EventObject aEvent; 1595*cdf0e10cSrcweir aEvent.Source.set((cppu::OWeakObject*)this); 1596*cdf0e10cSrcweir 1597*cdf0e10cSrcweir // the EventObject holds a Ref to this object until after the listener calls 1598*cdf0e10cSrcweir 1599*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1600*cdf0e10cSrcweir for ( sal_uInt16 n=0; n<aValueListeners.Count(); n++ ) 1601*cdf0e10cSrcweir pDoc->AddUnoListenerCall( *aValueListeners[n], aEvent ); 1602*cdf0e10cSrcweir 1603*cdf0e10cSrcweir bGotDataChangedHint = sal_False; 1604*cdf0e10cSrcweir } 1605*cdf0e10cSrcweir } 1606*cdf0e10cSrcweir else if ( nId == SC_HINT_CALCALL ) 1607*cdf0e10cSrcweir { 1608*cdf0e10cSrcweir // broadcast from DoHardRecalc - set bGotDataChangedHint 1609*cdf0e10cSrcweir // (SFX_HINT_DATACHANGED follows separately) 1610*cdf0e10cSrcweir 1611*cdf0e10cSrcweir if ( aValueListeners.Count() ) 1612*cdf0e10cSrcweir bGotDataChangedHint = sal_True; 1613*cdf0e10cSrcweir } 1614*cdf0e10cSrcweir } 1615*cdf0e10cSrcweir else if ( rHint.ISA( ScUnoRefUndoHint ) ) 1616*cdf0e10cSrcweir { 1617*cdf0e10cSrcweir const ScUnoRefUndoHint& rUndoHint = static_cast<const ScUnoRefUndoHint&>(rHint); 1618*cdf0e10cSrcweir if ( rUndoHint.GetObjectId() == nObjectId ) 1619*cdf0e10cSrcweir { 1620*cdf0e10cSrcweir // restore ranges from hint 1621*cdf0e10cSrcweir 1622*cdf0e10cSrcweir aRanges = rUndoHint.GetRanges(); 1623*cdf0e10cSrcweir 1624*cdf0e10cSrcweir RefChanged(); 1625*cdf0e10cSrcweir if ( aValueListeners.Count() ) 1626*cdf0e10cSrcweir bGotDataChangedHint = sal_True; // need to broadcast the undo, too 1627*cdf0e10cSrcweir } 1628*cdf0e10cSrcweir } 1629*cdf0e10cSrcweir } 1630*cdf0e10cSrcweir 1631*cdf0e10cSrcweir void ScCellRangesBase::RefChanged() 1632*cdf0e10cSrcweir { 1633*cdf0e10cSrcweir //! adjust XChartDataChangeEventListener 1634*cdf0e10cSrcweir 1635*cdf0e10cSrcweir if ( pValueListener && aValueListeners.Count() != 0 ) 1636*cdf0e10cSrcweir { 1637*cdf0e10cSrcweir pValueListener->EndListeningAll(); 1638*cdf0e10cSrcweir 1639*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1640*cdf0e10cSrcweir sal_uLong nCount = aRanges.Count(); 1641*cdf0e10cSrcweir for (sal_uLong i=0; i<nCount; i++) 1642*cdf0e10cSrcweir pDoc->StartListeningArea( *aRanges.GetObject(i), pValueListener ); 1643*cdf0e10cSrcweir } 1644*cdf0e10cSrcweir 1645*cdf0e10cSrcweir ForgetCurrentAttrs(); 1646*cdf0e10cSrcweir ForgetMarkData(); 1647*cdf0e10cSrcweir } 1648*cdf0e10cSrcweir 1649*cdf0e10cSrcweir ScDocument* ScCellRangesBase::GetDocument() const 1650*cdf0e10cSrcweir { 1651*cdf0e10cSrcweir if (pDocShell) 1652*cdf0e10cSrcweir return pDocShell->GetDocument(); 1653*cdf0e10cSrcweir else 1654*cdf0e10cSrcweir return NULL; 1655*cdf0e10cSrcweir } 1656*cdf0e10cSrcweir 1657*cdf0e10cSrcweir void ScCellRangesBase::InitInsertRange(ScDocShell* pDocSh, const ScRange& rR) 1658*cdf0e10cSrcweir { 1659*cdf0e10cSrcweir if ( !pDocShell && pDocSh ) 1660*cdf0e10cSrcweir { 1661*cdf0e10cSrcweir pDocShell = pDocSh; 1662*cdf0e10cSrcweir 1663*cdf0e10cSrcweir ScRange aCellRange(rR); 1664*cdf0e10cSrcweir aCellRange.Justify(); 1665*cdf0e10cSrcweir aRanges.RemoveAll(); 1666*cdf0e10cSrcweir aRanges.Append( aCellRange ); 1667*cdf0e10cSrcweir 1668*cdf0e10cSrcweir pDocShell->GetDocument()->AddUnoObject(*this); 1669*cdf0e10cSrcweir 1670*cdf0e10cSrcweir RefChanged(); // Range im Range-Objekt anpassen 1671*cdf0e10cSrcweir } 1672*cdf0e10cSrcweir } 1673*cdf0e10cSrcweir 1674*cdf0e10cSrcweir void ScCellRangesBase::AddRange(const ScRange& rRange, const sal_Bool bMergeRanges) 1675*cdf0e10cSrcweir { 1676*cdf0e10cSrcweir if (bMergeRanges) 1677*cdf0e10cSrcweir aRanges.Join(rRange); 1678*cdf0e10cSrcweir else 1679*cdf0e10cSrcweir aRanges.Append(rRange); 1680*cdf0e10cSrcweir RefChanged(); 1681*cdf0e10cSrcweir } 1682*cdf0e10cSrcweir 1683*cdf0e10cSrcweir void ScCellRangesBase::SetNewRange(const ScRange& rNew) 1684*cdf0e10cSrcweir { 1685*cdf0e10cSrcweir ScRange aCellRange(rNew); 1686*cdf0e10cSrcweir aCellRange.Justify(); 1687*cdf0e10cSrcweir 1688*cdf0e10cSrcweir aRanges.RemoveAll(); 1689*cdf0e10cSrcweir aRanges.Append( aCellRange ); 1690*cdf0e10cSrcweir RefChanged(); 1691*cdf0e10cSrcweir } 1692*cdf0e10cSrcweir 1693*cdf0e10cSrcweir void ScCellRangesBase::SetNewRanges(const ScRangeList& rNew) 1694*cdf0e10cSrcweir { 1695*cdf0e10cSrcweir aRanges = rNew; 1696*cdf0e10cSrcweir RefChanged(); 1697*cdf0e10cSrcweir } 1698*cdf0e10cSrcweir 1699*cdf0e10cSrcweir void ScCellRangesBase::SetCursorOnly( sal_Bool bSet ) 1700*cdf0e10cSrcweir { 1701*cdf0e10cSrcweir // set for a selection object that is created from the cursor position 1702*cdf0e10cSrcweir // without anything selected (may contain several sheets) 1703*cdf0e10cSrcweir 1704*cdf0e10cSrcweir bCursorOnly = bSet; 1705*cdf0e10cSrcweir } 1706*cdf0e10cSrcweir 1707*cdf0e10cSrcweir uno::Any SAL_CALL ScCellRangesBase::queryInterface( const uno::Type& rType ) 1708*cdf0e10cSrcweir throw(uno::RuntimeException) 1709*cdf0e10cSrcweir { 1710*cdf0e10cSrcweir SC_QUERYINTERFACE( beans::XPropertySet ) 1711*cdf0e10cSrcweir SC_QUERYINTERFACE( beans::XMultiPropertySet ) 1712*cdf0e10cSrcweir SC_QUERYINTERFACE( beans::XTolerantMultiPropertySet ) 1713*cdf0e10cSrcweir SC_QUERYINTERFACE( beans::XPropertyState ) 1714*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetOperation ) 1715*cdf0e10cSrcweir SC_QUERYINTERFACE( chart::XChartDataArray ) 1716*cdf0e10cSrcweir SC_QUERYINTERFACE( chart::XChartData ) 1717*cdf0e10cSrcweir SC_QUERYINTERFACE( util::XIndent ) 1718*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XCellRangesQuery ) 1719*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XFormulaQuery ) 1720*cdf0e10cSrcweir SC_QUERYINTERFACE( util::XReplaceable ) 1721*cdf0e10cSrcweir SC_QUERYINTERFACE( util::XSearchable ) 1722*cdf0e10cSrcweir SC_QUERYINTERFACE( util::XModifyBroadcaster ) 1723*cdf0e10cSrcweir SC_QUERYINTERFACE( lang::XServiceInfo ) 1724*cdf0e10cSrcweir SC_QUERYINTERFACE( lang::XUnoTunnel ) 1725*cdf0e10cSrcweir SC_QUERYINTERFACE( lang::XTypeProvider ) 1726*cdf0e10cSrcweir 1727*cdf0e10cSrcweir return OWeakObject::queryInterface( rType ); 1728*cdf0e10cSrcweir } 1729*cdf0e10cSrcweir 1730*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::acquire() throw() 1731*cdf0e10cSrcweir { 1732*cdf0e10cSrcweir OWeakObject::acquire(); 1733*cdf0e10cSrcweir } 1734*cdf0e10cSrcweir 1735*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::release() throw() 1736*cdf0e10cSrcweir { 1737*cdf0e10cSrcweir OWeakObject::release(); 1738*cdf0e10cSrcweir } 1739*cdf0e10cSrcweir 1740*cdf0e10cSrcweir uno::Sequence<uno::Type> SAL_CALL ScCellRangesBase::getTypes() throw(uno::RuntimeException) 1741*cdf0e10cSrcweir { 1742*cdf0e10cSrcweir static uno::Sequence<uno::Type> aTypes; 1743*cdf0e10cSrcweir if ( aTypes.getLength() == 0 ) 1744*cdf0e10cSrcweir { 1745*cdf0e10cSrcweir aTypes.realloc(13); 1746*cdf0e10cSrcweir uno::Type* pPtr = aTypes.getArray(); 1747*cdf0e10cSrcweir pPtr[0] = getCppuType((const uno::Reference<beans::XPropertySet>*)0); 1748*cdf0e10cSrcweir pPtr[1] = getCppuType((const uno::Reference<beans::XMultiPropertySet>*)0); 1749*cdf0e10cSrcweir pPtr[2] = getCppuType((const uno::Reference<beans::XPropertyState>*)0); 1750*cdf0e10cSrcweir pPtr[3] = getCppuType((const uno::Reference<sheet::XSheetOperation>*)0); 1751*cdf0e10cSrcweir pPtr[4] = getCppuType((const uno::Reference<chart::XChartDataArray>*)0); 1752*cdf0e10cSrcweir pPtr[5] = getCppuType((const uno::Reference<util::XIndent>*)0); 1753*cdf0e10cSrcweir pPtr[6] = getCppuType((const uno::Reference<sheet::XCellRangesQuery>*)0); 1754*cdf0e10cSrcweir pPtr[7] = getCppuType((const uno::Reference<sheet::XFormulaQuery>*)0); 1755*cdf0e10cSrcweir pPtr[8] = getCppuType((const uno::Reference<util::XReplaceable>*)0); 1756*cdf0e10cSrcweir pPtr[9] = getCppuType((const uno::Reference<util::XModifyBroadcaster>*)0); 1757*cdf0e10cSrcweir pPtr[10]= getCppuType((const uno::Reference<lang::XServiceInfo>*)0); 1758*cdf0e10cSrcweir pPtr[11]= getCppuType((const uno::Reference<lang::XUnoTunnel>*)0); 1759*cdf0e10cSrcweir pPtr[12]= getCppuType((const uno::Reference<lang::XTypeProvider>*)0); 1760*cdf0e10cSrcweir } 1761*cdf0e10cSrcweir return aTypes; 1762*cdf0e10cSrcweir } 1763*cdf0e10cSrcweir 1764*cdf0e10cSrcweir uno::Sequence<sal_Int8> SAL_CALL ScCellRangesBase::getImplementationId() 1765*cdf0e10cSrcweir throw(uno::RuntimeException) 1766*cdf0e10cSrcweir { 1767*cdf0e10cSrcweir static uno::Sequence< sal_Int8 > aId; 1768*cdf0e10cSrcweir if( aId.getLength() == 0 ) 1769*cdf0e10cSrcweir { 1770*cdf0e10cSrcweir aId.realloc( 16 ); 1771*cdf0e10cSrcweir rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); 1772*cdf0e10cSrcweir } 1773*cdf0e10cSrcweir return aId; 1774*cdf0e10cSrcweir } 1775*cdf0e10cSrcweir 1776*cdf0e10cSrcweir // --- 1777*cdf0e10cSrcweir 1778*cdf0e10cSrcweir void ScCellRangesBase::PaintRanges_Impl( sal_uInt16 nPart ) 1779*cdf0e10cSrcweir { 1780*cdf0e10cSrcweir sal_uLong nCount = aRanges.Count(); 1781*cdf0e10cSrcweir for (sal_uLong i=0; i<nCount; i++) 1782*cdf0e10cSrcweir pDocShell->PostPaint( *aRanges.GetObject(i), nPart ); 1783*cdf0e10cSrcweir } 1784*cdf0e10cSrcweir 1785*cdf0e10cSrcweir // XSheetOperation 1786*cdf0e10cSrcweir 1787*cdf0e10cSrcweir double SAL_CALL ScCellRangesBase::computeFunction( sheet::GeneralFunction nFunction ) 1788*cdf0e10cSrcweir throw(uno::Exception, uno::RuntimeException) 1789*cdf0e10cSrcweir { 1790*cdf0e10cSrcweir ScUnoGuard aGuard; 1791*cdf0e10cSrcweir ScMarkData aMark(*GetMarkData()); 1792*cdf0e10cSrcweir aMark.MarkToSimple(); 1793*cdf0e10cSrcweir if (!aMark.IsMarked()) 1794*cdf0e10cSrcweir aMark.SetMarkNegative(sal_True); // um Dummy Position angeben zu koennen 1795*cdf0e10cSrcweir 1796*cdf0e10cSrcweir ScAddress aDummy; // wenn nicht Marked, ignoriert wegen Negative 1797*cdf0e10cSrcweir double fVal; 1798*cdf0e10cSrcweir ScSubTotalFunc eFunc = lcl_SummaryToSubTotal( nFunction ); 1799*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 1800*cdf0e10cSrcweir if ( !pDoc->GetSelectionFunction( eFunc, aDummy, aMark, fVal ) ) 1801*cdf0e10cSrcweir { 1802*cdf0e10cSrcweir throw uno::RuntimeException(); //! own exception? 1803*cdf0e10cSrcweir } 1804*cdf0e10cSrcweir 1805*cdf0e10cSrcweir return fVal; 1806*cdf0e10cSrcweir } 1807*cdf0e10cSrcweir 1808*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::clearContents( sal_Int32 nContentFlags ) throw(uno::RuntimeException) 1809*cdf0e10cSrcweir { 1810*cdf0e10cSrcweir ScUnoGuard aGuard; 1811*cdf0e10cSrcweir if ( aRanges.Count() ) 1812*cdf0e10cSrcweir { 1813*cdf0e10cSrcweir // only for clearContents: EDITATTR is only used if no contents are deleted 1814*cdf0e10cSrcweir sal_uInt16 nDelFlags = static_cast< sal_uInt16 >( nContentFlags & IDF_ALL ); 1815*cdf0e10cSrcweir if ( ( nContentFlags & IDF_EDITATTR ) && ( nContentFlags & IDF_CONTENTS ) == 0 ) 1816*cdf0e10cSrcweir nDelFlags |= IDF_EDITATTR; 1817*cdf0e10cSrcweir 1818*cdf0e10cSrcweir ScDocFunc aFunc(*pDocShell); 1819*cdf0e10cSrcweir aFunc.DeleteContents( *GetMarkData(), nDelFlags, sal_True, sal_True ); 1820*cdf0e10cSrcweir } 1821*cdf0e10cSrcweir // sonst ist nichts zu tun 1822*cdf0e10cSrcweir } 1823*cdf0e10cSrcweir 1824*cdf0e10cSrcweir // XPropertyState 1825*cdf0e10cSrcweir 1826*cdf0e10cSrcweir const SfxItemPropertyMap* ScCellRangesBase::GetItemPropertyMap() 1827*cdf0e10cSrcweir { 1828*cdf0e10cSrcweir return pPropSet->getPropertyMap(); 1829*cdf0e10cSrcweir } 1830*cdf0e10cSrcweir 1831*cdf0e10cSrcweir void lcl_GetPropertyWhich( const SfxItemPropertySimpleEntry* pEntry, 1832*cdf0e10cSrcweir sal_uInt16& rItemWhich ) 1833*cdf0e10cSrcweir { 1834*cdf0e10cSrcweir // Which-ID des betroffenen Items, auch wenn das Item die Property 1835*cdf0e10cSrcweir // nicht alleine behandeln kann 1836*cdf0e10cSrcweir if ( pEntry ) 1837*cdf0e10cSrcweir { 1838*cdf0e10cSrcweir if ( IsScItemWid( pEntry->nWID ) ) 1839*cdf0e10cSrcweir rItemWhich = pEntry->nWID; 1840*cdf0e10cSrcweir else 1841*cdf0e10cSrcweir switch ( pEntry->nWID ) 1842*cdf0e10cSrcweir { 1843*cdf0e10cSrcweir case SC_WID_UNO_TBLBORD: 1844*cdf0e10cSrcweir rItemWhich = ATTR_BORDER; 1845*cdf0e10cSrcweir break; 1846*cdf0e10cSrcweir case SC_WID_UNO_CONDFMT: 1847*cdf0e10cSrcweir case SC_WID_UNO_CONDLOC: 1848*cdf0e10cSrcweir case SC_WID_UNO_CONDXML: 1849*cdf0e10cSrcweir rItemWhich = ATTR_CONDITIONAL; 1850*cdf0e10cSrcweir break; 1851*cdf0e10cSrcweir case SC_WID_UNO_VALIDAT: 1852*cdf0e10cSrcweir case SC_WID_UNO_VALILOC: 1853*cdf0e10cSrcweir case SC_WID_UNO_VALIXML: 1854*cdf0e10cSrcweir rItemWhich = ATTR_VALIDDATA; 1855*cdf0e10cSrcweir break; 1856*cdf0e10cSrcweir } 1857*cdf0e10cSrcweir } 1858*cdf0e10cSrcweir 1859*cdf0e10cSrcweir } 1860*cdf0e10cSrcweir 1861*cdf0e10cSrcweir beans::PropertyState ScCellRangesBase::GetOnePropertyState( sal_uInt16 nItemWhich, const SfxItemPropertySimpleEntry* pEntry ) 1862*cdf0e10cSrcweir { 1863*cdf0e10cSrcweir beans::PropertyState eRet = beans::PropertyState_DIRECT_VALUE; 1864*cdf0e10cSrcweir if ( nItemWhich ) // item wid (from map or special case) 1865*cdf0e10cSrcweir { 1866*cdf0e10cSrcweir // For items that contain several properties (like background), 1867*cdf0e10cSrcweir // "ambiguous" is returned too often here 1868*cdf0e10cSrcweir 1869*cdf0e10cSrcweir // for PropertyState, don't look at styles 1870*cdf0e10cSrcweir const ScPatternAttr* pPattern = GetCurrentAttrsFlat(); 1871*cdf0e10cSrcweir if ( pPattern ) 1872*cdf0e10cSrcweir { 1873*cdf0e10cSrcweir SfxItemState eState = pPattern->GetItemSet().GetItemState( nItemWhich, sal_False ); 1874*cdf0e10cSrcweir 1875*cdf0e10cSrcweir // // if no rotate value is set, look at orientation 1876*cdf0e10cSrcweir // //! also for a fixed value of 0 (in case orientation is ambiguous)? 1877*cdf0e10cSrcweir // if ( nItemWhich == ATTR_ROTATE_VALUE && eState == SFX_ITEM_DEFAULT ) 1878*cdf0e10cSrcweir // eState = pPattern->GetItemSet().GetItemState( ATTR_ORIENTATION, sal_False ); 1879*cdf0e10cSrcweir 1880*cdf0e10cSrcweir if ( nItemWhich == ATTR_VALUE_FORMAT && eState == SFX_ITEM_DEFAULT ) 1881*cdf0e10cSrcweir eState = pPattern->GetItemSet().GetItemState( ATTR_LANGUAGE_FORMAT, sal_False ); 1882*cdf0e10cSrcweir 1883*cdf0e10cSrcweir if ( eState == SFX_ITEM_SET ) 1884*cdf0e10cSrcweir eRet = beans::PropertyState_DIRECT_VALUE; 1885*cdf0e10cSrcweir else if ( eState == SFX_ITEM_DEFAULT ) 1886*cdf0e10cSrcweir eRet = beans::PropertyState_DEFAULT_VALUE; 1887*cdf0e10cSrcweir else if ( eState == SFX_ITEM_DONTCARE ) 1888*cdf0e10cSrcweir eRet = beans::PropertyState_AMBIGUOUS_VALUE; 1889*cdf0e10cSrcweir else 1890*cdf0e10cSrcweir { 1891*cdf0e10cSrcweir DBG_ERROR("unbekannter ItemState"); 1892*cdf0e10cSrcweir } 1893*cdf0e10cSrcweir } 1894*cdf0e10cSrcweir } 1895*cdf0e10cSrcweir else if ( pEntry ) 1896*cdf0e10cSrcweir { 1897*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_CHCOLHDR || pEntry->nWID == SC_WID_UNO_CHROWHDR || pEntry->nWID == SC_WID_UNO_ABSNAME ) 1898*cdf0e10cSrcweir eRet = beans::PropertyState_DIRECT_VALUE; 1899*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CELLSTYL ) 1900*cdf0e10cSrcweir { 1901*cdf0e10cSrcweir // a style is always set, there's no default state 1902*cdf0e10cSrcweir const ScStyleSheet* pStyle = pDocShell->GetDocument()->GetSelectionStyle(*GetMarkData()); 1903*cdf0e10cSrcweir if (pStyle) 1904*cdf0e10cSrcweir eRet = beans::PropertyState_DIRECT_VALUE; 1905*cdf0e10cSrcweir else 1906*cdf0e10cSrcweir eRet = beans::PropertyState_AMBIGUOUS_VALUE; 1907*cdf0e10cSrcweir } 1908*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_NUMRULES ) 1909*cdf0e10cSrcweir eRet = beans::PropertyState_DEFAULT_VALUE; // numbering rules are always default 1910*cdf0e10cSrcweir } 1911*cdf0e10cSrcweir return eRet; 1912*cdf0e10cSrcweir } 1913*cdf0e10cSrcweir 1914*cdf0e10cSrcweir beans::PropertyState SAL_CALL ScCellRangesBase::getPropertyState( const rtl::OUString& aPropertyName ) 1915*cdf0e10cSrcweir throw(beans::UnknownPropertyException, uno::RuntimeException) 1916*cdf0e10cSrcweir { 1917*cdf0e10cSrcweir ScUnoGuard aGuard; 1918*cdf0e10cSrcweir if ( aRanges.Count() == 0 ) 1919*cdf0e10cSrcweir throw uno::RuntimeException(); 1920*cdf0e10cSrcweir 1921*cdf0e10cSrcweir const SfxItemPropertyMap* pMap = GetItemPropertyMap(); // from derived class 1922*cdf0e10cSrcweir sal_uInt16 nItemWhich = 0; 1923*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pMap->getByName( aPropertyName ); 1924*cdf0e10cSrcweir lcl_GetPropertyWhich( pEntry, nItemWhich ); 1925*cdf0e10cSrcweir return GetOnePropertyState( nItemWhich, pEntry ); 1926*cdf0e10cSrcweir } 1927*cdf0e10cSrcweir 1928*cdf0e10cSrcweir uno::Sequence<beans::PropertyState> SAL_CALL ScCellRangesBase::getPropertyStates( 1929*cdf0e10cSrcweir const uno::Sequence<rtl::OUString>& aPropertyNames ) 1930*cdf0e10cSrcweir throw(beans::UnknownPropertyException, uno::RuntimeException) 1931*cdf0e10cSrcweir { 1932*cdf0e10cSrcweir ScUnoGuard aGuard; 1933*cdf0e10cSrcweir 1934*cdf0e10cSrcweir const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class 1935*cdf0e10cSrcweir 1936*cdf0e10cSrcweir uno::Sequence<beans::PropertyState> aRet(aPropertyNames.getLength()); 1937*cdf0e10cSrcweir beans::PropertyState* pStates = aRet.getArray(); 1938*cdf0e10cSrcweir for(sal_Int32 i = 0; i < aPropertyNames.getLength(); i++) 1939*cdf0e10cSrcweir { 1940*cdf0e10cSrcweir sal_uInt16 nItemWhich = 0; 1941*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( aPropertyNames[i] ); 1942*cdf0e10cSrcweir lcl_GetPropertyWhich( pEntry, nItemWhich ); 1943*cdf0e10cSrcweir pStates[i] = GetOnePropertyState(nItemWhich, pEntry); 1944*cdf0e10cSrcweir } 1945*cdf0e10cSrcweir return aRet; 1946*cdf0e10cSrcweir } 1947*cdf0e10cSrcweir 1948*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::setPropertyToDefault( const rtl::OUString& aPropertyName ) 1949*cdf0e10cSrcweir throw(beans::UnknownPropertyException, uno::RuntimeException) 1950*cdf0e10cSrcweir { 1951*cdf0e10cSrcweir ScUnoGuard aGuard; 1952*cdf0e10cSrcweir if ( pDocShell ) 1953*cdf0e10cSrcweir { 1954*cdf0e10cSrcweir const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class 1955*cdf0e10cSrcweir sal_uInt16 nItemWhich = 0; 1956*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( aPropertyName ); 1957*cdf0e10cSrcweir lcl_GetPropertyWhich( pEntry, nItemWhich ); 1958*cdf0e10cSrcweir if ( nItemWhich ) // item wid (from map or special case) 1959*cdf0e10cSrcweir { 1960*cdf0e10cSrcweir if ( aRanges.Count() ) // leer = nichts zu tun 1961*cdf0e10cSrcweir { 1962*cdf0e10cSrcweir ScDocFunc aFunc(*pDocShell); 1963*cdf0e10cSrcweir 1964*cdf0e10cSrcweir //! Bei Items, die mehrere Properties enthalten (z.B. Hintergrund) 1965*cdf0e10cSrcweir //! wird hier zuviel zurueckgesetzt 1966*cdf0e10cSrcweir 1967*cdf0e10cSrcweir // //! for ATTR_ROTATE_VALUE, also reset ATTR_ORIENTATION? 1968*cdf0e10cSrcweir 1969*cdf0e10cSrcweir sal_uInt16 aWIDs[3]; 1970*cdf0e10cSrcweir aWIDs[0] = nItemWhich; 1971*cdf0e10cSrcweir if ( nItemWhich == ATTR_VALUE_FORMAT ) 1972*cdf0e10cSrcweir { 1973*cdf0e10cSrcweir aWIDs[1] = ATTR_LANGUAGE_FORMAT; // #67847# language for number formats 1974*cdf0e10cSrcweir aWIDs[2] = 0; 1975*cdf0e10cSrcweir } 1976*cdf0e10cSrcweir else 1977*cdf0e10cSrcweir aWIDs[1] = 0; 1978*cdf0e10cSrcweir aFunc.ClearItems( *GetMarkData(), aWIDs, sal_True ); 1979*cdf0e10cSrcweir } 1980*cdf0e10cSrcweir } 1981*cdf0e10cSrcweir else if ( pEntry ) 1982*cdf0e10cSrcweir { 1983*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_CHCOLHDR ) 1984*cdf0e10cSrcweir bChartColAsHdr = sal_False; 1985*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CHROWHDR ) 1986*cdf0e10cSrcweir bChartRowAsHdr = sal_False; 1987*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CELLSTYL ) 1988*cdf0e10cSrcweir { 1989*cdf0e10cSrcweir ScDocFunc aFunc(*pDocShell); 1990*cdf0e10cSrcweir aFunc.ApplyStyle( *GetMarkData(), ScGlobal::GetRscString(STR_STYLENAME_STANDARD), sal_True, sal_True ); 1991*cdf0e10cSrcweir } 1992*cdf0e10cSrcweir } 1993*cdf0e10cSrcweir } 1994*cdf0e10cSrcweir } 1995*cdf0e10cSrcweir 1996*cdf0e10cSrcweir uno::Any SAL_CALL ScCellRangesBase::getPropertyDefault( const rtl::OUString& aPropertyName ) 1997*cdf0e10cSrcweir throw(beans::UnknownPropertyException, lang::WrappedTargetException, 1998*cdf0e10cSrcweir uno::RuntimeException) 1999*cdf0e10cSrcweir { 2000*cdf0e10cSrcweir //! mit getPropertyValue zusammenfassen 2001*cdf0e10cSrcweir 2002*cdf0e10cSrcweir ScUnoGuard aGuard; 2003*cdf0e10cSrcweir uno::Any aAny; 2004*cdf0e10cSrcweir 2005*cdf0e10cSrcweir if ( pDocShell ) 2006*cdf0e10cSrcweir { 2007*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 2008*cdf0e10cSrcweir const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class 2009*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( aPropertyName ); 2010*cdf0e10cSrcweir if ( pEntry ) 2011*cdf0e10cSrcweir { 2012*cdf0e10cSrcweir if ( IsScItemWid( pEntry->nWID ) ) 2013*cdf0e10cSrcweir { 2014*cdf0e10cSrcweir const ScPatternAttr* pPattern = pDoc->GetDefPattern(); 2015*cdf0e10cSrcweir if ( pPattern ) 2016*cdf0e10cSrcweir { 2017*cdf0e10cSrcweir const SfxItemSet& rSet = pPattern->GetItemSet(); 2018*cdf0e10cSrcweir 2019*cdf0e10cSrcweir switch ( pEntry->nWID ) // fuer Item-Spezial-Behandlungen 2020*cdf0e10cSrcweir { 2021*cdf0e10cSrcweir case ATTR_VALUE_FORMAT: 2022*cdf0e10cSrcweir // default has no language set 2023*cdf0e10cSrcweir aAny <<= (sal_Int32)( ((const SfxUInt32Item&)rSet.Get(pEntry->nWID)).GetValue() ); 2024*cdf0e10cSrcweir break; 2025*cdf0e10cSrcweir case ATTR_INDENT: 2026*cdf0e10cSrcweir aAny <<= (sal_Int16)( TwipsToHMM(((const SfxUInt16Item&) 2027*cdf0e10cSrcweir rSet.Get(pEntry->nWID)).GetValue()) ); 2028*cdf0e10cSrcweir break; 2029*cdf0e10cSrcweir default: 2030*cdf0e10cSrcweir pPropSet->getPropertyValue(aPropertyName, rSet, aAny); 2031*cdf0e10cSrcweir } 2032*cdf0e10cSrcweir } 2033*cdf0e10cSrcweir } 2034*cdf0e10cSrcweir else 2035*cdf0e10cSrcweir switch ( pEntry->nWID ) 2036*cdf0e10cSrcweir { 2037*cdf0e10cSrcweir case SC_WID_UNO_CHCOLHDR: 2038*cdf0e10cSrcweir case SC_WID_UNO_CHROWHDR: 2039*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( aAny, sal_False ); 2040*cdf0e10cSrcweir break; 2041*cdf0e10cSrcweir case SC_WID_UNO_CELLSTYL: 2042*cdf0e10cSrcweir aAny <<= rtl::OUString( ScStyleNameConversion::DisplayToProgrammaticName( 2043*cdf0e10cSrcweir ScGlobal::GetRscString(STR_STYLENAME_STANDARD), SFX_STYLE_FAMILY_PARA ) ); 2044*cdf0e10cSrcweir break; 2045*cdf0e10cSrcweir case SC_WID_UNO_TBLBORD: 2046*cdf0e10cSrcweir { 2047*cdf0e10cSrcweir const ScPatternAttr* pPattern = pDoc->GetDefPattern(); 2048*cdf0e10cSrcweir if ( pPattern ) 2049*cdf0e10cSrcweir { 2050*cdf0e10cSrcweir table::TableBorder aBorder; 2051*cdf0e10cSrcweir ScHelperFunctions::FillTableBorder( aBorder, 2052*cdf0e10cSrcweir (const SvxBoxItem&)pPattern->GetItem(ATTR_BORDER), 2053*cdf0e10cSrcweir (const SvxBoxInfoItem&)pPattern->GetItem(ATTR_BORDER_INNER) ); 2054*cdf0e10cSrcweir aAny <<= aBorder; 2055*cdf0e10cSrcweir } 2056*cdf0e10cSrcweir } 2057*cdf0e10cSrcweir break; 2058*cdf0e10cSrcweir case SC_WID_UNO_CONDFMT: 2059*cdf0e10cSrcweir case SC_WID_UNO_CONDLOC: 2060*cdf0e10cSrcweir case SC_WID_UNO_CONDXML: 2061*cdf0e10cSrcweir { 2062*cdf0e10cSrcweir sal_Bool bEnglish = ( pEntry->nWID != SC_WID_UNO_CONDLOC ); 2063*cdf0e10cSrcweir sal_Bool bXML = ( pEntry->nWID == SC_WID_UNO_CONDXML ); 2064*cdf0e10cSrcweir formula::FormulaGrammar::Grammar eGrammar = (bXML ? 2065*cdf0e10cSrcweir pDoc->GetStorageGrammar() : 2066*cdf0e10cSrcweir formula::FormulaGrammar::mapAPItoGrammar( bEnglish, bXML)); 2067*cdf0e10cSrcweir 2068*cdf0e10cSrcweir aAny <<= uno::Reference<sheet::XSheetConditionalEntries>( 2069*cdf0e10cSrcweir new ScTableConditionalFormat( pDoc, 0, eGrammar )); 2070*cdf0e10cSrcweir } 2071*cdf0e10cSrcweir break; 2072*cdf0e10cSrcweir case SC_WID_UNO_VALIDAT: 2073*cdf0e10cSrcweir case SC_WID_UNO_VALILOC: 2074*cdf0e10cSrcweir case SC_WID_UNO_VALIXML: 2075*cdf0e10cSrcweir { 2076*cdf0e10cSrcweir sal_Bool bEnglish = ( pEntry->nWID != SC_WID_UNO_VALILOC ); 2077*cdf0e10cSrcweir sal_Bool bXML = ( pEntry->nWID == SC_WID_UNO_VALIXML ); 2078*cdf0e10cSrcweir formula::FormulaGrammar::Grammar eGrammar = (bXML ? 2079*cdf0e10cSrcweir pDoc->GetStorageGrammar() : 2080*cdf0e10cSrcweir formula::FormulaGrammar::mapAPItoGrammar( bEnglish, bXML)); 2081*cdf0e10cSrcweir 2082*cdf0e10cSrcweir aAny <<= uno::Reference<beans::XPropertySet>( 2083*cdf0e10cSrcweir new ScTableValidationObj( pDoc, 0, eGrammar )); 2084*cdf0e10cSrcweir } 2085*cdf0e10cSrcweir break; 2086*cdf0e10cSrcweir case SC_WID_UNO_NUMRULES: 2087*cdf0e10cSrcweir { 2088*cdf0e10cSrcweir aAny <<= uno::Reference<container::XIndexReplace>(ScStyleObj::CreateEmptyNumberingRules()); 2089*cdf0e10cSrcweir } 2090*cdf0e10cSrcweir break; 2091*cdf0e10cSrcweir } 2092*cdf0e10cSrcweir } 2093*cdf0e10cSrcweir } 2094*cdf0e10cSrcweir 2095*cdf0e10cSrcweir return aAny; 2096*cdf0e10cSrcweir } 2097*cdf0e10cSrcweir 2098*cdf0e10cSrcweir // XPropertySet 2099*cdf0e10cSrcweir 2100*cdf0e10cSrcweir uno::Reference<beans::XPropertySetInfo> SAL_CALL ScCellRangesBase::getPropertySetInfo() 2101*cdf0e10cSrcweir throw(uno::RuntimeException) 2102*cdf0e10cSrcweir { 2103*cdf0e10cSrcweir ScUnoGuard aGuard; 2104*cdf0e10cSrcweir static uno::Reference<beans::XPropertySetInfo> aRef( 2105*cdf0e10cSrcweir new SfxItemPropertySetInfo( pPropSet->getPropertyMap() )); 2106*cdf0e10cSrcweir return aRef; 2107*cdf0e10cSrcweir } 2108*cdf0e10cSrcweir 2109*cdf0e10cSrcweir 2110*cdf0e10cSrcweir void lcl_SetCellProperty( const SfxItemPropertySimpleEntry& rEntry, const uno::Any& rValue, 2111*cdf0e10cSrcweir ScPatternAttr& rPattern, ScDocument* pDoc, 2112*cdf0e10cSrcweir sal_uInt16& rFirstItemId, sal_uInt16& rSecondItemId ) 2113*cdf0e10cSrcweir { 2114*cdf0e10cSrcweir rFirstItemId = rEntry.nWID; 2115*cdf0e10cSrcweir rSecondItemId = 0; 2116*cdf0e10cSrcweir 2117*cdf0e10cSrcweir SfxItemSet& rSet = rPattern.GetItemSet(); 2118*cdf0e10cSrcweir switch ( rEntry.nWID ) 2119*cdf0e10cSrcweir { 2120*cdf0e10cSrcweir case ATTR_VALUE_FORMAT: 2121*cdf0e10cSrcweir { 2122*cdf0e10cSrcweir // #67847# language for number formats 2123*cdf0e10cSrcweir SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); 2124*cdf0e10cSrcweir sal_uLong nOldFormat = ((const SfxUInt32Item&)rSet.Get( ATTR_VALUE_FORMAT )).GetValue(); 2125*cdf0e10cSrcweir LanguageType eOldLang = ((const SvxLanguageItem&)rSet.Get( ATTR_LANGUAGE_FORMAT )).GetLanguage(); 2126*cdf0e10cSrcweir nOldFormat = pFormatter->GetFormatForLanguageIfBuiltIn( nOldFormat, eOldLang ); 2127*cdf0e10cSrcweir 2128*cdf0e10cSrcweir sal_Int32 nIntVal = 0; 2129*cdf0e10cSrcweir if ( rValue >>= nIntVal ) 2130*cdf0e10cSrcweir { 2131*cdf0e10cSrcweir sal_uLong nNewFormat = (sal_uLong)nIntVal; 2132*cdf0e10cSrcweir rSet.Put( SfxUInt32Item( ATTR_VALUE_FORMAT, nNewFormat ) ); 2133*cdf0e10cSrcweir 2134*cdf0e10cSrcweir const SvNumberformat* pNewEntry = pFormatter->GetEntry( nNewFormat ); 2135*cdf0e10cSrcweir LanguageType eNewLang = 2136*cdf0e10cSrcweir pNewEntry ? pNewEntry->GetLanguage() : LANGUAGE_DONTKNOW; 2137*cdf0e10cSrcweir if ( eNewLang != eOldLang && eNewLang != LANGUAGE_DONTKNOW ) 2138*cdf0e10cSrcweir { 2139*cdf0e10cSrcweir rSet.Put( SvxLanguageItem( eNewLang, ATTR_LANGUAGE_FORMAT ) ); 2140*cdf0e10cSrcweir 2141*cdf0e10cSrcweir // #40606# if only language is changed, 2142*cdf0e10cSrcweir // don't touch number format attribute 2143*cdf0e10cSrcweir sal_uLong nNewMod = nNewFormat % SV_COUNTRY_LANGUAGE_OFFSET; 2144*cdf0e10cSrcweir if ( nNewMod == ( nOldFormat % SV_COUNTRY_LANGUAGE_OFFSET ) && 2145*cdf0e10cSrcweir nNewMod <= SV_MAX_ANZ_STANDARD_FORMATE ) 2146*cdf0e10cSrcweir { 2147*cdf0e10cSrcweir rFirstItemId = 0; // don't use ATTR_VALUE_FORMAT value 2148*cdf0e10cSrcweir } 2149*cdf0e10cSrcweir 2150*cdf0e10cSrcweir rSecondItemId = ATTR_LANGUAGE_FORMAT; 2151*cdf0e10cSrcweir } 2152*cdf0e10cSrcweir } 2153*cdf0e10cSrcweir else 2154*cdf0e10cSrcweir throw lang::IllegalArgumentException(); 2155*cdf0e10cSrcweir } 2156*cdf0e10cSrcweir break; 2157*cdf0e10cSrcweir case ATTR_INDENT: 2158*cdf0e10cSrcweir { 2159*cdf0e10cSrcweir sal_Int16 nIntVal = 0; 2160*cdf0e10cSrcweir if ( rValue >>= nIntVal ) 2161*cdf0e10cSrcweir rSet.Put( SfxUInt16Item( rEntry.nWID, (sal_uInt16)HMMToTwips(nIntVal) ) ); 2162*cdf0e10cSrcweir else 2163*cdf0e10cSrcweir throw lang::IllegalArgumentException(); 2164*cdf0e10cSrcweir } 2165*cdf0e10cSrcweir break; 2166*cdf0e10cSrcweir case ATTR_ROTATE_VALUE: 2167*cdf0e10cSrcweir { 2168*cdf0e10cSrcweir sal_Int32 nRotVal = 0; 2169*cdf0e10cSrcweir if ( rValue >>= nRotVal ) 2170*cdf0e10cSrcweir { 2171*cdf0e10cSrcweir // stored value is always between 0 and 360 deg. 2172*cdf0e10cSrcweir nRotVal %= 36000; 2173*cdf0e10cSrcweir if ( nRotVal < 0 ) 2174*cdf0e10cSrcweir nRotVal += 36000; 2175*cdf0e10cSrcweir 2176*cdf0e10cSrcweir rSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, nRotVal ) ); 2177*cdf0e10cSrcweir } 2178*cdf0e10cSrcweir else 2179*cdf0e10cSrcweir throw lang::IllegalArgumentException(); 2180*cdf0e10cSrcweir } 2181*cdf0e10cSrcweir break; 2182*cdf0e10cSrcweir case ATTR_STACKED: 2183*cdf0e10cSrcweir { 2184*cdf0e10cSrcweir table::CellOrientation eOrient; 2185*cdf0e10cSrcweir if( rValue >>= eOrient ) 2186*cdf0e10cSrcweir { 2187*cdf0e10cSrcweir switch( eOrient ) 2188*cdf0e10cSrcweir { 2189*cdf0e10cSrcweir case table::CellOrientation_STANDARD: 2190*cdf0e10cSrcweir rSet.Put( SfxBoolItem( ATTR_STACKED, sal_False ) ); 2191*cdf0e10cSrcweir break; 2192*cdf0e10cSrcweir case table::CellOrientation_TOPBOTTOM: 2193*cdf0e10cSrcweir rSet.Put( SfxBoolItem( ATTR_STACKED, sal_False ) ); 2194*cdf0e10cSrcweir rSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, 27000 ) ); 2195*cdf0e10cSrcweir rSecondItemId = ATTR_ROTATE_VALUE; 2196*cdf0e10cSrcweir break; 2197*cdf0e10cSrcweir case table::CellOrientation_BOTTOMTOP: 2198*cdf0e10cSrcweir rSet.Put( SfxBoolItem( ATTR_STACKED, sal_False ) ); 2199*cdf0e10cSrcweir rSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, 9000 ) ); 2200*cdf0e10cSrcweir rSecondItemId = ATTR_ROTATE_VALUE; 2201*cdf0e10cSrcweir break; 2202*cdf0e10cSrcweir case table::CellOrientation_STACKED: 2203*cdf0e10cSrcweir rSet.Put( SfxBoolItem( ATTR_STACKED, sal_True ) ); 2204*cdf0e10cSrcweir break; 2205*cdf0e10cSrcweir default: 2206*cdf0e10cSrcweir { 2207*cdf0e10cSrcweir // added to avoid warnings 2208*cdf0e10cSrcweir } 2209*cdf0e10cSrcweir } 2210*cdf0e10cSrcweir } 2211*cdf0e10cSrcweir } 2212*cdf0e10cSrcweir break; 2213*cdf0e10cSrcweir default: 2214*cdf0e10cSrcweir { 2215*cdf0e10cSrcweir lcl_GetCellsPropertySet()->setPropertyValue(rEntry, rValue, rSet); 2216*cdf0e10cSrcweir } 2217*cdf0e10cSrcweir } 2218*cdf0e10cSrcweir } 2219*cdf0e10cSrcweir 2220*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::setPropertyValue( 2221*cdf0e10cSrcweir const rtl::OUString& aPropertyName, const uno::Any& aValue ) 2222*cdf0e10cSrcweir throw(beans::UnknownPropertyException, beans::PropertyVetoException, 2223*cdf0e10cSrcweir lang::IllegalArgumentException, lang::WrappedTargetException, 2224*cdf0e10cSrcweir uno::RuntimeException) 2225*cdf0e10cSrcweir { 2226*cdf0e10cSrcweir ScUnoGuard aGuard; 2227*cdf0e10cSrcweir 2228*cdf0e10cSrcweir if ( !pDocShell || aRanges.Count() == 0 ) 2229*cdf0e10cSrcweir throw uno::RuntimeException(); 2230*cdf0e10cSrcweir 2231*cdf0e10cSrcweir const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class 2232*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( aPropertyName ); 2233*cdf0e10cSrcweir if ( !pEntry ) 2234*cdf0e10cSrcweir throw beans::UnknownPropertyException(); 2235*cdf0e10cSrcweir 2236*cdf0e10cSrcweir SetOnePropertyValue( pEntry, aValue ); 2237*cdf0e10cSrcweir } 2238*cdf0e10cSrcweir 2239*cdf0e10cSrcweir void ScCellRangesBase::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, const uno::Any& aValue ) 2240*cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException) 2241*cdf0e10cSrcweir { 2242*cdf0e10cSrcweir if ( pEntry ) 2243*cdf0e10cSrcweir { 2244*cdf0e10cSrcweir if ( IsScItemWid( pEntry->nWID ) ) 2245*cdf0e10cSrcweir { 2246*cdf0e10cSrcweir if ( aRanges.Count() ) // leer = nichts zu tun 2247*cdf0e10cSrcweir { 2248*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 2249*cdf0e10cSrcweir ScDocFunc aFunc(*pDocShell); 2250*cdf0e10cSrcweir 2251*cdf0e10cSrcweir // Fuer Teile von zusammengesetzten Items mit mehreren Properties (z.B. Hintergrund) 2252*cdf0e10cSrcweir // muss vorher das alte Item aus dem Dokument geholt werden 2253*cdf0e10cSrcweir //! Das kann hier aber nicht erkannt werden 2254*cdf0e10cSrcweir //! -> eigenes Flag im PropertyMap-Eintrag, oder was ??? 2255*cdf0e10cSrcweir //! Item direkt von einzelner Position im Bereich holen? 2256*cdf0e10cSrcweir // ClearInvalidItems, damit auf jeden Fall ein Item vom richtigen Typ da ist 2257*cdf0e10cSrcweir 2258*cdf0e10cSrcweir ScPatternAttr aPattern( *GetCurrentAttrsDeep() ); 2259*cdf0e10cSrcweir SfxItemSet& rSet = aPattern.GetItemSet(); 2260*cdf0e10cSrcweir rSet.ClearInvalidItems(); 2261*cdf0e10cSrcweir 2262*cdf0e10cSrcweir sal_uInt16 nFirstItem, nSecondItem; 2263*cdf0e10cSrcweir lcl_SetCellProperty( *pEntry, aValue, aPattern, pDoc, nFirstItem, nSecondItem ); 2264*cdf0e10cSrcweir 2265*cdf0e10cSrcweir for (sal_uInt16 nWhich = ATTR_PATTERN_START; nWhich <= ATTR_PATTERN_END; nWhich++) 2266*cdf0e10cSrcweir if ( nWhich != nFirstItem && nWhich != nSecondItem ) 2267*cdf0e10cSrcweir rSet.ClearItem(nWhich); 2268*cdf0e10cSrcweir 2269*cdf0e10cSrcweir aFunc.ApplyAttributes( *GetMarkData(), aPattern, sal_True, sal_True ); 2270*cdf0e10cSrcweir } 2271*cdf0e10cSrcweir } 2272*cdf0e10cSrcweir else // implemented here 2273*cdf0e10cSrcweir switch ( pEntry->nWID ) 2274*cdf0e10cSrcweir { 2275*cdf0e10cSrcweir case SC_WID_UNO_CHCOLHDR: 2276*cdf0e10cSrcweir // chart header flags are set for this object, not stored with document 2277*cdf0e10cSrcweir bChartColAsHdr = ScUnoHelpFunctions::GetBoolFromAny( aValue ); 2278*cdf0e10cSrcweir break; 2279*cdf0e10cSrcweir case SC_WID_UNO_CHROWHDR: 2280*cdf0e10cSrcweir bChartRowAsHdr = ScUnoHelpFunctions::GetBoolFromAny( aValue ); 2281*cdf0e10cSrcweir break; 2282*cdf0e10cSrcweir case SC_WID_UNO_CELLSTYL: 2283*cdf0e10cSrcweir { 2284*cdf0e10cSrcweir rtl::OUString aStrVal; 2285*cdf0e10cSrcweir aValue >>= aStrVal; 2286*cdf0e10cSrcweir String aString(ScStyleNameConversion::ProgrammaticToDisplayName( 2287*cdf0e10cSrcweir aStrVal, SFX_STYLE_FAMILY_PARA )); 2288*cdf0e10cSrcweir ScDocFunc aFunc(*pDocShell); 2289*cdf0e10cSrcweir aFunc.ApplyStyle( *GetMarkData(), aString, sal_True, sal_True ); 2290*cdf0e10cSrcweir } 2291*cdf0e10cSrcweir break; 2292*cdf0e10cSrcweir case SC_WID_UNO_TBLBORD: 2293*cdf0e10cSrcweir { 2294*cdf0e10cSrcweir table::TableBorder aBorder; 2295*cdf0e10cSrcweir if ( aRanges.Count() && ( aValue >>= aBorder ) ) // empty = nothing to do 2296*cdf0e10cSrcweir { 2297*cdf0e10cSrcweir SvxBoxItem aOuter(ATTR_BORDER); 2298*cdf0e10cSrcweir SvxBoxInfoItem aInner(ATTR_BORDER_INNER); 2299*cdf0e10cSrcweir ScHelperFunctions::FillBoxItems( aOuter, aInner, aBorder ); 2300*cdf0e10cSrcweir 2301*cdf0e10cSrcweir ScHelperFunctions::ApplyBorder( pDocShell, aRanges, aOuter, aInner ); //! docfunc 2302*cdf0e10cSrcweir } 2303*cdf0e10cSrcweir } 2304*cdf0e10cSrcweir break; 2305*cdf0e10cSrcweir case SC_WID_UNO_CONDFMT: 2306*cdf0e10cSrcweir case SC_WID_UNO_CONDLOC: 2307*cdf0e10cSrcweir case SC_WID_UNO_CONDXML: 2308*cdf0e10cSrcweir { 2309*cdf0e10cSrcweir uno::Reference<sheet::XSheetConditionalEntries> xInterface(aValue, uno::UNO_QUERY); 2310*cdf0e10cSrcweir if ( aRanges.Count() && xInterface.is() ) // leer = nichts zu tun 2311*cdf0e10cSrcweir { 2312*cdf0e10cSrcweir ScTableConditionalFormat* pFormat = 2313*cdf0e10cSrcweir ScTableConditionalFormat::getImplementation( xInterface ); 2314*cdf0e10cSrcweir if (pFormat) 2315*cdf0e10cSrcweir { 2316*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 2317*cdf0e10cSrcweir sal_Bool bEnglish = ( pEntry->nWID != SC_WID_UNO_CONDLOC ); 2318*cdf0e10cSrcweir sal_Bool bXML = ( pEntry->nWID == SC_WID_UNO_CONDXML ); 2319*cdf0e10cSrcweir formula::FormulaGrammar::Grammar eGrammar = (bXML ? 2320*cdf0e10cSrcweir formula::FormulaGrammar::GRAM_UNSPECIFIED : 2321*cdf0e10cSrcweir formula::FormulaGrammar::mapAPItoGrammar( bEnglish, bXML)); 2322*cdf0e10cSrcweir 2323*cdf0e10cSrcweir ScConditionalFormat aNew( 0, pDoc ); // Index wird beim Einfuegen gesetzt 2324*cdf0e10cSrcweir pFormat->FillFormat( aNew, pDoc, eGrammar ); 2325*cdf0e10cSrcweir sal_uLong nIndex = pDoc->AddCondFormat( aNew ); 2326*cdf0e10cSrcweir 2327*cdf0e10cSrcweir ScDocFunc aFunc(*pDocShell); 2328*cdf0e10cSrcweir 2329*cdf0e10cSrcweir ScPatternAttr aPattern( pDoc->GetPool() ); 2330*cdf0e10cSrcweir aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_CONDITIONAL, nIndex ) ); 2331*cdf0e10cSrcweir aFunc.ApplyAttributes( *GetMarkData(), aPattern, sal_True, sal_True ); 2332*cdf0e10cSrcweir } 2333*cdf0e10cSrcweir } 2334*cdf0e10cSrcweir } 2335*cdf0e10cSrcweir break; 2336*cdf0e10cSrcweir case SC_WID_UNO_VALIDAT: 2337*cdf0e10cSrcweir case SC_WID_UNO_VALILOC: 2338*cdf0e10cSrcweir case SC_WID_UNO_VALIXML: 2339*cdf0e10cSrcweir { 2340*cdf0e10cSrcweir uno::Reference<beans::XPropertySet> xInterface(aValue, uno::UNO_QUERY); 2341*cdf0e10cSrcweir if ( aRanges.Count() && xInterface.is() ) // leer = nichts zu tun 2342*cdf0e10cSrcweir { 2343*cdf0e10cSrcweir ScTableValidationObj* pValidObj = 2344*cdf0e10cSrcweir ScTableValidationObj::getImplementation( xInterface ); 2345*cdf0e10cSrcweir if (pValidObj) 2346*cdf0e10cSrcweir { 2347*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 2348*cdf0e10cSrcweir sal_Bool bEnglish = ( pEntry->nWID != SC_WID_UNO_VALILOC ); 2349*cdf0e10cSrcweir sal_Bool bXML = ( pEntry->nWID == SC_WID_UNO_VALIXML ); 2350*cdf0e10cSrcweir formula::FormulaGrammar::Grammar eGrammar = (bXML ? 2351*cdf0e10cSrcweir formula::FormulaGrammar::GRAM_UNSPECIFIED : 2352*cdf0e10cSrcweir formula::FormulaGrammar::mapAPItoGrammar( bEnglish, bXML)); 2353*cdf0e10cSrcweir 2354*cdf0e10cSrcweir ScValidationData* pNewData = 2355*cdf0e10cSrcweir pValidObj->CreateValidationData( pDoc, eGrammar ); 2356*cdf0e10cSrcweir sal_uLong nIndex = pDoc->AddValidationEntry( *pNewData ); 2357*cdf0e10cSrcweir delete pNewData; 2358*cdf0e10cSrcweir 2359*cdf0e10cSrcweir ScDocFunc aFunc(*pDocShell); 2360*cdf0e10cSrcweir 2361*cdf0e10cSrcweir ScPatternAttr aPattern( pDoc->GetPool() ); 2362*cdf0e10cSrcweir aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_VALIDDATA, nIndex ) ); 2363*cdf0e10cSrcweir aFunc.ApplyAttributes( *GetMarkData(), aPattern, sal_True, sal_True ); 2364*cdf0e10cSrcweir } 2365*cdf0e10cSrcweir } 2366*cdf0e10cSrcweir } 2367*cdf0e10cSrcweir break; 2368*cdf0e10cSrcweir // SC_WID_UNO_NUMRULES is ignored... 2369*cdf0e10cSrcweir } 2370*cdf0e10cSrcweir } 2371*cdf0e10cSrcweir } 2372*cdf0e10cSrcweir 2373*cdf0e10cSrcweir uno::Any SAL_CALL ScCellRangesBase::getPropertyValue( const rtl::OUString& aPropertyName ) 2374*cdf0e10cSrcweir throw(beans::UnknownPropertyException, lang::WrappedTargetException, 2375*cdf0e10cSrcweir uno::RuntimeException) 2376*cdf0e10cSrcweir { 2377*cdf0e10cSrcweir ScUnoGuard aGuard; 2378*cdf0e10cSrcweir 2379*cdf0e10cSrcweir if ( !pDocShell || aRanges.Count() == 0 ) 2380*cdf0e10cSrcweir throw uno::RuntimeException(); 2381*cdf0e10cSrcweir 2382*cdf0e10cSrcweir const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class 2383*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( aPropertyName ); 2384*cdf0e10cSrcweir if ( !pEntry ) 2385*cdf0e10cSrcweir throw beans::UnknownPropertyException(); 2386*cdf0e10cSrcweir 2387*cdf0e10cSrcweir uno::Any aAny; 2388*cdf0e10cSrcweir GetOnePropertyValue( pEntry, aAny ); 2389*cdf0e10cSrcweir return aAny; 2390*cdf0e10cSrcweir } 2391*cdf0e10cSrcweir 2392*cdf0e10cSrcweir void ScCellRangesBase::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, 2393*cdf0e10cSrcweir uno::Any& rAny ) 2394*cdf0e10cSrcweir throw(uno::RuntimeException) 2395*cdf0e10cSrcweir { 2396*cdf0e10cSrcweir if ( pEntry ) 2397*cdf0e10cSrcweir { 2398*cdf0e10cSrcweir if ( IsScItemWid( pEntry->nWID ) ) 2399*cdf0e10cSrcweir { 2400*cdf0e10cSrcweir SfxItemSet* pDataSet = GetCurrentDataSet(); 2401*cdf0e10cSrcweir if ( pDataSet ) 2402*cdf0e10cSrcweir { 2403*cdf0e10cSrcweir switch ( pEntry->nWID ) // fuer Item-Spezial-Behandlungen 2404*cdf0e10cSrcweir { 2405*cdf0e10cSrcweir case ATTR_VALUE_FORMAT: 2406*cdf0e10cSrcweir { 2407*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 2408*cdf0e10cSrcweir 2409*cdf0e10cSrcweir sal_uLong nOldFormat = ((const SfxUInt32Item&) 2410*cdf0e10cSrcweir pDataSet->Get( ATTR_VALUE_FORMAT )).GetValue(); 2411*cdf0e10cSrcweir LanguageType eOldLang = ((const SvxLanguageItem&) 2412*cdf0e10cSrcweir pDataSet->Get( ATTR_LANGUAGE_FORMAT )).GetLanguage(); 2413*cdf0e10cSrcweir nOldFormat = pDoc->GetFormatTable()-> 2414*cdf0e10cSrcweir GetFormatForLanguageIfBuiltIn( nOldFormat, eOldLang ); 2415*cdf0e10cSrcweir rAny <<= (sal_Int32)( nOldFormat ); 2416*cdf0e10cSrcweir } 2417*cdf0e10cSrcweir break; 2418*cdf0e10cSrcweir case ATTR_INDENT: 2419*cdf0e10cSrcweir rAny <<= (sal_Int16)( TwipsToHMM(((const SfxUInt16Item&) 2420*cdf0e10cSrcweir pDataSet->Get(pEntry->nWID)).GetValue()) ); 2421*cdf0e10cSrcweir break; 2422*cdf0e10cSrcweir case ATTR_STACKED: 2423*cdf0e10cSrcweir { 2424*cdf0e10cSrcweir sal_Int32 nRot = ((const SfxInt32Item&)pDataSet->Get(ATTR_ROTATE_VALUE)).GetValue(); 2425*cdf0e10cSrcweir sal_Bool bStacked = ((const SfxBoolItem&)pDataSet->Get(pEntry->nWID)).GetValue(); 2426*cdf0e10cSrcweir SvxOrientationItem( nRot, bStacked, 0 ).QueryValue( rAny ); 2427*cdf0e10cSrcweir } 2428*cdf0e10cSrcweir break; 2429*cdf0e10cSrcweir default: 2430*cdf0e10cSrcweir pPropSet->getPropertyValue(*pEntry, *pDataSet, rAny); 2431*cdf0e10cSrcweir } 2432*cdf0e10cSrcweir } 2433*cdf0e10cSrcweir } 2434*cdf0e10cSrcweir else // implemented here 2435*cdf0e10cSrcweir switch ( pEntry->nWID ) 2436*cdf0e10cSrcweir { 2437*cdf0e10cSrcweir case SC_WID_UNO_CHCOLHDR: 2438*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, bChartColAsHdr ); 2439*cdf0e10cSrcweir break; 2440*cdf0e10cSrcweir case SC_WID_UNO_CHROWHDR: 2441*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, bChartRowAsHdr ); 2442*cdf0e10cSrcweir break; 2443*cdf0e10cSrcweir case SC_WID_UNO_CELLSTYL: 2444*cdf0e10cSrcweir { 2445*cdf0e10cSrcweir String aStyleName; 2446*cdf0e10cSrcweir const ScStyleSheet* pStyle = pDocShell->GetDocument()->GetSelectionStyle(*GetMarkData()); 2447*cdf0e10cSrcweir if (pStyle) 2448*cdf0e10cSrcweir aStyleName = pStyle->GetName(); 2449*cdf0e10cSrcweir rAny <<= rtl::OUString( ScStyleNameConversion::DisplayToProgrammaticName( 2450*cdf0e10cSrcweir aStyleName, SFX_STYLE_FAMILY_PARA ) ); 2451*cdf0e10cSrcweir } 2452*cdf0e10cSrcweir break; 2453*cdf0e10cSrcweir case SC_WID_UNO_TBLBORD: 2454*cdf0e10cSrcweir { 2455*cdf0e10cSrcweir //! loop throgh all ranges 2456*cdf0e10cSrcweir const ScRange* pFirst = aRanges.GetObject(0); 2457*cdf0e10cSrcweir if (pFirst) 2458*cdf0e10cSrcweir { 2459*cdf0e10cSrcweir SvxBoxItem aOuter(ATTR_BORDER); 2460*cdf0e10cSrcweir SvxBoxInfoItem aInner(ATTR_BORDER_INNER); 2461*cdf0e10cSrcweir 2462*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 2463*cdf0e10cSrcweir ScMarkData aMark; 2464*cdf0e10cSrcweir aMark.SetMarkArea( *pFirst ); 2465*cdf0e10cSrcweir aMark.SelectTable( pFirst->aStart.Tab(), sal_True ); 2466*cdf0e10cSrcweir pDoc->GetSelectionFrame( aMark, aOuter, aInner ); 2467*cdf0e10cSrcweir 2468*cdf0e10cSrcweir table::TableBorder aBorder; 2469*cdf0e10cSrcweir ScHelperFunctions::FillTableBorder( aBorder, aOuter, aInner ); 2470*cdf0e10cSrcweir rAny <<= aBorder; 2471*cdf0e10cSrcweir } 2472*cdf0e10cSrcweir } 2473*cdf0e10cSrcweir break; 2474*cdf0e10cSrcweir case SC_WID_UNO_CONDFMT: 2475*cdf0e10cSrcweir case SC_WID_UNO_CONDLOC: 2476*cdf0e10cSrcweir case SC_WID_UNO_CONDXML: 2477*cdf0e10cSrcweir { 2478*cdf0e10cSrcweir const ScPatternAttr* pPattern = GetCurrentAttrsDeep(); 2479*cdf0e10cSrcweir if ( pPattern ) 2480*cdf0e10cSrcweir { 2481*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 2482*cdf0e10cSrcweir sal_Bool bEnglish = ( pEntry->nWID != SC_WID_UNO_CONDLOC ); 2483*cdf0e10cSrcweir sal_Bool bXML = ( pEntry->nWID == SC_WID_UNO_CONDXML ); 2484*cdf0e10cSrcweir formula::FormulaGrammar::Grammar eGrammar = (bXML ? 2485*cdf0e10cSrcweir pDoc->GetStorageGrammar() : 2486*cdf0e10cSrcweir formula::FormulaGrammar::mapAPItoGrammar( bEnglish, bXML)); 2487*cdf0e10cSrcweir sal_uLong nIndex = ((const SfxUInt32Item&) 2488*cdf0e10cSrcweir pPattern->GetItem(ATTR_CONDITIONAL)).GetValue(); 2489*cdf0e10cSrcweir rAny <<= uno::Reference<sheet::XSheetConditionalEntries>( 2490*cdf0e10cSrcweir new ScTableConditionalFormat( pDoc, nIndex, eGrammar )); 2491*cdf0e10cSrcweir } 2492*cdf0e10cSrcweir } 2493*cdf0e10cSrcweir break; 2494*cdf0e10cSrcweir case SC_WID_UNO_VALIDAT: 2495*cdf0e10cSrcweir case SC_WID_UNO_VALILOC: 2496*cdf0e10cSrcweir case SC_WID_UNO_VALIXML: 2497*cdf0e10cSrcweir { 2498*cdf0e10cSrcweir const ScPatternAttr* pPattern = GetCurrentAttrsDeep(); 2499*cdf0e10cSrcweir if ( pPattern ) 2500*cdf0e10cSrcweir { 2501*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 2502*cdf0e10cSrcweir sal_Bool bEnglish = ( pEntry->nWID != SC_WID_UNO_VALILOC ); 2503*cdf0e10cSrcweir sal_Bool bXML = ( pEntry->nWID == SC_WID_UNO_VALIXML ); 2504*cdf0e10cSrcweir formula::FormulaGrammar::Grammar eGrammar = (bXML ? 2505*cdf0e10cSrcweir pDoc->GetStorageGrammar() : 2506*cdf0e10cSrcweir formula::FormulaGrammar::mapAPItoGrammar( bEnglish, bXML)); 2507*cdf0e10cSrcweir sal_uLong nIndex = ((const SfxUInt32Item&) 2508*cdf0e10cSrcweir pPattern->GetItem(ATTR_VALIDDATA)).GetValue(); 2509*cdf0e10cSrcweir rAny <<= uno::Reference<beans::XPropertySet>( 2510*cdf0e10cSrcweir new ScTableValidationObj( pDoc, nIndex, eGrammar )); 2511*cdf0e10cSrcweir } 2512*cdf0e10cSrcweir } 2513*cdf0e10cSrcweir break; 2514*cdf0e10cSrcweir case SC_WID_UNO_NUMRULES: 2515*cdf0e10cSrcweir { 2516*cdf0e10cSrcweir // always return empty numbering rules object 2517*cdf0e10cSrcweir rAny <<= uno::Reference<container::XIndexReplace>(ScStyleObj::CreateEmptyNumberingRules()); 2518*cdf0e10cSrcweir } 2519*cdf0e10cSrcweir break; 2520*cdf0e10cSrcweir case SC_WID_UNO_ABSNAME: 2521*cdf0e10cSrcweir { 2522*cdf0e10cSrcweir String sRet; 2523*cdf0e10cSrcweir aRanges.Format(sRet, SCR_ABS_3D, pDocShell->GetDocument()); 2524*cdf0e10cSrcweir rAny <<= rtl::OUString(sRet); 2525*cdf0e10cSrcweir } 2526*cdf0e10cSrcweir } 2527*cdf0e10cSrcweir } 2528*cdf0e10cSrcweir } 2529*cdf0e10cSrcweir 2530*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::addPropertyChangeListener( const rtl::OUString& /* aPropertyName */, 2531*cdf0e10cSrcweir const uno::Reference<beans::XPropertyChangeListener>& /* aListener */) 2532*cdf0e10cSrcweir throw(beans::UnknownPropertyException, 2533*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 2534*cdf0e10cSrcweir { 2535*cdf0e10cSrcweir ScUnoGuard aGuard; 2536*cdf0e10cSrcweir if ( aRanges.Count() == 0 ) 2537*cdf0e10cSrcweir throw uno::RuntimeException(); 2538*cdf0e10cSrcweir 2539*cdf0e10cSrcweir DBG_ERROR("not implemented"); 2540*cdf0e10cSrcweir } 2541*cdf0e10cSrcweir 2542*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::removePropertyChangeListener( const rtl::OUString& /* aPropertyName */, 2543*cdf0e10cSrcweir const uno::Reference<beans::XPropertyChangeListener>& /* aListener */) 2544*cdf0e10cSrcweir throw(beans::UnknownPropertyException, 2545*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 2546*cdf0e10cSrcweir { 2547*cdf0e10cSrcweir ScUnoGuard aGuard; 2548*cdf0e10cSrcweir if ( aRanges.Count() == 0 ) 2549*cdf0e10cSrcweir throw uno::RuntimeException(); 2550*cdf0e10cSrcweir 2551*cdf0e10cSrcweir DBG_ERROR("not implemented"); 2552*cdf0e10cSrcweir } 2553*cdf0e10cSrcweir 2554*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::addVetoableChangeListener( const rtl::OUString&, 2555*cdf0e10cSrcweir const uno::Reference<beans::XVetoableChangeListener>&) 2556*cdf0e10cSrcweir throw(beans::UnknownPropertyException, 2557*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 2558*cdf0e10cSrcweir { 2559*cdf0e10cSrcweir DBG_ERROR("not implemented"); 2560*cdf0e10cSrcweir } 2561*cdf0e10cSrcweir 2562*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::removeVetoableChangeListener( const rtl::OUString&, 2563*cdf0e10cSrcweir const uno::Reference<beans::XVetoableChangeListener>&) 2564*cdf0e10cSrcweir throw(beans::UnknownPropertyException, 2565*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 2566*cdf0e10cSrcweir { 2567*cdf0e10cSrcweir DBG_ERROR("not implemented"); 2568*cdf0e10cSrcweir } 2569*cdf0e10cSrcweir 2570*cdf0e10cSrcweir // XMultiPropertySet 2571*cdf0e10cSrcweir 2572*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::setPropertyValues( const uno::Sequence< rtl::OUString >& aPropertyNames, 2573*cdf0e10cSrcweir const uno::Sequence< uno::Any >& aValues ) 2574*cdf0e10cSrcweir throw (beans::PropertyVetoException, 2575*cdf0e10cSrcweir lang::IllegalArgumentException, 2576*cdf0e10cSrcweir lang::WrappedTargetException, 2577*cdf0e10cSrcweir uno::RuntimeException) 2578*cdf0e10cSrcweir { 2579*cdf0e10cSrcweir ScUnoGuard aGuard; 2580*cdf0e10cSrcweir 2581*cdf0e10cSrcweir sal_Int32 nCount(aPropertyNames.getLength()); 2582*cdf0e10cSrcweir sal_Int32 nValues(aValues.getLength()); 2583*cdf0e10cSrcweir if (nCount != nValues) 2584*cdf0e10cSrcweir throw lang::IllegalArgumentException(); 2585*cdf0e10cSrcweir 2586*cdf0e10cSrcweir if ( pDocShell && nCount ) 2587*cdf0e10cSrcweir { 2588*cdf0e10cSrcweir const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class 2589*cdf0e10cSrcweir const rtl::OUString* pNames = aPropertyNames.getConstArray(); 2590*cdf0e10cSrcweir const uno::Any* pValues = aValues.getConstArray(); 2591*cdf0e10cSrcweir 2592*cdf0e10cSrcweir const SfxItemPropertySimpleEntry** pEntryArray = new const SfxItemPropertySimpleEntry*[nCount]; 2593*cdf0e10cSrcweir 2594*cdf0e10cSrcweir sal_Int32 i; 2595*cdf0e10cSrcweir for(i = 0; i < nCount; i++) 2596*cdf0e10cSrcweir { 2597*cdf0e10cSrcweir // first loop: find all properties in map, but handle only CellStyle 2598*cdf0e10cSrcweir // (CellStyle must be set before any other cell properties) 2599*cdf0e10cSrcweir 2600*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( pNames[i] ); 2601*cdf0e10cSrcweir pEntryArray[i] = pEntry; 2602*cdf0e10cSrcweir if (pEntry) 2603*cdf0e10cSrcweir { 2604*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_CELLSTYL ) 2605*cdf0e10cSrcweir { 2606*cdf0e10cSrcweir try 2607*cdf0e10cSrcweir { 2608*cdf0e10cSrcweir SetOnePropertyValue( pEntry, pValues[i] ); 2609*cdf0e10cSrcweir } 2610*cdf0e10cSrcweir catch ( lang::IllegalArgumentException& ) 2611*cdf0e10cSrcweir { 2612*cdf0e10cSrcweir DBG_ERROR("exception when setting cell style"); // not supposed to happen 2613*cdf0e10cSrcweir } 2614*cdf0e10cSrcweir } 2615*cdf0e10cSrcweir } 2616*cdf0e10cSrcweir } 2617*cdf0e10cSrcweir 2618*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 2619*cdf0e10cSrcweir ScPatternAttr* pOldPattern = NULL; 2620*cdf0e10cSrcweir ScPatternAttr* pNewPattern = NULL; 2621*cdf0e10cSrcweir 2622*cdf0e10cSrcweir for(i = 0; i < nCount; i++) 2623*cdf0e10cSrcweir { 2624*cdf0e10cSrcweir // second loop: handle other properties 2625*cdf0e10cSrcweir 2626*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pEntryArray[i]; 2627*cdf0e10cSrcweir if ( pEntry ) 2628*cdf0e10cSrcweir { 2629*cdf0e10cSrcweir if ( IsScItemWid( pEntry->nWID ) ) // can be handled by SfxItemPropertySet 2630*cdf0e10cSrcweir { 2631*cdf0e10cSrcweir if ( !pOldPattern ) 2632*cdf0e10cSrcweir { 2633*cdf0e10cSrcweir pOldPattern = new ScPatternAttr( *GetCurrentAttrsDeep() ); 2634*cdf0e10cSrcweir pOldPattern->GetItemSet().ClearInvalidItems(); 2635*cdf0e10cSrcweir pNewPattern = new ScPatternAttr( pDoc->GetPool() ); 2636*cdf0e10cSrcweir } 2637*cdf0e10cSrcweir 2638*cdf0e10cSrcweir // collect items in pNewPattern, apply with one call after the loop 2639*cdf0e10cSrcweir 2640*cdf0e10cSrcweir sal_uInt16 nFirstItem, nSecondItem; 2641*cdf0e10cSrcweir lcl_SetCellProperty( *pEntry, pValues[i], *pOldPattern, pDoc, nFirstItem, nSecondItem ); 2642*cdf0e10cSrcweir 2643*cdf0e10cSrcweir // put only affected items into new set 2644*cdf0e10cSrcweir if ( nFirstItem ) 2645*cdf0e10cSrcweir pNewPattern->GetItemSet().Put( pOldPattern->GetItemSet().Get( nFirstItem ) ); 2646*cdf0e10cSrcweir if ( nSecondItem ) 2647*cdf0e10cSrcweir pNewPattern->GetItemSet().Put( pOldPattern->GetItemSet().Get( nSecondItem ) ); 2648*cdf0e10cSrcweir } 2649*cdf0e10cSrcweir else if ( pEntry->nWID != SC_WID_UNO_CELLSTYL ) // CellStyle is handled above 2650*cdf0e10cSrcweir { 2651*cdf0e10cSrcweir // call virtual method to set a single property 2652*cdf0e10cSrcweir SetOnePropertyValue( pEntry, pValues[i] ); 2653*cdf0e10cSrcweir } 2654*cdf0e10cSrcweir } 2655*cdf0e10cSrcweir } 2656*cdf0e10cSrcweir 2657*cdf0e10cSrcweir if ( pNewPattern && aRanges.Count() ) 2658*cdf0e10cSrcweir { 2659*cdf0e10cSrcweir ScDocFunc aFunc(*pDocShell); 2660*cdf0e10cSrcweir aFunc.ApplyAttributes( *GetMarkData(), *pNewPattern, sal_True, sal_True ); 2661*cdf0e10cSrcweir } 2662*cdf0e10cSrcweir 2663*cdf0e10cSrcweir delete pNewPattern; 2664*cdf0e10cSrcweir delete pOldPattern; 2665*cdf0e10cSrcweir delete[] pEntryArray; 2666*cdf0e10cSrcweir } 2667*cdf0e10cSrcweir } 2668*cdf0e10cSrcweir 2669*cdf0e10cSrcweir uno::Sequence<uno::Any> SAL_CALL ScCellRangesBase::getPropertyValues( 2670*cdf0e10cSrcweir const uno::Sequence< rtl::OUString >& aPropertyNames ) 2671*cdf0e10cSrcweir throw (uno::RuntimeException) 2672*cdf0e10cSrcweir { 2673*cdf0e10cSrcweir ScUnoGuard aGuard; 2674*cdf0e10cSrcweir 2675*cdf0e10cSrcweir const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class 2676*cdf0e10cSrcweir 2677*cdf0e10cSrcweir uno::Sequence<uno::Any> aRet(aPropertyNames.getLength()); 2678*cdf0e10cSrcweir uno::Any* pProperties = aRet.getArray(); 2679*cdf0e10cSrcweir for(sal_Int32 i = 0; i < aPropertyNames.getLength(); i++) 2680*cdf0e10cSrcweir { 2681*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( aPropertyNames[i] ); 2682*cdf0e10cSrcweir GetOnePropertyValue( pEntry, pProperties[i] ); 2683*cdf0e10cSrcweir } 2684*cdf0e10cSrcweir return aRet; 2685*cdf0e10cSrcweir } 2686*cdf0e10cSrcweir 2687*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::addPropertiesChangeListener( const uno::Sequence< rtl::OUString >& /* aPropertyNames */, 2688*cdf0e10cSrcweir const uno::Reference< beans::XPropertiesChangeListener >& /* xListener */ ) 2689*cdf0e10cSrcweir throw (uno::RuntimeException) 2690*cdf0e10cSrcweir { 2691*cdf0e10cSrcweir DBG_ERROR("not implemented"); 2692*cdf0e10cSrcweir } 2693*cdf0e10cSrcweir 2694*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::removePropertiesChangeListener( const uno::Reference< beans::XPropertiesChangeListener >& /* xListener */ ) 2695*cdf0e10cSrcweir throw (uno::RuntimeException) 2696*cdf0e10cSrcweir { 2697*cdf0e10cSrcweir DBG_ERROR("not implemented"); 2698*cdf0e10cSrcweir } 2699*cdf0e10cSrcweir 2700*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::firePropertiesChangeEvent( const uno::Sequence< rtl::OUString >& /* aPropertyNames */, 2701*cdf0e10cSrcweir const uno::Reference< beans::XPropertiesChangeListener >& /* xListener */ ) 2702*cdf0e10cSrcweir throw (uno::RuntimeException) 2703*cdf0e10cSrcweir { 2704*cdf0e10cSrcweir DBG_ERROR("not implemented"); 2705*cdf0e10cSrcweir } 2706*cdf0e10cSrcweir 2707*cdf0e10cSrcweir IMPL_LINK( ScCellRangesBase, ValueListenerHdl, SfxHint*, pHint ) 2708*cdf0e10cSrcweir { 2709*cdf0e10cSrcweir if ( pDocShell && pHint && pHint->ISA( SfxSimpleHint ) && 2710*cdf0e10cSrcweir ((const SfxSimpleHint*)pHint)->GetId() & (SC_HINT_DATACHANGED | SC_HINT_DYING) ) 2711*cdf0e10cSrcweir { 2712*cdf0e10cSrcweir // This may be called several times for a single change, if several formulas 2713*cdf0e10cSrcweir // in the range are notified. So only a flag is set that is checked when 2714*cdf0e10cSrcweir // SFX_HINT_DATACHANGED is received. 2715*cdf0e10cSrcweir 2716*cdf0e10cSrcweir bGotDataChangedHint = sal_True; 2717*cdf0e10cSrcweir } 2718*cdf0e10cSrcweir return 0; 2719*cdf0e10cSrcweir } 2720*cdf0e10cSrcweir 2721*cdf0e10cSrcweir // XTolerantMultiPropertySet 2722*cdf0e10cSrcweir uno::Sequence< beans::SetPropertyTolerantFailed > SAL_CALL ScCellRangesBase::setPropertyValuesTolerant( const uno::Sequence< ::rtl::OUString >& aPropertyNames, 2723*cdf0e10cSrcweir const uno::Sequence< uno::Any >& aValues ) 2724*cdf0e10cSrcweir throw (lang::IllegalArgumentException, uno::RuntimeException) 2725*cdf0e10cSrcweir { 2726*cdf0e10cSrcweir ScUnoGuard aGuard; 2727*cdf0e10cSrcweir 2728*cdf0e10cSrcweir sal_Int32 nCount(aPropertyNames.getLength()); 2729*cdf0e10cSrcweir sal_Int32 nValues(aValues.getLength()); 2730*cdf0e10cSrcweir if (nCount != nValues) 2731*cdf0e10cSrcweir throw lang::IllegalArgumentException(); 2732*cdf0e10cSrcweir 2733*cdf0e10cSrcweir if ( pDocShell && nCount ) 2734*cdf0e10cSrcweir { 2735*cdf0e10cSrcweir uno::Sequence < beans::SetPropertyTolerantFailed > aReturns(nCount); 2736*cdf0e10cSrcweir beans::SetPropertyTolerantFailed* pReturns = aReturns.getArray(); 2737*cdf0e10cSrcweir 2738*cdf0e10cSrcweir const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class 2739*cdf0e10cSrcweir const rtl::OUString* pNames = aPropertyNames.getConstArray(); 2740*cdf0e10cSrcweir const uno::Any* pValues = aValues.getConstArray(); 2741*cdf0e10cSrcweir 2742*cdf0e10cSrcweir const SfxItemPropertySimpleEntry** pMapArray = new const SfxItemPropertySimpleEntry*[nCount]; 2743*cdf0e10cSrcweir 2744*cdf0e10cSrcweir sal_Int32 i; 2745*cdf0e10cSrcweir for(i = 0; i < nCount; i++) 2746*cdf0e10cSrcweir { 2747*cdf0e10cSrcweir // first loop: find all properties in map, but handle only CellStyle 2748*cdf0e10cSrcweir // (CellStyle must be set before any other cell properties) 2749*cdf0e10cSrcweir 2750*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( pNames[i] ); 2751*cdf0e10cSrcweir pMapArray[i] = pEntry; 2752*cdf0e10cSrcweir if (pEntry) 2753*cdf0e10cSrcweir { 2754*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_CELLSTYL ) 2755*cdf0e10cSrcweir { 2756*cdf0e10cSrcweir try 2757*cdf0e10cSrcweir { 2758*cdf0e10cSrcweir SetOnePropertyValue( pEntry, pValues[i] ); 2759*cdf0e10cSrcweir } 2760*cdf0e10cSrcweir catch ( lang::IllegalArgumentException& ) 2761*cdf0e10cSrcweir { 2762*cdf0e10cSrcweir DBG_ERROR("exception when setting cell style"); // not supposed to happen 2763*cdf0e10cSrcweir } 2764*cdf0e10cSrcweir } 2765*cdf0e10cSrcweir } 2766*cdf0e10cSrcweir } 2767*cdf0e10cSrcweir 2768*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 2769*cdf0e10cSrcweir ScPatternAttr* pOldPattern = NULL; 2770*cdf0e10cSrcweir ScPatternAttr* pNewPattern = NULL; 2771*cdf0e10cSrcweir 2772*cdf0e10cSrcweir sal_Int32 nFailed(0); 2773*cdf0e10cSrcweir for(i = 0; i < nCount; i++) 2774*cdf0e10cSrcweir { 2775*cdf0e10cSrcweir // second loop: handle other properties 2776*cdf0e10cSrcweir 2777*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pMapArray[i]; 2778*cdf0e10cSrcweir if ( pEntry && ((pEntry->nFlags & beans::PropertyAttribute::READONLY) == 0)) 2779*cdf0e10cSrcweir { 2780*cdf0e10cSrcweir if ( IsScItemWid( pEntry->nWID ) ) // can be handled by SfxItemPropertySet 2781*cdf0e10cSrcweir { 2782*cdf0e10cSrcweir if ( !pOldPattern ) 2783*cdf0e10cSrcweir { 2784*cdf0e10cSrcweir pOldPattern = new ScPatternAttr( *GetCurrentAttrsDeep() ); 2785*cdf0e10cSrcweir pOldPattern->GetItemSet().ClearInvalidItems(); 2786*cdf0e10cSrcweir pNewPattern = new ScPatternAttr( pDoc->GetPool() ); 2787*cdf0e10cSrcweir } 2788*cdf0e10cSrcweir 2789*cdf0e10cSrcweir // collect items in pNewPattern, apply with one call after the loop 2790*cdf0e10cSrcweir 2791*cdf0e10cSrcweir sal_uInt16 nFirstItem, nSecondItem; 2792*cdf0e10cSrcweir try 2793*cdf0e10cSrcweir { 2794*cdf0e10cSrcweir lcl_SetCellProperty( *pEntry, pValues[i], *pOldPattern, pDoc, nFirstItem, nSecondItem ); 2795*cdf0e10cSrcweir 2796*cdf0e10cSrcweir // put only affected items into new set 2797*cdf0e10cSrcweir if ( nFirstItem ) 2798*cdf0e10cSrcweir pNewPattern->GetItemSet().Put( pOldPattern->GetItemSet().Get( nFirstItem ) ); 2799*cdf0e10cSrcweir if ( nSecondItem ) 2800*cdf0e10cSrcweir pNewPattern->GetItemSet().Put( pOldPattern->GetItemSet().Get( nSecondItem ) ); 2801*cdf0e10cSrcweir } 2802*cdf0e10cSrcweir catch ( lang::IllegalArgumentException& ) 2803*cdf0e10cSrcweir { 2804*cdf0e10cSrcweir pReturns[nFailed].Name = pNames[i]; 2805*cdf0e10cSrcweir pReturns[nFailed++].Result = beans::TolerantPropertySetResultType::ILLEGAL_ARGUMENT; 2806*cdf0e10cSrcweir } 2807*cdf0e10cSrcweir } 2808*cdf0e10cSrcweir else if ( pEntry->nWID != SC_WID_UNO_CELLSTYL ) // CellStyle is handled above 2809*cdf0e10cSrcweir { 2810*cdf0e10cSrcweir // call virtual method to set a single property 2811*cdf0e10cSrcweir try 2812*cdf0e10cSrcweir { 2813*cdf0e10cSrcweir SetOnePropertyValue( pEntry, pValues[i] ); 2814*cdf0e10cSrcweir } 2815*cdf0e10cSrcweir catch ( lang::IllegalArgumentException& ) 2816*cdf0e10cSrcweir { 2817*cdf0e10cSrcweir pReturns[nFailed].Name = pNames[i]; 2818*cdf0e10cSrcweir pReturns[nFailed++].Result = beans::TolerantPropertySetResultType::ILLEGAL_ARGUMENT; 2819*cdf0e10cSrcweir } 2820*cdf0e10cSrcweir } 2821*cdf0e10cSrcweir } 2822*cdf0e10cSrcweir else 2823*cdf0e10cSrcweir { 2824*cdf0e10cSrcweir pReturns[nFailed].Name = pNames[i]; 2825*cdf0e10cSrcweir if (pEntry) 2826*cdf0e10cSrcweir pReturns[nFailed++].Result = beans::TolerantPropertySetResultType::PROPERTY_VETO; 2827*cdf0e10cSrcweir else 2828*cdf0e10cSrcweir pReturns[nFailed++].Result = beans::TolerantPropertySetResultType::UNKNOWN_PROPERTY; 2829*cdf0e10cSrcweir } 2830*cdf0e10cSrcweir } 2831*cdf0e10cSrcweir 2832*cdf0e10cSrcweir if ( pNewPattern && aRanges.Count() ) 2833*cdf0e10cSrcweir { 2834*cdf0e10cSrcweir ScDocFunc aFunc(*pDocShell); 2835*cdf0e10cSrcweir aFunc.ApplyAttributes( *GetMarkData(), *pNewPattern, sal_True, sal_True ); 2836*cdf0e10cSrcweir } 2837*cdf0e10cSrcweir 2838*cdf0e10cSrcweir delete pNewPattern; 2839*cdf0e10cSrcweir delete pOldPattern; 2840*cdf0e10cSrcweir delete[] pMapArray; 2841*cdf0e10cSrcweir 2842*cdf0e10cSrcweir aReturns.realloc(nFailed); 2843*cdf0e10cSrcweir 2844*cdf0e10cSrcweir return aReturns; 2845*cdf0e10cSrcweir } 2846*cdf0e10cSrcweir return uno::Sequence < beans::SetPropertyTolerantFailed >(); 2847*cdf0e10cSrcweir } 2848*cdf0e10cSrcweir 2849*cdf0e10cSrcweir uno::Sequence< beans::GetPropertyTolerantResult > SAL_CALL ScCellRangesBase::getPropertyValuesTolerant( const uno::Sequence< ::rtl::OUString >& aPropertyNames ) 2850*cdf0e10cSrcweir throw (uno::RuntimeException) 2851*cdf0e10cSrcweir { 2852*cdf0e10cSrcweir ScUnoGuard aGuard; 2853*cdf0e10cSrcweir 2854*cdf0e10cSrcweir sal_Int32 nCount(aPropertyNames.getLength()); 2855*cdf0e10cSrcweir uno::Sequence < beans::GetPropertyTolerantResult > aReturns(nCount); 2856*cdf0e10cSrcweir beans::GetPropertyTolerantResult* pReturns = aReturns.getArray(); 2857*cdf0e10cSrcweir 2858*cdf0e10cSrcweir const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class 2859*cdf0e10cSrcweir 2860*cdf0e10cSrcweir for(sal_Int32 i = 0; i < nCount; i++) 2861*cdf0e10cSrcweir { 2862*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( aPropertyNames[i] ); 2863*cdf0e10cSrcweir if (!pEntry) 2864*cdf0e10cSrcweir { 2865*cdf0e10cSrcweir pReturns[i].Result = beans::TolerantPropertySetResultType::UNKNOWN_PROPERTY; 2866*cdf0e10cSrcweir } 2867*cdf0e10cSrcweir else 2868*cdf0e10cSrcweir { 2869*cdf0e10cSrcweir sal_uInt16 nItemWhich = 0; 2870*cdf0e10cSrcweir lcl_GetPropertyWhich( pEntry, nItemWhich ); 2871*cdf0e10cSrcweir pReturns[i].State = GetOnePropertyState( nItemWhich, pEntry ); 2872*cdf0e10cSrcweir GetOnePropertyValue( pEntry, pReturns[i].Value ); 2873*cdf0e10cSrcweir pReturns[i].Result = beans::TolerantPropertySetResultType::SUCCESS; 2874*cdf0e10cSrcweir } 2875*cdf0e10cSrcweir } 2876*cdf0e10cSrcweir return aReturns; 2877*cdf0e10cSrcweir } 2878*cdf0e10cSrcweir 2879*cdf0e10cSrcweir uno::Sequence< beans::GetDirectPropertyTolerantResult > SAL_CALL ScCellRangesBase::getDirectPropertyValuesTolerant( const uno::Sequence< ::rtl::OUString >& aPropertyNames ) 2880*cdf0e10cSrcweir throw (uno::RuntimeException) 2881*cdf0e10cSrcweir { 2882*cdf0e10cSrcweir ScUnoGuard aGuard; 2883*cdf0e10cSrcweir 2884*cdf0e10cSrcweir sal_Int32 nCount(aPropertyNames.getLength()); 2885*cdf0e10cSrcweir uno::Sequence < beans::GetDirectPropertyTolerantResult > aReturns(nCount); 2886*cdf0e10cSrcweir beans::GetDirectPropertyTolerantResult* pReturns = aReturns.getArray(); 2887*cdf0e10cSrcweir 2888*cdf0e10cSrcweir const SfxItemPropertyMap* pPropertyMap = GetItemPropertyMap(); // from derived class 2889*cdf0e10cSrcweir 2890*cdf0e10cSrcweir sal_Int32 j = 0; 2891*cdf0e10cSrcweir for(sal_Int32 i = 0; i < nCount; i++) 2892*cdf0e10cSrcweir { 2893*cdf0e10cSrcweir const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( aPropertyNames[i] ); 2894*cdf0e10cSrcweir if (!pEntry) 2895*cdf0e10cSrcweir { 2896*cdf0e10cSrcweir pReturns[i].Result = beans::TolerantPropertySetResultType::UNKNOWN_PROPERTY; 2897*cdf0e10cSrcweir } 2898*cdf0e10cSrcweir else 2899*cdf0e10cSrcweir { 2900*cdf0e10cSrcweir sal_uInt16 nItemWhich = 0; 2901*cdf0e10cSrcweir lcl_GetPropertyWhich( pEntry, nItemWhich ); 2902*cdf0e10cSrcweir pReturns[j].State = GetOnePropertyState( nItemWhich, pEntry ); 2903*cdf0e10cSrcweir if (pReturns[j].State == beans::PropertyState_DIRECT_VALUE) 2904*cdf0e10cSrcweir { 2905*cdf0e10cSrcweir GetOnePropertyValue( pEntry, pReturns[j].Value ); 2906*cdf0e10cSrcweir pReturns[j].Result = beans::TolerantPropertySetResultType::SUCCESS; 2907*cdf0e10cSrcweir pReturns[j].Name = aPropertyNames[i]; 2908*cdf0e10cSrcweir ++j; 2909*cdf0e10cSrcweir } 2910*cdf0e10cSrcweir } 2911*cdf0e10cSrcweir } 2912*cdf0e10cSrcweir if (j < nCount) 2913*cdf0e10cSrcweir aReturns.realloc(j); 2914*cdf0e10cSrcweir return aReturns; 2915*cdf0e10cSrcweir } 2916*cdf0e10cSrcweir 2917*cdf0e10cSrcweir // XIndent 2918*cdf0e10cSrcweir 2919*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::decrementIndent() throw(::com::sun::star::uno::RuntimeException) 2920*cdf0e10cSrcweir { 2921*cdf0e10cSrcweir ScUnoGuard aGuard; 2922*cdf0e10cSrcweir if ( pDocShell && aRanges.Count() ) // leer = nichts zu tun 2923*cdf0e10cSrcweir { 2924*cdf0e10cSrcweir ScDocFunc aFunc(*pDocShell); 2925*cdf0e10cSrcweir //#97041#; put only MultiMarked ScMarkData in ChangeIndent 2926*cdf0e10cSrcweir ScMarkData aMarkData(*GetMarkData()); 2927*cdf0e10cSrcweir aMarkData.MarkToMulti(); 2928*cdf0e10cSrcweir aFunc.ChangeIndent( aMarkData, sal_False, sal_True ); 2929*cdf0e10cSrcweir } 2930*cdf0e10cSrcweir } 2931*cdf0e10cSrcweir 2932*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::incrementIndent() throw(::com::sun::star::uno::RuntimeException) 2933*cdf0e10cSrcweir { 2934*cdf0e10cSrcweir ScUnoGuard aGuard; 2935*cdf0e10cSrcweir if ( pDocShell && aRanges.Count() ) // leer = nichts zu tun 2936*cdf0e10cSrcweir { 2937*cdf0e10cSrcweir ScDocFunc aFunc(*pDocShell); 2938*cdf0e10cSrcweir //#97041#; put only MultiMarked ScMarkData in ChangeIndent 2939*cdf0e10cSrcweir ScMarkData aMarkData(*GetMarkData()); 2940*cdf0e10cSrcweir aMarkData.MarkToMulti(); 2941*cdf0e10cSrcweir aFunc.ChangeIndent( aMarkData, sal_True, sal_True ); 2942*cdf0e10cSrcweir } 2943*cdf0e10cSrcweir } 2944*cdf0e10cSrcweir 2945*cdf0e10cSrcweir // XChartData 2946*cdf0e10cSrcweir 2947*cdf0e10cSrcweir ScMemChart* ScCellRangesBase::CreateMemChart_Impl() const 2948*cdf0e10cSrcweir { 2949*cdf0e10cSrcweir if ( pDocShell && aRanges.Count() ) 2950*cdf0e10cSrcweir { 2951*cdf0e10cSrcweir ScRangeListRef xChartRanges; 2952*cdf0e10cSrcweir if ( aRanges.Count() == 1 ) 2953*cdf0e10cSrcweir { 2954*cdf0e10cSrcweir // ganze Tabelle sinnvoll begrenzen (auf belegten Datenbereich) 2955*cdf0e10cSrcweir // (nur hier, Listener werden auf den ganzen Bereich angemeldet) 2956*cdf0e10cSrcweir //! direkt testen, ob es ein ScTableSheetObj ist? 2957*cdf0e10cSrcweir 2958*cdf0e10cSrcweir ScRange* pRange = aRanges.GetObject(0); 2959*cdf0e10cSrcweir if ( pRange->aStart.Col() == 0 && pRange->aEnd.Col() == MAXCOL && 2960*cdf0e10cSrcweir pRange->aStart.Row() == 0 && pRange->aEnd.Row() == MAXROW ) 2961*cdf0e10cSrcweir { 2962*cdf0e10cSrcweir SCTAB nTab = pRange->aStart.Tab(); 2963*cdf0e10cSrcweir 2964*cdf0e10cSrcweir SCCOL nStartX; 2965*cdf0e10cSrcweir SCROW nStartY; // Anfang holen 2966*cdf0e10cSrcweir if (!pDocShell->GetDocument()->GetDataStart( nTab, nStartX, nStartY )) 2967*cdf0e10cSrcweir { 2968*cdf0e10cSrcweir nStartX = 0; 2969*cdf0e10cSrcweir nStartY = 0; 2970*cdf0e10cSrcweir } 2971*cdf0e10cSrcweir 2972*cdf0e10cSrcweir SCCOL nEndX; 2973*cdf0e10cSrcweir SCROW nEndY; // Ende holen 2974*cdf0e10cSrcweir if (!pDocShell->GetDocument()->GetTableArea( nTab, nEndX, nEndY )) 2975*cdf0e10cSrcweir { 2976*cdf0e10cSrcweir nEndX = 0; 2977*cdf0e10cSrcweir nEndY = 0; 2978*cdf0e10cSrcweir } 2979*cdf0e10cSrcweir 2980*cdf0e10cSrcweir xChartRanges = new ScRangeList; 2981*cdf0e10cSrcweir xChartRanges->Append( ScRange( nStartX, nStartY, nTab, nEndX, nEndY, nTab ) ); 2982*cdf0e10cSrcweir } 2983*cdf0e10cSrcweir } 2984*cdf0e10cSrcweir if (!xChartRanges.Is()) // sonst Ranges direkt uebernehmen 2985*cdf0e10cSrcweir xChartRanges = new ScRangeList(aRanges); 2986*cdf0e10cSrcweir ScChartArray aArr( pDocShell->GetDocument(), xChartRanges, String() ); 2987*cdf0e10cSrcweir 2988*cdf0e10cSrcweir // RowAsHdr = ColHeaders und umgekehrt 2989*cdf0e10cSrcweir aArr.SetHeaders( bChartRowAsHdr, bChartColAsHdr ); 2990*cdf0e10cSrcweir 2991*cdf0e10cSrcweir return aArr.CreateMemChart(); 2992*cdf0e10cSrcweir } 2993*cdf0e10cSrcweir return NULL; 2994*cdf0e10cSrcweir } 2995*cdf0e10cSrcweir 2996*cdf0e10cSrcweir uno::Sequence< uno::Sequence<double> > SAL_CALL ScCellRangesBase::getData() 2997*cdf0e10cSrcweir throw(uno::RuntimeException) 2998*cdf0e10cSrcweir { 2999*cdf0e10cSrcweir ScUnoGuard aGuard; 3000*cdf0e10cSrcweir ScMemChart* pMemChart = CreateMemChart_Impl(); 3001*cdf0e10cSrcweir if ( pMemChart ) 3002*cdf0e10cSrcweir { 3003*cdf0e10cSrcweir sal_Int32 nColCount = pMemChart->GetColCount(); 3004*cdf0e10cSrcweir sal_Int32 nRowCount = static_cast<sal_Int32>(pMemChart->GetRowCount()); 3005*cdf0e10cSrcweir 3006*cdf0e10cSrcweir uno::Sequence< uno::Sequence<double> > aRowSeq( nRowCount ); 3007*cdf0e10cSrcweir uno::Sequence<double>* pRowAry = aRowSeq.getArray(); 3008*cdf0e10cSrcweir for (sal_Int32 nRow = 0; nRow < nRowCount; nRow++) 3009*cdf0e10cSrcweir { 3010*cdf0e10cSrcweir uno::Sequence<double> aColSeq( nColCount ); 3011*cdf0e10cSrcweir double* pColAry = aColSeq.getArray(); 3012*cdf0e10cSrcweir for (sal_Int32 nCol = 0; nCol < nColCount; nCol++) 3013*cdf0e10cSrcweir pColAry[nCol] = pMemChart->GetData( static_cast<short>(nCol), static_cast<short>(nRow) ); 3014*cdf0e10cSrcweir 3015*cdf0e10cSrcweir pRowAry[nRow] = aColSeq; 3016*cdf0e10cSrcweir } 3017*cdf0e10cSrcweir 3018*cdf0e10cSrcweir delete pMemChart; 3019*cdf0e10cSrcweir return aRowSeq; 3020*cdf0e10cSrcweir } 3021*cdf0e10cSrcweir 3022*cdf0e10cSrcweir return uno::Sequence< uno::Sequence<double> >(0); 3023*cdf0e10cSrcweir } 3024*cdf0e10cSrcweir 3025*cdf0e10cSrcweir ScRangeListRef ScCellRangesBase::GetLimitedChartRanges_Impl( long nDataColumns, long nDataRows ) const 3026*cdf0e10cSrcweir { 3027*cdf0e10cSrcweir if ( aRanges.Count() == 1 ) 3028*cdf0e10cSrcweir { 3029*cdf0e10cSrcweir ScRange* pRange = aRanges.GetObject(0); 3030*cdf0e10cSrcweir if ( pRange->aStart.Col() == 0 && pRange->aEnd.Col() == MAXCOL && 3031*cdf0e10cSrcweir pRange->aStart.Row() == 0 && pRange->aEnd.Row() == MAXROW ) 3032*cdf0e10cSrcweir { 3033*cdf0e10cSrcweir // if aRanges is a complete sheet, limit to given size 3034*cdf0e10cSrcweir 3035*cdf0e10cSrcweir SCTAB nTab = pRange->aStart.Tab(); 3036*cdf0e10cSrcweir 3037*cdf0e10cSrcweir long nEndColumn = nDataColumns - 1 + ( bChartColAsHdr ? 1 : 0 ); 3038*cdf0e10cSrcweir if ( nEndColumn < 0 ) 3039*cdf0e10cSrcweir nEndColumn = 0; 3040*cdf0e10cSrcweir if ( nEndColumn > MAXCOL ) 3041*cdf0e10cSrcweir nEndColumn = MAXCOL; 3042*cdf0e10cSrcweir 3043*cdf0e10cSrcweir long nEndRow = nDataRows - 1 + ( bChartRowAsHdr ? 1 : 0 ); 3044*cdf0e10cSrcweir if ( nEndRow < 0 ) 3045*cdf0e10cSrcweir nEndRow = 0; 3046*cdf0e10cSrcweir if ( nEndRow > MAXROW ) 3047*cdf0e10cSrcweir nEndRow = MAXROW; 3048*cdf0e10cSrcweir 3049*cdf0e10cSrcweir ScRangeListRef xChartRanges = new ScRangeList; 3050*cdf0e10cSrcweir xChartRanges->Append( ScRange( 0, 0, nTab, (SCCOL)nEndColumn, (SCROW)nEndRow, nTab ) ); 3051*cdf0e10cSrcweir return xChartRanges; 3052*cdf0e10cSrcweir } 3053*cdf0e10cSrcweir } 3054*cdf0e10cSrcweir 3055*cdf0e10cSrcweir return new ScRangeList(aRanges); // as-is 3056*cdf0e10cSrcweir } 3057*cdf0e10cSrcweir 3058*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::setData( const uno::Sequence< uno::Sequence<double> >& aData ) 3059*cdf0e10cSrcweir throw(uno::RuntimeException) 3060*cdf0e10cSrcweir { 3061*cdf0e10cSrcweir ScUnoGuard aGuard; 3062*cdf0e10cSrcweir sal_Bool bDone = sal_False; 3063*cdf0e10cSrcweir long nRowCount = aData.getLength(); 3064*cdf0e10cSrcweir long nColCount = nRowCount ? aData[0].getLength() : 0; 3065*cdf0e10cSrcweir ScRangeListRef xChartRanges = GetLimitedChartRanges_Impl( nColCount, nRowCount ); 3066*cdf0e10cSrcweir if ( pDocShell && xChartRanges.Is() ) 3067*cdf0e10cSrcweir { 3068*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3069*cdf0e10cSrcweir ScChartArray aArr( pDoc, xChartRanges, String() ); 3070*cdf0e10cSrcweir aArr.SetHeaders( bChartRowAsHdr, bChartColAsHdr ); // RowAsHdr = ColHeaders 3071*cdf0e10cSrcweir const ScChartPositionMap* pPosMap = aArr.GetPositionMap(); 3072*cdf0e10cSrcweir if (pPosMap) 3073*cdf0e10cSrcweir { 3074*cdf0e10cSrcweir if ( pPosMap->GetColCount() == static_cast<SCCOL>(nColCount) && 3075*cdf0e10cSrcweir pPosMap->GetRowCount() == static_cast<SCROW>(nRowCount) ) 3076*cdf0e10cSrcweir { 3077*cdf0e10cSrcweir for (long nRow=0; nRow<nRowCount; nRow++) 3078*cdf0e10cSrcweir { 3079*cdf0e10cSrcweir const uno::Sequence<double>& rRowSeq = aData[nRow]; 3080*cdf0e10cSrcweir const double* pArray = rRowSeq.getConstArray(); 3081*cdf0e10cSrcweir nColCount = rRowSeq.getLength(); 3082*cdf0e10cSrcweir for (long nCol=0; nCol<nColCount; nCol++) 3083*cdf0e10cSrcweir { 3084*cdf0e10cSrcweir const ScAddress* pPos = pPosMap->GetPosition( 3085*cdf0e10cSrcweir sal::static_int_cast<SCCOL>(nCol), 3086*cdf0e10cSrcweir sal::static_int_cast<SCROW>(nRow) ); 3087*cdf0e10cSrcweir if (pPos) 3088*cdf0e10cSrcweir { 3089*cdf0e10cSrcweir double fVal = pArray[nCol]; 3090*cdf0e10cSrcweir if ( fVal == DBL_MIN ) 3091*cdf0e10cSrcweir pDoc->PutCell( *pPos, NULL ); // empty cell 3092*cdf0e10cSrcweir else 3093*cdf0e10cSrcweir pDoc->SetValue( pPos->Col(), pPos->Row(), pPos->Tab(), pArray[nCol] ); 3094*cdf0e10cSrcweir } 3095*cdf0e10cSrcweir } 3096*cdf0e10cSrcweir } 3097*cdf0e10cSrcweir 3098*cdf0e10cSrcweir //! undo 3099*cdf0e10cSrcweir PaintRanges_Impl( PAINT_GRID ); 3100*cdf0e10cSrcweir pDocShell->SetDocumentModified(); 3101*cdf0e10cSrcweir ForceChartListener_Impl(); // call listeners for this object synchronously 3102*cdf0e10cSrcweir bDone = sal_True; 3103*cdf0e10cSrcweir } 3104*cdf0e10cSrcweir } 3105*cdf0e10cSrcweir } 3106*cdf0e10cSrcweir 3107*cdf0e10cSrcweir if (!bDone) 3108*cdf0e10cSrcweir throw uno::RuntimeException(); 3109*cdf0e10cSrcweir } 3110*cdf0e10cSrcweir 3111*cdf0e10cSrcweir uno::Sequence<rtl::OUString> SAL_CALL ScCellRangesBase::getRowDescriptions() 3112*cdf0e10cSrcweir throw(uno::RuntimeException) 3113*cdf0e10cSrcweir { 3114*cdf0e10cSrcweir ScUnoGuard aGuard; 3115*cdf0e10cSrcweir ScMemChart* pMemChart = CreateMemChart_Impl(); 3116*cdf0e10cSrcweir if ( pMemChart ) 3117*cdf0e10cSrcweir { 3118*cdf0e10cSrcweir sal_Int32 nRowCount = static_cast<sal_Int32>(pMemChart->GetRowCount()); 3119*cdf0e10cSrcweir uno::Sequence<rtl::OUString> aSeq( nRowCount ); 3120*cdf0e10cSrcweir rtl::OUString* pAry = aSeq.getArray(); 3121*cdf0e10cSrcweir for (sal_Int32 nRow = 0; nRow < nRowCount; nRow++) 3122*cdf0e10cSrcweir pAry[nRow] = pMemChart->GetRowText(static_cast<short>(nRow)); 3123*cdf0e10cSrcweir 3124*cdf0e10cSrcweir delete pMemChart; 3125*cdf0e10cSrcweir return aSeq; 3126*cdf0e10cSrcweir } 3127*cdf0e10cSrcweir return uno::Sequence<rtl::OUString>(0); 3128*cdf0e10cSrcweir } 3129*cdf0e10cSrcweir 3130*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::setRowDescriptions( 3131*cdf0e10cSrcweir const uno::Sequence<rtl::OUString>& aRowDescriptions ) 3132*cdf0e10cSrcweir throw(uno::RuntimeException) 3133*cdf0e10cSrcweir { 3134*cdf0e10cSrcweir ScUnoGuard aGuard; 3135*cdf0e10cSrcweir sal_Bool bDone = sal_False; 3136*cdf0e10cSrcweir if ( bChartColAsHdr ) 3137*cdf0e10cSrcweir { 3138*cdf0e10cSrcweir long nRowCount = aRowDescriptions.getLength(); 3139*cdf0e10cSrcweir ScRangeListRef xChartRanges = GetLimitedChartRanges_Impl( 1, nRowCount ); 3140*cdf0e10cSrcweir if ( pDocShell && xChartRanges.Is() ) 3141*cdf0e10cSrcweir { 3142*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3143*cdf0e10cSrcweir ScChartArray aArr( pDoc, xChartRanges, String() ); 3144*cdf0e10cSrcweir aArr.SetHeaders( bChartRowAsHdr, bChartColAsHdr ); // RowAsHdr = ColHeaders 3145*cdf0e10cSrcweir const ScChartPositionMap* pPosMap = aArr.GetPositionMap(); 3146*cdf0e10cSrcweir if (pPosMap) 3147*cdf0e10cSrcweir { 3148*cdf0e10cSrcweir if ( pPosMap->GetRowCount() == static_cast<SCROW>(nRowCount) ) 3149*cdf0e10cSrcweir { 3150*cdf0e10cSrcweir const rtl::OUString* pArray = aRowDescriptions.getConstArray(); 3151*cdf0e10cSrcweir for (long nRow=0; nRow<nRowCount; nRow++) 3152*cdf0e10cSrcweir { 3153*cdf0e10cSrcweir const ScAddress* pPos = pPosMap->GetRowHeaderPosition( 3154*cdf0e10cSrcweir static_cast<SCSIZE>(nRow) ); 3155*cdf0e10cSrcweir if (pPos) 3156*cdf0e10cSrcweir { 3157*cdf0e10cSrcweir String aStr = pArray[nRow]; 3158*cdf0e10cSrcweir if ( aStr.Len() ) 3159*cdf0e10cSrcweir pDoc->PutCell( *pPos, new ScStringCell( aStr ) ); 3160*cdf0e10cSrcweir else 3161*cdf0e10cSrcweir pDoc->PutCell( *pPos, NULL ); // empty cell 3162*cdf0e10cSrcweir } 3163*cdf0e10cSrcweir } 3164*cdf0e10cSrcweir 3165*cdf0e10cSrcweir //! undo 3166*cdf0e10cSrcweir PaintRanges_Impl( PAINT_GRID ); 3167*cdf0e10cSrcweir pDocShell->SetDocumentModified(); 3168*cdf0e10cSrcweir ForceChartListener_Impl(); // call listeners for this object synchronously 3169*cdf0e10cSrcweir bDone = sal_True; 3170*cdf0e10cSrcweir } 3171*cdf0e10cSrcweir } 3172*cdf0e10cSrcweir } 3173*cdf0e10cSrcweir } 3174*cdf0e10cSrcweir 3175*cdf0e10cSrcweir if (!bDone) 3176*cdf0e10cSrcweir throw uno::RuntimeException(); 3177*cdf0e10cSrcweir } 3178*cdf0e10cSrcweir 3179*cdf0e10cSrcweir uno::Sequence<rtl::OUString> SAL_CALL ScCellRangesBase::getColumnDescriptions() 3180*cdf0e10cSrcweir throw(uno::RuntimeException) 3181*cdf0e10cSrcweir { 3182*cdf0e10cSrcweir ScUnoGuard aGuard; 3183*cdf0e10cSrcweir ScMemChart* pMemChart = CreateMemChart_Impl(); 3184*cdf0e10cSrcweir if ( pMemChart ) 3185*cdf0e10cSrcweir { 3186*cdf0e10cSrcweir sal_Int32 nColCount = pMemChart->GetColCount(); 3187*cdf0e10cSrcweir uno::Sequence<rtl::OUString> aSeq( nColCount ); 3188*cdf0e10cSrcweir rtl::OUString* pAry = aSeq.getArray(); 3189*cdf0e10cSrcweir for (sal_Int32 nCol = 0; nCol < nColCount; nCol++) 3190*cdf0e10cSrcweir pAry[nCol] = pMemChart->GetColText(static_cast<short>(nCol)); 3191*cdf0e10cSrcweir 3192*cdf0e10cSrcweir delete pMemChart; 3193*cdf0e10cSrcweir return aSeq; 3194*cdf0e10cSrcweir } 3195*cdf0e10cSrcweir return uno::Sequence<rtl::OUString>(0); 3196*cdf0e10cSrcweir } 3197*cdf0e10cSrcweir 3198*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::setColumnDescriptions( 3199*cdf0e10cSrcweir const uno::Sequence<rtl::OUString>& aColumnDescriptions ) 3200*cdf0e10cSrcweir throw(uno::RuntimeException) 3201*cdf0e10cSrcweir { 3202*cdf0e10cSrcweir ScUnoGuard aGuard; 3203*cdf0e10cSrcweir sal_Bool bDone = sal_False; 3204*cdf0e10cSrcweir if ( bChartRowAsHdr ) 3205*cdf0e10cSrcweir { 3206*cdf0e10cSrcweir long nColCount = aColumnDescriptions.getLength(); 3207*cdf0e10cSrcweir ScRangeListRef xChartRanges = GetLimitedChartRanges_Impl( nColCount, 1 ); 3208*cdf0e10cSrcweir if ( pDocShell && xChartRanges.Is() ) 3209*cdf0e10cSrcweir { 3210*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3211*cdf0e10cSrcweir ScChartArray aArr( pDoc, xChartRanges, String() ); 3212*cdf0e10cSrcweir aArr.SetHeaders( bChartRowAsHdr, bChartColAsHdr ); // RowAsHdr = ColHeaders 3213*cdf0e10cSrcweir const ScChartPositionMap* pPosMap = aArr.GetPositionMap(); 3214*cdf0e10cSrcweir if (pPosMap) 3215*cdf0e10cSrcweir { 3216*cdf0e10cSrcweir if ( pPosMap->GetColCount() == static_cast<SCCOL>(nColCount) ) 3217*cdf0e10cSrcweir { 3218*cdf0e10cSrcweir const rtl::OUString* pArray = aColumnDescriptions.getConstArray(); 3219*cdf0e10cSrcweir for (long nCol=0; nCol<nColCount; nCol++) 3220*cdf0e10cSrcweir { 3221*cdf0e10cSrcweir const ScAddress* pPos = pPosMap->GetColHeaderPosition( 3222*cdf0e10cSrcweir sal::static_int_cast<SCCOL>(nCol) ); 3223*cdf0e10cSrcweir if (pPos) 3224*cdf0e10cSrcweir { 3225*cdf0e10cSrcweir String aStr(pArray[nCol]); 3226*cdf0e10cSrcweir if ( aStr.Len() ) 3227*cdf0e10cSrcweir pDoc->PutCell( *pPos, new ScStringCell( aStr ) ); 3228*cdf0e10cSrcweir else 3229*cdf0e10cSrcweir pDoc->PutCell( *pPos, NULL ); // empty cell 3230*cdf0e10cSrcweir } 3231*cdf0e10cSrcweir } 3232*cdf0e10cSrcweir 3233*cdf0e10cSrcweir //! undo 3234*cdf0e10cSrcweir PaintRanges_Impl( PAINT_GRID ); 3235*cdf0e10cSrcweir pDocShell->SetDocumentModified(); 3236*cdf0e10cSrcweir ForceChartListener_Impl(); // call listeners for this object synchronously 3237*cdf0e10cSrcweir bDone = sal_True; 3238*cdf0e10cSrcweir } 3239*cdf0e10cSrcweir } 3240*cdf0e10cSrcweir } 3241*cdf0e10cSrcweir } 3242*cdf0e10cSrcweir 3243*cdf0e10cSrcweir if (!bDone) 3244*cdf0e10cSrcweir throw uno::RuntimeException(); 3245*cdf0e10cSrcweir } 3246*cdf0e10cSrcweir 3247*cdf0e10cSrcweir void ScCellRangesBase::ForceChartListener_Impl() 3248*cdf0e10cSrcweir { 3249*cdf0e10cSrcweir // call Update immediately so the caller to setData etc. can 3250*cdf0e10cSrcweir // regognize the listener call 3251*cdf0e10cSrcweir 3252*cdf0e10cSrcweir if ( pDocShell ) 3253*cdf0e10cSrcweir { 3254*cdf0e10cSrcweir ScChartListenerCollection* pColl = pDocShell->GetDocument()->GetChartListenerCollection(); 3255*cdf0e10cSrcweir if ( pColl ) 3256*cdf0e10cSrcweir { 3257*cdf0e10cSrcweir sal_uInt16 nCollCount = pColl->GetCount(); 3258*cdf0e10cSrcweir for ( sal_uInt16 nIndex = 0; nIndex < nCollCount; nIndex++ ) 3259*cdf0e10cSrcweir { 3260*cdf0e10cSrcweir ScChartListener* pChartListener = (ScChartListener*)pColl->At(nIndex); 3261*cdf0e10cSrcweir if ( pChartListener && 3262*cdf0e10cSrcweir pChartListener->GetUnoSource() == static_cast<chart::XChartData*>(this) && 3263*cdf0e10cSrcweir pChartListener->IsDirty() ) 3264*cdf0e10cSrcweir pChartListener->Update(); 3265*cdf0e10cSrcweir } 3266*cdf0e10cSrcweir } 3267*cdf0e10cSrcweir } 3268*cdf0e10cSrcweir } 3269*cdf0e10cSrcweir 3270*cdf0e10cSrcweir String lcl_UniqueName( ScStrCollection& rColl, const String& rPrefix ) 3271*cdf0e10cSrcweir { 3272*cdf0e10cSrcweir long nNumber = 1; 3273*cdf0e10cSrcweir sal_uInt16 nCollCount = rColl.GetCount(); 3274*cdf0e10cSrcweir while (sal_True) 3275*cdf0e10cSrcweir { 3276*cdf0e10cSrcweir String aName(rPrefix); 3277*cdf0e10cSrcweir aName += String::CreateFromInt32( nNumber ); 3278*cdf0e10cSrcweir sal_Bool bFound = sal_False; 3279*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCollCount; i++) 3280*cdf0e10cSrcweir if ( rColl[i]->GetString() == aName ) 3281*cdf0e10cSrcweir { 3282*cdf0e10cSrcweir bFound = sal_True; 3283*cdf0e10cSrcweir break; 3284*cdf0e10cSrcweir } 3285*cdf0e10cSrcweir if (!bFound) 3286*cdf0e10cSrcweir return aName; 3287*cdf0e10cSrcweir ++nNumber; 3288*cdf0e10cSrcweir } 3289*cdf0e10cSrcweir } 3290*cdf0e10cSrcweir 3291*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::addChartDataChangeEventListener( const uno::Reference< 3292*cdf0e10cSrcweir chart::XChartDataChangeEventListener >& aListener ) 3293*cdf0e10cSrcweir throw(uno::RuntimeException) 3294*cdf0e10cSrcweir { 3295*cdf0e10cSrcweir ScUnoGuard aGuard; 3296*cdf0e10cSrcweir if ( pDocShell && aRanges.Count() ) 3297*cdf0e10cSrcweir { 3298*cdf0e10cSrcweir //! auf doppelte testen? 3299*cdf0e10cSrcweir 3300*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3301*cdf0e10cSrcweir ScRangeListRef aRangesRef( new ScRangeList(aRanges) ); 3302*cdf0e10cSrcweir ScChartListenerCollection* pColl = pDoc->GetChartListenerCollection(); 3303*cdf0e10cSrcweir String aName(lcl_UniqueName( *pColl, 3304*cdf0e10cSrcweir String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("__Uno")) )); 3305*cdf0e10cSrcweir ScChartListener* pListener = new ScChartListener( aName, pDoc, aRangesRef ); 3306*cdf0e10cSrcweir pListener->SetUno( aListener, this ); 3307*cdf0e10cSrcweir pColl->Insert( pListener ); 3308*cdf0e10cSrcweir pListener->StartListeningTo(); 3309*cdf0e10cSrcweir } 3310*cdf0e10cSrcweir } 3311*cdf0e10cSrcweir 3312*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::removeChartDataChangeEventListener( const uno::Reference< 3313*cdf0e10cSrcweir chart::XChartDataChangeEventListener >& aListener ) 3314*cdf0e10cSrcweir throw(uno::RuntimeException) 3315*cdf0e10cSrcweir { 3316*cdf0e10cSrcweir ScUnoGuard aGuard; 3317*cdf0e10cSrcweir if ( pDocShell && aRanges.Count() ) 3318*cdf0e10cSrcweir { 3319*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3320*cdf0e10cSrcweir ScChartListenerCollection* pColl = pDoc->GetChartListenerCollection(); 3321*cdf0e10cSrcweir pColl->FreeUno( aListener, this ); 3322*cdf0e10cSrcweir } 3323*cdf0e10cSrcweir } 3324*cdf0e10cSrcweir 3325*cdf0e10cSrcweir double SAL_CALL ScCellRangesBase::getNotANumber() throw(::com::sun::star::uno::RuntimeException) 3326*cdf0e10cSrcweir { 3327*cdf0e10cSrcweir // im ScChartArray wird DBL_MIN verwendet, weil das Chart es so will 3328*cdf0e10cSrcweir return DBL_MIN; 3329*cdf0e10cSrcweir } 3330*cdf0e10cSrcweir 3331*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellRangesBase::isNotANumber( double nNumber ) throw(uno::RuntimeException) 3332*cdf0e10cSrcweir { 3333*cdf0e10cSrcweir // im ScChartArray wird DBL_MIN verwendet, weil das Chart es so will 3334*cdf0e10cSrcweir return (nNumber == DBL_MIN); 3335*cdf0e10cSrcweir } 3336*cdf0e10cSrcweir 3337*cdf0e10cSrcweir // XModifyBroadcaster 3338*cdf0e10cSrcweir 3339*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::addModifyListener( const uno::Reference<util::XModifyListener>& aListener ) 3340*cdf0e10cSrcweir throw(uno::RuntimeException) 3341*cdf0e10cSrcweir { 3342*cdf0e10cSrcweir ScUnoGuard aGuard; 3343*cdf0e10cSrcweir if ( aRanges.Count() == 0 ) 3344*cdf0e10cSrcweir throw uno::RuntimeException(); 3345*cdf0e10cSrcweir 3346*cdf0e10cSrcweir uno::Reference<util::XModifyListener> *pObj = 3347*cdf0e10cSrcweir new uno::Reference<util::XModifyListener>( aListener ); 3348*cdf0e10cSrcweir aValueListeners.Insert( pObj, aValueListeners.Count() ); 3349*cdf0e10cSrcweir 3350*cdf0e10cSrcweir if ( aValueListeners.Count() == 1 ) 3351*cdf0e10cSrcweir { 3352*cdf0e10cSrcweir if (!pValueListener) 3353*cdf0e10cSrcweir pValueListener = new ScLinkListener( LINK( this, ScCellRangesBase, ValueListenerHdl ) ); 3354*cdf0e10cSrcweir 3355*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3356*cdf0e10cSrcweir sal_uLong nCount = aRanges.Count(); 3357*cdf0e10cSrcweir for (sal_uLong i=0; i<nCount; i++) 3358*cdf0e10cSrcweir pDoc->StartListeningArea( *aRanges.GetObject(i), pValueListener ); 3359*cdf0e10cSrcweir 3360*cdf0e10cSrcweir acquire(); // don't lose this object (one ref for all listeners) 3361*cdf0e10cSrcweir } 3362*cdf0e10cSrcweir } 3363*cdf0e10cSrcweir 3364*cdf0e10cSrcweir void SAL_CALL ScCellRangesBase::removeModifyListener( const uno::Reference<util::XModifyListener>& aListener ) 3365*cdf0e10cSrcweir throw(uno::RuntimeException) 3366*cdf0e10cSrcweir { 3367*cdf0e10cSrcweir 3368*cdf0e10cSrcweir ScUnoGuard aGuard; 3369*cdf0e10cSrcweir if ( aRanges.Count() == 0 ) 3370*cdf0e10cSrcweir throw uno::RuntimeException(); 3371*cdf0e10cSrcweir 3372*cdf0e10cSrcweir acquire(); // in case the listeners have the last ref - released below 3373*cdf0e10cSrcweir 3374*cdf0e10cSrcweir sal_uInt16 nCount = aValueListeners.Count(); 3375*cdf0e10cSrcweir for ( sal_uInt16 n=nCount; n--; ) 3376*cdf0e10cSrcweir { 3377*cdf0e10cSrcweir uno::Reference<util::XModifyListener> *pObj = aValueListeners[n]; 3378*cdf0e10cSrcweir if ( *pObj == aListener ) 3379*cdf0e10cSrcweir { 3380*cdf0e10cSrcweir aValueListeners.DeleteAndDestroy( n ); 3381*cdf0e10cSrcweir 3382*cdf0e10cSrcweir if ( aValueListeners.Count() == 0 ) 3383*cdf0e10cSrcweir { 3384*cdf0e10cSrcweir if (pValueListener) 3385*cdf0e10cSrcweir pValueListener->EndListeningAll(); 3386*cdf0e10cSrcweir 3387*cdf0e10cSrcweir release(); // release the ref for the listeners 3388*cdf0e10cSrcweir } 3389*cdf0e10cSrcweir 3390*cdf0e10cSrcweir break; 3391*cdf0e10cSrcweir } 3392*cdf0e10cSrcweir } 3393*cdf0e10cSrcweir 3394*cdf0e10cSrcweir release(); // might delete this object 3395*cdf0e10cSrcweir } 3396*cdf0e10cSrcweir 3397*cdf0e10cSrcweir // XCellRangesQuery 3398*cdf0e10cSrcweir 3399*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryVisibleCells() 3400*cdf0e10cSrcweir throw(uno::RuntimeException) 3401*cdf0e10cSrcweir { 3402*cdf0e10cSrcweir ScUnoGuard aGuard; 3403*cdf0e10cSrcweir if (pDocShell) 3404*cdf0e10cSrcweir { 3405*cdf0e10cSrcweir //! fuer alle Tabellen getrennt, wenn Markierungen pro Tabelle getrennt sind! 3406*cdf0e10cSrcweir SCTAB nTab = lcl_FirstTab(aRanges); 3407*cdf0e10cSrcweir 3408*cdf0e10cSrcweir ScMarkData aMarkData(*GetMarkData()); 3409*cdf0e10cSrcweir 3410*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3411*cdf0e10cSrcweir SCCOL nCol = 0, nLastCol; 3412*cdf0e10cSrcweir while (nCol <= MAXCOL) 3413*cdf0e10cSrcweir { 3414*cdf0e10cSrcweir if (pDoc->ColHidden(nCol, nTab, nLastCol)) 3415*cdf0e10cSrcweir // hidden columns. Unselect them. 3416*cdf0e10cSrcweir aMarkData.SetMultiMarkArea(ScRange(nCol, 0, nTab, nLastCol, MAXROW, nTab), false); 3417*cdf0e10cSrcweir 3418*cdf0e10cSrcweir nCol = nLastCol + 1; 3419*cdf0e10cSrcweir } 3420*cdf0e10cSrcweir 3421*cdf0e10cSrcweir SCROW nRow = 0, nLastRow; 3422*cdf0e10cSrcweir while (nRow <= MAXROW) 3423*cdf0e10cSrcweir { 3424*cdf0e10cSrcweir if (pDoc->RowHidden(nRow, nTab, nLastRow)) 3425*cdf0e10cSrcweir // These rows are hidden. Unselect them. 3426*cdf0e10cSrcweir aMarkData.SetMultiMarkArea(ScRange(0, nRow, nTab, MAXCOL, nLastRow, nTab), false); 3427*cdf0e10cSrcweir 3428*cdf0e10cSrcweir nRow = nLastRow + 1; 3429*cdf0e10cSrcweir } 3430*cdf0e10cSrcweir 3431*cdf0e10cSrcweir ScRangeList aNewRanges; 3432*cdf0e10cSrcweir aMarkData.FillRangeListWithMarks( &aNewRanges, sal_False ); 3433*cdf0e10cSrcweir return new ScCellRangesObj( pDocShell, aNewRanges ); 3434*cdf0e10cSrcweir } 3435*cdf0e10cSrcweir 3436*cdf0e10cSrcweir return NULL; 3437*cdf0e10cSrcweir } 3438*cdf0e10cSrcweir 3439*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryEmptyCells() 3440*cdf0e10cSrcweir throw(uno::RuntimeException) 3441*cdf0e10cSrcweir { 3442*cdf0e10cSrcweir ScUnoGuard aGuard; 3443*cdf0e10cSrcweir if (pDocShell) 3444*cdf0e10cSrcweir { 3445*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3446*cdf0e10cSrcweir 3447*cdf0e10cSrcweir ScMarkData aMarkData(*GetMarkData()); 3448*cdf0e10cSrcweir 3449*cdf0e10cSrcweir // belegte Zellen wegmarkieren 3450*cdf0e10cSrcweir sal_uLong nCount = aRanges.Count(); 3451*cdf0e10cSrcweir for (sal_uLong i=0; i<nCount; i++) 3452*cdf0e10cSrcweir { 3453*cdf0e10cSrcweir ScRange aRange = *aRanges.GetObject(i); 3454*cdf0e10cSrcweir 3455*cdf0e10cSrcweir ScCellIterator aIter( pDoc, aRange ); 3456*cdf0e10cSrcweir ScBaseCell* pCell = aIter.GetFirst(); 3457*cdf0e10cSrcweir while (pCell) 3458*cdf0e10cSrcweir { 3459*cdf0e10cSrcweir // Notizen zaehlen als nicht-leer 3460*cdf0e10cSrcweir if ( !pCell->IsBlank() ) 3461*cdf0e10cSrcweir aMarkData.SetMultiMarkArea( 3462*cdf0e10cSrcweir ScRange( aIter.GetCol(), aIter.GetRow(), aIter.GetTab() ), 3463*cdf0e10cSrcweir sal_False ); 3464*cdf0e10cSrcweir 3465*cdf0e10cSrcweir pCell = aIter.GetNext(); 3466*cdf0e10cSrcweir } 3467*cdf0e10cSrcweir } 3468*cdf0e10cSrcweir 3469*cdf0e10cSrcweir ScRangeList aNewRanges; 3470*cdf0e10cSrcweir // IsMultiMarked reicht hier nicht (wird beim deselektieren nicht zurueckgesetzt) 3471*cdf0e10cSrcweir if (aMarkData.HasAnyMultiMarks()) 3472*cdf0e10cSrcweir aMarkData.FillRangeListWithMarks( &aNewRanges, sal_False ); 3473*cdf0e10cSrcweir 3474*cdf0e10cSrcweir return new ScCellRangesObj( pDocShell, aNewRanges ); // aNewRanges kann leer sein 3475*cdf0e10cSrcweir } 3476*cdf0e10cSrcweir 3477*cdf0e10cSrcweir return NULL; 3478*cdf0e10cSrcweir } 3479*cdf0e10cSrcweir 3480*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryContentCells( 3481*cdf0e10cSrcweir sal_Int16 nContentFlags ) 3482*cdf0e10cSrcweir throw(uno::RuntimeException) 3483*cdf0e10cSrcweir { 3484*cdf0e10cSrcweir ScUnoGuard aGuard; 3485*cdf0e10cSrcweir if (pDocShell) 3486*cdf0e10cSrcweir { 3487*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3488*cdf0e10cSrcweir 3489*cdf0e10cSrcweir ScMarkData aMarkData; 3490*cdf0e10cSrcweir 3491*cdf0e10cSrcweir // passende Zellen selektieren 3492*cdf0e10cSrcweir sal_uLong nCount = aRanges.Count(); 3493*cdf0e10cSrcweir for (sal_uLong i=0; i<nCount; i++) 3494*cdf0e10cSrcweir { 3495*cdf0e10cSrcweir ScRange aRange = *aRanges.GetObject(i); 3496*cdf0e10cSrcweir 3497*cdf0e10cSrcweir ScCellIterator aIter( pDoc, aRange ); 3498*cdf0e10cSrcweir ScBaseCell* pCell = aIter.GetFirst(); 3499*cdf0e10cSrcweir while (pCell) 3500*cdf0e10cSrcweir { 3501*cdf0e10cSrcweir sal_Bool bAdd = sal_False; 3502*cdf0e10cSrcweir if ( pCell->HasNote() && ( nContentFlags & sheet::CellFlags::ANNOTATION ) ) 3503*cdf0e10cSrcweir bAdd = sal_True; 3504*cdf0e10cSrcweir else 3505*cdf0e10cSrcweir switch ( pCell->GetCellType() ) 3506*cdf0e10cSrcweir { 3507*cdf0e10cSrcweir case CELLTYPE_STRING: 3508*cdf0e10cSrcweir if ( nContentFlags & sheet::CellFlags::STRING ) 3509*cdf0e10cSrcweir bAdd = sal_True; 3510*cdf0e10cSrcweir break; 3511*cdf0e10cSrcweir case CELLTYPE_EDIT: 3512*cdf0e10cSrcweir if ( (nContentFlags & sheet::CellFlags::STRING) || (nContentFlags & sheet::CellFlags::FORMATTED) ) 3513*cdf0e10cSrcweir bAdd = sal_True; 3514*cdf0e10cSrcweir break; 3515*cdf0e10cSrcweir case CELLTYPE_FORMULA: 3516*cdf0e10cSrcweir if ( nContentFlags & sheet::CellFlags::FORMULA ) 3517*cdf0e10cSrcweir bAdd = sal_True; 3518*cdf0e10cSrcweir break; 3519*cdf0e10cSrcweir case CELLTYPE_VALUE: 3520*cdf0e10cSrcweir if ( (nContentFlags & (sheet::CellFlags::VALUE|sheet::CellFlags::DATETIME)) 3521*cdf0e10cSrcweir == (sheet::CellFlags::VALUE|sheet::CellFlags::DATETIME) ) 3522*cdf0e10cSrcweir bAdd = sal_True; 3523*cdf0e10cSrcweir else 3524*cdf0e10cSrcweir { 3525*cdf0e10cSrcweir // Date/Time Erkennung 3526*cdf0e10cSrcweir 3527*cdf0e10cSrcweir sal_uLong nIndex = (sal_uLong)((SfxUInt32Item*)pDoc->GetAttr( 3528*cdf0e10cSrcweir aIter.GetCol(), aIter.GetRow(), aIter.GetTab(), 3529*cdf0e10cSrcweir ATTR_VALUE_FORMAT ))->GetValue(); 3530*cdf0e10cSrcweir short nTyp = pDoc->GetFormatTable()->GetType(nIndex); 3531*cdf0e10cSrcweir if ((nTyp == NUMBERFORMAT_DATE) || (nTyp == NUMBERFORMAT_TIME) || 3532*cdf0e10cSrcweir (nTyp == NUMBERFORMAT_DATETIME)) 3533*cdf0e10cSrcweir { 3534*cdf0e10cSrcweir if ( nContentFlags & sheet::CellFlags::DATETIME ) 3535*cdf0e10cSrcweir bAdd = sal_True; 3536*cdf0e10cSrcweir } 3537*cdf0e10cSrcweir else 3538*cdf0e10cSrcweir { 3539*cdf0e10cSrcweir if ( nContentFlags & sheet::CellFlags::VALUE ) 3540*cdf0e10cSrcweir bAdd = sal_True; 3541*cdf0e10cSrcweir } 3542*cdf0e10cSrcweir } 3543*cdf0e10cSrcweir break; 3544*cdf0e10cSrcweir default: 3545*cdf0e10cSrcweir { 3546*cdf0e10cSrcweir // added to avoid warnings 3547*cdf0e10cSrcweir } 3548*cdf0e10cSrcweir } 3549*cdf0e10cSrcweir 3550*cdf0e10cSrcweir if (bAdd) 3551*cdf0e10cSrcweir aMarkData.SetMultiMarkArea( 3552*cdf0e10cSrcweir ScRange( aIter.GetCol(), aIter.GetRow(), aIter.GetTab() ), 3553*cdf0e10cSrcweir sal_True ); 3554*cdf0e10cSrcweir 3555*cdf0e10cSrcweir pCell = aIter.GetNext(); 3556*cdf0e10cSrcweir } 3557*cdf0e10cSrcweir } 3558*cdf0e10cSrcweir 3559*cdf0e10cSrcweir ScRangeList aNewRanges; 3560*cdf0e10cSrcweir if (aMarkData.IsMultiMarked()) 3561*cdf0e10cSrcweir aMarkData.FillRangeListWithMarks( &aNewRanges, sal_False ); 3562*cdf0e10cSrcweir 3563*cdf0e10cSrcweir return new ScCellRangesObj( pDocShell, aNewRanges ); // aNewRanges kann leer sein 3564*cdf0e10cSrcweir } 3565*cdf0e10cSrcweir 3566*cdf0e10cSrcweir return NULL; 3567*cdf0e10cSrcweir } 3568*cdf0e10cSrcweir 3569*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryFormulaCells( 3570*cdf0e10cSrcweir sal_Int32 nResultFlags ) 3571*cdf0e10cSrcweir throw(uno::RuntimeException) 3572*cdf0e10cSrcweir { 3573*cdf0e10cSrcweir ScUnoGuard aGuard; 3574*cdf0e10cSrcweir if (pDocShell) 3575*cdf0e10cSrcweir { 3576*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3577*cdf0e10cSrcweir 3578*cdf0e10cSrcweir ScMarkData aMarkData; 3579*cdf0e10cSrcweir 3580*cdf0e10cSrcweir // passende Zellen selektieren 3581*cdf0e10cSrcweir sal_uLong nCount = aRanges.Count(); 3582*cdf0e10cSrcweir for (sal_uLong i=0; i<nCount; i++) 3583*cdf0e10cSrcweir { 3584*cdf0e10cSrcweir ScRange aRange = *aRanges.GetObject(i); 3585*cdf0e10cSrcweir 3586*cdf0e10cSrcweir ScCellIterator aIter( pDoc, aRange ); 3587*cdf0e10cSrcweir ScBaseCell* pCell = aIter.GetFirst(); 3588*cdf0e10cSrcweir while (pCell) 3589*cdf0e10cSrcweir { 3590*cdf0e10cSrcweir if (pCell->GetCellType() == CELLTYPE_FORMULA) 3591*cdf0e10cSrcweir { 3592*cdf0e10cSrcweir ScFormulaCell* pFCell = (ScFormulaCell*)pCell; 3593*cdf0e10cSrcweir sal_Bool bAdd = sal_False; 3594*cdf0e10cSrcweir if (pFCell->GetErrCode()) 3595*cdf0e10cSrcweir { 3596*cdf0e10cSrcweir if ( nResultFlags & sheet::FormulaResult::ERROR ) 3597*cdf0e10cSrcweir bAdd = sal_True; 3598*cdf0e10cSrcweir } 3599*cdf0e10cSrcweir else if (pFCell->IsValue()) 3600*cdf0e10cSrcweir { 3601*cdf0e10cSrcweir if ( nResultFlags & sheet::FormulaResult::VALUE ) 3602*cdf0e10cSrcweir bAdd = sal_True; 3603*cdf0e10cSrcweir } 3604*cdf0e10cSrcweir else // String 3605*cdf0e10cSrcweir { 3606*cdf0e10cSrcweir if ( nResultFlags & sheet::FormulaResult::STRING ) 3607*cdf0e10cSrcweir bAdd = sal_True; 3608*cdf0e10cSrcweir } 3609*cdf0e10cSrcweir 3610*cdf0e10cSrcweir if (bAdd) 3611*cdf0e10cSrcweir aMarkData.SetMultiMarkArea( 3612*cdf0e10cSrcweir ScRange( aIter.GetCol(), aIter.GetRow(), aIter.GetTab() ), 3613*cdf0e10cSrcweir sal_True ); 3614*cdf0e10cSrcweir } 3615*cdf0e10cSrcweir 3616*cdf0e10cSrcweir pCell = aIter.GetNext(); 3617*cdf0e10cSrcweir } 3618*cdf0e10cSrcweir } 3619*cdf0e10cSrcweir 3620*cdf0e10cSrcweir ScRangeList aNewRanges; 3621*cdf0e10cSrcweir if (aMarkData.IsMultiMarked()) 3622*cdf0e10cSrcweir aMarkData.FillRangeListWithMarks( &aNewRanges, sal_False ); 3623*cdf0e10cSrcweir 3624*cdf0e10cSrcweir return new ScCellRangesObj( pDocShell, aNewRanges ); // aNewRanges kann leer sein 3625*cdf0e10cSrcweir } 3626*cdf0e10cSrcweir 3627*cdf0e10cSrcweir return NULL; 3628*cdf0e10cSrcweir } 3629*cdf0e10cSrcweir 3630*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellRanges> ScCellRangesBase::QueryDifferences_Impl( 3631*cdf0e10cSrcweir const table::CellAddress& aCompare, sal_Bool bColumnDiff) 3632*cdf0e10cSrcweir { 3633*cdf0e10cSrcweir if (pDocShell) 3634*cdf0e10cSrcweir { 3635*cdf0e10cSrcweir sal_uLong nRangeCount = aRanges.Count(); 3636*cdf0e10cSrcweir sal_uLong i; 3637*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3638*cdf0e10cSrcweir ScMarkData aMarkData; 3639*cdf0e10cSrcweir 3640*cdf0e10cSrcweir SCCOLROW nCmpPos = bColumnDiff ? (SCCOLROW)aCompare.Row : (SCCOLROW)aCompare.Column; 3641*cdf0e10cSrcweir 3642*cdf0e10cSrcweir // zuerst alles selektieren, wo ueberhaupt etwas in der Vergleichsspalte steht 3643*cdf0e10cSrcweir // (fuer gleiche Zellen wird die Selektion im zweiten Schritt aufgehoben) 3644*cdf0e10cSrcweir 3645*cdf0e10cSrcweir SCTAB nTab = lcl_FirstTab(aRanges); //! fuer alle Tabellen, wenn Markierungen pro Tabelle! 3646*cdf0e10cSrcweir ScRange aCmpRange, aCellRange; 3647*cdf0e10cSrcweir if (bColumnDiff) 3648*cdf0e10cSrcweir aCmpRange = ScRange( 0,nCmpPos,nTab, MAXCOL,nCmpPos,nTab ); 3649*cdf0e10cSrcweir else 3650*cdf0e10cSrcweir aCmpRange = ScRange( static_cast<SCCOL>(nCmpPos),0,nTab, static_cast<SCCOL>(nCmpPos),MAXROW,nTab ); 3651*cdf0e10cSrcweir ScCellIterator aCmpIter( pDoc, aCmpRange ); 3652*cdf0e10cSrcweir ScBaseCell* pCmpCell = aCmpIter.GetFirst(); 3653*cdf0e10cSrcweir while (pCmpCell) 3654*cdf0e10cSrcweir { 3655*cdf0e10cSrcweir if (pCmpCell->GetCellType() != CELLTYPE_NOTE) 3656*cdf0e10cSrcweir { 3657*cdf0e10cSrcweir SCCOLROW nCellPos = bColumnDiff ? static_cast<SCCOLROW>(aCmpIter.GetCol()) : static_cast<SCCOLROW>(aCmpIter.GetRow()); 3658*cdf0e10cSrcweir if (bColumnDiff) 3659*cdf0e10cSrcweir aCellRange = ScRange( static_cast<SCCOL>(nCellPos),0,nTab, 3660*cdf0e10cSrcweir static_cast<SCCOL>(nCellPos),MAXROW,nTab ); 3661*cdf0e10cSrcweir else 3662*cdf0e10cSrcweir aCellRange = ScRange( 0,nCellPos,nTab, MAXCOL,nCellPos,nTab ); 3663*cdf0e10cSrcweir 3664*cdf0e10cSrcweir for (i=0; i<nRangeCount; i++) 3665*cdf0e10cSrcweir { 3666*cdf0e10cSrcweir ScRange aRange(*aRanges.GetObject(i)); 3667*cdf0e10cSrcweir if ( aRange.Intersects( aCellRange ) ) 3668*cdf0e10cSrcweir { 3669*cdf0e10cSrcweir if (bColumnDiff) 3670*cdf0e10cSrcweir { 3671*cdf0e10cSrcweir aRange.aStart.SetCol(static_cast<SCCOL>(nCellPos)); 3672*cdf0e10cSrcweir aRange.aEnd.SetCol(static_cast<SCCOL>(nCellPos)); 3673*cdf0e10cSrcweir } 3674*cdf0e10cSrcweir else 3675*cdf0e10cSrcweir { 3676*cdf0e10cSrcweir aRange.aStart.SetRow(nCellPos); 3677*cdf0e10cSrcweir aRange.aEnd.SetRow(nCellPos); 3678*cdf0e10cSrcweir } 3679*cdf0e10cSrcweir aMarkData.SetMultiMarkArea( aRange ); 3680*cdf0e10cSrcweir } 3681*cdf0e10cSrcweir } 3682*cdf0e10cSrcweir } 3683*cdf0e10cSrcweir pCmpCell = aCmpIter.GetNext(); 3684*cdf0e10cSrcweir } 3685*cdf0e10cSrcweir 3686*cdf0e10cSrcweir // alle nichtleeren Zellen mit der Vergleichsspalte vergleichen und entsprechend 3687*cdf0e10cSrcweir // selektieren oder aufheben 3688*cdf0e10cSrcweir 3689*cdf0e10cSrcweir ScAddress aCmpAddr; 3690*cdf0e10cSrcweir for (i=0; i<nRangeCount; i++) 3691*cdf0e10cSrcweir { 3692*cdf0e10cSrcweir ScRange aRange(*aRanges.GetObject(i)); 3693*cdf0e10cSrcweir 3694*cdf0e10cSrcweir ScCellIterator aIter( pDoc, aRange ); 3695*cdf0e10cSrcweir ScBaseCell* pCell = aIter.GetFirst(); 3696*cdf0e10cSrcweir while (pCell) 3697*cdf0e10cSrcweir { 3698*cdf0e10cSrcweir if (bColumnDiff) 3699*cdf0e10cSrcweir aCmpAddr = ScAddress( aIter.GetCol(), nCmpPos, aIter.GetTab() ); 3700*cdf0e10cSrcweir else 3701*cdf0e10cSrcweir aCmpAddr = ScAddress( static_cast<SCCOL>(nCmpPos), aIter.GetRow(), aIter.GetTab() ); 3702*cdf0e10cSrcweir const ScBaseCell* pOtherCell = pDoc->GetCell( aCmpAddr ); 3703*cdf0e10cSrcweir 3704*cdf0e10cSrcweir ScRange aOneRange( aIter.GetCol(), aIter.GetRow(), aIter.GetTab() ); 3705*cdf0e10cSrcweir if ( !ScBaseCell::CellEqual( pCell, pOtherCell ) ) 3706*cdf0e10cSrcweir aMarkData.SetMultiMarkArea( aOneRange ); 3707*cdf0e10cSrcweir else 3708*cdf0e10cSrcweir aMarkData.SetMultiMarkArea( aOneRange, sal_False ); // deselect 3709*cdf0e10cSrcweir 3710*cdf0e10cSrcweir pCell = aIter.GetNext(); 3711*cdf0e10cSrcweir } 3712*cdf0e10cSrcweir } 3713*cdf0e10cSrcweir 3714*cdf0e10cSrcweir ScRangeList aNewRanges; 3715*cdf0e10cSrcweir if (aMarkData.IsMultiMarked()) 3716*cdf0e10cSrcweir aMarkData.FillRangeListWithMarks( &aNewRanges, sal_False ); 3717*cdf0e10cSrcweir 3718*cdf0e10cSrcweir return new ScCellRangesObj( pDocShell, aNewRanges ); // aNewRanges kann leer sein 3719*cdf0e10cSrcweir } 3720*cdf0e10cSrcweir return NULL; 3721*cdf0e10cSrcweir } 3722*cdf0e10cSrcweir 3723*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellRanges > SAL_CALL ScCellRangesBase::queryColumnDifferences( 3724*cdf0e10cSrcweir const table::CellAddress& aCompare ) throw(uno::RuntimeException) 3725*cdf0e10cSrcweir { 3726*cdf0e10cSrcweir ScUnoGuard aGuard; 3727*cdf0e10cSrcweir return QueryDifferences_Impl( aCompare, sal_True ); 3728*cdf0e10cSrcweir } 3729*cdf0e10cSrcweir 3730*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryRowDifferences( 3731*cdf0e10cSrcweir const table::CellAddress& aCompare ) throw(uno::RuntimeException) 3732*cdf0e10cSrcweir { 3733*cdf0e10cSrcweir ScUnoGuard aGuard; 3734*cdf0e10cSrcweir return QueryDifferences_Impl( aCompare, sal_False ); 3735*cdf0e10cSrcweir } 3736*cdf0e10cSrcweir 3737*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryIntersection( 3738*cdf0e10cSrcweir const table::CellRangeAddress& aRange ) throw(uno::RuntimeException) 3739*cdf0e10cSrcweir { 3740*cdf0e10cSrcweir ScUnoGuard aGuard; 3741*cdf0e10cSrcweir ScRange aMask( (SCCOL)aRange.StartColumn, (SCROW)aRange.StartRow, aRange.Sheet, 3742*cdf0e10cSrcweir (SCCOL)aRange.EndColumn, (SCROW)aRange.EndRow, aRange.Sheet ); 3743*cdf0e10cSrcweir 3744*cdf0e10cSrcweir ScRangeList aNew; 3745*cdf0e10cSrcweir sal_uLong nCount = aRanges.Count(); 3746*cdf0e10cSrcweir for (sal_uLong i=0; i<nCount; i++) 3747*cdf0e10cSrcweir { 3748*cdf0e10cSrcweir ScRange aTemp(*aRanges.GetObject(i)); 3749*cdf0e10cSrcweir if ( aTemp.Intersects( aMask ) ) 3750*cdf0e10cSrcweir aNew.Join( ScRange( Max( aTemp.aStart.Col(), aMask.aStart.Col() ), 3751*cdf0e10cSrcweir Max( aTemp.aStart.Row(), aMask.aStart.Row() ), 3752*cdf0e10cSrcweir Max( aTemp.aStart.Tab(), aMask.aStart.Tab() ), 3753*cdf0e10cSrcweir Min( aTemp.aEnd.Col(), aMask.aEnd.Col() ), 3754*cdf0e10cSrcweir Min( aTemp.aEnd.Row(), aMask.aEnd.Row() ), 3755*cdf0e10cSrcweir Min( aTemp.aEnd.Tab(), aMask.aEnd.Tab() ) ) ); 3756*cdf0e10cSrcweir } 3757*cdf0e10cSrcweir 3758*cdf0e10cSrcweir return new ScCellRangesObj( pDocShell, aNew ); // kann leer sein 3759*cdf0e10cSrcweir } 3760*cdf0e10cSrcweir 3761*cdf0e10cSrcweir // XFormulaQuery 3762*cdf0e10cSrcweir 3763*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryPrecedents( 3764*cdf0e10cSrcweir sal_Bool bRecursive ) throw(uno::RuntimeException) 3765*cdf0e10cSrcweir { 3766*cdf0e10cSrcweir ScUnoGuard aGuard; 3767*cdf0e10cSrcweir if ( pDocShell ) 3768*cdf0e10cSrcweir { 3769*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3770*cdf0e10cSrcweir 3771*cdf0e10cSrcweir ScRangeList aNewRanges(aRanges); 3772*cdf0e10cSrcweir sal_Bool bFound; 3773*cdf0e10cSrcweir do 3774*cdf0e10cSrcweir { 3775*cdf0e10cSrcweir bFound = sal_False; 3776*cdf0e10cSrcweir 3777*cdf0e10cSrcweir // #97205# aMarkData uses aNewRanges, not aRanges, so GetMarkData can't be used 3778*cdf0e10cSrcweir ScMarkData aMarkData; 3779*cdf0e10cSrcweir aMarkData.MarkFromRangeList( aNewRanges, sal_False ); 3780*cdf0e10cSrcweir aMarkData.MarkToMulti(); // needed for IsAllMarked 3781*cdf0e10cSrcweir 3782*cdf0e10cSrcweir sal_uLong nCount = aNewRanges.Count(); 3783*cdf0e10cSrcweir for (sal_uLong nR=0; nR<nCount; nR++) 3784*cdf0e10cSrcweir { 3785*cdf0e10cSrcweir ScRange aRange(*aNewRanges.GetObject(nR)); 3786*cdf0e10cSrcweir ScCellIterator aIter( pDoc, aRange ); 3787*cdf0e10cSrcweir ScBaseCell* pCell = aIter.GetFirst(); 3788*cdf0e10cSrcweir while (pCell) 3789*cdf0e10cSrcweir { 3790*cdf0e10cSrcweir if ( pCell->GetCellType() == CELLTYPE_FORMULA ) 3791*cdf0e10cSrcweir { 3792*cdf0e10cSrcweir ScFormulaCell* pFCell = (ScFormulaCell*) pCell; 3793*cdf0e10cSrcweir 3794*cdf0e10cSrcweir ScDetectiveRefIter aRefIter( pFCell ); 3795*cdf0e10cSrcweir ScRange aRefRange; 3796*cdf0e10cSrcweir while ( aRefIter.GetNextRef( aRefRange) ) 3797*cdf0e10cSrcweir { 3798*cdf0e10cSrcweir if ( bRecursive && !bFound && !aMarkData.IsAllMarked( aRefRange ) ) 3799*cdf0e10cSrcweir bFound = sal_True; 3800*cdf0e10cSrcweir aMarkData.SetMultiMarkArea( aRefRange, sal_True ); 3801*cdf0e10cSrcweir } 3802*cdf0e10cSrcweir } 3803*cdf0e10cSrcweir pCell = aIter.GetNext(); 3804*cdf0e10cSrcweir } 3805*cdf0e10cSrcweir } 3806*cdf0e10cSrcweir 3807*cdf0e10cSrcweir aMarkData.FillRangeListWithMarks( &aNewRanges, sal_True ); 3808*cdf0e10cSrcweir } 3809*cdf0e10cSrcweir while ( bRecursive && bFound ); 3810*cdf0e10cSrcweir 3811*cdf0e10cSrcweir return new ScCellRangesObj( pDocShell, aNewRanges ); 3812*cdf0e10cSrcweir } 3813*cdf0e10cSrcweir 3814*cdf0e10cSrcweir return NULL; 3815*cdf0e10cSrcweir } 3816*cdf0e10cSrcweir 3817*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryDependents( 3818*cdf0e10cSrcweir sal_Bool bRecursive ) throw(uno::RuntimeException) 3819*cdf0e10cSrcweir { 3820*cdf0e10cSrcweir ScUnoGuard aGuard; 3821*cdf0e10cSrcweir if ( pDocShell ) 3822*cdf0e10cSrcweir { 3823*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3824*cdf0e10cSrcweir 3825*cdf0e10cSrcweir ScRangeList aNewRanges(aRanges); 3826*cdf0e10cSrcweir sal_Bool bFound; 3827*cdf0e10cSrcweir do 3828*cdf0e10cSrcweir { 3829*cdf0e10cSrcweir bFound = sal_False; 3830*cdf0e10cSrcweir sal_uLong nRangesCount = aNewRanges.Count(); 3831*cdf0e10cSrcweir 3832*cdf0e10cSrcweir // #97205# aMarkData uses aNewRanges, not aRanges, so GetMarkData can't be used 3833*cdf0e10cSrcweir ScMarkData aMarkData; 3834*cdf0e10cSrcweir aMarkData.MarkFromRangeList( aNewRanges, sal_False ); 3835*cdf0e10cSrcweir aMarkData.MarkToMulti(); // needed for IsAllMarked 3836*cdf0e10cSrcweir 3837*cdf0e10cSrcweir SCTAB nTab = lcl_FirstTab(aNewRanges); //! alle Tabellen 3838*cdf0e10cSrcweir 3839*cdf0e10cSrcweir ScCellIterator aCellIter( pDoc, 0,0, nTab, MAXCOL,MAXROW, nTab ); 3840*cdf0e10cSrcweir ScBaseCell* pCell = aCellIter.GetFirst(); 3841*cdf0e10cSrcweir while (pCell) 3842*cdf0e10cSrcweir { 3843*cdf0e10cSrcweir if (pCell->GetCellType() == CELLTYPE_FORMULA) 3844*cdf0e10cSrcweir { 3845*cdf0e10cSrcweir sal_Bool bMark = sal_False; 3846*cdf0e10cSrcweir ScDetectiveRefIter aIter( (ScFormulaCell*) pCell ); 3847*cdf0e10cSrcweir ScRange aRefRange; 3848*cdf0e10cSrcweir while ( aIter.GetNextRef( aRefRange) ) 3849*cdf0e10cSrcweir { 3850*cdf0e10cSrcweir for (sal_uLong nR=0; nR<nRangesCount; nR++) 3851*cdf0e10cSrcweir { 3852*cdf0e10cSrcweir ScRange aRange(*aNewRanges.GetObject(nR)); 3853*cdf0e10cSrcweir if (aRange.Intersects(aRefRange)) 3854*cdf0e10cSrcweir bMark = sal_True; // von Teil des Ranges abhaengig 3855*cdf0e10cSrcweir } 3856*cdf0e10cSrcweir } 3857*cdf0e10cSrcweir if (bMark) 3858*cdf0e10cSrcweir { 3859*cdf0e10cSrcweir ScRange aCellRange( aCellIter.GetCol(), 3860*cdf0e10cSrcweir aCellIter.GetRow(), 3861*cdf0e10cSrcweir aCellIter.GetTab() ); 3862*cdf0e10cSrcweir if ( bRecursive && !bFound && !aMarkData.IsAllMarked( aCellRange ) ) 3863*cdf0e10cSrcweir bFound = sal_True; 3864*cdf0e10cSrcweir aMarkData.SetMultiMarkArea( aCellRange, sal_True ); 3865*cdf0e10cSrcweir } 3866*cdf0e10cSrcweir } 3867*cdf0e10cSrcweir pCell = aCellIter.GetNext(); 3868*cdf0e10cSrcweir } 3869*cdf0e10cSrcweir 3870*cdf0e10cSrcweir aMarkData.FillRangeListWithMarks( &aNewRanges, sal_True ); 3871*cdf0e10cSrcweir } 3872*cdf0e10cSrcweir while ( bRecursive && bFound ); 3873*cdf0e10cSrcweir 3874*cdf0e10cSrcweir return new ScCellRangesObj( pDocShell, aNewRanges ); 3875*cdf0e10cSrcweir } 3876*cdf0e10cSrcweir 3877*cdf0e10cSrcweir return NULL; 3878*cdf0e10cSrcweir } 3879*cdf0e10cSrcweir 3880*cdf0e10cSrcweir // XSearchable 3881*cdf0e10cSrcweir 3882*cdf0e10cSrcweir uno::Reference<util::XSearchDescriptor> SAL_CALL ScCellRangesBase::createSearchDescriptor() 3883*cdf0e10cSrcweir throw(uno::RuntimeException) 3884*cdf0e10cSrcweir { 3885*cdf0e10cSrcweir ScUnoGuard aGuard; 3886*cdf0e10cSrcweir return new ScCellSearchObj; 3887*cdf0e10cSrcweir } 3888*cdf0e10cSrcweir 3889*cdf0e10cSrcweir uno::Reference<container::XIndexAccess> SAL_CALL ScCellRangesBase::findAll( 3890*cdf0e10cSrcweir const uno::Reference<util::XSearchDescriptor>& xDesc ) 3891*cdf0e10cSrcweir throw(uno::RuntimeException) 3892*cdf0e10cSrcweir { 3893*cdf0e10cSrcweir // Wenn nichts gefunden wird, soll Null zurueckgegeben werden (?) 3894*cdf0e10cSrcweir uno::Reference<container::XIndexAccess> xRet; 3895*cdf0e10cSrcweir if ( pDocShell && xDesc.is() ) 3896*cdf0e10cSrcweir { 3897*cdf0e10cSrcweir ScCellSearchObj* pSearch = ScCellSearchObj::getImplementation( xDesc ); 3898*cdf0e10cSrcweir if (pSearch) 3899*cdf0e10cSrcweir { 3900*cdf0e10cSrcweir SvxSearchItem* pSearchItem = pSearch->GetSearchItem(); 3901*cdf0e10cSrcweir if (pSearchItem) 3902*cdf0e10cSrcweir { 3903*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3904*cdf0e10cSrcweir pSearchItem->SetCommand( SVX_SEARCHCMD_FIND_ALL ); 3905*cdf0e10cSrcweir // immer nur innerhalb dieses Objekts 3906*cdf0e10cSrcweir pSearchItem->SetSelection( !lcl_WholeSheet(aRanges) ); 3907*cdf0e10cSrcweir 3908*cdf0e10cSrcweir ScMarkData aMark(*GetMarkData()); 3909*cdf0e10cSrcweir 3910*cdf0e10cSrcweir String aDummyUndo; 3911*cdf0e10cSrcweir SCCOL nCol = 0; 3912*cdf0e10cSrcweir SCROW nRow = 0; 3913*cdf0e10cSrcweir SCTAB nTab = 0; 3914*cdf0e10cSrcweir sal_Bool bFound = pDoc->SearchAndReplace( *pSearchItem, nCol, nRow, nTab, 3915*cdf0e10cSrcweir aMark, aDummyUndo, NULL ); 3916*cdf0e10cSrcweir if (bFound) 3917*cdf0e10cSrcweir { 3918*cdf0e10cSrcweir ScRangeList aNewRanges; 3919*cdf0e10cSrcweir aMark.FillRangeListWithMarks( &aNewRanges, sal_True ); 3920*cdf0e10cSrcweir // bei findAll immer CellRanges, egal wieviel gefunden wurde 3921*cdf0e10cSrcweir xRet.set(new ScCellRangesObj( pDocShell, aNewRanges )); 3922*cdf0e10cSrcweir } 3923*cdf0e10cSrcweir } 3924*cdf0e10cSrcweir } 3925*cdf0e10cSrcweir } 3926*cdf0e10cSrcweir return xRet; 3927*cdf0e10cSrcweir } 3928*cdf0e10cSrcweir 3929*cdf0e10cSrcweir uno::Reference<uno::XInterface> ScCellRangesBase::Find_Impl( 3930*cdf0e10cSrcweir const uno::Reference<util::XSearchDescriptor>& xDesc, 3931*cdf0e10cSrcweir const ScAddress* pLastPos ) 3932*cdf0e10cSrcweir { 3933*cdf0e10cSrcweir uno::Reference<uno::XInterface> xRet; 3934*cdf0e10cSrcweir if ( pDocShell && xDesc.is() ) 3935*cdf0e10cSrcweir { 3936*cdf0e10cSrcweir ScCellSearchObj* pSearch = ScCellSearchObj::getImplementation( xDesc ); 3937*cdf0e10cSrcweir if (pSearch) 3938*cdf0e10cSrcweir { 3939*cdf0e10cSrcweir SvxSearchItem* pSearchItem = pSearch->GetSearchItem(); 3940*cdf0e10cSrcweir if (pSearchItem) 3941*cdf0e10cSrcweir { 3942*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 3943*cdf0e10cSrcweir pSearchItem->SetCommand( SVX_SEARCHCMD_FIND ); 3944*cdf0e10cSrcweir // immer nur innerhalb dieses Objekts 3945*cdf0e10cSrcweir pSearchItem->SetSelection( !lcl_WholeSheet(aRanges) ); 3946*cdf0e10cSrcweir 3947*cdf0e10cSrcweir ScMarkData aMark(*GetMarkData()); 3948*cdf0e10cSrcweir 3949*cdf0e10cSrcweir SCCOL nCol; 3950*cdf0e10cSrcweir SCROW nRow; 3951*cdf0e10cSrcweir SCTAB nTab; 3952*cdf0e10cSrcweir if (pLastPos) 3953*cdf0e10cSrcweir pLastPos->GetVars( nCol, nRow, nTab ); 3954*cdf0e10cSrcweir else 3955*cdf0e10cSrcweir { 3956*cdf0e10cSrcweir nTab = lcl_FirstTab(aRanges); //! mehrere Tabellen? 3957*cdf0e10cSrcweir ScDocument::GetSearchAndReplaceStart( *pSearchItem, nCol, nRow ); 3958*cdf0e10cSrcweir } 3959*cdf0e10cSrcweir 3960*cdf0e10cSrcweir String aDummyUndo; 3961*cdf0e10cSrcweir sal_Bool bFound = pDoc->SearchAndReplace( *pSearchItem, nCol, nRow, nTab, 3962*cdf0e10cSrcweir aMark, aDummyUndo, NULL ); 3963*cdf0e10cSrcweir if (bFound) 3964*cdf0e10cSrcweir { 3965*cdf0e10cSrcweir ScAddress aFoundPos( nCol, nRow, nTab ); 3966*cdf0e10cSrcweir xRet.set((cppu::OWeakObject*) new ScCellObj( pDocShell, aFoundPos )); 3967*cdf0e10cSrcweir } 3968*cdf0e10cSrcweir } 3969*cdf0e10cSrcweir } 3970*cdf0e10cSrcweir } 3971*cdf0e10cSrcweir return xRet; 3972*cdf0e10cSrcweir } 3973*cdf0e10cSrcweir 3974*cdf0e10cSrcweir uno::Reference<uno::XInterface> SAL_CALL ScCellRangesBase::findFirst( 3975*cdf0e10cSrcweir const uno::Reference<util::XSearchDescriptor>& xDesc ) 3976*cdf0e10cSrcweir throw(uno::RuntimeException) 3977*cdf0e10cSrcweir { 3978*cdf0e10cSrcweir ScUnoGuard aGuard; 3979*cdf0e10cSrcweir return Find_Impl( xDesc, NULL ); 3980*cdf0e10cSrcweir } 3981*cdf0e10cSrcweir 3982*cdf0e10cSrcweir uno::Reference<uno::XInterface> SAL_CALL ScCellRangesBase::findNext( 3983*cdf0e10cSrcweir const uno::Reference<uno::XInterface>& xStartAt, 3984*cdf0e10cSrcweir const uno::Reference<util::XSearchDescriptor >& xDesc ) 3985*cdf0e10cSrcweir throw(uno::RuntimeException) 3986*cdf0e10cSrcweir { 3987*cdf0e10cSrcweir ScUnoGuard aGuard; 3988*cdf0e10cSrcweir if ( xStartAt.is() ) 3989*cdf0e10cSrcweir { 3990*cdf0e10cSrcweir ScCellRangesBase* pRangesImp = ScCellRangesBase::getImplementation( xStartAt ); 3991*cdf0e10cSrcweir if ( pRangesImp && pRangesImp->GetDocShell() == pDocShell ) 3992*cdf0e10cSrcweir { 3993*cdf0e10cSrcweir const ScRangeList& rStartRanges = pRangesImp->GetRangeList(); 3994*cdf0e10cSrcweir if ( rStartRanges.Count() == 1 ) 3995*cdf0e10cSrcweir { 3996*cdf0e10cSrcweir ScAddress aStartPos = rStartRanges.GetObject(0)->aStart; 3997*cdf0e10cSrcweir return Find_Impl( xDesc, &aStartPos ); 3998*cdf0e10cSrcweir } 3999*cdf0e10cSrcweir } 4000*cdf0e10cSrcweir } 4001*cdf0e10cSrcweir return NULL; 4002*cdf0e10cSrcweir } 4003*cdf0e10cSrcweir 4004*cdf0e10cSrcweir // XReplaceable 4005*cdf0e10cSrcweir 4006*cdf0e10cSrcweir uno::Reference<util::XReplaceDescriptor> SAL_CALL ScCellRangesBase::createReplaceDescriptor() 4007*cdf0e10cSrcweir throw(uno::RuntimeException) 4008*cdf0e10cSrcweir { 4009*cdf0e10cSrcweir ScUnoGuard aGuard; 4010*cdf0e10cSrcweir return new ScCellSearchObj; 4011*cdf0e10cSrcweir } 4012*cdf0e10cSrcweir 4013*cdf0e10cSrcweir sal_Int32 SAL_CALL ScCellRangesBase::replaceAll( const uno::Reference<util::XSearchDescriptor>& xDesc ) 4014*cdf0e10cSrcweir throw(uno::RuntimeException) 4015*cdf0e10cSrcweir { 4016*cdf0e10cSrcweir ScUnoGuard aGuard; 4017*cdf0e10cSrcweir sal_Int32 nReplaced = 0; 4018*cdf0e10cSrcweir if ( pDocShell && xDesc.is() ) 4019*cdf0e10cSrcweir { 4020*cdf0e10cSrcweir ScCellSearchObj* pSearch = ScCellSearchObj::getImplementation( xDesc ); 4021*cdf0e10cSrcweir if (pSearch) 4022*cdf0e10cSrcweir { 4023*cdf0e10cSrcweir SvxSearchItem* pSearchItem = pSearch->GetSearchItem(); 4024*cdf0e10cSrcweir if (pSearchItem) 4025*cdf0e10cSrcweir { 4026*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 4027*cdf0e10cSrcweir sal_Bool bUndo(pDoc->IsUndoEnabled()); 4028*cdf0e10cSrcweir pSearchItem->SetCommand( SVX_SEARCHCMD_REPLACE_ALL ); 4029*cdf0e10cSrcweir // immer nur innerhalb dieses Objekts 4030*cdf0e10cSrcweir pSearchItem->SetSelection( !lcl_WholeSheet(aRanges) ); 4031*cdf0e10cSrcweir 4032*cdf0e10cSrcweir ScMarkData aMark(*GetMarkData()); 4033*cdf0e10cSrcweir 4034*cdf0e10cSrcweir SCTAB nTabCount = pDoc->GetTableCount(); 4035*cdf0e10cSrcweir sal_Bool bProtected = !pDocShell->IsEditable(); 4036*cdf0e10cSrcweir for (SCTAB i=0; i<nTabCount; i++) 4037*cdf0e10cSrcweir if ( aMark.GetTableSelect(i) && pDoc->IsTabProtected(i) ) 4038*cdf0e10cSrcweir bProtected = sal_True; 4039*cdf0e10cSrcweir if (bProtected) 4040*cdf0e10cSrcweir { 4041*cdf0e10cSrcweir //! Exception, oder was? 4042*cdf0e10cSrcweir } 4043*cdf0e10cSrcweir else 4044*cdf0e10cSrcweir { 4045*cdf0e10cSrcweir SCTAB nTab = aMark.GetFirstSelected(); // bei SearchAndReplace nicht benutzt 4046*cdf0e10cSrcweir SCCOL nCol = 0; 4047*cdf0e10cSrcweir SCROW nRow = 0; 4048*cdf0e10cSrcweir 4049*cdf0e10cSrcweir String aUndoStr; 4050*cdf0e10cSrcweir ScDocument* pUndoDoc = NULL; 4051*cdf0e10cSrcweir if (bUndo) 4052*cdf0e10cSrcweir { 4053*cdf0e10cSrcweir pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); 4054*cdf0e10cSrcweir pUndoDoc->InitUndo( pDoc, nTab, nTab ); 4055*cdf0e10cSrcweir } 4056*cdf0e10cSrcweir for (SCTAB i=0; i<nTabCount; i++) 4057*cdf0e10cSrcweir if ( aMark.GetTableSelect(i) && i != nTab && bUndo) 4058*cdf0e10cSrcweir pUndoDoc->AddUndoTab( i, i ); 4059*cdf0e10cSrcweir ScMarkData* pUndoMark = NULL; 4060*cdf0e10cSrcweir if (bUndo) 4061*cdf0e10cSrcweir pUndoMark = new ScMarkData(aMark); 4062*cdf0e10cSrcweir 4063*cdf0e10cSrcweir sal_Bool bFound(sal_False); 4064*cdf0e10cSrcweir if (bUndo) 4065*cdf0e10cSrcweir bFound = pDoc->SearchAndReplace( *pSearchItem, nCol, nRow, nTab, 4066*cdf0e10cSrcweir aMark, aUndoStr, pUndoDoc ); 4067*cdf0e10cSrcweir if (bFound) 4068*cdf0e10cSrcweir { 4069*cdf0e10cSrcweir nReplaced = pUndoDoc->GetCellCount(); 4070*cdf0e10cSrcweir 4071*cdf0e10cSrcweir pDocShell->GetUndoManager()->AddUndoAction( 4072*cdf0e10cSrcweir new ScUndoReplace( pDocShell, *pUndoMark, nCol, nRow, nTab, 4073*cdf0e10cSrcweir aUndoStr, pUndoDoc, pSearchItem ) ); 4074*cdf0e10cSrcweir 4075*cdf0e10cSrcweir pDocShell->PostPaintGridAll(); 4076*cdf0e10cSrcweir pDocShell->SetDocumentModified(); 4077*cdf0e10cSrcweir } 4078*cdf0e10cSrcweir else 4079*cdf0e10cSrcweir { 4080*cdf0e10cSrcweir delete pUndoDoc; 4081*cdf0e10cSrcweir delete pUndoMark; 4082*cdf0e10cSrcweir // nReplaced bleibt 0 4083*cdf0e10cSrcweir } 4084*cdf0e10cSrcweir } 4085*cdf0e10cSrcweir } 4086*cdf0e10cSrcweir } 4087*cdf0e10cSrcweir } 4088*cdf0e10cSrcweir return nReplaced; 4089*cdf0e10cSrcweir } 4090*cdf0e10cSrcweir 4091*cdf0e10cSrcweir // XUnoTunnel 4092*cdf0e10cSrcweir 4093*cdf0e10cSrcweir sal_Int64 SAL_CALL ScCellRangesBase::getSomething( 4094*cdf0e10cSrcweir const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) 4095*cdf0e10cSrcweir { 4096*cdf0e10cSrcweir if ( rId.getLength() == 16 && 4097*cdf0e10cSrcweir 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), 4098*cdf0e10cSrcweir rId.getConstArray(), 16 ) ) 4099*cdf0e10cSrcweir { 4100*cdf0e10cSrcweir return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this)); 4101*cdf0e10cSrcweir } 4102*cdf0e10cSrcweir return 0; 4103*cdf0e10cSrcweir } 4104*cdf0e10cSrcweir 4105*cdf0e10cSrcweir // static 4106*cdf0e10cSrcweir const uno::Sequence<sal_Int8>& ScCellRangesBase::getUnoTunnelId() 4107*cdf0e10cSrcweir { 4108*cdf0e10cSrcweir static uno::Sequence<sal_Int8> * pSeq = 0; 4109*cdf0e10cSrcweir if( !pSeq ) 4110*cdf0e10cSrcweir { 4111*cdf0e10cSrcweir osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); 4112*cdf0e10cSrcweir if( !pSeq ) 4113*cdf0e10cSrcweir { 4114*cdf0e10cSrcweir static uno::Sequence< sal_Int8 > aSeq( 16 ); 4115*cdf0e10cSrcweir rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); 4116*cdf0e10cSrcweir pSeq = &aSeq; 4117*cdf0e10cSrcweir } 4118*cdf0e10cSrcweir } 4119*cdf0e10cSrcweir return *pSeq; 4120*cdf0e10cSrcweir } 4121*cdf0e10cSrcweir 4122*cdf0e10cSrcweir // static 4123*cdf0e10cSrcweir ScCellRangesBase* ScCellRangesBase::getImplementation( const uno::Reference<uno::XInterface> xObj ) 4124*cdf0e10cSrcweir { 4125*cdf0e10cSrcweir ScCellRangesBase* pRet = NULL; 4126*cdf0e10cSrcweir uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); 4127*cdf0e10cSrcweir if (xUT.is()) 4128*cdf0e10cSrcweir pRet = reinterpret_cast<ScCellRangesBase*>(sal::static_int_cast<sal_IntPtr>(xUT->getSomething(getUnoTunnelId()))); 4129*cdf0e10cSrcweir return pRet; 4130*cdf0e10cSrcweir } 4131*cdf0e10cSrcweir 4132*cdf0e10cSrcweir //------------------------------------------------------------------------ 4133*cdf0e10cSrcweir 4134*cdf0e10cSrcweir ScCellRangesObj::ScCellRangesObj(ScDocShell* pDocSh, const ScRangeList& rR) : 4135*cdf0e10cSrcweir ScCellRangesBase( pDocSh, rR ) 4136*cdf0e10cSrcweir { 4137*cdf0e10cSrcweir } 4138*cdf0e10cSrcweir 4139*cdf0e10cSrcweir ScCellRangesObj::~ScCellRangesObj() 4140*cdf0e10cSrcweir { 4141*cdf0e10cSrcweir } 4142*cdf0e10cSrcweir 4143*cdf0e10cSrcweir void ScCellRangesObj::RefChanged() 4144*cdf0e10cSrcweir { 4145*cdf0e10cSrcweir ScCellRangesBase::RefChanged(); 4146*cdf0e10cSrcweir 4147*cdf0e10cSrcweir // nix weiter... 4148*cdf0e10cSrcweir } 4149*cdf0e10cSrcweir 4150*cdf0e10cSrcweir uno::Any SAL_CALL ScCellRangesObj::queryInterface( const uno::Type& rType ) 4151*cdf0e10cSrcweir throw(uno::RuntimeException) 4152*cdf0e10cSrcweir { 4153*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetCellRangeContainer ) 4154*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetCellRanges ) 4155*cdf0e10cSrcweir SC_QUERYINTERFACE( container::XIndexAccess ) 4156*cdf0e10cSrcweir SC_QUERY_MULTIPLE( container::XElementAccess, container::XIndexAccess ) 4157*cdf0e10cSrcweir SC_QUERYINTERFACE( container::XEnumerationAccess ) 4158*cdf0e10cSrcweir SC_QUERYINTERFACE( container::XNameContainer ) 4159*cdf0e10cSrcweir SC_QUERYINTERFACE( container::XNameReplace ) 4160*cdf0e10cSrcweir SC_QUERYINTERFACE( container::XNameAccess ) 4161*cdf0e10cSrcweir 4162*cdf0e10cSrcweir return ScCellRangesBase::queryInterface( rType ); 4163*cdf0e10cSrcweir } 4164*cdf0e10cSrcweir 4165*cdf0e10cSrcweir void SAL_CALL ScCellRangesObj::acquire() throw() 4166*cdf0e10cSrcweir { 4167*cdf0e10cSrcweir ScCellRangesBase::acquire(); 4168*cdf0e10cSrcweir } 4169*cdf0e10cSrcweir 4170*cdf0e10cSrcweir void SAL_CALL ScCellRangesObj::release() throw() 4171*cdf0e10cSrcweir { 4172*cdf0e10cSrcweir ScCellRangesBase::release(); 4173*cdf0e10cSrcweir } 4174*cdf0e10cSrcweir 4175*cdf0e10cSrcweir uno::Sequence<uno::Type> SAL_CALL ScCellRangesObj::getTypes() throw(uno::RuntimeException) 4176*cdf0e10cSrcweir { 4177*cdf0e10cSrcweir static uno::Sequence<uno::Type> aTypes; 4178*cdf0e10cSrcweir if ( aTypes.getLength() == 0 ) 4179*cdf0e10cSrcweir { 4180*cdf0e10cSrcweir uno::Sequence<uno::Type> aParentTypes(ScCellRangesBase::getTypes()); 4181*cdf0e10cSrcweir long nParentLen = aParentTypes.getLength(); 4182*cdf0e10cSrcweir const uno::Type* pParentPtr = aParentTypes.getConstArray(); 4183*cdf0e10cSrcweir 4184*cdf0e10cSrcweir aTypes.realloc( nParentLen + 3 ); 4185*cdf0e10cSrcweir uno::Type* pPtr = aTypes.getArray(); 4186*cdf0e10cSrcweir pPtr[nParentLen + 0] = getCppuType((const uno::Reference<sheet::XSheetCellRangeContainer>*)0); 4187*cdf0e10cSrcweir pPtr[nParentLen + 1] = getCppuType((const uno::Reference<container::XNameContainer>*)0); 4188*cdf0e10cSrcweir pPtr[nParentLen + 2] = getCppuType((const uno::Reference<container::XEnumerationAccess>*)0); 4189*cdf0e10cSrcweir 4190*cdf0e10cSrcweir for (long i=0; i<nParentLen; i++) 4191*cdf0e10cSrcweir pPtr[i] = pParentPtr[i]; // parent types first 4192*cdf0e10cSrcweir } 4193*cdf0e10cSrcweir return aTypes; 4194*cdf0e10cSrcweir } 4195*cdf0e10cSrcweir 4196*cdf0e10cSrcweir uno::Sequence<sal_Int8> SAL_CALL ScCellRangesObj::getImplementationId() 4197*cdf0e10cSrcweir throw(uno::RuntimeException) 4198*cdf0e10cSrcweir { 4199*cdf0e10cSrcweir static uno::Sequence< sal_Int8 > aId; 4200*cdf0e10cSrcweir if( aId.getLength() == 0 ) 4201*cdf0e10cSrcweir { 4202*cdf0e10cSrcweir aId.realloc( 16 ); 4203*cdf0e10cSrcweir rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); 4204*cdf0e10cSrcweir } 4205*cdf0e10cSrcweir return aId; 4206*cdf0e10cSrcweir } 4207*cdf0e10cSrcweir 4208*cdf0e10cSrcweir // XCellRanges 4209*cdf0e10cSrcweir 4210*cdf0e10cSrcweir ScCellRangeObj* ScCellRangesObj::GetObjectByIndex_Impl(sal_Int32 nIndex) const 4211*cdf0e10cSrcweir { 4212*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4213*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4214*cdf0e10cSrcweir if ( pDocSh && nIndex >= 0 && nIndex < sal::static_int_cast<sal_Int32>(rRanges.Count()) ) 4215*cdf0e10cSrcweir { 4216*cdf0e10cSrcweir ScRange aRange(*rRanges.GetObject(nIndex)); 4217*cdf0e10cSrcweir if ( aRange.aStart == aRange.aEnd ) 4218*cdf0e10cSrcweir return new ScCellObj( pDocSh, aRange.aStart ); 4219*cdf0e10cSrcweir else 4220*cdf0e10cSrcweir return new ScCellRangeObj( pDocSh, aRange ); 4221*cdf0e10cSrcweir } 4222*cdf0e10cSrcweir 4223*cdf0e10cSrcweir return NULL; // keine DocShell oder falscher Index 4224*cdf0e10cSrcweir } 4225*cdf0e10cSrcweir 4226*cdf0e10cSrcweir uno::Sequence<table::CellRangeAddress> SAL_CALL ScCellRangesObj::getRangeAddresses() 4227*cdf0e10cSrcweir throw(uno::RuntimeException) 4228*cdf0e10cSrcweir { 4229*cdf0e10cSrcweir ScUnoGuard aGuard; 4230*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4231*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4232*cdf0e10cSrcweir sal_uLong nCount = rRanges.Count(); 4233*cdf0e10cSrcweir if ( pDocSh && nCount ) 4234*cdf0e10cSrcweir { 4235*cdf0e10cSrcweir table::CellRangeAddress aRangeAddress; 4236*cdf0e10cSrcweir uno::Sequence<table::CellRangeAddress> aSeq(nCount); 4237*cdf0e10cSrcweir table::CellRangeAddress* pAry = aSeq.getArray(); 4238*cdf0e10cSrcweir for (sal_uInt32 i=0; i<nCount; i++) 4239*cdf0e10cSrcweir { 4240*cdf0e10cSrcweir ScUnoConversion::FillApiRange( aRangeAddress, *rRanges.GetObject(i) ); 4241*cdf0e10cSrcweir pAry[i] = aRangeAddress; 4242*cdf0e10cSrcweir } 4243*cdf0e10cSrcweir return aSeq; 4244*cdf0e10cSrcweir } 4245*cdf0e10cSrcweir 4246*cdf0e10cSrcweir return uno::Sequence<table::CellRangeAddress>(0); // leer ist moeglich 4247*cdf0e10cSrcweir } 4248*cdf0e10cSrcweir 4249*cdf0e10cSrcweir uno::Reference<container::XEnumerationAccess> SAL_CALL ScCellRangesObj::getCells() 4250*cdf0e10cSrcweir throw(uno::RuntimeException) 4251*cdf0e10cSrcweir { 4252*cdf0e10cSrcweir ScUnoGuard aGuard; 4253*cdf0e10cSrcweir 4254*cdf0e10cSrcweir // getCells with empty range list is possible (no exception), 4255*cdf0e10cSrcweir // the resulting enumeration just has no elements 4256*cdf0e10cSrcweir // (same behaviour as a valid range with no cells) 4257*cdf0e10cSrcweir // This is handled in ScCellsEnumeration ctor. 4258*cdf0e10cSrcweir 4259*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4260*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4261*cdf0e10cSrcweir if (pDocSh) 4262*cdf0e10cSrcweir return new ScCellsObj( pDocSh, rRanges ); 4263*cdf0e10cSrcweir return NULL; 4264*cdf0e10cSrcweir } 4265*cdf0e10cSrcweir 4266*cdf0e10cSrcweir rtl::OUString SAL_CALL ScCellRangesObj::getRangeAddressesAsString() 4267*cdf0e10cSrcweir throw(uno::RuntimeException) 4268*cdf0e10cSrcweir { 4269*cdf0e10cSrcweir ScUnoGuard aGuard; 4270*cdf0e10cSrcweir String aString; 4271*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4272*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4273*cdf0e10cSrcweir if (pDocSh) 4274*cdf0e10cSrcweir rRanges.Format( aString, SCA_VALID | SCA_TAB_3D, pDocSh->GetDocument() ); 4275*cdf0e10cSrcweir return aString; 4276*cdf0e10cSrcweir } 4277*cdf0e10cSrcweir 4278*cdf0e10cSrcweir // XSheetCellRangeContainer 4279*cdf0e10cSrcweir 4280*cdf0e10cSrcweir void SAL_CALL ScCellRangesObj::addRangeAddress( const table::CellRangeAddress& rRange, 4281*cdf0e10cSrcweir sal_Bool bMergeRanges ) 4282*cdf0e10cSrcweir throw(::com::sun::star::uno::RuntimeException) 4283*cdf0e10cSrcweir { 4284*cdf0e10cSrcweir ScUnoGuard aGuard; 4285*cdf0e10cSrcweir ScRange aRange(static_cast<SCCOL>(rRange.StartColumn), 4286*cdf0e10cSrcweir static_cast<SCROW>(rRange.StartRow), 4287*cdf0e10cSrcweir static_cast<SCTAB>(rRange.Sheet), 4288*cdf0e10cSrcweir static_cast<SCCOL>(rRange.EndColumn), 4289*cdf0e10cSrcweir static_cast<SCROW>(rRange.EndRow), 4290*cdf0e10cSrcweir static_cast<SCTAB>(rRange.Sheet)); 4291*cdf0e10cSrcweir AddRange(aRange, bMergeRanges); 4292*cdf0e10cSrcweir } 4293*cdf0e10cSrcweir 4294*cdf0e10cSrcweir void lcl_RemoveNamedEntry( ScNamedEntryArr_Impl& rNamedEntries, const ScRange& rRange ) 4295*cdf0e10cSrcweir { 4296*cdf0e10cSrcweir sal_uInt16 nCount = rNamedEntries.Count(); 4297*cdf0e10cSrcweir for ( sal_uInt16 n=nCount; n--; ) 4298*cdf0e10cSrcweir if ( rNamedEntries[n]->GetRange() == rRange ) 4299*cdf0e10cSrcweir rNamedEntries.DeleteAndDestroy( n ); 4300*cdf0e10cSrcweir } 4301*cdf0e10cSrcweir 4302*cdf0e10cSrcweir void SAL_CALL ScCellRangesObj::removeRangeAddress( const table::CellRangeAddress& rRange ) 4303*cdf0e10cSrcweir throw(::com::sun::star::container::NoSuchElementException, 4304*cdf0e10cSrcweir ::com::sun::star::uno::RuntimeException) 4305*cdf0e10cSrcweir { 4306*cdf0e10cSrcweir ScUnoGuard aGuard; 4307*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4308*cdf0e10cSrcweir 4309*cdf0e10cSrcweir ScRangeList aSheetRanges; 4310*cdf0e10cSrcweir ScRangeList aNotSheetRanges; 4311*cdf0e10cSrcweir for (sal_uInt32 i = 0; i < rRanges.Count(); ++i) 4312*cdf0e10cSrcweir { 4313*cdf0e10cSrcweir if (rRanges.GetObject(i)->aStart.Tab() == rRange.Sheet) 4314*cdf0e10cSrcweir { 4315*cdf0e10cSrcweir aSheetRanges.Append(*rRanges.GetObject(i)); 4316*cdf0e10cSrcweir } 4317*cdf0e10cSrcweir else 4318*cdf0e10cSrcweir { 4319*cdf0e10cSrcweir aNotSheetRanges.Append(*rRanges.GetObject(i)); 4320*cdf0e10cSrcweir } 4321*cdf0e10cSrcweir } 4322*cdf0e10cSrcweir ScMarkData aMarkData; 4323*cdf0e10cSrcweir aMarkData.MarkFromRangeList( aSheetRanges, sal_False ); 4324*cdf0e10cSrcweir ScRange aRange(static_cast<SCCOL>(rRange.StartColumn), 4325*cdf0e10cSrcweir static_cast<SCROW>(rRange.StartRow), 4326*cdf0e10cSrcweir static_cast<SCTAB>(rRange.Sheet), 4327*cdf0e10cSrcweir static_cast<SCCOL>(rRange.EndColumn), 4328*cdf0e10cSrcweir static_cast<SCROW>(rRange.EndRow), 4329*cdf0e10cSrcweir static_cast<SCTAB>(rRange.Sheet)); 4330*cdf0e10cSrcweir if (aMarkData.GetTableSelect( aRange.aStart.Tab() )) 4331*cdf0e10cSrcweir { 4332*cdf0e10cSrcweir aMarkData.MarkToMulti(); 4333*cdf0e10cSrcweir if (aMarkData.IsAllMarked( aRange ) ) 4334*cdf0e10cSrcweir { 4335*cdf0e10cSrcweir aMarkData.SetMultiMarkArea( aRange, sal_False ); 4336*cdf0e10cSrcweir lcl_RemoveNamedEntry(aNamedEntries, aRange); 4337*cdf0e10cSrcweir } 4338*cdf0e10cSrcweir else 4339*cdf0e10cSrcweir throw container::NoSuchElementException(); 4340*cdf0e10cSrcweir } 4341*cdf0e10cSrcweir SetNewRanges(aNotSheetRanges); 4342*cdf0e10cSrcweir ScRangeList aNew; 4343*cdf0e10cSrcweir aMarkData.FillRangeListWithMarks( &aNew, sal_False ); 4344*cdf0e10cSrcweir for (sal_uInt32 j = 0; j < aNew.Count(); ++j) 4345*cdf0e10cSrcweir { 4346*cdf0e10cSrcweir AddRange(*aNew.GetObject(j), sal_False); 4347*cdf0e10cSrcweir } 4348*cdf0e10cSrcweir } 4349*cdf0e10cSrcweir 4350*cdf0e10cSrcweir void SAL_CALL ScCellRangesObj::addRangeAddresses( const uno::Sequence<table::CellRangeAddress >& rRanges, 4351*cdf0e10cSrcweir sal_Bool bMergeRanges ) 4352*cdf0e10cSrcweir throw(::com::sun::star::uno::RuntimeException) 4353*cdf0e10cSrcweir { 4354*cdf0e10cSrcweir ScUnoGuard aGuard; 4355*cdf0e10cSrcweir sal_Int32 nCount(rRanges.getLength()); 4356*cdf0e10cSrcweir if (nCount) 4357*cdf0e10cSrcweir { 4358*cdf0e10cSrcweir const table::CellRangeAddress* pRanges = rRanges.getConstArray(); 4359*cdf0e10cSrcweir for (sal_Int32 i = 0; i < rRanges.getLength(); i++, pRanges++) 4360*cdf0e10cSrcweir { 4361*cdf0e10cSrcweir ScRange aRange(static_cast<SCCOL>(pRanges->StartColumn), 4362*cdf0e10cSrcweir static_cast<SCROW>(pRanges->StartRow), 4363*cdf0e10cSrcweir static_cast<SCTAB>(pRanges->Sheet), 4364*cdf0e10cSrcweir static_cast<SCCOL>(pRanges->EndColumn), 4365*cdf0e10cSrcweir static_cast<SCROW>(pRanges->EndRow), 4366*cdf0e10cSrcweir static_cast<SCTAB>(pRanges->Sheet)); 4367*cdf0e10cSrcweir AddRange(aRange, bMergeRanges); 4368*cdf0e10cSrcweir } 4369*cdf0e10cSrcweir } 4370*cdf0e10cSrcweir } 4371*cdf0e10cSrcweir 4372*cdf0e10cSrcweir void SAL_CALL ScCellRangesObj::removeRangeAddresses( const uno::Sequence<table::CellRangeAddress >& rRangeSeq ) 4373*cdf0e10cSrcweir throw(::com::sun::star::container::NoSuchElementException, 4374*cdf0e10cSrcweir ::com::sun::star::uno::RuntimeException) 4375*cdf0e10cSrcweir { 4376*cdf0e10cSrcweir // with this implementation not needed 4377*cdf0e10cSrcweir // ScUnoGuard aGuard; 4378*cdf0e10cSrcweir 4379*cdf0e10cSrcweir 4380*cdf0e10cSrcweir // use sometimes a better/faster implementation 4381*cdf0e10cSrcweir sal_uInt32 nCount(rRangeSeq.getLength()); 4382*cdf0e10cSrcweir if (nCount) 4383*cdf0e10cSrcweir { 4384*cdf0e10cSrcweir const table::CellRangeAddress* pRanges = rRangeSeq.getConstArray(); 4385*cdf0e10cSrcweir for (sal_uInt32 i=0; i < nCount; ++i, ++pRanges) 4386*cdf0e10cSrcweir { 4387*cdf0e10cSrcweir removeRangeAddress(*pRanges); 4388*cdf0e10cSrcweir } 4389*cdf0e10cSrcweir } 4390*cdf0e10cSrcweir } 4391*cdf0e10cSrcweir 4392*cdf0e10cSrcweir // XNameContainer 4393*cdf0e10cSrcweir 4394*cdf0e10cSrcweir void lcl_RemoveNamedEntry( ScNamedEntryArr_Impl& rNamedEntries, const String& rName ) 4395*cdf0e10cSrcweir { 4396*cdf0e10cSrcweir sal_uInt16 nCount = rNamedEntries.Count(); 4397*cdf0e10cSrcweir for ( sal_uInt16 n=nCount; n--; ) 4398*cdf0e10cSrcweir if ( rNamedEntries[n]->GetName() == rName ) 4399*cdf0e10cSrcweir rNamedEntries.DeleteAndDestroy( n ); 4400*cdf0e10cSrcweir } 4401*cdf0e10cSrcweir 4402*cdf0e10cSrcweir void SAL_CALL ScCellRangesObj::insertByName( const rtl::OUString& aName, const uno::Any& aElement ) 4403*cdf0e10cSrcweir throw(lang::IllegalArgumentException, container::ElementExistException, 4404*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 4405*cdf0e10cSrcweir { 4406*cdf0e10cSrcweir ScUnoGuard aGuard; 4407*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4408*cdf0e10cSrcweir sal_Bool bDone = sal_False; 4409*cdf0e10cSrcweir 4410*cdf0e10cSrcweir //! Type of aElement can be some specific interface instead of XInterface 4411*cdf0e10cSrcweir 4412*cdf0e10cSrcweir uno::Reference<uno::XInterface> xInterface(aElement, uno::UNO_QUERY); 4413*cdf0e10cSrcweir if ( pDocSh && xInterface.is() ) 4414*cdf0e10cSrcweir { 4415*cdf0e10cSrcweir ScCellRangesBase* pRangesImp = ScCellRangesBase::getImplementation( xInterface ); 4416*cdf0e10cSrcweir if ( pRangesImp && pRangesImp->GetDocShell() == pDocSh ) 4417*cdf0e10cSrcweir { 4418*cdf0e10cSrcweir // if explicit name is given and already existing, throw exception 4419*cdf0e10cSrcweir 4420*cdf0e10cSrcweir String aNamStr(aName); 4421*cdf0e10cSrcweir if ( aNamStr.Len() ) 4422*cdf0e10cSrcweir { 4423*cdf0e10cSrcweir sal_uInt16 nNamedCount = aNamedEntries.Count(); 4424*cdf0e10cSrcweir for (sal_uInt16 n=0; n<nNamedCount; n++) 4425*cdf0e10cSrcweir if ( aNamedEntries[n]->GetName() == aNamStr ) 4426*cdf0e10cSrcweir throw container::ElementExistException(); 4427*cdf0e10cSrcweir } 4428*cdf0e10cSrcweir 4429*cdf0e10cSrcweir ScRangeList aNew(GetRangeList()); 4430*cdf0e10cSrcweir const ScRangeList& rAddRanges = pRangesImp->GetRangeList(); 4431*cdf0e10cSrcweir sal_uLong nAddCount = rAddRanges.Count(); 4432*cdf0e10cSrcweir for (sal_uLong i=0; i<nAddCount; i++) 4433*cdf0e10cSrcweir aNew.Join( *rAddRanges.GetObject(i) ); 4434*cdf0e10cSrcweir SetNewRanges(aNew); 4435*cdf0e10cSrcweir bDone = sal_True; 4436*cdf0e10cSrcweir 4437*cdf0e10cSrcweir if ( aName.getLength() && nAddCount == 1 ) 4438*cdf0e10cSrcweir { 4439*cdf0e10cSrcweir // if a name is given, also insert into list of named entries 4440*cdf0e10cSrcweir // (only possible for a single range) 4441*cdf0e10cSrcweir // name is not in aNamedEntries (tested above) 4442*cdf0e10cSrcweir 4443*cdf0e10cSrcweir ScNamedEntry* pEntry = new ScNamedEntry( aNamStr, *rAddRanges.GetObject(0) ); 4444*cdf0e10cSrcweir aNamedEntries.Insert( pEntry, aNamedEntries.Count() ); 4445*cdf0e10cSrcweir } 4446*cdf0e10cSrcweir } 4447*cdf0e10cSrcweir } 4448*cdf0e10cSrcweir 4449*cdf0e10cSrcweir if (!bDone) 4450*cdf0e10cSrcweir { 4451*cdf0e10cSrcweir // invalid element - double names are handled above 4452*cdf0e10cSrcweir throw lang::IllegalArgumentException(); 4453*cdf0e10cSrcweir } 4454*cdf0e10cSrcweir } 4455*cdf0e10cSrcweir 4456*cdf0e10cSrcweir sal_Bool lcl_FindRangeByName( const ScRangeList& rRanges, ScDocShell* pDocSh, 4457*cdf0e10cSrcweir const String& rName, sal_uLong& rIndex ) 4458*cdf0e10cSrcweir { 4459*cdf0e10cSrcweir if (pDocSh) 4460*cdf0e10cSrcweir { 4461*cdf0e10cSrcweir String aRangeStr; 4462*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 4463*cdf0e10cSrcweir sal_uLong nCount = rRanges.Count(); 4464*cdf0e10cSrcweir for (sal_uLong i=0; i<nCount; i++) 4465*cdf0e10cSrcweir { 4466*cdf0e10cSrcweir rRanges.GetObject(i)->Format( aRangeStr, SCA_VALID | SCA_TAB_3D, pDoc ); 4467*cdf0e10cSrcweir if ( aRangeStr == rName ) 4468*cdf0e10cSrcweir { 4469*cdf0e10cSrcweir rIndex = i; 4470*cdf0e10cSrcweir return sal_True; 4471*cdf0e10cSrcweir } 4472*cdf0e10cSrcweir } 4473*cdf0e10cSrcweir } 4474*cdf0e10cSrcweir return sal_False; // nicht gefunden 4475*cdf0e10cSrcweir } 4476*cdf0e10cSrcweir 4477*cdf0e10cSrcweir sal_Bool lcl_FindRangeOrEntry( const ScNamedEntryArr_Impl& rNamedEntries, 4478*cdf0e10cSrcweir const ScRangeList& rRanges, ScDocShell* pDocSh, 4479*cdf0e10cSrcweir const String& rName, ScRange& rFound ) 4480*cdf0e10cSrcweir { 4481*cdf0e10cSrcweir // exact range in list? 4482*cdf0e10cSrcweir 4483*cdf0e10cSrcweir sal_uLong nIndex = 0; 4484*cdf0e10cSrcweir if ( lcl_FindRangeByName( rRanges, pDocSh, rName, nIndex ) ) 4485*cdf0e10cSrcweir { 4486*cdf0e10cSrcweir rFound = *rRanges.GetObject(nIndex); 4487*cdf0e10cSrcweir return sal_True; 4488*cdf0e10cSrcweir } 4489*cdf0e10cSrcweir 4490*cdf0e10cSrcweir // range contained in selection? (sheet must be specified) 4491*cdf0e10cSrcweir 4492*cdf0e10cSrcweir ScRange aCellRange; 4493*cdf0e10cSrcweir sal_uInt16 nParse = aCellRange.ParseAny( rName, pDocSh->GetDocument() ); 4494*cdf0e10cSrcweir if ( ( nParse & ( SCA_VALID | SCA_TAB_3D ) ) == ( SCA_VALID | SCA_TAB_3D ) ) 4495*cdf0e10cSrcweir { 4496*cdf0e10cSrcweir ScMarkData aMarkData; 4497*cdf0e10cSrcweir aMarkData.MarkFromRangeList( rRanges, sal_False ); 4498*cdf0e10cSrcweir aMarkData.MarkToMulti(); // needed for IsAllMarked 4499*cdf0e10cSrcweir if ( aMarkData.IsAllMarked( aCellRange ) ) 4500*cdf0e10cSrcweir { 4501*cdf0e10cSrcweir rFound = aCellRange; 4502*cdf0e10cSrcweir return sal_True; 4503*cdf0e10cSrcweir } 4504*cdf0e10cSrcweir } 4505*cdf0e10cSrcweir 4506*cdf0e10cSrcweir // named entry in this object? 4507*cdf0e10cSrcweir 4508*cdf0e10cSrcweir if ( rNamedEntries.Count() ) 4509*cdf0e10cSrcweir { 4510*cdf0e10cSrcweir for ( sal_uInt16 n=0; n<rNamedEntries.Count(); n++ ) 4511*cdf0e10cSrcweir if ( rNamedEntries[n]->GetName() == rName ) 4512*cdf0e10cSrcweir { 4513*cdf0e10cSrcweir // test if named entry is contained in rRanges 4514*cdf0e10cSrcweir 4515*cdf0e10cSrcweir const ScRange& rComp = rNamedEntries[n]->GetRange(); 4516*cdf0e10cSrcweir ScMarkData aMarkData; 4517*cdf0e10cSrcweir aMarkData.MarkFromRangeList( rRanges, sal_False ); 4518*cdf0e10cSrcweir aMarkData.MarkToMulti(); // needed for IsAllMarked 4519*cdf0e10cSrcweir if ( aMarkData.IsAllMarked( rComp ) ) 4520*cdf0e10cSrcweir { 4521*cdf0e10cSrcweir rFound = rComp; 4522*cdf0e10cSrcweir return sal_True; 4523*cdf0e10cSrcweir } 4524*cdf0e10cSrcweir } 4525*cdf0e10cSrcweir } 4526*cdf0e10cSrcweir 4527*cdf0e10cSrcweir return sal_False; // not found 4528*cdf0e10cSrcweir } 4529*cdf0e10cSrcweir 4530*cdf0e10cSrcweir void SAL_CALL ScCellRangesObj::removeByName( const rtl::OUString& aName ) 4531*cdf0e10cSrcweir throw(container::NoSuchElementException, 4532*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 4533*cdf0e10cSrcweir { 4534*cdf0e10cSrcweir ScUnoGuard aGuard; 4535*cdf0e10cSrcweir sal_Bool bDone = sal_False; 4536*cdf0e10cSrcweir String aNameStr(aName); 4537*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4538*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4539*cdf0e10cSrcweir sal_uLong nIndex = 0; 4540*cdf0e10cSrcweir if ( lcl_FindRangeByName( rRanges, pDocSh, aNameStr, nIndex ) ) 4541*cdf0e10cSrcweir { 4542*cdf0e10cSrcweir // einzelnen Range weglassen 4543*cdf0e10cSrcweir ScRangeList aNew; 4544*cdf0e10cSrcweir sal_uLong nCount = rRanges.Count(); 4545*cdf0e10cSrcweir for (sal_uLong i=0; i<nCount; i++) 4546*cdf0e10cSrcweir if (i != nIndex) 4547*cdf0e10cSrcweir aNew.Append( *rRanges.GetObject(i) ); 4548*cdf0e10cSrcweir SetNewRanges(aNew); 4549*cdf0e10cSrcweir bDone = sal_True; 4550*cdf0e10cSrcweir } 4551*cdf0e10cSrcweir else if (pDocSh) 4552*cdf0e10cSrcweir { 4553*cdf0e10cSrcweir // deselect any ranges (parsed or named entry) 4554*cdf0e10cSrcweir ScRangeList aDiff; 4555*cdf0e10cSrcweir sal_Bool bValid = ( aDiff.Parse( aNameStr, pDocSh->GetDocument() ) & SCA_VALID ) != 0; 4556*cdf0e10cSrcweir if ( !bValid && aNamedEntries.Count() ) 4557*cdf0e10cSrcweir { 4558*cdf0e10cSrcweir sal_uInt16 nCount = aNamedEntries.Count(); 4559*cdf0e10cSrcweir for (sal_uInt16 n=0; n<nCount && !bValid; n++) 4560*cdf0e10cSrcweir if (aNamedEntries[n]->GetName() == aNameStr) 4561*cdf0e10cSrcweir { 4562*cdf0e10cSrcweir aDiff.RemoveAll(); 4563*cdf0e10cSrcweir aDiff.Append( aNamedEntries[n]->GetRange() ); 4564*cdf0e10cSrcweir bValid = sal_True; 4565*cdf0e10cSrcweir } 4566*cdf0e10cSrcweir } 4567*cdf0e10cSrcweir if ( bValid ) 4568*cdf0e10cSrcweir { 4569*cdf0e10cSrcweir ScMarkData aMarkData; 4570*cdf0e10cSrcweir aMarkData.MarkFromRangeList( rRanges, sal_False ); 4571*cdf0e10cSrcweir 4572*cdf0e10cSrcweir sal_uLong nDiffCount = aDiff.Count(); 4573*cdf0e10cSrcweir for (sal_uLong i=0; i<nDiffCount; i++) 4574*cdf0e10cSrcweir { 4575*cdf0e10cSrcweir ScRange* pDiffRange = aDiff.GetObject(i); 4576*cdf0e10cSrcweir if (aMarkData.GetTableSelect( pDiffRange->aStart.Tab() )) 4577*cdf0e10cSrcweir aMarkData.SetMultiMarkArea( *pDiffRange, sal_False ); 4578*cdf0e10cSrcweir } 4579*cdf0e10cSrcweir 4580*cdf0e10cSrcweir ScRangeList aNew; 4581*cdf0e10cSrcweir aMarkData.FillRangeListWithMarks( &aNew, sal_False ); 4582*cdf0e10cSrcweir SetNewRanges(aNew); 4583*cdf0e10cSrcweir 4584*cdf0e10cSrcweir bDone = sal_True; //! error if range was not selected before? 4585*cdf0e10cSrcweir } 4586*cdf0e10cSrcweir } 4587*cdf0e10cSrcweir 4588*cdf0e10cSrcweir if (aNamedEntries.Count()) 4589*cdf0e10cSrcweir lcl_RemoveNamedEntry( aNamedEntries, aNameStr ); // remove named entry 4590*cdf0e10cSrcweir 4591*cdf0e10cSrcweir if (!bDone) 4592*cdf0e10cSrcweir throw container::NoSuchElementException(); // not found 4593*cdf0e10cSrcweir } 4594*cdf0e10cSrcweir 4595*cdf0e10cSrcweir // XNameReplace 4596*cdf0e10cSrcweir 4597*cdf0e10cSrcweir void SAL_CALL ScCellRangesObj::replaceByName( const rtl::OUString& aName, const uno::Any& aElement ) 4598*cdf0e10cSrcweir throw(lang::IllegalArgumentException, container::NoSuchElementException, 4599*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 4600*cdf0e10cSrcweir { 4601*cdf0e10cSrcweir ScUnoGuard aGuard; 4602*cdf0e10cSrcweir //! zusammenfassen? 4603*cdf0e10cSrcweir removeByName( aName ); 4604*cdf0e10cSrcweir insertByName( aName, aElement ); 4605*cdf0e10cSrcweir } 4606*cdf0e10cSrcweir 4607*cdf0e10cSrcweir // XNameAccess 4608*cdf0e10cSrcweir 4609*cdf0e10cSrcweir uno::Any SAL_CALL ScCellRangesObj::getByName( const rtl::OUString& aName ) 4610*cdf0e10cSrcweir throw(container::NoSuchElementException, 4611*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 4612*cdf0e10cSrcweir { 4613*cdf0e10cSrcweir ScUnoGuard aGuard; 4614*cdf0e10cSrcweir uno::Any aRet; 4615*cdf0e10cSrcweir 4616*cdf0e10cSrcweir String aNameStr(aName); 4617*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4618*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4619*cdf0e10cSrcweir ScRange aRange; 4620*cdf0e10cSrcweir if ( lcl_FindRangeOrEntry( aNamedEntries, rRanges, pDocSh, aNameStr, aRange ) ) 4621*cdf0e10cSrcweir { 4622*cdf0e10cSrcweir uno::Reference<table::XCellRange> xRange; 4623*cdf0e10cSrcweir if ( aRange.aStart == aRange.aEnd ) 4624*cdf0e10cSrcweir xRange.set(new ScCellObj( pDocSh, aRange.aStart )); 4625*cdf0e10cSrcweir else 4626*cdf0e10cSrcweir xRange.set(new ScCellRangeObj( pDocSh, aRange )); 4627*cdf0e10cSrcweir aRet <<= xRange; 4628*cdf0e10cSrcweir } 4629*cdf0e10cSrcweir else 4630*cdf0e10cSrcweir throw container::NoSuchElementException(); 4631*cdf0e10cSrcweir return aRet; 4632*cdf0e10cSrcweir } 4633*cdf0e10cSrcweir 4634*cdf0e10cSrcweir sal_Bool lcl_FindEntryName( const ScNamedEntryArr_Impl& rNamedEntries, 4635*cdf0e10cSrcweir const ScRange& rRange, String& rName ) 4636*cdf0e10cSrcweir { 4637*cdf0e10cSrcweir sal_uInt16 nCount = rNamedEntries.Count(); 4638*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++) 4639*cdf0e10cSrcweir if (rNamedEntries[i]->GetRange() == rRange) 4640*cdf0e10cSrcweir { 4641*cdf0e10cSrcweir rName = rNamedEntries[i]->GetName(); 4642*cdf0e10cSrcweir return sal_True; 4643*cdf0e10cSrcweir } 4644*cdf0e10cSrcweir return sal_False; 4645*cdf0e10cSrcweir } 4646*cdf0e10cSrcweir 4647*cdf0e10cSrcweir uno::Sequence<rtl::OUString> SAL_CALL ScCellRangesObj::getElementNames() 4648*cdf0e10cSrcweir throw(uno::RuntimeException) 4649*cdf0e10cSrcweir { 4650*cdf0e10cSrcweir ScUnoGuard aGuard; 4651*cdf0e10cSrcweir 4652*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4653*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4654*cdf0e10cSrcweir if (pDocSh) 4655*cdf0e10cSrcweir { 4656*cdf0e10cSrcweir String aRangeStr; 4657*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 4658*cdf0e10cSrcweir sal_uLong nCount = rRanges.Count(); 4659*cdf0e10cSrcweir 4660*cdf0e10cSrcweir uno::Sequence<rtl::OUString> aSeq(nCount); 4661*cdf0e10cSrcweir rtl::OUString* pAry = aSeq.getArray(); 4662*cdf0e10cSrcweir for (sal_uLong i=0; i<nCount; i++) 4663*cdf0e10cSrcweir { 4664*cdf0e10cSrcweir // use given name if for exactly this range, otherwise just format 4665*cdf0e10cSrcweir ScRange aRange = *rRanges.GetObject(i); 4666*cdf0e10cSrcweir if ( !aNamedEntries.Count() || !lcl_FindEntryName( aNamedEntries, aRange, aRangeStr ) ) 4667*cdf0e10cSrcweir aRange.Format( aRangeStr, SCA_VALID | SCA_TAB_3D, pDoc ); 4668*cdf0e10cSrcweir pAry[i] = aRangeStr; 4669*cdf0e10cSrcweir } 4670*cdf0e10cSrcweir return aSeq; 4671*cdf0e10cSrcweir } 4672*cdf0e10cSrcweir return uno::Sequence<rtl::OUString>(0); 4673*cdf0e10cSrcweir } 4674*cdf0e10cSrcweir 4675*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellRangesObj::hasByName( const rtl::OUString& aName ) 4676*cdf0e10cSrcweir throw(uno::RuntimeException) 4677*cdf0e10cSrcweir { 4678*cdf0e10cSrcweir ScUnoGuard aGuard; 4679*cdf0e10cSrcweir String aNameStr(aName); 4680*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4681*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4682*cdf0e10cSrcweir ScRange aRange; 4683*cdf0e10cSrcweir return lcl_FindRangeOrEntry( aNamedEntries, rRanges, pDocSh, aNameStr, aRange ); 4684*cdf0e10cSrcweir } 4685*cdf0e10cSrcweir 4686*cdf0e10cSrcweir // XEnumerationAccess 4687*cdf0e10cSrcweir 4688*cdf0e10cSrcweir uno::Reference<container::XEnumeration> SAL_CALL ScCellRangesObj::createEnumeration() 4689*cdf0e10cSrcweir throw(uno::RuntimeException) 4690*cdf0e10cSrcweir { 4691*cdf0e10cSrcweir ScUnoGuard aGuard; 4692*cdf0e10cSrcweir return new ScIndexEnumeration(this, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.SheetCellRangesEnumeration"))); 4693*cdf0e10cSrcweir } 4694*cdf0e10cSrcweir 4695*cdf0e10cSrcweir // XIndexAccess 4696*cdf0e10cSrcweir 4697*cdf0e10cSrcweir sal_Int32 SAL_CALL ScCellRangesObj::getCount() throw(uno::RuntimeException) 4698*cdf0e10cSrcweir { 4699*cdf0e10cSrcweir ScUnoGuard aGuard; 4700*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4701*cdf0e10cSrcweir return rRanges.Count(); 4702*cdf0e10cSrcweir } 4703*cdf0e10cSrcweir 4704*cdf0e10cSrcweir uno::Any SAL_CALL ScCellRangesObj::getByIndex( sal_Int32 nIndex ) 4705*cdf0e10cSrcweir throw(lang::IndexOutOfBoundsException, 4706*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 4707*cdf0e10cSrcweir { 4708*cdf0e10cSrcweir ScUnoGuard aGuard; 4709*cdf0e10cSrcweir uno::Reference<table::XCellRange> xRange(GetObjectByIndex_Impl(nIndex)); 4710*cdf0e10cSrcweir if (xRange.is()) 4711*cdf0e10cSrcweir return uno::makeAny(xRange); 4712*cdf0e10cSrcweir else 4713*cdf0e10cSrcweir throw lang::IndexOutOfBoundsException(); 4714*cdf0e10cSrcweir // return uno::Any(); 4715*cdf0e10cSrcweir } 4716*cdf0e10cSrcweir 4717*cdf0e10cSrcweir uno::Type SAL_CALL ScCellRangesObj::getElementType() throw(uno::RuntimeException) 4718*cdf0e10cSrcweir { 4719*cdf0e10cSrcweir ScUnoGuard aGuard; 4720*cdf0e10cSrcweir return getCppuType((uno::Reference<table::XCellRange>*)0); 4721*cdf0e10cSrcweir } 4722*cdf0e10cSrcweir 4723*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellRangesObj::hasElements() throw(uno::RuntimeException) 4724*cdf0e10cSrcweir { 4725*cdf0e10cSrcweir ScUnoGuard aGuard; 4726*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4727*cdf0e10cSrcweir return rRanges.Count() != 0; 4728*cdf0e10cSrcweir } 4729*cdf0e10cSrcweir 4730*cdf0e10cSrcweir // XServiceInfo 4731*cdf0e10cSrcweir 4732*cdf0e10cSrcweir rtl::OUString SAL_CALL ScCellRangesObj::getImplementationName() throw(uno::RuntimeException) 4733*cdf0e10cSrcweir { 4734*cdf0e10cSrcweir return rtl::OUString::createFromAscii( "ScCellRangesObj" ); 4735*cdf0e10cSrcweir } 4736*cdf0e10cSrcweir 4737*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellRangesObj::supportsService( const rtl::OUString& rServiceName ) 4738*cdf0e10cSrcweir throw(uno::RuntimeException) 4739*cdf0e10cSrcweir { 4740*cdf0e10cSrcweir String aServiceStr(rServiceName); 4741*cdf0e10cSrcweir return aServiceStr.EqualsAscii( SCSHEETCELLRANGES_SERVICE ) || 4742*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCELLPROPERTIES_SERVICE ) || 4743*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCHARPROPERTIES_SERVICE ) || 4744*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCPARAPROPERTIES_SERVICE ); 4745*cdf0e10cSrcweir } 4746*cdf0e10cSrcweir 4747*cdf0e10cSrcweir uno::Sequence<rtl::OUString> SAL_CALL ScCellRangesObj::getSupportedServiceNames() 4748*cdf0e10cSrcweir throw(uno::RuntimeException) 4749*cdf0e10cSrcweir { 4750*cdf0e10cSrcweir uno::Sequence<rtl::OUString> aRet(4); 4751*cdf0e10cSrcweir rtl::OUString* pArray = aRet.getArray(); 4752*cdf0e10cSrcweir pArray[0] = rtl::OUString::createFromAscii( SCSHEETCELLRANGES_SERVICE ); 4753*cdf0e10cSrcweir pArray[1] = rtl::OUString::createFromAscii( SCCELLPROPERTIES_SERVICE ); 4754*cdf0e10cSrcweir pArray[2] = rtl::OUString::createFromAscii( SCCHARPROPERTIES_SERVICE ); 4755*cdf0e10cSrcweir pArray[3] = rtl::OUString::createFromAscii( SCPARAPROPERTIES_SERVICE ); 4756*cdf0e10cSrcweir return aRet; 4757*cdf0e10cSrcweir } 4758*cdf0e10cSrcweir 4759*cdf0e10cSrcweir //------------------------------------------------------------------------ 4760*cdf0e10cSrcweir 4761*cdf0e10cSrcweir // static 4762*cdf0e10cSrcweir uno::Reference<table::XCellRange> ScCellRangeObj::CreateRangeFromDoc( ScDocument* pDoc, const ScRange& rR ) 4763*cdf0e10cSrcweir { 4764*cdf0e10cSrcweir SfxObjectShell* pObjSh = pDoc->GetDocumentShell(); 4765*cdf0e10cSrcweir if ( pObjSh && pObjSh->ISA(ScDocShell) ) 4766*cdf0e10cSrcweir return new ScCellRangeObj( (ScDocShell*) pObjSh, rR ); 4767*cdf0e10cSrcweir return NULL; 4768*cdf0e10cSrcweir } 4769*cdf0e10cSrcweir 4770*cdf0e10cSrcweir //------------------------------------------------------------------------ 4771*cdf0e10cSrcweir 4772*cdf0e10cSrcweir ScCellRangeObj::ScCellRangeObj(ScDocShell* pDocSh, const ScRange& rR) : 4773*cdf0e10cSrcweir ScCellRangesBase( pDocSh, rR ), 4774*cdf0e10cSrcweir pRangePropSet( lcl_GetRangePropertySet() ), 4775*cdf0e10cSrcweir aRange( rR ) 4776*cdf0e10cSrcweir { 4777*cdf0e10cSrcweir aRange.Justify(); // Anfang / Ende richtig 4778*cdf0e10cSrcweir } 4779*cdf0e10cSrcweir 4780*cdf0e10cSrcweir ScCellRangeObj::~ScCellRangeObj() 4781*cdf0e10cSrcweir { 4782*cdf0e10cSrcweir } 4783*cdf0e10cSrcweir 4784*cdf0e10cSrcweir void ScCellRangeObj::RefChanged() 4785*cdf0e10cSrcweir { 4786*cdf0e10cSrcweir ScCellRangesBase::RefChanged(); 4787*cdf0e10cSrcweir 4788*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 4789*cdf0e10cSrcweir DBG_ASSERT(rRanges.Count() == 1, "was fuer Ranges ?!?!"); 4790*cdf0e10cSrcweir const ScRange* pFirst = rRanges.GetObject(0); 4791*cdf0e10cSrcweir if (pFirst) 4792*cdf0e10cSrcweir { 4793*cdf0e10cSrcweir aRange = *pFirst; 4794*cdf0e10cSrcweir aRange.Justify(); 4795*cdf0e10cSrcweir } 4796*cdf0e10cSrcweir } 4797*cdf0e10cSrcweir 4798*cdf0e10cSrcweir uno::Any SAL_CALL ScCellRangeObj::queryInterface( const uno::Type& rType ) 4799*cdf0e10cSrcweir throw(uno::RuntimeException) 4800*cdf0e10cSrcweir { 4801*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XCellRangeAddressable ) 4802*cdf0e10cSrcweir SC_QUERYINTERFACE( table::XCellRange ) 4803*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetCellRange ) 4804*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XArrayFormulaRange ) 4805*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XArrayFormulaTokens ) 4806*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XCellRangeData ) 4807*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XCellRangeFormula ) 4808*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XMultipleOperation ) 4809*cdf0e10cSrcweir SC_QUERYINTERFACE( util::XMergeable ) 4810*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XCellSeries ) 4811*cdf0e10cSrcweir SC_QUERYINTERFACE( table::XAutoFormattable ) 4812*cdf0e10cSrcweir SC_QUERYINTERFACE( util::XSortable ) 4813*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetFilterableEx ) 4814*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetFilterable ) 4815*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSubTotalCalculatable ) 4816*cdf0e10cSrcweir SC_QUERYINTERFACE( table::XColumnRowRange ) 4817*cdf0e10cSrcweir SC_QUERYINTERFACE( util::XImportable ) 4818*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XCellFormatRangesSupplier ) 4819*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XUniqueCellFormatRangesSupplier ) 4820*cdf0e10cSrcweir 4821*cdf0e10cSrcweir return ScCellRangesBase::queryInterface( rType ); 4822*cdf0e10cSrcweir } 4823*cdf0e10cSrcweir 4824*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::acquire() throw() 4825*cdf0e10cSrcweir { 4826*cdf0e10cSrcweir ScCellRangesBase::acquire(); 4827*cdf0e10cSrcweir } 4828*cdf0e10cSrcweir 4829*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::release() throw() 4830*cdf0e10cSrcweir { 4831*cdf0e10cSrcweir ScCellRangesBase::release(); 4832*cdf0e10cSrcweir } 4833*cdf0e10cSrcweir 4834*cdf0e10cSrcweir uno::Sequence<uno::Type> SAL_CALL ScCellRangeObj::getTypes() throw(uno::RuntimeException) 4835*cdf0e10cSrcweir { 4836*cdf0e10cSrcweir static uno::Sequence<uno::Type> aTypes; 4837*cdf0e10cSrcweir if ( aTypes.getLength() == 0 ) 4838*cdf0e10cSrcweir { 4839*cdf0e10cSrcweir uno::Sequence<uno::Type> aParentTypes(ScCellRangesBase::getTypes()); 4840*cdf0e10cSrcweir long nParentLen = aParentTypes.getLength(); 4841*cdf0e10cSrcweir const uno::Type* pParentPtr = aParentTypes.getConstArray(); 4842*cdf0e10cSrcweir 4843*cdf0e10cSrcweir aTypes.realloc( nParentLen + 17 ); 4844*cdf0e10cSrcweir uno::Type* pPtr = aTypes.getArray(); 4845*cdf0e10cSrcweir pPtr[nParentLen + 0] = getCppuType((const uno::Reference<sheet::XCellRangeAddressable>*)0); 4846*cdf0e10cSrcweir pPtr[nParentLen + 1] = getCppuType((const uno::Reference<sheet::XSheetCellRange>*)0); 4847*cdf0e10cSrcweir pPtr[nParentLen + 2] = getCppuType((const uno::Reference<sheet::XArrayFormulaRange>*)0); 4848*cdf0e10cSrcweir pPtr[nParentLen + 3] = getCppuType((const uno::Reference<sheet::XArrayFormulaTokens>*)0); 4849*cdf0e10cSrcweir pPtr[nParentLen + 4] = getCppuType((const uno::Reference<sheet::XCellRangeData>*)0); 4850*cdf0e10cSrcweir pPtr[nParentLen + 5] = getCppuType((const uno::Reference<sheet::XCellRangeFormula>*)0); 4851*cdf0e10cSrcweir pPtr[nParentLen + 6] = getCppuType((const uno::Reference<sheet::XMultipleOperation>*)0); 4852*cdf0e10cSrcweir pPtr[nParentLen + 7] = getCppuType((const uno::Reference<util::XMergeable>*)0); 4853*cdf0e10cSrcweir pPtr[nParentLen + 8] = getCppuType((const uno::Reference<sheet::XCellSeries>*)0); 4854*cdf0e10cSrcweir pPtr[nParentLen + 9] = getCppuType((const uno::Reference<table::XAutoFormattable>*)0); 4855*cdf0e10cSrcweir pPtr[nParentLen +10] = getCppuType((const uno::Reference<util::XSortable>*)0); 4856*cdf0e10cSrcweir pPtr[nParentLen +11] = getCppuType((const uno::Reference<sheet::XSheetFilterableEx>*)0); 4857*cdf0e10cSrcweir pPtr[nParentLen +12] = getCppuType((const uno::Reference<sheet::XSubTotalCalculatable>*)0); 4858*cdf0e10cSrcweir pPtr[nParentLen +13] = getCppuType((const uno::Reference<table::XColumnRowRange>*)0); 4859*cdf0e10cSrcweir pPtr[nParentLen +14] = getCppuType((const uno::Reference<util::XImportable>*)0); 4860*cdf0e10cSrcweir pPtr[nParentLen +15] = getCppuType((const uno::Reference<sheet::XCellFormatRangesSupplier>*)0); 4861*cdf0e10cSrcweir pPtr[nParentLen +16] = getCppuType((const uno::Reference<sheet::XUniqueCellFormatRangesSupplier>*)0); 4862*cdf0e10cSrcweir 4863*cdf0e10cSrcweir for (long i=0; i<nParentLen; i++) 4864*cdf0e10cSrcweir pPtr[i] = pParentPtr[i]; // parent types first 4865*cdf0e10cSrcweir } 4866*cdf0e10cSrcweir return aTypes; 4867*cdf0e10cSrcweir } 4868*cdf0e10cSrcweir 4869*cdf0e10cSrcweir uno::Sequence<sal_Int8> SAL_CALL ScCellRangeObj::getImplementationId() 4870*cdf0e10cSrcweir throw(uno::RuntimeException) 4871*cdf0e10cSrcweir { 4872*cdf0e10cSrcweir static uno::Sequence< sal_Int8 > aId; 4873*cdf0e10cSrcweir if( aId.getLength() == 0 ) 4874*cdf0e10cSrcweir { 4875*cdf0e10cSrcweir aId.realloc( 16 ); 4876*cdf0e10cSrcweir rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); 4877*cdf0e10cSrcweir } 4878*cdf0e10cSrcweir return aId; 4879*cdf0e10cSrcweir } 4880*cdf0e10cSrcweir 4881*cdf0e10cSrcweir // XCellRange 4882*cdf0e10cSrcweir 4883*cdf0e10cSrcweir // ColumnCount / RowCount sind weggefallen 4884*cdf0e10cSrcweir //! werden im Writer fuer Tabellen noch gebraucht ??? 4885*cdf0e10cSrcweir 4886*cdf0e10cSrcweir uno::Reference<table::XCell> ScCellRangeObj::GetCellByPosition_Impl( 4887*cdf0e10cSrcweir sal_Int32 nColumn, sal_Int32 nRow ) 4888*cdf0e10cSrcweir throw(lang::IndexOutOfBoundsException, uno::RuntimeException) 4889*cdf0e10cSrcweir { 4890*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4891*cdf0e10cSrcweir if (!pDocSh) 4892*cdf0e10cSrcweir throw uno::RuntimeException(); 4893*cdf0e10cSrcweir 4894*cdf0e10cSrcweir if ( nColumn >= 0 && nRow >= 0 ) 4895*cdf0e10cSrcweir { 4896*cdf0e10cSrcweir sal_Int32 nPosX = aRange.aStart.Col() + nColumn; 4897*cdf0e10cSrcweir sal_Int32 nPosY = aRange.aStart.Row() + nRow; 4898*cdf0e10cSrcweir 4899*cdf0e10cSrcweir if ( nPosX <= aRange.aEnd.Col() && nPosY <= aRange.aEnd.Row() ) 4900*cdf0e10cSrcweir { 4901*cdf0e10cSrcweir ScAddress aNew( (SCCOL)nPosX, (SCROW)nPosY, aRange.aStart.Tab() ); 4902*cdf0e10cSrcweir return new ScCellObj( pDocSh, aNew ); 4903*cdf0e10cSrcweir } 4904*cdf0e10cSrcweir } 4905*cdf0e10cSrcweir 4906*cdf0e10cSrcweir throw lang::IndexOutOfBoundsException(); 4907*cdf0e10cSrcweir // return NULL; 4908*cdf0e10cSrcweir } 4909*cdf0e10cSrcweir 4910*cdf0e10cSrcweir uno::Reference<table::XCell> SAL_CALL ScCellRangeObj::getCellByPosition( 4911*cdf0e10cSrcweir sal_Int32 nColumn, sal_Int32 nRow ) 4912*cdf0e10cSrcweir throw(lang::IndexOutOfBoundsException, uno::RuntimeException) 4913*cdf0e10cSrcweir { 4914*cdf0e10cSrcweir ScUnoGuard aGuard; 4915*cdf0e10cSrcweir 4916*cdf0e10cSrcweir return GetCellByPosition_Impl(nColumn, nRow); 4917*cdf0e10cSrcweir } 4918*cdf0e10cSrcweir 4919*cdf0e10cSrcweir uno::Reference<table::XCellRange> SAL_CALL ScCellRangeObj::getCellRangeByPosition( 4920*cdf0e10cSrcweir sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom ) 4921*cdf0e10cSrcweir throw(lang::IndexOutOfBoundsException, uno::RuntimeException) 4922*cdf0e10cSrcweir { 4923*cdf0e10cSrcweir ScUnoGuard aGuard; 4924*cdf0e10cSrcweir 4925*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4926*cdf0e10cSrcweir if (!pDocSh) 4927*cdf0e10cSrcweir throw uno::RuntimeException(); 4928*cdf0e10cSrcweir 4929*cdf0e10cSrcweir if ( nLeft >= 0 && nTop >= 0 && nRight >= 0 && nBottom >= 0 ) 4930*cdf0e10cSrcweir { 4931*cdf0e10cSrcweir sal_Int32 nStartX = aRange.aStart.Col() + nLeft; 4932*cdf0e10cSrcweir sal_Int32 nStartY = aRange.aStart.Row() + nTop; 4933*cdf0e10cSrcweir sal_Int32 nEndX = aRange.aStart.Col() + nRight; 4934*cdf0e10cSrcweir sal_Int32 nEndY = aRange.aStart.Row() + nBottom; 4935*cdf0e10cSrcweir 4936*cdf0e10cSrcweir if ( nStartX <= nEndX && nEndX <= aRange.aEnd.Col() && 4937*cdf0e10cSrcweir nStartY <= nEndY && nEndY <= aRange.aEnd.Row() ) 4938*cdf0e10cSrcweir { 4939*cdf0e10cSrcweir ScRange aNew( (SCCOL)nStartX, (SCROW)nStartY, aRange.aStart.Tab(), 4940*cdf0e10cSrcweir (SCCOL)nEndX, (SCROW)nEndY, aRange.aEnd.Tab() ); 4941*cdf0e10cSrcweir return new ScCellRangeObj( pDocSh, aNew ); 4942*cdf0e10cSrcweir } 4943*cdf0e10cSrcweir } 4944*cdf0e10cSrcweir 4945*cdf0e10cSrcweir throw lang::IndexOutOfBoundsException(); 4946*cdf0e10cSrcweir // return NULL; 4947*cdf0e10cSrcweir } 4948*cdf0e10cSrcweir 4949*cdf0e10cSrcweir 4950*cdf0e10cSrcweir uno::Reference<table::XCellRange> SAL_CALL ScCellRangeObj::getCellRangeByName( 4951*cdf0e10cSrcweir const rtl::OUString& aName ) throw(uno::RuntimeException) 4952*cdf0e10cSrcweir { 4953*cdf0e10cSrcweir return getCellRangeByName( aName, ScAddress::detailsOOOa1 ); 4954*cdf0e10cSrcweir } 4955*cdf0e10cSrcweir 4956*cdf0e10cSrcweir uno::Reference<table::XCellRange> ScCellRangeObj::getCellRangeByName( 4957*cdf0e10cSrcweir const rtl::OUString& aName, const ScAddress::Details& rDetails ) throw(uno::RuntimeException) 4958*cdf0e10cSrcweir { 4959*cdf0e10cSrcweir // name refers to the whole document (with the range's table as default), 4960*cdf0e10cSrcweir // valid only if the range is within this range 4961*cdf0e10cSrcweir 4962*cdf0e10cSrcweir ScUnoGuard aGuard; 4963*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 4964*cdf0e10cSrcweir if ( pDocSh ) 4965*cdf0e10cSrcweir { 4966*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 4967*cdf0e10cSrcweir SCTAB nTab = aRange.aStart.Tab(); 4968*cdf0e10cSrcweir 4969*cdf0e10cSrcweir ScRange aCellRange; 4970*cdf0e10cSrcweir sal_Bool bFound = sal_False; 4971*cdf0e10cSrcweir String aString(aName); 4972*cdf0e10cSrcweir sal_uInt16 nParse = aCellRange.ParseAny( aString, pDoc, rDetails ); 4973*cdf0e10cSrcweir if ( nParse & SCA_VALID ) 4974*cdf0e10cSrcweir { 4975*cdf0e10cSrcweir if ( !(nParse & SCA_TAB_3D) ) // keine Tabelle angegeben -> auf dieser Tabelle 4976*cdf0e10cSrcweir { 4977*cdf0e10cSrcweir aCellRange.aStart.SetTab(nTab); 4978*cdf0e10cSrcweir aCellRange.aEnd.SetTab(nTab); 4979*cdf0e10cSrcweir } 4980*cdf0e10cSrcweir bFound = sal_True; 4981*cdf0e10cSrcweir } 4982*cdf0e10cSrcweir else 4983*cdf0e10cSrcweir { 4984*cdf0e10cSrcweir ScRangeUtil aRangeUtil; 4985*cdf0e10cSrcweir if ( aRangeUtil.MakeRangeFromName( aString, pDoc, nTab, aCellRange, RUTL_NAMES ) || 4986*cdf0e10cSrcweir aRangeUtil.MakeRangeFromName( aString, pDoc, nTab, aCellRange, RUTL_DBASE ) ) 4987*cdf0e10cSrcweir bFound = sal_True; 4988*cdf0e10cSrcweir } 4989*cdf0e10cSrcweir 4990*cdf0e10cSrcweir if (bFound) // valid only if within this object's range 4991*cdf0e10cSrcweir { 4992*cdf0e10cSrcweir if (!aRange.In(aCellRange)) 4993*cdf0e10cSrcweir bFound = sal_False; 4994*cdf0e10cSrcweir } 4995*cdf0e10cSrcweir 4996*cdf0e10cSrcweir if (bFound) 4997*cdf0e10cSrcweir { 4998*cdf0e10cSrcweir if ( aCellRange.aStart == aCellRange.aEnd ) 4999*cdf0e10cSrcweir return new ScCellObj( pDocSh, aCellRange.aStart ); 5000*cdf0e10cSrcweir else 5001*cdf0e10cSrcweir return new ScCellRangeObj( pDocSh, aCellRange ); 5002*cdf0e10cSrcweir } 5003*cdf0e10cSrcweir } 5004*cdf0e10cSrcweir 5005*cdf0e10cSrcweir throw uno::RuntimeException(); 5006*cdf0e10cSrcweir // return NULL; 5007*cdf0e10cSrcweir } 5008*cdf0e10cSrcweir 5009*cdf0e10cSrcweir // XColumnRowRange 5010*cdf0e10cSrcweir 5011*cdf0e10cSrcweir uno::Reference<table::XTableColumns> SAL_CALL ScCellRangeObj::getColumns() throw(uno::RuntimeException) 5012*cdf0e10cSrcweir { 5013*cdf0e10cSrcweir ScUnoGuard aGuard; 5014*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5015*cdf0e10cSrcweir if (pDocSh) 5016*cdf0e10cSrcweir return new ScTableColumnsObj( pDocSh, aRange.aStart.Tab(), 5017*cdf0e10cSrcweir aRange.aStart.Col(), aRange.aEnd.Col() ); 5018*cdf0e10cSrcweir 5019*cdf0e10cSrcweir DBG_ERROR("Dokument ungueltig"); 5020*cdf0e10cSrcweir return NULL; 5021*cdf0e10cSrcweir } 5022*cdf0e10cSrcweir 5023*cdf0e10cSrcweir uno::Reference<table::XTableRows> SAL_CALL ScCellRangeObj::getRows() throw(uno::RuntimeException) 5024*cdf0e10cSrcweir { 5025*cdf0e10cSrcweir ScUnoGuard aGuard; 5026*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5027*cdf0e10cSrcweir if (pDocSh) 5028*cdf0e10cSrcweir return new ScTableRowsObj( pDocSh, aRange.aStart.Tab(), 5029*cdf0e10cSrcweir aRange.aStart.Row(), aRange.aEnd.Row() ); 5030*cdf0e10cSrcweir 5031*cdf0e10cSrcweir DBG_ERROR("Dokument ungueltig"); 5032*cdf0e10cSrcweir return NULL; 5033*cdf0e10cSrcweir } 5034*cdf0e10cSrcweir 5035*cdf0e10cSrcweir // XAddressableCellRange 5036*cdf0e10cSrcweir 5037*cdf0e10cSrcweir table::CellRangeAddress SAL_CALL ScCellRangeObj::getRangeAddress() throw(uno::RuntimeException) 5038*cdf0e10cSrcweir { 5039*cdf0e10cSrcweir ScUnoGuard aGuard; 5040*cdf0e10cSrcweir table::CellRangeAddress aRet; 5041*cdf0e10cSrcweir ScUnoConversion::FillApiRange( aRet, aRange ); 5042*cdf0e10cSrcweir return aRet; 5043*cdf0e10cSrcweir } 5044*cdf0e10cSrcweir 5045*cdf0e10cSrcweir // XSheetCellRange 5046*cdf0e10cSrcweir 5047*cdf0e10cSrcweir uno::Reference<sheet::XSpreadsheet> SAL_CALL ScCellRangeObj::getSpreadsheet() 5048*cdf0e10cSrcweir throw(uno::RuntimeException) 5049*cdf0e10cSrcweir { 5050*cdf0e10cSrcweir ScUnoGuard aGuard; 5051*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5052*cdf0e10cSrcweir if (pDocSh) 5053*cdf0e10cSrcweir return new ScTableSheetObj( pDocSh, aRange.aStart.Tab() ); 5054*cdf0e10cSrcweir 5055*cdf0e10cSrcweir DBG_ERROR("Dokument ungueltig"); 5056*cdf0e10cSrcweir return NULL; 5057*cdf0e10cSrcweir } 5058*cdf0e10cSrcweir 5059*cdf0e10cSrcweir // XArrayFormulaRange 5060*cdf0e10cSrcweir 5061*cdf0e10cSrcweir rtl::OUString SAL_CALL ScCellRangeObj::getArrayFormula() throw(uno::RuntimeException) 5062*cdf0e10cSrcweir { 5063*cdf0e10cSrcweir ScUnoGuard aGuard; 5064*cdf0e10cSrcweir 5065*cdf0e10cSrcweir // Matrix-Formel, wenn eindeutig Teil einer Matrix, 5066*cdf0e10cSrcweir // also wenn Anfang und Ende des Blocks zur selben Matrix gehoeren. 5067*cdf0e10cSrcweir // Sonst Leerstring. 5068*cdf0e10cSrcweir 5069*cdf0e10cSrcweir String aFormula; 5070*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5071*cdf0e10cSrcweir if (pDocSh) 5072*cdf0e10cSrcweir { 5073*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 5074*cdf0e10cSrcweir const ScBaseCell* pCell1 = pDoc->GetCell( aRange.aStart ); 5075*cdf0e10cSrcweir const ScBaseCell* pCell2 = pDoc->GetCell( aRange.aEnd ); 5076*cdf0e10cSrcweir if ( pCell1 && pCell2 && pCell1->GetCellType() == CELLTYPE_FORMULA && 5077*cdf0e10cSrcweir pCell2->GetCellType() == CELLTYPE_FORMULA ) 5078*cdf0e10cSrcweir { 5079*cdf0e10cSrcweir const ScFormulaCell* pFCell1 = (const ScFormulaCell*)pCell1; 5080*cdf0e10cSrcweir const ScFormulaCell* pFCell2 = (const ScFormulaCell*)pCell2; 5081*cdf0e10cSrcweir ScAddress aStart1; 5082*cdf0e10cSrcweir ScAddress aStart2; 5083*cdf0e10cSrcweir if ( pFCell1->GetMatrixOrigin( aStart1 ) && pFCell2->GetMatrixOrigin( aStart2 ) ) 5084*cdf0e10cSrcweir { 5085*cdf0e10cSrcweir if ( aStart1 == aStart2 ) // beides dieselbe Matrix 5086*cdf0e10cSrcweir pFCell1->GetFormula( aFormula ); // egal, von welcher Zelle 5087*cdf0e10cSrcweir } 5088*cdf0e10cSrcweir } 5089*cdf0e10cSrcweir } 5090*cdf0e10cSrcweir return aFormula; 5091*cdf0e10cSrcweir } 5092*cdf0e10cSrcweir 5093*cdf0e10cSrcweir void ScCellRangeObj::SetArrayFormula_Impl( const rtl::OUString& rFormula, 5094*cdf0e10cSrcweir const rtl::OUString& rFormulaNmsp, const formula::FormulaGrammar::Grammar eGrammar ) throw(uno::RuntimeException) 5095*cdf0e10cSrcweir { 5096*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5097*cdf0e10cSrcweir if (pDocSh) 5098*cdf0e10cSrcweir { 5099*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 5100*cdf0e10cSrcweir if ( rFormula.getLength() ) 5101*cdf0e10cSrcweir { 5102*cdf0e10cSrcweir if ( ScTableSheetObj::getImplementation( (cppu::OWeakObject*)this ) ) 5103*cdf0e10cSrcweir { 5104*cdf0e10cSrcweir // #74681# don't set array formula for sheet object 5105*cdf0e10cSrcweir throw uno::RuntimeException(); 5106*cdf0e10cSrcweir } 5107*cdf0e10cSrcweir 5108*cdf0e10cSrcweir aFunc.EnterMatrix( aRange, NULL, NULL, rFormula, sal_True, sal_True, rFormulaNmsp, eGrammar ); 5109*cdf0e10cSrcweir } 5110*cdf0e10cSrcweir else 5111*cdf0e10cSrcweir { 5112*cdf0e10cSrcweir // empty string -> erase array formula 5113*cdf0e10cSrcweir ScMarkData aMark; 5114*cdf0e10cSrcweir aMark.SetMarkArea( aRange ); 5115*cdf0e10cSrcweir aMark.SelectTable( aRange.aStart.Tab(), sal_True ); 5116*cdf0e10cSrcweir aFunc.DeleteContents( aMark, IDF_CONTENTS, sal_True, sal_True ); 5117*cdf0e10cSrcweir } 5118*cdf0e10cSrcweir } 5119*cdf0e10cSrcweir } 5120*cdf0e10cSrcweir 5121*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::setArrayFormula( const rtl::OUString& aFormula ) 5122*cdf0e10cSrcweir throw(uno::RuntimeException) 5123*cdf0e10cSrcweir { 5124*cdf0e10cSrcweir ScUnoGuard aGuard; 5125*cdf0e10cSrcweir // GRAM_PODF_A1 for API compatibility. 5126*cdf0e10cSrcweir SetArrayFormula_Impl( aFormula, ::rtl::OUString(), formula::FormulaGrammar::GRAM_PODF_A1); 5127*cdf0e10cSrcweir } 5128*cdf0e10cSrcweir 5129*cdf0e10cSrcweir void ScCellRangeObj::SetArrayFormulaWithGrammar( const rtl::OUString& rFormula, 5130*cdf0e10cSrcweir const rtl::OUString& rFormulaNmsp, const formula::FormulaGrammar::Grammar eGrammar ) throw(uno::RuntimeException) 5131*cdf0e10cSrcweir { 5132*cdf0e10cSrcweir ScUnoGuard aGuard; 5133*cdf0e10cSrcweir SetArrayFormula_Impl( rFormula, rFormulaNmsp, eGrammar); 5134*cdf0e10cSrcweir } 5135*cdf0e10cSrcweir 5136*cdf0e10cSrcweir // XArrayFormulaTokens 5137*cdf0e10cSrcweir 5138*cdf0e10cSrcweir uno::Sequence<sheet::FormulaToken> SAL_CALL ScCellRangeObj::getArrayTokens() throw(uno::RuntimeException) 5139*cdf0e10cSrcweir { 5140*cdf0e10cSrcweir ScUnoGuard aGuard; 5141*cdf0e10cSrcweir 5142*cdf0e10cSrcweir // same cell logic as in getArrayFormula 5143*cdf0e10cSrcweir 5144*cdf0e10cSrcweir uno::Sequence<sheet::FormulaToken> aSequence; 5145*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5146*cdf0e10cSrcweir if ( pDocSh ) 5147*cdf0e10cSrcweir { 5148*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 5149*cdf0e10cSrcweir const ScBaseCell* pCell1 = pDoc->GetCell( aRange.aStart ); 5150*cdf0e10cSrcweir const ScBaseCell* pCell2 = pDoc->GetCell( aRange.aEnd ); 5151*cdf0e10cSrcweir if ( pCell1 && pCell2 && pCell1->GetCellType() == CELLTYPE_FORMULA && 5152*cdf0e10cSrcweir pCell2->GetCellType() == CELLTYPE_FORMULA ) 5153*cdf0e10cSrcweir { 5154*cdf0e10cSrcweir const ScFormulaCell* pFCell1 = (const ScFormulaCell*)pCell1; 5155*cdf0e10cSrcweir const ScFormulaCell* pFCell2 = (const ScFormulaCell*)pCell2; 5156*cdf0e10cSrcweir ScAddress aStart1; 5157*cdf0e10cSrcweir ScAddress aStart2; 5158*cdf0e10cSrcweir if ( pFCell1->GetMatrixOrigin( aStart1 ) && pFCell2->GetMatrixOrigin( aStart2 ) ) 5159*cdf0e10cSrcweir { 5160*cdf0e10cSrcweir if ( aStart1 == aStart2 ) 5161*cdf0e10cSrcweir { 5162*cdf0e10cSrcweir ScTokenArray* pTokenArray = pFCell1->GetCode(); 5163*cdf0e10cSrcweir if ( pTokenArray ) 5164*cdf0e10cSrcweir (void)ScTokenConversion::ConvertToTokenSequence( *pDoc, aSequence, *pTokenArray ); 5165*cdf0e10cSrcweir } 5166*cdf0e10cSrcweir } 5167*cdf0e10cSrcweir } 5168*cdf0e10cSrcweir } 5169*cdf0e10cSrcweir return aSequence; 5170*cdf0e10cSrcweir } 5171*cdf0e10cSrcweir 5172*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::setArrayTokens( const uno::Sequence<sheet::FormulaToken>& rTokens ) throw(uno::RuntimeException) 5173*cdf0e10cSrcweir { 5174*cdf0e10cSrcweir ScUnoGuard aGuard; 5175*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5176*cdf0e10cSrcweir if ( pDocSh ) 5177*cdf0e10cSrcweir { 5178*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 5179*cdf0e10cSrcweir if ( rTokens.getLength() ) 5180*cdf0e10cSrcweir { 5181*cdf0e10cSrcweir if ( ScTableSheetObj::getImplementation( (cppu::OWeakObject*)this ) ) 5182*cdf0e10cSrcweir { 5183*cdf0e10cSrcweir throw uno::RuntimeException(); 5184*cdf0e10cSrcweir } 5185*cdf0e10cSrcweir 5186*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 5187*cdf0e10cSrcweir ScTokenArray aTokenArray; 5188*cdf0e10cSrcweir (void)ScTokenConversion::ConvertToTokenArray( *pDoc, aTokenArray, rTokens ); 5189*cdf0e10cSrcweir 5190*cdf0e10cSrcweir // Actually GRAM_PODF_A1 is a don't-care here because of the token 5191*cdf0e10cSrcweir // array being set, it fits with other API compatibility grammars 5192*cdf0e10cSrcweir // though. 5193*cdf0e10cSrcweir aFunc.EnterMatrix( aRange, NULL, &aTokenArray, EMPTY_STRING, sal_True, sal_True, EMPTY_STRING, formula::FormulaGrammar::GRAM_PODF_A1 ); 5194*cdf0e10cSrcweir } 5195*cdf0e10cSrcweir else 5196*cdf0e10cSrcweir { 5197*cdf0e10cSrcweir // empty sequence -> erase array formula 5198*cdf0e10cSrcweir ScMarkData aMark; 5199*cdf0e10cSrcweir aMark.SetMarkArea( aRange ); 5200*cdf0e10cSrcweir aMark.SelectTable( aRange.aStart.Tab(), sal_True ); 5201*cdf0e10cSrcweir aFunc.DeleteContents( aMark, IDF_CONTENTS, sal_True, sal_True ); 5202*cdf0e10cSrcweir } 5203*cdf0e10cSrcweir } 5204*cdf0e10cSrcweir } 5205*cdf0e10cSrcweir 5206*cdf0e10cSrcweir // XCellRangeData 5207*cdf0e10cSrcweir 5208*cdf0e10cSrcweir uno::Sequence< uno::Sequence<uno::Any> > SAL_CALL ScCellRangeObj::getDataArray() 5209*cdf0e10cSrcweir throw(uno::RuntimeException) 5210*cdf0e10cSrcweir { 5211*cdf0e10cSrcweir ScUnoGuard aGuard; 5212*cdf0e10cSrcweir 5213*cdf0e10cSrcweir if ( ScTableSheetObj::getImplementation( (cppu::OWeakObject*)this ) ) 5214*cdf0e10cSrcweir { 5215*cdf0e10cSrcweir // don't create a data array for the sheet 5216*cdf0e10cSrcweir throw uno::RuntimeException(); 5217*cdf0e10cSrcweir } 5218*cdf0e10cSrcweir 5219*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5220*cdf0e10cSrcweir if (pDocSh) 5221*cdf0e10cSrcweir { 5222*cdf0e10cSrcweir uno::Any aAny; 5223*cdf0e10cSrcweir // bAllowNV = TRUE: errors as void 5224*cdf0e10cSrcweir if ( ScRangeToSequence::FillMixedArray( aAny, pDocSh->GetDocument(), aRange, sal_True ) ) 5225*cdf0e10cSrcweir { 5226*cdf0e10cSrcweir uno::Sequence< uno::Sequence<uno::Any> > aSeq; 5227*cdf0e10cSrcweir if ( aAny >>= aSeq ) 5228*cdf0e10cSrcweir return aSeq; // success 5229*cdf0e10cSrcweir } 5230*cdf0e10cSrcweir } 5231*cdf0e10cSrcweir 5232*cdf0e10cSrcweir throw uno::RuntimeException(); // no other exceptions specified 5233*cdf0e10cSrcweir // return uno::Sequence< uno::Sequence<uno::Any> >(0); 5234*cdf0e10cSrcweir } 5235*cdf0e10cSrcweir 5236*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::setDataArray( 5237*cdf0e10cSrcweir const uno::Sequence< uno::Sequence<uno::Any> >& aArray ) 5238*cdf0e10cSrcweir throw(uno::RuntimeException) 5239*cdf0e10cSrcweir { 5240*cdf0e10cSrcweir ScUnoGuard aGuard; 5241*cdf0e10cSrcweir 5242*cdf0e10cSrcweir sal_Bool bDone = sal_False; 5243*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5244*cdf0e10cSrcweir if (pDocSh) 5245*cdf0e10cSrcweir { 5246*cdf0e10cSrcweir //! move lcl_PutDataArray to docfunc? 5247*cdf0e10cSrcweir bDone = lcl_PutDataArray( *pDocSh, aRange, aArray ); 5248*cdf0e10cSrcweir } 5249*cdf0e10cSrcweir 5250*cdf0e10cSrcweir if (!bDone) 5251*cdf0e10cSrcweir throw uno::RuntimeException(); // no other exceptions specified 5252*cdf0e10cSrcweir } 5253*cdf0e10cSrcweir 5254*cdf0e10cSrcweir // XCellRangeFormula 5255*cdf0e10cSrcweir 5256*cdf0e10cSrcweir uno::Sequence< uno::Sequence<rtl::OUString> > SAL_CALL ScCellRangeObj::getFormulaArray() 5257*cdf0e10cSrcweir throw(uno::RuntimeException) 5258*cdf0e10cSrcweir { 5259*cdf0e10cSrcweir ScUnoGuard aGuard; 5260*cdf0e10cSrcweir 5261*cdf0e10cSrcweir if ( ScTableSheetObj::getImplementation( (cppu::OWeakObject*)this ) ) 5262*cdf0e10cSrcweir { 5263*cdf0e10cSrcweir // don't create a data array for the sheet 5264*cdf0e10cSrcweir throw uno::RuntimeException(); 5265*cdf0e10cSrcweir } 5266*cdf0e10cSrcweir 5267*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5268*cdf0e10cSrcweir if (pDocSh) 5269*cdf0e10cSrcweir { 5270*cdf0e10cSrcweir SCCOL nStartCol = aRange.aStart.Col(); 5271*cdf0e10cSrcweir SCROW nStartRow = aRange.aStart.Row(); 5272*cdf0e10cSrcweir SCCOL nEndCol = aRange.aEnd.Col(); 5273*cdf0e10cSrcweir SCROW nEndRow = aRange.aEnd.Row(); 5274*cdf0e10cSrcweir SCCOL nColCount = nEndCol + 1 - nStartCol; 5275*cdf0e10cSrcweir SCROW nRowCount = nEndRow + 1 - nStartRow; 5276*cdf0e10cSrcweir SCTAB nTab = aRange.aStart.Tab(); 5277*cdf0e10cSrcweir 5278*cdf0e10cSrcweir uno::Sequence< uno::Sequence<rtl::OUString> > aRowSeq( nRowCount ); 5279*cdf0e10cSrcweir uno::Sequence<rtl::OUString>* pRowAry = aRowSeq.getArray(); 5280*cdf0e10cSrcweir for (SCROW nRowIndex = 0; nRowIndex < nRowCount; nRowIndex++) 5281*cdf0e10cSrcweir { 5282*cdf0e10cSrcweir uno::Sequence<rtl::OUString> aColSeq( nColCount ); 5283*cdf0e10cSrcweir rtl::OUString* pColAry = aColSeq.getArray(); 5284*cdf0e10cSrcweir for (SCCOL nColIndex = 0; nColIndex < nColCount; nColIndex++) 5285*cdf0e10cSrcweir pColAry[nColIndex] = lcl_GetInputString( pDocSh->GetDocument(), 5286*cdf0e10cSrcweir ScAddress( nStartCol+nColIndex, nStartRow+nRowIndex, nTab ), sal_True ); 5287*cdf0e10cSrcweir 5288*cdf0e10cSrcweir pRowAry[nRowIndex] = aColSeq; 5289*cdf0e10cSrcweir } 5290*cdf0e10cSrcweir 5291*cdf0e10cSrcweir return aRowSeq; 5292*cdf0e10cSrcweir } 5293*cdf0e10cSrcweir 5294*cdf0e10cSrcweir throw uno::RuntimeException(); // no other exceptions specified 5295*cdf0e10cSrcweir // return uno::Sequence< uno::Sequence<rtl::OUString> >(0); 5296*cdf0e10cSrcweir } 5297*cdf0e10cSrcweir 5298*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::setFormulaArray( 5299*cdf0e10cSrcweir const uno::Sequence< uno::Sequence<rtl::OUString> >& aArray ) 5300*cdf0e10cSrcweir throw(uno::RuntimeException) 5301*cdf0e10cSrcweir { 5302*cdf0e10cSrcweir ScUnoGuard aGuard; 5303*cdf0e10cSrcweir 5304*cdf0e10cSrcweir sal_Bool bDone = sal_False; 5305*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5306*cdf0e10cSrcweir if (pDocSh) 5307*cdf0e10cSrcweir { 5308*cdf0e10cSrcweir ScExternalRefManager::ApiGuard aExtRefGuard(pDocSh->GetDocument()); 5309*cdf0e10cSrcweir 5310*cdf0e10cSrcweir // GRAM_PODF_A1 for API compatibility. 5311*cdf0e10cSrcweir bDone = lcl_PutFormulaArray( *pDocSh, aRange, aArray, EMPTY_STRING, formula::FormulaGrammar::GRAM_PODF_A1 ); 5312*cdf0e10cSrcweir } 5313*cdf0e10cSrcweir 5314*cdf0e10cSrcweir if (!bDone) 5315*cdf0e10cSrcweir throw uno::RuntimeException(); // no other exceptions specified 5316*cdf0e10cSrcweir } 5317*cdf0e10cSrcweir 5318*cdf0e10cSrcweir // XMultipleOperation 5319*cdf0e10cSrcweir 5320*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::setTableOperation( const table::CellRangeAddress& aFormulaRange, 5321*cdf0e10cSrcweir sheet::TableOperationMode nMode, 5322*cdf0e10cSrcweir const table::CellAddress& aColumnCell, 5323*cdf0e10cSrcweir const table::CellAddress& aRowCell ) 5324*cdf0e10cSrcweir throw(uno::RuntimeException) 5325*cdf0e10cSrcweir { 5326*cdf0e10cSrcweir ScUnoGuard aGuard; 5327*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5328*cdf0e10cSrcweir if (pDocSh) 5329*cdf0e10cSrcweir { 5330*cdf0e10cSrcweir sal_Bool bError = sal_False; 5331*cdf0e10cSrcweir ScTabOpParam aParam; 5332*cdf0e10cSrcweir aParam.aRefFormulaCell = ScRefAddress( (SCCOL)aFormulaRange.StartColumn, 5333*cdf0e10cSrcweir (SCROW)aFormulaRange.StartRow, aFormulaRange.Sheet, 5334*cdf0e10cSrcweir sal_False, sal_False, sal_False ); 5335*cdf0e10cSrcweir aParam.aRefFormulaEnd = ScRefAddress( (SCCOL)aFormulaRange.EndColumn, 5336*cdf0e10cSrcweir (SCROW)aFormulaRange.EndRow, aFormulaRange.Sheet, 5337*cdf0e10cSrcweir sal_False, sal_False, sal_False ); 5338*cdf0e10cSrcweir aParam.aRefRowCell = ScRefAddress( (SCCOL)aRowCell.Column, 5339*cdf0e10cSrcweir (SCROW)aRowCell.Row, aRowCell.Sheet, 5340*cdf0e10cSrcweir sal_False, sal_False, sal_False ); 5341*cdf0e10cSrcweir aParam.aRefColCell = ScRefAddress( (SCCOL)aColumnCell.Column, 5342*cdf0e10cSrcweir (SCROW)aColumnCell.Row, aColumnCell.Sheet, 5343*cdf0e10cSrcweir sal_False, sal_False, sal_False ); 5344*cdf0e10cSrcweir switch (nMode) 5345*cdf0e10cSrcweir { 5346*cdf0e10cSrcweir case sheet::TableOperationMode_COLUMN: 5347*cdf0e10cSrcweir aParam.nMode = 0; 5348*cdf0e10cSrcweir break; 5349*cdf0e10cSrcweir case sheet::TableOperationMode_ROW: 5350*cdf0e10cSrcweir aParam.nMode = 1; 5351*cdf0e10cSrcweir break; 5352*cdf0e10cSrcweir case sheet::TableOperationMode_BOTH: 5353*cdf0e10cSrcweir aParam.nMode = 2; 5354*cdf0e10cSrcweir break; 5355*cdf0e10cSrcweir default: 5356*cdf0e10cSrcweir bError = sal_True; 5357*cdf0e10cSrcweir } 5358*cdf0e10cSrcweir 5359*cdf0e10cSrcweir if (!bError) 5360*cdf0e10cSrcweir { 5361*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 5362*cdf0e10cSrcweir aFunc.TabOp( aRange, NULL, aParam, sal_True, sal_True ); 5363*cdf0e10cSrcweir } 5364*cdf0e10cSrcweir } 5365*cdf0e10cSrcweir } 5366*cdf0e10cSrcweir 5367*cdf0e10cSrcweir // XMergeable 5368*cdf0e10cSrcweir 5369*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::merge( sal_Bool bMerge ) throw(uno::RuntimeException) 5370*cdf0e10cSrcweir { 5371*cdf0e10cSrcweir ScUnoGuard aGuard; 5372*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5373*cdf0e10cSrcweir if ( pDocSh ) 5374*cdf0e10cSrcweir { 5375*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 5376*cdf0e10cSrcweir if ( bMerge ) 5377*cdf0e10cSrcweir aFunc.MergeCells( aRange, sal_False, sal_True, sal_True ); 5378*cdf0e10cSrcweir else 5379*cdf0e10cSrcweir aFunc.UnmergeCells( aRange, sal_True, sal_True ); 5380*cdf0e10cSrcweir 5381*cdf0e10cSrcweir //! Fehler abfangen? 5382*cdf0e10cSrcweir } 5383*cdf0e10cSrcweir } 5384*cdf0e10cSrcweir 5385*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellRangeObj::getIsMerged() throw(uno::RuntimeException) 5386*cdf0e10cSrcweir { 5387*cdf0e10cSrcweir ScUnoGuard aGuard; 5388*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5389*cdf0e10cSrcweir return pDocSh && pDocSh->GetDocument()->HasAttrib( aRange, HASATTR_MERGED ); 5390*cdf0e10cSrcweir } 5391*cdf0e10cSrcweir 5392*cdf0e10cSrcweir // XCellSeries 5393*cdf0e10cSrcweir 5394*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::fillSeries( sheet::FillDirection nFillDirection, 5395*cdf0e10cSrcweir sheet::FillMode nFillMode, sheet::FillDateMode nFillDateMode, 5396*cdf0e10cSrcweir double fStep, double fEndValue ) throw(uno::RuntimeException) 5397*cdf0e10cSrcweir { 5398*cdf0e10cSrcweir ScUnoGuard aGuard; 5399*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5400*cdf0e10cSrcweir if ( pDocSh ) 5401*cdf0e10cSrcweir { 5402*cdf0e10cSrcweir sal_Bool bError = sal_False; 5403*cdf0e10cSrcweir 5404*cdf0e10cSrcweir FillDir eDir = FILL_TO_BOTTOM; 5405*cdf0e10cSrcweir switch (nFillDirection) 5406*cdf0e10cSrcweir { 5407*cdf0e10cSrcweir case sheet::FillDirection_TO_BOTTOM: 5408*cdf0e10cSrcweir eDir = FILL_TO_BOTTOM; 5409*cdf0e10cSrcweir break; 5410*cdf0e10cSrcweir case sheet::FillDirection_TO_RIGHT: 5411*cdf0e10cSrcweir eDir = FILL_TO_RIGHT; 5412*cdf0e10cSrcweir break; 5413*cdf0e10cSrcweir case sheet::FillDirection_TO_TOP: 5414*cdf0e10cSrcweir eDir = FILL_TO_TOP; 5415*cdf0e10cSrcweir break; 5416*cdf0e10cSrcweir case sheet::FillDirection_TO_LEFT: 5417*cdf0e10cSrcweir eDir = FILL_TO_LEFT; 5418*cdf0e10cSrcweir break; 5419*cdf0e10cSrcweir default: 5420*cdf0e10cSrcweir bError = sal_True; 5421*cdf0e10cSrcweir } 5422*cdf0e10cSrcweir 5423*cdf0e10cSrcweir FillCmd eCmd = FILL_SIMPLE; 5424*cdf0e10cSrcweir switch ( nFillMode ) 5425*cdf0e10cSrcweir { 5426*cdf0e10cSrcweir case sheet::FillMode_SIMPLE: 5427*cdf0e10cSrcweir eCmd = FILL_SIMPLE; 5428*cdf0e10cSrcweir break; 5429*cdf0e10cSrcweir case sheet::FillMode_LINEAR: 5430*cdf0e10cSrcweir eCmd = FILL_LINEAR; 5431*cdf0e10cSrcweir break; 5432*cdf0e10cSrcweir case sheet::FillMode_GROWTH: 5433*cdf0e10cSrcweir eCmd = FILL_GROWTH; 5434*cdf0e10cSrcweir break; 5435*cdf0e10cSrcweir case sheet::FillMode_DATE: 5436*cdf0e10cSrcweir eCmd = FILL_DATE; 5437*cdf0e10cSrcweir break; 5438*cdf0e10cSrcweir case sheet::FillMode_AUTO: 5439*cdf0e10cSrcweir eCmd = FILL_AUTO; 5440*cdf0e10cSrcweir break; 5441*cdf0e10cSrcweir default: 5442*cdf0e10cSrcweir bError = sal_True; 5443*cdf0e10cSrcweir } 5444*cdf0e10cSrcweir 5445*cdf0e10cSrcweir FillDateCmd eDateCmd = FILL_DAY; 5446*cdf0e10cSrcweir switch ( nFillDateMode ) 5447*cdf0e10cSrcweir { 5448*cdf0e10cSrcweir case sheet::FillDateMode_FILL_DATE_DAY: 5449*cdf0e10cSrcweir eDateCmd = FILL_DAY; 5450*cdf0e10cSrcweir break; 5451*cdf0e10cSrcweir case sheet::FillDateMode_FILL_DATE_WEEKDAY: 5452*cdf0e10cSrcweir eDateCmd = FILL_WEEKDAY; 5453*cdf0e10cSrcweir break; 5454*cdf0e10cSrcweir case sheet::FillDateMode_FILL_DATE_MONTH: 5455*cdf0e10cSrcweir eDateCmd = FILL_MONTH; 5456*cdf0e10cSrcweir break; 5457*cdf0e10cSrcweir case sheet::FillDateMode_FILL_DATE_YEAR: 5458*cdf0e10cSrcweir eDateCmd = FILL_YEAR; 5459*cdf0e10cSrcweir break; 5460*cdf0e10cSrcweir default: 5461*cdf0e10cSrcweir bError = sal_True; 5462*cdf0e10cSrcweir } 5463*cdf0e10cSrcweir 5464*cdf0e10cSrcweir if (!bError) 5465*cdf0e10cSrcweir { 5466*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 5467*cdf0e10cSrcweir aFunc.FillSeries( aRange, NULL, eDir, eCmd, eDateCmd, 5468*cdf0e10cSrcweir MAXDOUBLE, fStep, fEndValue, sal_True, sal_True ); 5469*cdf0e10cSrcweir } 5470*cdf0e10cSrcweir } 5471*cdf0e10cSrcweir } 5472*cdf0e10cSrcweir 5473*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::fillAuto( sheet::FillDirection nFillDirection, 5474*cdf0e10cSrcweir sal_Int32 nSourceCount ) throw(uno::RuntimeException) 5475*cdf0e10cSrcweir { 5476*cdf0e10cSrcweir ScUnoGuard aGuard; 5477*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5478*cdf0e10cSrcweir if ( pDocSh && nSourceCount ) 5479*cdf0e10cSrcweir { 5480*cdf0e10cSrcweir ScRange aSourceRange(aRange); 5481*cdf0e10cSrcweir SCsCOLROW nCount = 0; // "Dest-Count" 5482*cdf0e10cSrcweir FillDir eDir = FILL_TO_BOTTOM; 5483*cdf0e10cSrcweir sal_Bool bError = sal_False; 5484*cdf0e10cSrcweir switch (nFillDirection) 5485*cdf0e10cSrcweir { 5486*cdf0e10cSrcweir case sheet::FillDirection_TO_BOTTOM: 5487*cdf0e10cSrcweir aSourceRange.aEnd.SetRow( static_cast<SCROW>( aSourceRange.aStart.Row() + nSourceCount - 1 ) ); 5488*cdf0e10cSrcweir nCount = aRange.aEnd.Row() - aSourceRange.aEnd.Row(); 5489*cdf0e10cSrcweir eDir = FILL_TO_BOTTOM; 5490*cdf0e10cSrcweir break; 5491*cdf0e10cSrcweir case sheet::FillDirection_TO_RIGHT: 5492*cdf0e10cSrcweir aSourceRange.aEnd.SetCol( static_cast<SCCOL>( aSourceRange.aStart.Col() + nSourceCount - 1 ) ); 5493*cdf0e10cSrcweir nCount = aRange.aEnd.Col() - aSourceRange.aEnd.Col(); 5494*cdf0e10cSrcweir eDir = FILL_TO_RIGHT; 5495*cdf0e10cSrcweir break; 5496*cdf0e10cSrcweir case sheet::FillDirection_TO_TOP: 5497*cdf0e10cSrcweir aSourceRange.aStart.SetRow( static_cast<SCROW>( aSourceRange.aEnd.Row() - nSourceCount + 1 ) ); 5498*cdf0e10cSrcweir nCount = aSourceRange.aStart.Row() - aRange.aStart.Row(); 5499*cdf0e10cSrcweir eDir = FILL_TO_TOP; 5500*cdf0e10cSrcweir break; 5501*cdf0e10cSrcweir case sheet::FillDirection_TO_LEFT: 5502*cdf0e10cSrcweir aSourceRange.aStart.SetCol( static_cast<SCCOL>( aSourceRange.aEnd.Col() - nSourceCount + 1 ) ); 5503*cdf0e10cSrcweir nCount = aSourceRange.aStart.Col() - aRange.aStart.Col(); 5504*cdf0e10cSrcweir eDir = FILL_TO_LEFT; 5505*cdf0e10cSrcweir break; 5506*cdf0e10cSrcweir default: 5507*cdf0e10cSrcweir bError = sal_True; 5508*cdf0e10cSrcweir } 5509*cdf0e10cSrcweir if (nCount < 0 || nCount > MAXROW) // overflow 5510*cdf0e10cSrcweir bError = sal_True; 5511*cdf0e10cSrcweir 5512*cdf0e10cSrcweir if (!bError) 5513*cdf0e10cSrcweir { 5514*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 5515*cdf0e10cSrcweir aFunc.FillAuto( aSourceRange, NULL, eDir, nCount, sal_True, sal_True ); 5516*cdf0e10cSrcweir } 5517*cdf0e10cSrcweir } 5518*cdf0e10cSrcweir } 5519*cdf0e10cSrcweir 5520*cdf0e10cSrcweir // XAutoFormattable 5521*cdf0e10cSrcweir 5522*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::autoFormat( const rtl::OUString& aName ) 5523*cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException) 5524*cdf0e10cSrcweir { 5525*cdf0e10cSrcweir ScUnoGuard aGuard; 5526*cdf0e10cSrcweir ScAutoFormat* pAutoFormat = ScGlobal::GetAutoFormat(); 5527*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5528*cdf0e10cSrcweir if ( pDocSh && pAutoFormat ) 5529*cdf0e10cSrcweir { 5530*cdf0e10cSrcweir String aNameString(aName); 5531*cdf0e10cSrcweir sal_uInt16 nCount = pAutoFormat->GetCount(); 5532*cdf0e10cSrcweir sal_uInt16 nIndex; 5533*cdf0e10cSrcweir String aCompare; 5534*cdf0e10cSrcweir for (nIndex=0; nIndex<nCount; nIndex++) 5535*cdf0e10cSrcweir { 5536*cdf0e10cSrcweir (*pAutoFormat)[nIndex]->GetName(aCompare); 5537*cdf0e10cSrcweir if ( aCompare == aNameString ) //! Case-insensitiv ??? 5538*cdf0e10cSrcweir break; 5539*cdf0e10cSrcweir } 5540*cdf0e10cSrcweir if (nIndex<nCount) 5541*cdf0e10cSrcweir { 5542*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 5543*cdf0e10cSrcweir aFunc.AutoFormat( aRange, NULL, nIndex, sal_True, sal_True ); 5544*cdf0e10cSrcweir } 5545*cdf0e10cSrcweir else 5546*cdf0e10cSrcweir throw lang::IllegalArgumentException(); 5547*cdf0e10cSrcweir } 5548*cdf0e10cSrcweir } 5549*cdf0e10cSrcweir 5550*cdf0e10cSrcweir // XSortable 5551*cdf0e10cSrcweir 5552*cdf0e10cSrcweir uno::Sequence<beans::PropertyValue> SAL_CALL ScCellRangeObj::createSortDescriptor() 5553*cdf0e10cSrcweir throw(uno::RuntimeException) 5554*cdf0e10cSrcweir { 5555*cdf0e10cSrcweir ScUnoGuard aGuard; 5556*cdf0e10cSrcweir ScSortParam aParam; 5557*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5558*cdf0e10cSrcweir if ( pDocSh ) 5559*cdf0e10cSrcweir { 5560*cdf0e10cSrcweir // DB-Bereich anlegen erst beim Ausfuehren, per API immer genau den Bereich 5561*cdf0e10cSrcweir ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_OLD, SC_DBSEL_FORCE_MARK ); 5562*cdf0e10cSrcweir if (pData) 5563*cdf0e10cSrcweir { 5564*cdf0e10cSrcweir pData->GetSortParam(aParam); 5565*cdf0e10cSrcweir 5566*cdf0e10cSrcweir // im SortDescriptor sind die Fields innerhalb des Bereichs gezaehlt 5567*cdf0e10cSrcweir ScRange aDBRange; 5568*cdf0e10cSrcweir pData->GetArea(aDBRange); 5569*cdf0e10cSrcweir SCCOLROW nFieldStart = aParam.bByRow ? 5570*cdf0e10cSrcweir static_cast<SCCOLROW>(aDBRange.aStart.Col()) : 5571*cdf0e10cSrcweir static_cast<SCCOLROW>(aDBRange.aStart.Row()); 5572*cdf0e10cSrcweir for (sal_uInt16 i=0; i<MAXSORT; i++) 5573*cdf0e10cSrcweir if ( aParam.bDoSort[i] && aParam.nField[i] >= nFieldStart ) 5574*cdf0e10cSrcweir aParam.nField[i] -= nFieldStart; 5575*cdf0e10cSrcweir } 5576*cdf0e10cSrcweir } 5577*cdf0e10cSrcweir 5578*cdf0e10cSrcweir uno::Sequence<beans::PropertyValue> aSeq( ScSortDescriptor::GetPropertyCount() ); 5579*cdf0e10cSrcweir ScSortDescriptor::FillProperties( aSeq, aParam ); 5580*cdf0e10cSrcweir return aSeq; 5581*cdf0e10cSrcweir } 5582*cdf0e10cSrcweir 5583*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::sort( const uno::Sequence<beans::PropertyValue>& aDescriptor ) 5584*cdf0e10cSrcweir throw(uno::RuntimeException) 5585*cdf0e10cSrcweir { 5586*cdf0e10cSrcweir ScUnoGuard aGuard; 5587*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5588*cdf0e10cSrcweir if (pDocSh) 5589*cdf0e10cSrcweir { 5590*cdf0e10cSrcweir sal_uInt16 i; 5591*cdf0e10cSrcweir ScSortParam aParam; 5592*cdf0e10cSrcweir ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_MAKE, SC_DBSEL_FORCE_MARK ); // ggf. Bereich anlegen 5593*cdf0e10cSrcweir if (pData) 5594*cdf0e10cSrcweir { 5595*cdf0e10cSrcweir // alten Einstellungen holen, falls nicht alles neu gesetzt wird 5596*cdf0e10cSrcweir pData->GetSortParam(aParam); 5597*cdf0e10cSrcweir SCCOLROW nOldStart = aParam.bByRow ? 5598*cdf0e10cSrcweir static_cast<SCCOLROW>(aRange.aStart.Col()) : 5599*cdf0e10cSrcweir static_cast<SCCOLROW>(aRange.aStart.Row()); 5600*cdf0e10cSrcweir for (i=0; i<MAXSORT; i++) 5601*cdf0e10cSrcweir if ( aParam.bDoSort[i] && aParam.nField[i] >= nOldStart ) 5602*cdf0e10cSrcweir aParam.nField[i] -= nOldStart; 5603*cdf0e10cSrcweir } 5604*cdf0e10cSrcweir 5605*cdf0e10cSrcweir ScSortDescriptor::FillSortParam( aParam, aDescriptor ); 5606*cdf0e10cSrcweir 5607*cdf0e10cSrcweir // im SortDescriptor sind die Fields innerhalb des Bereichs gezaehlt 5608*cdf0e10cSrcweir // ByRow kann bei FillSortParam umgesetzt worden sein 5609*cdf0e10cSrcweir SCCOLROW nFieldStart = aParam.bByRow ? 5610*cdf0e10cSrcweir static_cast<SCCOLROW>(aRange.aStart.Col()) : 5611*cdf0e10cSrcweir static_cast<SCCOLROW>(aRange.aStart.Row()); 5612*cdf0e10cSrcweir for (i=0; i<MAXSORT; i++) 5613*cdf0e10cSrcweir aParam.nField[i] += nFieldStart; 5614*cdf0e10cSrcweir 5615*cdf0e10cSrcweir SCTAB nTab = aRange.aStart.Tab(); 5616*cdf0e10cSrcweir aParam.nCol1 = aRange.aStart.Col(); 5617*cdf0e10cSrcweir aParam.nRow1 = aRange.aStart.Row(); 5618*cdf0e10cSrcweir aParam.nCol2 = aRange.aEnd.Col(); 5619*cdf0e10cSrcweir aParam.nRow2 = aRange.aEnd.Row(); 5620*cdf0e10cSrcweir 5621*cdf0e10cSrcweir pDocSh->GetDBData( aRange, SC_DB_MAKE, SC_DBSEL_FORCE_MARK ); // ggf. Bereich anlegen 5622*cdf0e10cSrcweir 5623*cdf0e10cSrcweir ScDBDocFunc aFunc(*pDocSh); // Bereich muss angelegt sein 5624*cdf0e10cSrcweir aFunc.Sort( nTab, aParam, sal_True, sal_True, sal_True ); 5625*cdf0e10cSrcweir } 5626*cdf0e10cSrcweir } 5627*cdf0e10cSrcweir 5628*cdf0e10cSrcweir // XFilterable 5629*cdf0e10cSrcweir 5630*cdf0e10cSrcweir uno::Reference<sheet::XSheetFilterDescriptor> SAL_CALL ScCellRangeObj::createFilterDescriptor( 5631*cdf0e10cSrcweir sal_Bool bEmpty ) throw(uno::RuntimeException) 5632*cdf0e10cSrcweir { 5633*cdf0e10cSrcweir ScUnoGuard aGuard; 5634*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5635*cdf0e10cSrcweir ScFilterDescriptor* pNew = new ScFilterDescriptor(pDocSh); 5636*cdf0e10cSrcweir if ( !bEmpty && pDocSh ) 5637*cdf0e10cSrcweir { 5638*cdf0e10cSrcweir // DB-Bereich anlegen erst beim Ausfuehren, per API immer genau den Bereich 5639*cdf0e10cSrcweir ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_OLD, SC_DBSEL_FORCE_MARK ); 5640*cdf0e10cSrcweir if (pData) 5641*cdf0e10cSrcweir { 5642*cdf0e10cSrcweir ScQueryParam aParam; 5643*cdf0e10cSrcweir pData->GetQueryParam(aParam); 5644*cdf0e10cSrcweir // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt 5645*cdf0e10cSrcweir ScRange aDBRange; 5646*cdf0e10cSrcweir pData->GetArea(aDBRange); 5647*cdf0e10cSrcweir SCCOLROW nFieldStart = aParam.bByRow ? 5648*cdf0e10cSrcweir static_cast<SCCOLROW>(aDBRange.aStart.Col()) : 5649*cdf0e10cSrcweir static_cast<SCCOLROW>(aDBRange.aStart.Row()); 5650*cdf0e10cSrcweir SCSIZE nCount = aParam.GetEntryCount(); 5651*cdf0e10cSrcweir for (SCSIZE i=0; i<nCount; i++) 5652*cdf0e10cSrcweir { 5653*cdf0e10cSrcweir ScQueryEntry& rEntry = aParam.GetEntry(i); 5654*cdf0e10cSrcweir if (rEntry.bDoQuery && rEntry.nField >= nFieldStart) 5655*cdf0e10cSrcweir rEntry.nField -= nFieldStart; 5656*cdf0e10cSrcweir } 5657*cdf0e10cSrcweir pNew->SetParam(aParam); 5658*cdf0e10cSrcweir } 5659*cdf0e10cSrcweir } 5660*cdf0e10cSrcweir return pNew; 5661*cdf0e10cSrcweir } 5662*cdf0e10cSrcweir 5663*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::filter( const uno::Reference<sheet::XSheetFilterDescriptor>& xDescriptor ) 5664*cdf0e10cSrcweir throw(uno::RuntimeException) 5665*cdf0e10cSrcweir { 5666*cdf0e10cSrcweir ScUnoGuard aGuard; 5667*cdf0e10cSrcweir 5668*cdf0e10cSrcweir // das koennte theoretisch ein fremdes Objekt sein, also nur das 5669*cdf0e10cSrcweir // oeffentliche XSheetFilterDescriptor Interface benutzen, um 5670*cdf0e10cSrcweir // die Daten in ein ScFilterDescriptor Objekt zu kopieren: 5671*cdf0e10cSrcweir //! wenn es schon ein ScFilterDescriptor ist, direkt per getImplementation? 5672*cdf0e10cSrcweir 5673*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5674*cdf0e10cSrcweir ScFilterDescriptor aImpl(pDocSh); 5675*cdf0e10cSrcweir uno::Reference< sheet::XSheetFilterDescriptor2 > xDescriptor2( xDescriptor, uno::UNO_QUERY ); 5676*cdf0e10cSrcweir if ( xDescriptor2.is() ) 5677*cdf0e10cSrcweir { 5678*cdf0e10cSrcweir aImpl.setFilterFields2( xDescriptor2->getFilterFields2() ); 5679*cdf0e10cSrcweir } 5680*cdf0e10cSrcweir else 5681*cdf0e10cSrcweir { 5682*cdf0e10cSrcweir aImpl.setFilterFields( xDescriptor->getFilterFields() ); 5683*cdf0e10cSrcweir } 5684*cdf0e10cSrcweir // Rest sind jetzt Properties... 5685*cdf0e10cSrcweir 5686*cdf0e10cSrcweir uno::Reference<beans::XPropertySet> xPropSet( xDescriptor, uno::UNO_QUERY ); 5687*cdf0e10cSrcweir if (xPropSet.is()) 5688*cdf0e10cSrcweir lcl_CopyProperties( aImpl, *(beans::XPropertySet*)xPropSet.get() ); 5689*cdf0e10cSrcweir 5690*cdf0e10cSrcweir // 5691*cdf0e10cSrcweir // ausfuehren... 5692*cdf0e10cSrcweir // 5693*cdf0e10cSrcweir 5694*cdf0e10cSrcweir if (pDocSh) 5695*cdf0e10cSrcweir { 5696*cdf0e10cSrcweir ScQueryParam aParam = aImpl.GetParam(); 5697*cdf0e10cSrcweir // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt 5698*cdf0e10cSrcweir SCCOLROW nFieldStart = aParam.bByRow ? 5699*cdf0e10cSrcweir static_cast<SCCOLROW>(aRange.aStart.Col()) : 5700*cdf0e10cSrcweir static_cast<SCCOLROW>(aRange.aStart.Row()); 5701*cdf0e10cSrcweir SCSIZE nCount = aParam.GetEntryCount(); 5702*cdf0e10cSrcweir for (SCSIZE i=0; i<nCount; i++) 5703*cdf0e10cSrcweir { 5704*cdf0e10cSrcweir ScQueryEntry& rEntry = aParam.GetEntry(i); 5705*cdf0e10cSrcweir if (rEntry.bDoQuery) 5706*cdf0e10cSrcweir { 5707*cdf0e10cSrcweir rEntry.nField += nFieldStart; 5708*cdf0e10cSrcweir // Im Dialog wird immer der String angezeigt -> muss zum Wert passen 5709*cdf0e10cSrcweir if ( !rEntry.bQueryByString ) 5710*cdf0e10cSrcweir pDocSh->GetDocument()->GetFormatTable()-> 5711*cdf0e10cSrcweir GetInputLineString( rEntry.nVal, 0, *rEntry.pStr ); 5712*cdf0e10cSrcweir } 5713*cdf0e10cSrcweir } 5714*cdf0e10cSrcweir 5715*cdf0e10cSrcweir SCTAB nTab = aRange.aStart.Tab(); 5716*cdf0e10cSrcweir aParam.nCol1 = aRange.aStart.Col(); 5717*cdf0e10cSrcweir aParam.nRow1 = aRange.aStart.Row(); 5718*cdf0e10cSrcweir aParam.nCol2 = aRange.aEnd.Col(); 5719*cdf0e10cSrcweir aParam.nRow2 = aRange.aEnd.Row(); 5720*cdf0e10cSrcweir 5721*cdf0e10cSrcweir pDocSh->GetDBData( aRange, SC_DB_MAKE, SC_DBSEL_FORCE_MARK ); // ggf. Bereich anlegen 5722*cdf0e10cSrcweir 5723*cdf0e10cSrcweir //! keep source range in filter descriptor 5724*cdf0e10cSrcweir //! if created by createFilterDescriptorByObject ??? 5725*cdf0e10cSrcweir 5726*cdf0e10cSrcweir ScDBDocFunc aFunc(*pDocSh); 5727*cdf0e10cSrcweir aFunc.Query( nTab, aParam, NULL, sal_True, sal_True ); // Bereich muss angelegt sein 5728*cdf0e10cSrcweir } 5729*cdf0e10cSrcweir } 5730*cdf0e10cSrcweir 5731*cdf0e10cSrcweir //! get/setAutoFilter als Properties!!! 5732*cdf0e10cSrcweir 5733*cdf0e10cSrcweir // XAdvancedFilterSource 5734*cdf0e10cSrcweir 5735*cdf0e10cSrcweir uno::Reference<sheet::XSheetFilterDescriptor> SAL_CALL ScCellRangeObj::createFilterDescriptorByObject( 5736*cdf0e10cSrcweir const uno::Reference<sheet::XSheetFilterable>& xObject ) 5737*cdf0e10cSrcweir throw(uno::RuntimeException) 5738*cdf0e10cSrcweir { 5739*cdf0e10cSrcweir ScUnoGuard aGuard; 5740*cdf0e10cSrcweir 5741*cdf0e10cSrcweir // this ist hier nicht der Bereich, der gefiltert wird, sondern der 5742*cdf0e10cSrcweir // Bereich mit der Abfrage... 5743*cdf0e10cSrcweir 5744*cdf0e10cSrcweir uno::Reference<sheet::XCellRangeAddressable> xAddr( xObject, uno::UNO_QUERY ); 5745*cdf0e10cSrcweir 5746*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5747*cdf0e10cSrcweir if ( pDocSh && xAddr.is() ) 5748*cdf0e10cSrcweir { 5749*cdf0e10cSrcweir //! Test, ob xObject im selben Dokument ist 5750*cdf0e10cSrcweir 5751*cdf0e10cSrcweir ScFilterDescriptor* pNew = new ScFilterDescriptor(pDocSh); //! stattdessen vom Objekt? 5752*cdf0e10cSrcweir //XSheetFilterDescriptorRef xNew = xObject->createFilterDescriptor(sal_True); 5753*cdf0e10cSrcweir 5754*cdf0e10cSrcweir ScQueryParam aParam = pNew->GetParam(); 5755*cdf0e10cSrcweir aParam.bHasHeader = sal_True; 5756*cdf0e10cSrcweir 5757*cdf0e10cSrcweir table::CellRangeAddress aDataAddress(xAddr->getRangeAddress()); 5758*cdf0e10cSrcweir aParam.nCol1 = (SCCOL)aDataAddress.StartColumn; 5759*cdf0e10cSrcweir aParam.nRow1 = (SCROW)aDataAddress.StartRow; 5760*cdf0e10cSrcweir aParam.nCol2 = (SCCOL)aDataAddress.EndColumn; 5761*cdf0e10cSrcweir aParam.nRow2 = (SCROW)aDataAddress.EndRow; 5762*cdf0e10cSrcweir aParam.nTab = aDataAddress.Sheet; 5763*cdf0e10cSrcweir 5764*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 5765*cdf0e10cSrcweir sal_Bool bOk = pDoc->CreateQueryParam( 5766*cdf0e10cSrcweir aRange.aStart.Col(), aRange.aStart.Row(), 5767*cdf0e10cSrcweir aRange.aEnd.Col(), aRange.aEnd.Row(), 5768*cdf0e10cSrcweir aRange.aStart.Tab(), aParam ); 5769*cdf0e10cSrcweir if ( bOk ) 5770*cdf0e10cSrcweir { 5771*cdf0e10cSrcweir // im FilterDescriptor sind die Fields innerhalb des Bereichs gezaehlt 5772*cdf0e10cSrcweir SCCOLROW nFieldStart = aParam.bByRow ? 5773*cdf0e10cSrcweir static_cast<SCCOLROW>(aDataAddress.StartColumn) : 5774*cdf0e10cSrcweir static_cast<SCCOLROW>(aDataAddress.StartRow); 5775*cdf0e10cSrcweir SCSIZE nCount = aParam.GetEntryCount(); 5776*cdf0e10cSrcweir for (SCSIZE i=0; i<nCount; i++) 5777*cdf0e10cSrcweir { 5778*cdf0e10cSrcweir ScQueryEntry& rEntry = aParam.GetEntry(i); 5779*cdf0e10cSrcweir if (rEntry.bDoQuery && rEntry.nField >= nFieldStart) 5780*cdf0e10cSrcweir rEntry.nField -= nFieldStart; 5781*cdf0e10cSrcweir } 5782*cdf0e10cSrcweir 5783*cdf0e10cSrcweir pNew->SetParam( aParam ); 5784*cdf0e10cSrcweir return pNew; 5785*cdf0e10cSrcweir } 5786*cdf0e10cSrcweir else 5787*cdf0e10cSrcweir { 5788*cdf0e10cSrcweir delete pNew; 5789*cdf0e10cSrcweir return NULL; // ungueltig -> null 5790*cdf0e10cSrcweir } 5791*cdf0e10cSrcweir } 5792*cdf0e10cSrcweir 5793*cdf0e10cSrcweir DBG_ERROR("kein Dokument oder kein Bereich"); 5794*cdf0e10cSrcweir return NULL; 5795*cdf0e10cSrcweir } 5796*cdf0e10cSrcweir 5797*cdf0e10cSrcweir // XSubTotalSource 5798*cdf0e10cSrcweir 5799*cdf0e10cSrcweir uno::Reference<sheet::XSubTotalDescriptor> SAL_CALL ScCellRangeObj::createSubTotalDescriptor( 5800*cdf0e10cSrcweir sal_Bool bEmpty ) throw(uno::RuntimeException) 5801*cdf0e10cSrcweir { 5802*cdf0e10cSrcweir ScUnoGuard aGuard; 5803*cdf0e10cSrcweir ScSubTotalDescriptor* pNew = new ScSubTotalDescriptor; 5804*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5805*cdf0e10cSrcweir if ( !bEmpty && pDocSh ) 5806*cdf0e10cSrcweir { 5807*cdf0e10cSrcweir // DB-Bereich anlegen erst beim Ausfuehren, per API immer genau den Bereich 5808*cdf0e10cSrcweir ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_OLD, SC_DBSEL_FORCE_MARK ); 5809*cdf0e10cSrcweir if (pData) 5810*cdf0e10cSrcweir { 5811*cdf0e10cSrcweir ScSubTotalParam aParam; 5812*cdf0e10cSrcweir pData->GetSubTotalParam(aParam); 5813*cdf0e10cSrcweir // im SubTotalDescriptor sind die Fields innerhalb des Bereichs gezaehlt 5814*cdf0e10cSrcweir ScRange aDBRange; 5815*cdf0e10cSrcweir pData->GetArea(aDBRange); 5816*cdf0e10cSrcweir SCCOL nFieldStart = aDBRange.aStart.Col(); 5817*cdf0e10cSrcweir for (sal_uInt16 i=0; i<MAXSUBTOTAL; i++) 5818*cdf0e10cSrcweir { 5819*cdf0e10cSrcweir if ( aParam.bGroupActive[i] ) 5820*cdf0e10cSrcweir { 5821*cdf0e10cSrcweir if ( aParam.nField[i] >= nFieldStart ) 5822*cdf0e10cSrcweir aParam.nField[i] = sal::static_int_cast<SCCOL>( aParam.nField[i] - nFieldStart ); 5823*cdf0e10cSrcweir for (SCCOL j=0; j<aParam.nSubTotals[i]; j++) 5824*cdf0e10cSrcweir if ( aParam.pSubTotals[i][j] >= nFieldStart ) 5825*cdf0e10cSrcweir aParam.pSubTotals[i][j] = sal::static_int_cast<SCCOL>( aParam.pSubTotals[i][j] - nFieldStart ); 5826*cdf0e10cSrcweir } 5827*cdf0e10cSrcweir } 5828*cdf0e10cSrcweir pNew->SetParam(aParam); 5829*cdf0e10cSrcweir } 5830*cdf0e10cSrcweir } 5831*cdf0e10cSrcweir return pNew; 5832*cdf0e10cSrcweir } 5833*cdf0e10cSrcweir 5834*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::applySubTotals( 5835*cdf0e10cSrcweir const uno::Reference<sheet::XSubTotalDescriptor>& xDescriptor, 5836*cdf0e10cSrcweir sal_Bool bReplace ) throw(uno::RuntimeException) 5837*cdf0e10cSrcweir { 5838*cdf0e10cSrcweir ScUnoGuard aGuard; 5839*cdf0e10cSrcweir 5840*cdf0e10cSrcweir if (!xDescriptor.is()) return; 5841*cdf0e10cSrcweir 5842*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5843*cdf0e10cSrcweir ScSubTotalDescriptorBase* pImp = 5844*cdf0e10cSrcweir ScSubTotalDescriptorBase::getImplementation( xDescriptor ); 5845*cdf0e10cSrcweir 5846*cdf0e10cSrcweir if (pDocSh && pImp) 5847*cdf0e10cSrcweir { 5848*cdf0e10cSrcweir ScSubTotalParam aParam; 5849*cdf0e10cSrcweir pImp->GetData(aParam); // virtuelle Methode der Basisklasse 5850*cdf0e10cSrcweir 5851*cdf0e10cSrcweir // im SubTotalDescriptor sind die Fields innerhalb des Bereichs gezaehlt 5852*cdf0e10cSrcweir SCCOL nFieldStart = aRange.aStart.Col(); 5853*cdf0e10cSrcweir for (sal_uInt16 i=0; i<MAXSUBTOTAL; i++) 5854*cdf0e10cSrcweir { 5855*cdf0e10cSrcweir if ( aParam.bGroupActive[i] ) 5856*cdf0e10cSrcweir { 5857*cdf0e10cSrcweir aParam.nField[i] = sal::static_int_cast<SCCOL>( aParam.nField[i] + nFieldStart ); 5858*cdf0e10cSrcweir for (SCCOL j=0; j<aParam.nSubTotals[i]; j++) 5859*cdf0e10cSrcweir aParam.pSubTotals[i][j] = sal::static_int_cast<SCCOL>( aParam.pSubTotals[i][j] + nFieldStart ); 5860*cdf0e10cSrcweir } 5861*cdf0e10cSrcweir } 5862*cdf0e10cSrcweir 5863*cdf0e10cSrcweir aParam.bReplace = bReplace; 5864*cdf0e10cSrcweir 5865*cdf0e10cSrcweir SCTAB nTab = aRange.aStart.Tab(); 5866*cdf0e10cSrcweir aParam.nCol1 = aRange.aStart.Col(); 5867*cdf0e10cSrcweir aParam.nRow1 = aRange.aStart.Row(); 5868*cdf0e10cSrcweir aParam.nCol2 = aRange.aEnd.Col(); 5869*cdf0e10cSrcweir aParam.nRow2 = aRange.aEnd.Row(); 5870*cdf0e10cSrcweir 5871*cdf0e10cSrcweir pDocSh->GetDBData( aRange, SC_DB_MAKE, SC_DBSEL_FORCE_MARK ); // ggf. Bereich anlegen 5872*cdf0e10cSrcweir 5873*cdf0e10cSrcweir ScDBDocFunc aFunc(*pDocSh); 5874*cdf0e10cSrcweir aFunc.DoSubTotals( nTab, aParam, NULL, sal_True, sal_True ); // Bereich muss angelegt sein 5875*cdf0e10cSrcweir } 5876*cdf0e10cSrcweir } 5877*cdf0e10cSrcweir 5878*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::removeSubTotals() throw(uno::RuntimeException) 5879*cdf0e10cSrcweir { 5880*cdf0e10cSrcweir ScUnoGuard aGuard; 5881*cdf0e10cSrcweir 5882*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5883*cdf0e10cSrcweir if (pDocSh) 5884*cdf0e10cSrcweir { 5885*cdf0e10cSrcweir ScSubTotalParam aParam; 5886*cdf0e10cSrcweir ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_OLD, SC_DBSEL_FORCE_MARK ); 5887*cdf0e10cSrcweir if (pData) 5888*cdf0e10cSrcweir pData->GetSubTotalParam(aParam); // auch bei Remove die Feld-Eintraege behalten 5889*cdf0e10cSrcweir 5890*cdf0e10cSrcweir aParam.bRemoveOnly = sal_True; 5891*cdf0e10cSrcweir 5892*cdf0e10cSrcweir SCTAB nTab = aRange.aStart.Tab(); 5893*cdf0e10cSrcweir aParam.nCol1 = aRange.aStart.Col(); 5894*cdf0e10cSrcweir aParam.nRow1 = aRange.aStart.Row(); 5895*cdf0e10cSrcweir aParam.nCol2 = aRange.aEnd.Col(); 5896*cdf0e10cSrcweir aParam.nRow2 = aRange.aEnd.Row(); 5897*cdf0e10cSrcweir 5898*cdf0e10cSrcweir pDocSh->GetDBData( aRange, SC_DB_MAKE, SC_DBSEL_FORCE_MARK ); // ggf. Bereich anlegen 5899*cdf0e10cSrcweir 5900*cdf0e10cSrcweir ScDBDocFunc aFunc(*pDocSh); 5901*cdf0e10cSrcweir aFunc.DoSubTotals( nTab, aParam, NULL, sal_True, sal_True ); // Bereich muss angelegt sein 5902*cdf0e10cSrcweir } 5903*cdf0e10cSrcweir } 5904*cdf0e10cSrcweir 5905*cdf0e10cSrcweir uno::Sequence<beans::PropertyValue> SAL_CALL ScCellRangeObj::createImportDescriptor( sal_Bool bEmpty ) 5906*cdf0e10cSrcweir throw(uno::RuntimeException) 5907*cdf0e10cSrcweir { 5908*cdf0e10cSrcweir ScUnoGuard aGuard; 5909*cdf0e10cSrcweir ScImportParam aParam; 5910*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5911*cdf0e10cSrcweir if ( !bEmpty && pDocSh ) 5912*cdf0e10cSrcweir { 5913*cdf0e10cSrcweir // DB-Bereich anlegen erst beim Ausfuehren, per API immer genau den Bereich 5914*cdf0e10cSrcweir ScDBData* pData = pDocSh->GetDBData( aRange, SC_DB_OLD, SC_DBSEL_FORCE_MARK ); 5915*cdf0e10cSrcweir if (pData) 5916*cdf0e10cSrcweir pData->GetImportParam(aParam); 5917*cdf0e10cSrcweir } 5918*cdf0e10cSrcweir 5919*cdf0e10cSrcweir uno::Sequence<beans::PropertyValue> aSeq( ScImportDescriptor::GetPropertyCount() ); 5920*cdf0e10cSrcweir ScImportDescriptor::FillProperties( aSeq, aParam ); 5921*cdf0e10cSrcweir return aSeq; 5922*cdf0e10cSrcweir } 5923*cdf0e10cSrcweir 5924*cdf0e10cSrcweir void SAL_CALL ScCellRangeObj::doImport( const uno::Sequence<beans::PropertyValue>& aDescriptor ) 5925*cdf0e10cSrcweir throw(uno::RuntimeException) 5926*cdf0e10cSrcweir { 5927*cdf0e10cSrcweir ScUnoGuard aGuard; 5928*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5929*cdf0e10cSrcweir if (pDocSh) 5930*cdf0e10cSrcweir { 5931*cdf0e10cSrcweir ScImportParam aParam; 5932*cdf0e10cSrcweir ScImportDescriptor::FillImportParam( aParam, aDescriptor ); 5933*cdf0e10cSrcweir 5934*cdf0e10cSrcweir SCTAB nTab = aRange.aStart.Tab(); 5935*cdf0e10cSrcweir aParam.nCol1 = aRange.aStart.Col(); 5936*cdf0e10cSrcweir aParam.nRow1 = aRange.aStart.Row(); 5937*cdf0e10cSrcweir aParam.nCol2 = aRange.aEnd.Col(); 5938*cdf0e10cSrcweir aParam.nRow2 = aRange.aEnd.Row(); 5939*cdf0e10cSrcweir 5940*cdf0e10cSrcweir //! TODO: could we get passed a valid result set by any means? 5941*cdf0e10cSrcweir 5942*cdf0e10cSrcweir pDocSh->GetDBData( aRange, SC_DB_MAKE, SC_DBSEL_FORCE_MARK ); // ggf. Bereich anlegen 5943*cdf0e10cSrcweir 5944*cdf0e10cSrcweir ScDBDocFunc aFunc(*pDocSh); // Bereich muss angelegt sein 5945*cdf0e10cSrcweir aFunc.DoImport( nTab, aParam, NULL, sal_True ); //! Api-Flag as parameter 5946*cdf0e10cSrcweir } 5947*cdf0e10cSrcweir } 5948*cdf0e10cSrcweir 5949*cdf0e10cSrcweir // XCellFormatRangesSupplier 5950*cdf0e10cSrcweir 5951*cdf0e10cSrcweir uno::Reference<container::XIndexAccess> SAL_CALL ScCellRangeObj::getCellFormatRanges() 5952*cdf0e10cSrcweir throw(uno::RuntimeException) 5953*cdf0e10cSrcweir { 5954*cdf0e10cSrcweir ScUnoGuard aGuard; 5955*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5956*cdf0e10cSrcweir if ( pDocSh ) 5957*cdf0e10cSrcweir return new ScCellFormatsObj( pDocSh, aRange ); 5958*cdf0e10cSrcweir return NULL; 5959*cdf0e10cSrcweir } 5960*cdf0e10cSrcweir 5961*cdf0e10cSrcweir // XUniqueCellFormatRangesSupplier 5962*cdf0e10cSrcweir 5963*cdf0e10cSrcweir uno::Reference<container::XIndexAccess> SAL_CALL ScCellRangeObj::getUniqueCellFormatRanges() 5964*cdf0e10cSrcweir throw(uno::RuntimeException) 5965*cdf0e10cSrcweir { 5966*cdf0e10cSrcweir ScUnoGuard aGuard; 5967*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 5968*cdf0e10cSrcweir if ( pDocSh ) 5969*cdf0e10cSrcweir return new ScUniqueCellFormatsObj( pDocSh, aRange ); 5970*cdf0e10cSrcweir return NULL; 5971*cdf0e10cSrcweir } 5972*cdf0e10cSrcweir 5973*cdf0e10cSrcweir // XPropertySet erweitert fuer Range-Properties 5974*cdf0e10cSrcweir 5975*cdf0e10cSrcweir uno::Reference<beans::XPropertySetInfo> SAL_CALL ScCellRangeObj::getPropertySetInfo() 5976*cdf0e10cSrcweir throw(uno::RuntimeException) 5977*cdf0e10cSrcweir { 5978*cdf0e10cSrcweir ScUnoGuard aGuard; 5979*cdf0e10cSrcweir static uno::Reference<beans::XPropertySetInfo> aRef( 5980*cdf0e10cSrcweir new SfxItemPropertySetInfo( pRangePropSet->getPropertyMap() )); 5981*cdf0e10cSrcweir return aRef; 5982*cdf0e10cSrcweir } 5983*cdf0e10cSrcweir 5984*cdf0e10cSrcweir void ScCellRangeObj::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, const uno::Any& aValue ) 5985*cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException) 5986*cdf0e10cSrcweir { 5987*cdf0e10cSrcweir // Range has only Position and Size in addition to ScCellRangesBase, both are ReadOnly 5988*cdf0e10cSrcweir // -> nothing to do here 5989*cdf0e10cSrcweir 5990*cdf0e10cSrcweir ScCellRangesBase::SetOnePropertyValue( pEntry, aValue ); 5991*cdf0e10cSrcweir } 5992*cdf0e10cSrcweir 5993*cdf0e10cSrcweir void ScCellRangeObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, 5994*cdf0e10cSrcweir uno::Any& rAny ) 5995*cdf0e10cSrcweir throw(uno::RuntimeException) 5996*cdf0e10cSrcweir { 5997*cdf0e10cSrcweir if ( pEntry ) 5998*cdf0e10cSrcweir { 5999*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_POS ) 6000*cdf0e10cSrcweir { 6001*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6002*cdf0e10cSrcweir if (pDocSh) 6003*cdf0e10cSrcweir { 6004*cdf0e10cSrcweir // GetMMRect converts using HMM_PER_TWIPS, like the DrawingLayer 6005*cdf0e10cSrcweir Rectangle aMMRect(pDocSh->GetDocument()->GetMMRect( 6006*cdf0e10cSrcweir aRange.aStart.Col(), aRange.aStart.Row(), 6007*cdf0e10cSrcweir aRange.aEnd.Col(), aRange.aEnd.Row(), aRange.aStart.Tab() )); 6008*cdf0e10cSrcweir awt::Point aPos( aMMRect.Left(), aMMRect.Top() ); 6009*cdf0e10cSrcweir rAny <<= aPos; 6010*cdf0e10cSrcweir } 6011*cdf0e10cSrcweir } 6012*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_SIZE ) 6013*cdf0e10cSrcweir { 6014*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6015*cdf0e10cSrcweir if (pDocSh) 6016*cdf0e10cSrcweir { 6017*cdf0e10cSrcweir // GetMMRect converts using HMM_PER_TWIPS, like the DrawingLayer 6018*cdf0e10cSrcweir Rectangle aMMRect = pDocSh->GetDocument()->GetMMRect( 6019*cdf0e10cSrcweir aRange.aStart.Col(), aRange.aStart.Row(), 6020*cdf0e10cSrcweir aRange.aEnd.Col(), aRange.aEnd.Row(), aRange.aStart.Tab() ); 6021*cdf0e10cSrcweir Size aSize(aMMRect.GetSize()); 6022*cdf0e10cSrcweir awt::Size aAwtSize( aSize.Width(), aSize.Height() ); 6023*cdf0e10cSrcweir rAny <<= aAwtSize; 6024*cdf0e10cSrcweir } 6025*cdf0e10cSrcweir } 6026*cdf0e10cSrcweir else 6027*cdf0e10cSrcweir ScCellRangesBase::GetOnePropertyValue( pEntry, rAny ); 6028*cdf0e10cSrcweir 6029*cdf0e10cSrcweir } 6030*cdf0e10cSrcweir } 6031*cdf0e10cSrcweir 6032*cdf0e10cSrcweir const SfxItemPropertyMap* ScCellRangeObj::GetItemPropertyMap() 6033*cdf0e10cSrcweir { 6034*cdf0e10cSrcweir return pRangePropSet->getPropertyMap(); 6035*cdf0e10cSrcweir } 6036*cdf0e10cSrcweir 6037*cdf0e10cSrcweir // XServiceInfo 6038*cdf0e10cSrcweir 6039*cdf0e10cSrcweir rtl::OUString SAL_CALL ScCellRangeObj::getImplementationName() throw(uno::RuntimeException) 6040*cdf0e10cSrcweir { 6041*cdf0e10cSrcweir return rtl::OUString::createFromAscii( "ScCellRangeObj" ); 6042*cdf0e10cSrcweir } 6043*cdf0e10cSrcweir 6044*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellRangeObj::supportsService( const rtl::OUString& rServiceName ) 6045*cdf0e10cSrcweir throw(uno::RuntimeException) 6046*cdf0e10cSrcweir { 6047*cdf0e10cSrcweir String aServiceStr( rServiceName ); 6048*cdf0e10cSrcweir return aServiceStr.EqualsAscii( SCSHEETCELLRANGE_SERVICE ) || 6049*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCELLRANGE_SERVICE ) || 6050*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCELLPROPERTIES_SERVICE ) || 6051*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCHARPROPERTIES_SERVICE ) || 6052*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCPARAPROPERTIES_SERVICE ); 6053*cdf0e10cSrcweir } 6054*cdf0e10cSrcweir 6055*cdf0e10cSrcweir uno::Sequence<rtl::OUString> SAL_CALL ScCellRangeObj::getSupportedServiceNames() 6056*cdf0e10cSrcweir throw(uno::RuntimeException) 6057*cdf0e10cSrcweir { 6058*cdf0e10cSrcweir uno::Sequence<rtl::OUString> aRet(5); 6059*cdf0e10cSrcweir rtl::OUString* pArray = aRet.getArray(); 6060*cdf0e10cSrcweir pArray[0] = rtl::OUString::createFromAscii( SCSHEETCELLRANGE_SERVICE ); 6061*cdf0e10cSrcweir pArray[1] = rtl::OUString::createFromAscii( SCCELLRANGE_SERVICE ); 6062*cdf0e10cSrcweir pArray[2] = rtl::OUString::createFromAscii( SCCELLPROPERTIES_SERVICE ); 6063*cdf0e10cSrcweir pArray[3] = rtl::OUString::createFromAscii( SCCHARPROPERTIES_SERVICE ); 6064*cdf0e10cSrcweir pArray[4] = rtl::OUString::createFromAscii( SCPARAPROPERTIES_SERVICE ); 6065*cdf0e10cSrcweir return aRet; 6066*cdf0e10cSrcweir } 6067*cdf0e10cSrcweir 6068*cdf0e10cSrcweir //------------------------------------------------------------------------ 6069*cdf0e10cSrcweir 6070*cdf0e10cSrcweir const SvxItemPropertySet* ScCellObj::GetEditPropertySet() // static 6071*cdf0e10cSrcweir { 6072*cdf0e10cSrcweir return lcl_GetEditPropertySet(); 6073*cdf0e10cSrcweir } 6074*cdf0e10cSrcweir const SfxItemPropertyMap* ScCellObj::GetCellPropertyMap() 6075*cdf0e10cSrcweir { 6076*cdf0e10cSrcweir return lcl_GetCellPropertySet()->getPropertyMap(); 6077*cdf0e10cSrcweir } 6078*cdf0e10cSrcweir 6079*cdf0e10cSrcweir ScCellObj::ScCellObj(ScDocShell* pDocSh, const ScAddress& rP) : 6080*cdf0e10cSrcweir ScCellRangeObj( pDocSh, ScRange(rP,rP) ), 6081*cdf0e10cSrcweir pUnoText( NULL ), 6082*cdf0e10cSrcweir pCellPropSet( lcl_GetCellPropertySet() ), 6083*cdf0e10cSrcweir aCellPos( rP ), 6084*cdf0e10cSrcweir nActionLockCount( 0 ) 6085*cdf0e10cSrcweir { 6086*cdf0e10cSrcweir // pUnoText is allocated on demand (GetUnoText) 6087*cdf0e10cSrcweir // can't be aggregated because getString/setString is handled here 6088*cdf0e10cSrcweir } 6089*cdf0e10cSrcweir 6090*cdf0e10cSrcweir SvxUnoText& ScCellObj::GetUnoText() 6091*cdf0e10cSrcweir { 6092*cdf0e10cSrcweir if (!pUnoText) 6093*cdf0e10cSrcweir { 6094*cdf0e10cSrcweir pUnoText = new ScCellTextObj( GetDocShell(), aCellPos ); 6095*cdf0e10cSrcweir pUnoText->acquire(); 6096*cdf0e10cSrcweir if (nActionLockCount) 6097*cdf0e10cSrcweir { 6098*cdf0e10cSrcweir ScSharedCellEditSource* pEditSource = 6099*cdf0e10cSrcweir static_cast<ScSharedCellEditSource*> (pUnoText->GetEditSource()); 6100*cdf0e10cSrcweir if (pEditSource) 6101*cdf0e10cSrcweir pEditSource->SetDoUpdateData(sal_False); 6102*cdf0e10cSrcweir } 6103*cdf0e10cSrcweir } 6104*cdf0e10cSrcweir return *pUnoText; 6105*cdf0e10cSrcweir } 6106*cdf0e10cSrcweir 6107*cdf0e10cSrcweir ScCellObj::~ScCellObj() 6108*cdf0e10cSrcweir { 6109*cdf0e10cSrcweir if (pUnoText) 6110*cdf0e10cSrcweir pUnoText->release(); 6111*cdf0e10cSrcweir } 6112*cdf0e10cSrcweir 6113*cdf0e10cSrcweir void ScCellObj::RefChanged() 6114*cdf0e10cSrcweir { 6115*cdf0e10cSrcweir ScCellRangeObj::RefChanged(); 6116*cdf0e10cSrcweir 6117*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 6118*cdf0e10cSrcweir DBG_ASSERT(rRanges.Count() == 1, "was fuer Ranges ?!?!"); 6119*cdf0e10cSrcweir const ScRange* pFirst = rRanges.GetObject(0); 6120*cdf0e10cSrcweir if (pFirst) 6121*cdf0e10cSrcweir aCellPos = pFirst->aStart; 6122*cdf0e10cSrcweir } 6123*cdf0e10cSrcweir 6124*cdf0e10cSrcweir uno::Any SAL_CALL ScCellObj::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException) 6125*cdf0e10cSrcweir { 6126*cdf0e10cSrcweir SC_QUERYINTERFACE( table::XCell ) 6127*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XFormulaTokens ) 6128*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XCellAddressable ) 6129*cdf0e10cSrcweir SC_QUERYINTERFACE( text::XText ) 6130*cdf0e10cSrcweir SC_QUERYINTERFACE( text::XSimpleText ) 6131*cdf0e10cSrcweir SC_QUERYINTERFACE( text::XTextRange ) 6132*cdf0e10cSrcweir SC_QUERYINTERFACE( container::XEnumerationAccess ) 6133*cdf0e10cSrcweir SC_QUERYINTERFACE( container::XElementAccess ) 6134*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetAnnotationAnchor ) 6135*cdf0e10cSrcweir SC_QUERYINTERFACE( text::XTextFieldsSupplier ) 6136*cdf0e10cSrcweir SC_QUERYINTERFACE( document::XActionLockable ) 6137*cdf0e10cSrcweir 6138*cdf0e10cSrcweir return ScCellRangeObj::queryInterface( rType ); 6139*cdf0e10cSrcweir } 6140*cdf0e10cSrcweir 6141*cdf0e10cSrcweir void SAL_CALL ScCellObj::acquire() throw() 6142*cdf0e10cSrcweir { 6143*cdf0e10cSrcweir ScCellRangeObj::acquire(); 6144*cdf0e10cSrcweir } 6145*cdf0e10cSrcweir 6146*cdf0e10cSrcweir void SAL_CALL ScCellObj::release() throw() 6147*cdf0e10cSrcweir { 6148*cdf0e10cSrcweir ScCellRangeObj::release(); 6149*cdf0e10cSrcweir } 6150*cdf0e10cSrcweir 6151*cdf0e10cSrcweir uno::Sequence<uno::Type> SAL_CALL ScCellObj::getTypes() throw(uno::RuntimeException) 6152*cdf0e10cSrcweir { 6153*cdf0e10cSrcweir static uno::Sequence<uno::Type> aTypes; 6154*cdf0e10cSrcweir if ( aTypes.getLength() == 0 ) 6155*cdf0e10cSrcweir { 6156*cdf0e10cSrcweir uno::Sequence<uno::Type> aParentTypes(ScCellRangeObj::getTypes()); 6157*cdf0e10cSrcweir long nParentLen = aParentTypes.getLength(); 6158*cdf0e10cSrcweir const uno::Type* pParentPtr = aParentTypes.getConstArray(); 6159*cdf0e10cSrcweir 6160*cdf0e10cSrcweir aTypes.realloc( nParentLen + 8 ); 6161*cdf0e10cSrcweir uno::Type* pPtr = aTypes.getArray(); 6162*cdf0e10cSrcweir pPtr[nParentLen + 0] = getCppuType((const uno::Reference<table::XCell>*)0); 6163*cdf0e10cSrcweir pPtr[nParentLen + 1] = getCppuType((const uno::Reference<sheet::XCellAddressable>*)0); 6164*cdf0e10cSrcweir pPtr[nParentLen + 2] = getCppuType((const uno::Reference<text::XText>*)0); 6165*cdf0e10cSrcweir pPtr[nParentLen + 3] = getCppuType((const uno::Reference<container::XEnumerationAccess>*)0); 6166*cdf0e10cSrcweir pPtr[nParentLen + 4] = getCppuType((const uno::Reference<sheet::XSheetAnnotationAnchor>*)0); 6167*cdf0e10cSrcweir pPtr[nParentLen + 5] = getCppuType((const uno::Reference<text::XTextFieldsSupplier>*)0); 6168*cdf0e10cSrcweir pPtr[nParentLen + 6] = getCppuType((const uno::Reference<document::XActionLockable>*)0); 6169*cdf0e10cSrcweir pPtr[nParentLen + 7] = getCppuType((const uno::Reference<sheet::XFormulaTokens>*)0); 6170*cdf0e10cSrcweir 6171*cdf0e10cSrcweir for (long i=0; i<nParentLen; i++) 6172*cdf0e10cSrcweir pPtr[i] = pParentPtr[i]; // parent types first 6173*cdf0e10cSrcweir } 6174*cdf0e10cSrcweir return aTypes; 6175*cdf0e10cSrcweir } 6176*cdf0e10cSrcweir 6177*cdf0e10cSrcweir uno::Sequence<sal_Int8> SAL_CALL ScCellObj::getImplementationId() throw(uno::RuntimeException) 6178*cdf0e10cSrcweir { 6179*cdf0e10cSrcweir static uno::Sequence< sal_Int8 > aId; 6180*cdf0e10cSrcweir if( aId.getLength() == 0 ) 6181*cdf0e10cSrcweir { 6182*cdf0e10cSrcweir aId.realloc( 16 ); 6183*cdf0e10cSrcweir rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); 6184*cdf0e10cSrcweir } 6185*cdf0e10cSrcweir return aId; 6186*cdf0e10cSrcweir } 6187*cdf0e10cSrcweir 6188*cdf0e10cSrcweir // Hilfsfunktionen 6189*cdf0e10cSrcweir 6190*cdf0e10cSrcweir String ScCellObj::GetInputString_Impl(sal_Bool bEnglish) const // fuer getFormula / FormulaLocal 6191*cdf0e10cSrcweir { 6192*cdf0e10cSrcweir if (GetDocShell()) 6193*cdf0e10cSrcweir return lcl_GetInputString( GetDocShell()->GetDocument(), aCellPos, bEnglish ); 6194*cdf0e10cSrcweir return String(); 6195*cdf0e10cSrcweir } 6196*cdf0e10cSrcweir 6197*cdf0e10cSrcweir String ScCellObj::GetOutputString_Impl(ScDocument* pDoc, const ScAddress& aCellPos) 6198*cdf0e10cSrcweir { 6199*cdf0e10cSrcweir String aVal; 6200*cdf0e10cSrcweir if ( pDoc ) 6201*cdf0e10cSrcweir { 6202*cdf0e10cSrcweir ScBaseCell* pCell = pDoc->GetCell( aCellPos ); 6203*cdf0e10cSrcweir if ( pCell && pCell->GetCellType() != CELLTYPE_NOTE ) 6204*cdf0e10cSrcweir { 6205*cdf0e10cSrcweir if ( pCell->GetCellType() == CELLTYPE_EDIT ) 6206*cdf0e10cSrcweir { 6207*cdf0e10cSrcweir // GetString an der EditCell macht Leerzeichen aus Umbruechen, 6208*cdf0e10cSrcweir // hier werden die Umbrueche aber gebraucht 6209*cdf0e10cSrcweir const EditTextObject* pData = ((ScEditCell*)pCell)->GetData(); 6210*cdf0e10cSrcweir if (pData) 6211*cdf0e10cSrcweir { 6212*cdf0e10cSrcweir EditEngine& rEngine = pDoc->GetEditEngine(); 6213*cdf0e10cSrcweir rEngine.SetText( *pData ); 6214*cdf0e10cSrcweir aVal = rEngine.GetText( LINEEND_LF ); 6215*cdf0e10cSrcweir } 6216*cdf0e10cSrcweir // Edit-Zellen auch nicht per NumberFormatter formatieren 6217*cdf0e10cSrcweir // (passend zur Ausgabe) 6218*cdf0e10cSrcweir } 6219*cdf0e10cSrcweir else 6220*cdf0e10cSrcweir { 6221*cdf0e10cSrcweir // wie in GetString am Dokument (column) 6222*cdf0e10cSrcweir Color* pColor; 6223*cdf0e10cSrcweir sal_uLong nNumFmt = pDoc->GetNumberFormat( aCellPos ); 6224*cdf0e10cSrcweir ScCellFormat::GetString( pCell, nNumFmt, aVal, &pColor, *pDoc->GetFormatTable() ); 6225*cdf0e10cSrcweir } 6226*cdf0e10cSrcweir } 6227*cdf0e10cSrcweir } 6228*cdf0e10cSrcweir return aVal; 6229*cdf0e10cSrcweir } 6230*cdf0e10cSrcweir 6231*cdf0e10cSrcweir String ScCellObj::GetOutputString_Impl() const 6232*cdf0e10cSrcweir { 6233*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6234*cdf0e10cSrcweir String aVal; 6235*cdf0e10cSrcweir if ( pDocSh ) 6236*cdf0e10cSrcweir aVal = GetOutputString_Impl(pDocSh->GetDocument(), aCellPos); 6237*cdf0e10cSrcweir return aVal; 6238*cdf0e10cSrcweir } 6239*cdf0e10cSrcweir 6240*cdf0e10cSrcweir void ScCellObj::SetString_Impl(const String& rString, sal_Bool bInterpret, sal_Bool bEnglish) 6241*cdf0e10cSrcweir { 6242*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6243*cdf0e10cSrcweir if ( pDocSh ) 6244*cdf0e10cSrcweir { 6245*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 6246*cdf0e10cSrcweir // GRAM_PODF_A1 for API compatibility. 6247*cdf0e10cSrcweir (void)aFunc.SetCellText( aCellPos, rString, bInterpret, bEnglish, sal_True, EMPTY_STRING, formula::FormulaGrammar::GRAM_PODF_A1 ); 6248*cdf0e10cSrcweir } 6249*cdf0e10cSrcweir } 6250*cdf0e10cSrcweir 6251*cdf0e10cSrcweir double ScCellObj::GetValue_Impl() const 6252*cdf0e10cSrcweir { 6253*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6254*cdf0e10cSrcweir if ( pDocSh ) 6255*cdf0e10cSrcweir return pDocSh->GetDocument()->GetValue( aCellPos ); 6256*cdf0e10cSrcweir 6257*cdf0e10cSrcweir return 0.0; 6258*cdf0e10cSrcweir } 6259*cdf0e10cSrcweir 6260*cdf0e10cSrcweir void ScCellObj::SetValue_Impl(double fValue) 6261*cdf0e10cSrcweir { 6262*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6263*cdf0e10cSrcweir if ( pDocSh ) 6264*cdf0e10cSrcweir { 6265*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 6266*cdf0e10cSrcweir (void)aFunc.PutCell( aCellPos, new ScValueCell(fValue), sal_True ); 6267*cdf0e10cSrcweir } 6268*cdf0e10cSrcweir } 6269*cdf0e10cSrcweir 6270*cdf0e10cSrcweir // only for XML import 6271*cdf0e10cSrcweir 6272*cdf0e10cSrcweir void ScCellObj::SetFormulaResultString( const ::rtl::OUString& rResult ) 6273*cdf0e10cSrcweir { 6274*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6275*cdf0e10cSrcweir if ( pDocSh ) 6276*cdf0e10cSrcweir { 6277*cdf0e10cSrcweir ScBaseCell* pCell = pDocSh->GetDocument()->GetCell( aCellPos ); 6278*cdf0e10cSrcweir if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA ) 6279*cdf0e10cSrcweir ((ScFormulaCell*)pCell)->SetHybridString( rResult ); 6280*cdf0e10cSrcweir } 6281*cdf0e10cSrcweir } 6282*cdf0e10cSrcweir 6283*cdf0e10cSrcweir void ScCellObj::SetFormulaResultDouble( double fResult ) 6284*cdf0e10cSrcweir { 6285*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6286*cdf0e10cSrcweir if ( pDocSh ) 6287*cdf0e10cSrcweir { 6288*cdf0e10cSrcweir ScBaseCell* pCell = pDocSh->GetDocument()->GetCell( aCellPos ); 6289*cdf0e10cSrcweir if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA ) 6290*cdf0e10cSrcweir ((ScFormulaCell*)pCell)->SetHybridDouble( fResult ); 6291*cdf0e10cSrcweir } 6292*cdf0e10cSrcweir } 6293*cdf0e10cSrcweir 6294*cdf0e10cSrcweir void ScCellObj::SetFormulaWithGrammar( const ::rtl::OUString& rFormula, 6295*cdf0e10cSrcweir const ::rtl::OUString& rFormulaNmsp, const formula::FormulaGrammar::Grammar eGrammar ) 6296*cdf0e10cSrcweir { 6297*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6298*cdf0e10cSrcweir if ( pDocSh ) 6299*cdf0e10cSrcweir { 6300*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 6301*cdf0e10cSrcweir aFunc.SetCellText( aCellPos, rFormula, sal_True, sal_True, sal_True, rFormulaNmsp, eGrammar); 6302*cdf0e10cSrcweir } 6303*cdf0e10cSrcweir } 6304*cdf0e10cSrcweir 6305*cdf0e10cSrcweir void ScCellObj::InputEnglishString( const ::rtl::OUString& rText ) 6306*cdf0e10cSrcweir { 6307*cdf0e10cSrcweir // This is like a mixture of setFormula and property FormulaLocal: 6308*cdf0e10cSrcweir // The cell's number format is checked for "text", a new cell format may be set, 6309*cdf0e10cSrcweir // but all parsing is in English. 6310*cdf0e10cSrcweir 6311*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6312*cdf0e10cSrcweir if ( pDocSh ) 6313*cdf0e10cSrcweir { 6314*cdf0e10cSrcweir String aString(rText); 6315*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 6316*cdf0e10cSrcweir SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); 6317*cdf0e10cSrcweir sal_uInt32 nOldFormat = pDoc->GetNumberFormat( aCellPos ); 6318*cdf0e10cSrcweir if ( pFormatter->GetType( nOldFormat ) == NUMBERFORMAT_TEXT ) 6319*cdf0e10cSrcweir { 6320*cdf0e10cSrcweir SetString_Impl(aString, sal_False, sal_False); // text cell 6321*cdf0e10cSrcweir } 6322*cdf0e10cSrcweir else 6323*cdf0e10cSrcweir { 6324*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 6325*cdf0e10cSrcweir short nFormatType = 0; 6326*cdf0e10cSrcweir ScBaseCell* pNewCell = aFunc.InterpretEnglishString( aCellPos, aString, 6327*cdf0e10cSrcweir EMPTY_STRING, formula::FormulaGrammar::GRAM_PODF_A1, &nFormatType ); 6328*cdf0e10cSrcweir if (pNewCell) 6329*cdf0e10cSrcweir { 6330*cdf0e10cSrcweir if ( ( nOldFormat % SV_COUNTRY_LANGUAGE_OFFSET ) == 0 && nFormatType != 0 ) 6331*cdf0e10cSrcweir { 6332*cdf0e10cSrcweir // apply a format for the recognized type and the old format's language 6333*cdf0e10cSrcweir sal_uInt32 nNewFormat = ScGlobal::GetStandardFormat( *pFormatter, nOldFormat, nFormatType ); 6334*cdf0e10cSrcweir if ( nNewFormat != nOldFormat ) 6335*cdf0e10cSrcweir { 6336*cdf0e10cSrcweir ScPatternAttr aPattern( pDoc->GetPool() ); 6337*cdf0e10cSrcweir aPattern.GetItemSet().Put( SfxUInt32Item( ATTR_VALUE_FORMAT, nNewFormat ) ); 6338*cdf0e10cSrcweir // ATTR_LANGUAGE_FORMAT remains unchanged 6339*cdf0e10cSrcweir aFunc.ApplyAttributes( *GetMarkData(), aPattern, sal_True, sal_True ); 6340*cdf0e10cSrcweir } 6341*cdf0e10cSrcweir } 6342*cdf0e10cSrcweir // put the cell into the document 6343*cdf0e10cSrcweir // (after applying the format, so possible formula recalculation already uses the new format) 6344*cdf0e10cSrcweir (void)aFunc.PutCell( aCellPos, pNewCell, sal_True ); 6345*cdf0e10cSrcweir } 6346*cdf0e10cSrcweir else 6347*cdf0e10cSrcweir SetString_Impl(aString, sal_False, sal_False); // no cell from InterpretEnglishString, probably empty string 6348*cdf0e10cSrcweir } 6349*cdf0e10cSrcweir } 6350*cdf0e10cSrcweir } 6351*cdf0e10cSrcweir 6352*cdf0e10cSrcweir // XText 6353*cdf0e10cSrcweir 6354*cdf0e10cSrcweir uno::Reference<text::XTextCursor> SAL_CALL ScCellObj::createTextCursor() 6355*cdf0e10cSrcweir throw(uno::RuntimeException) 6356*cdf0e10cSrcweir { 6357*cdf0e10cSrcweir ScUnoGuard aGuard; 6358*cdf0e10cSrcweir return new ScCellTextCursor( *this ); 6359*cdf0e10cSrcweir } 6360*cdf0e10cSrcweir 6361*cdf0e10cSrcweir uno::Reference<text::XTextCursor> SAL_CALL ScCellObj::createTextCursorByRange( 6362*cdf0e10cSrcweir const uno::Reference<text::XTextRange>& aTextPosition ) 6363*cdf0e10cSrcweir throw(uno::RuntimeException) 6364*cdf0e10cSrcweir { 6365*cdf0e10cSrcweir ScUnoGuard aGuard; 6366*cdf0e10cSrcweir SvxUnoTextCursor* pCursor = new ScCellTextCursor( *this ); 6367*cdf0e10cSrcweir uno::Reference<text::XTextCursor> xCursor(pCursor); 6368*cdf0e10cSrcweir 6369*cdf0e10cSrcweir SvxUnoTextRangeBase* pRange = SvxUnoTextRangeBase::getImplementation( aTextPosition ); 6370*cdf0e10cSrcweir if(pRange) 6371*cdf0e10cSrcweir pCursor->SetSelection( pRange->GetSelection() ); 6372*cdf0e10cSrcweir else 6373*cdf0e10cSrcweir { 6374*cdf0e10cSrcweir ScCellTextCursor* pOther = ScCellTextCursor::getImplementation( aTextPosition ); 6375*cdf0e10cSrcweir if(pOther) 6376*cdf0e10cSrcweir pCursor->SetSelection( pOther->GetSelection() ); 6377*cdf0e10cSrcweir else 6378*cdf0e10cSrcweir throw uno::RuntimeException(); 6379*cdf0e10cSrcweir } 6380*cdf0e10cSrcweir 6381*cdf0e10cSrcweir return xCursor; 6382*cdf0e10cSrcweir } 6383*cdf0e10cSrcweir 6384*cdf0e10cSrcweir rtl::OUString SAL_CALL ScCellObj::getString() throw(uno::RuntimeException) 6385*cdf0e10cSrcweir { 6386*cdf0e10cSrcweir ScUnoGuard aGuard; 6387*cdf0e10cSrcweir return GetOutputString_Impl(); 6388*cdf0e10cSrcweir } 6389*cdf0e10cSrcweir 6390*cdf0e10cSrcweir void SAL_CALL ScCellObj::setString( const rtl::OUString& aText ) throw(uno::RuntimeException) 6391*cdf0e10cSrcweir { 6392*cdf0e10cSrcweir ScUnoGuard aGuard; 6393*cdf0e10cSrcweir String aString(aText); 6394*cdf0e10cSrcweir SetString_Impl(aString, sal_False, sal_False); // immer Text 6395*cdf0e10cSrcweir 6396*cdf0e10cSrcweir // don't create pUnoText here if not there 6397*cdf0e10cSrcweir if (pUnoText) 6398*cdf0e10cSrcweir pUnoText->SetSelection(ESelection( 0,0, 0,aString.Len() )); 6399*cdf0e10cSrcweir } 6400*cdf0e10cSrcweir 6401*cdf0e10cSrcweir void SAL_CALL ScCellObj::insertString( const uno::Reference<text::XTextRange>& xRange, 6402*cdf0e10cSrcweir const rtl::OUString& aString, sal_Bool bAbsorb ) 6403*cdf0e10cSrcweir throw(uno::RuntimeException) 6404*cdf0e10cSrcweir { 6405*cdf0e10cSrcweir // special handling for ScCellTextCursor is no longer needed, 6406*cdf0e10cSrcweir // SvxUnoText::insertString checks for SvxUnoTextRangeBase instead of SvxUnoTextRange 6407*cdf0e10cSrcweir 6408*cdf0e10cSrcweir ScUnoGuard aGuard; 6409*cdf0e10cSrcweir GetUnoText().insertString(xRange, aString, bAbsorb); 6410*cdf0e10cSrcweir } 6411*cdf0e10cSrcweir 6412*cdf0e10cSrcweir void SAL_CALL ScCellObj::insertControlCharacter( const uno::Reference<text::XTextRange>& xRange, 6413*cdf0e10cSrcweir sal_Int16 nControlCharacter, sal_Bool bAbsorb ) 6414*cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException) 6415*cdf0e10cSrcweir { 6416*cdf0e10cSrcweir ScUnoGuard aGuard; 6417*cdf0e10cSrcweir GetUnoText().insertControlCharacter(xRange, nControlCharacter, bAbsorb); 6418*cdf0e10cSrcweir } 6419*cdf0e10cSrcweir 6420*cdf0e10cSrcweir void SAL_CALL ScCellObj::insertTextContent( const uno::Reference<text::XTextRange >& xRange, 6421*cdf0e10cSrcweir const uno::Reference<text::XTextContent >& xContent, 6422*cdf0e10cSrcweir sal_Bool bAbsorb ) 6423*cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException) 6424*cdf0e10cSrcweir { 6425*cdf0e10cSrcweir ScUnoGuard aGuard; 6426*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6427*cdf0e10cSrcweir if ( pDocSh && xContent.is() ) 6428*cdf0e10cSrcweir { 6429*cdf0e10cSrcweir ScCellFieldObj* pCellField = ScCellFieldObj::getImplementation( xContent ); 6430*cdf0e10cSrcweir SvxUnoTextRangeBase* pTextRange = ScCellTextCursor::getImplementation( xRange ); 6431*cdf0e10cSrcweir 6432*cdf0e10cSrcweir #if 0 6433*cdf0e10cSrcweir if (!pTextRange) 6434*cdf0e10cSrcweir pTextRange = SvxUnoTextRangeBase::getImplementation( xRange ); 6435*cdf0e10cSrcweir 6436*cdf0e10cSrcweir //! bei SvxUnoTextRange testen, ob in passendem Objekt !!! 6437*cdf0e10cSrcweir #endif 6438*cdf0e10cSrcweir 6439*cdf0e10cSrcweir if ( pCellField && !pCellField->IsInserted() && pTextRange ) 6440*cdf0e10cSrcweir { 6441*cdf0e10cSrcweir SvxEditSource* pEditSource = pTextRange->GetEditSource(); 6442*cdf0e10cSrcweir ESelection aSelection(pTextRange->GetSelection()); 6443*cdf0e10cSrcweir 6444*cdf0e10cSrcweir if (!bAbsorb) 6445*cdf0e10cSrcweir { 6446*cdf0e10cSrcweir // nicht ersetzen -> hinten anhaengen 6447*cdf0e10cSrcweir aSelection.Adjust(); 6448*cdf0e10cSrcweir aSelection.nStartPara = aSelection.nEndPara; 6449*cdf0e10cSrcweir aSelection.nStartPos = aSelection.nEndPos; 6450*cdf0e10cSrcweir } 6451*cdf0e10cSrcweir 6452*cdf0e10cSrcweir SvxFieldItem aItem(pCellField->CreateFieldItem()); 6453*cdf0e10cSrcweir 6454*cdf0e10cSrcweir SvxTextForwarder* pForwarder = pEditSource->GetTextForwarder(); 6455*cdf0e10cSrcweir pForwarder->QuickInsertField( aItem, aSelection ); 6456*cdf0e10cSrcweir pEditSource->UpdateData(); 6457*cdf0e10cSrcweir 6458*cdf0e10cSrcweir // neue Selektion: ein Zeichen 6459*cdf0e10cSrcweir aSelection.Adjust(); 6460*cdf0e10cSrcweir aSelection.nEndPara = aSelection.nStartPara; 6461*cdf0e10cSrcweir aSelection.nEndPos = aSelection.nStartPos + 1; 6462*cdf0e10cSrcweir pCellField->InitDoc( pDocSh, aCellPos, aSelection ); 6463*cdf0e10cSrcweir 6464*cdf0e10cSrcweir // #91431# for bAbsorb=sal_False, the new selection must be behind the inserted content 6465*cdf0e10cSrcweir // (the xml filter relies on this) 6466*cdf0e10cSrcweir if (!bAbsorb) 6467*cdf0e10cSrcweir aSelection.nStartPos = aSelection.nEndPos; 6468*cdf0e10cSrcweir 6469*cdf0e10cSrcweir pTextRange->SetSelection( aSelection ); 6470*cdf0e10cSrcweir 6471*cdf0e10cSrcweir return; 6472*cdf0e10cSrcweir } 6473*cdf0e10cSrcweir } 6474*cdf0e10cSrcweir GetUnoText().insertTextContent(xRange, xContent, bAbsorb); 6475*cdf0e10cSrcweir } 6476*cdf0e10cSrcweir 6477*cdf0e10cSrcweir void SAL_CALL ScCellObj::removeTextContent( const uno::Reference<text::XTextContent>& xContent ) 6478*cdf0e10cSrcweir throw(container::NoSuchElementException, uno::RuntimeException) 6479*cdf0e10cSrcweir { 6480*cdf0e10cSrcweir ScUnoGuard aGuard; 6481*cdf0e10cSrcweir if ( xContent.is() ) 6482*cdf0e10cSrcweir { 6483*cdf0e10cSrcweir ScCellFieldObj* pCellField = ScCellFieldObj::getImplementation( xContent ); 6484*cdf0e10cSrcweir if ( pCellField && pCellField->IsInserted() ) 6485*cdf0e10cSrcweir { 6486*cdf0e10cSrcweir //! Testen, ob das Feld in dieser Zelle ist 6487*cdf0e10cSrcweir pCellField->DeleteField(); 6488*cdf0e10cSrcweir return; 6489*cdf0e10cSrcweir } 6490*cdf0e10cSrcweir } 6491*cdf0e10cSrcweir GetUnoText().removeTextContent(xContent); 6492*cdf0e10cSrcweir } 6493*cdf0e10cSrcweir 6494*cdf0e10cSrcweir uno::Reference<text::XText> SAL_CALL ScCellObj::getText() throw(uno::RuntimeException) 6495*cdf0e10cSrcweir { 6496*cdf0e10cSrcweir ScUnoGuard aGuard; 6497*cdf0e10cSrcweir return this; 6498*cdf0e10cSrcweir } 6499*cdf0e10cSrcweir 6500*cdf0e10cSrcweir uno::Reference<text::XTextRange> SAL_CALL ScCellObj::getStart() throw(uno::RuntimeException) 6501*cdf0e10cSrcweir { 6502*cdf0e10cSrcweir ScUnoGuard aGuard; 6503*cdf0e10cSrcweir return GetUnoText().getStart(); 6504*cdf0e10cSrcweir } 6505*cdf0e10cSrcweir 6506*cdf0e10cSrcweir uno::Reference<text::XTextRange> SAL_CALL ScCellObj::getEnd() throw(uno::RuntimeException) 6507*cdf0e10cSrcweir { 6508*cdf0e10cSrcweir ScUnoGuard aGuard; 6509*cdf0e10cSrcweir return GetUnoText().getEnd(); 6510*cdf0e10cSrcweir } 6511*cdf0e10cSrcweir 6512*cdf0e10cSrcweir uno::Reference<container::XEnumeration> SAL_CALL ScCellObj::createEnumeration() 6513*cdf0e10cSrcweir throw(uno::RuntimeException) 6514*cdf0e10cSrcweir { 6515*cdf0e10cSrcweir ScUnoGuard aGuard; 6516*cdf0e10cSrcweir return GetUnoText().createEnumeration(); 6517*cdf0e10cSrcweir } 6518*cdf0e10cSrcweir 6519*cdf0e10cSrcweir uno::Type SAL_CALL ScCellObj::getElementType() throw(uno::RuntimeException) 6520*cdf0e10cSrcweir { 6521*cdf0e10cSrcweir ScUnoGuard aGuard; 6522*cdf0e10cSrcweir return GetUnoText().getElementType(); 6523*cdf0e10cSrcweir } 6524*cdf0e10cSrcweir 6525*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellObj::hasElements() throw(uno::RuntimeException) 6526*cdf0e10cSrcweir { 6527*cdf0e10cSrcweir ScUnoGuard aGuard; 6528*cdf0e10cSrcweir return GetUnoText().hasElements(); 6529*cdf0e10cSrcweir } 6530*cdf0e10cSrcweir 6531*cdf0e10cSrcweir // XCell 6532*cdf0e10cSrcweir 6533*cdf0e10cSrcweir rtl::OUString SAL_CALL ScCellObj::getFormula() throw(uno::RuntimeException) 6534*cdf0e10cSrcweir { 6535*cdf0e10cSrcweir ScUnoGuard aGuard; 6536*cdf0e10cSrcweir // sal_True = englisch 6537*cdf0e10cSrcweir return GetInputString_Impl(sal_True); 6538*cdf0e10cSrcweir } 6539*cdf0e10cSrcweir 6540*cdf0e10cSrcweir void SAL_CALL ScCellObj::setFormula( const rtl::OUString& aFormula ) throw(uno::RuntimeException) 6541*cdf0e10cSrcweir { 6542*cdf0e10cSrcweir ScUnoGuard aGuard; 6543*cdf0e10cSrcweir String aString(aFormula); 6544*cdf0e10cSrcweir SetString_Impl(aString, sal_True, sal_True); // englisch interpretieren 6545*cdf0e10cSrcweir } 6546*cdf0e10cSrcweir 6547*cdf0e10cSrcweir double SAL_CALL ScCellObj::getValue() throw(uno::RuntimeException) 6548*cdf0e10cSrcweir { 6549*cdf0e10cSrcweir ScUnoGuard aGuard; 6550*cdf0e10cSrcweir return GetValue_Impl(); 6551*cdf0e10cSrcweir } 6552*cdf0e10cSrcweir 6553*cdf0e10cSrcweir void SAL_CALL ScCellObj::setValue( double nValue ) throw(uno::RuntimeException) 6554*cdf0e10cSrcweir { 6555*cdf0e10cSrcweir ScUnoGuard aGuard; 6556*cdf0e10cSrcweir SetValue_Impl(nValue); 6557*cdf0e10cSrcweir } 6558*cdf0e10cSrcweir 6559*cdf0e10cSrcweir table::CellContentType SAL_CALL ScCellObj::getType() throw(uno::RuntimeException) 6560*cdf0e10cSrcweir { 6561*cdf0e10cSrcweir ScUnoGuard aGuard; 6562*cdf0e10cSrcweir table::CellContentType eRet = table::CellContentType_EMPTY; 6563*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6564*cdf0e10cSrcweir if (pDocSh) 6565*cdf0e10cSrcweir { 6566*cdf0e10cSrcweir CellType eCalcType = pDocSh->GetDocument()->GetCellType( aCellPos ); 6567*cdf0e10cSrcweir switch (eCalcType) 6568*cdf0e10cSrcweir { 6569*cdf0e10cSrcweir case CELLTYPE_VALUE: 6570*cdf0e10cSrcweir eRet = table::CellContentType_VALUE; 6571*cdf0e10cSrcweir break; 6572*cdf0e10cSrcweir case CELLTYPE_STRING: 6573*cdf0e10cSrcweir case CELLTYPE_EDIT: 6574*cdf0e10cSrcweir eRet = table::CellContentType_TEXT; 6575*cdf0e10cSrcweir break; 6576*cdf0e10cSrcweir case CELLTYPE_FORMULA: 6577*cdf0e10cSrcweir eRet = table::CellContentType_FORMULA; 6578*cdf0e10cSrcweir break; 6579*cdf0e10cSrcweir default: 6580*cdf0e10cSrcweir eRet = table::CellContentType_EMPTY; 6581*cdf0e10cSrcweir } 6582*cdf0e10cSrcweir } 6583*cdf0e10cSrcweir else 6584*cdf0e10cSrcweir { 6585*cdf0e10cSrcweir DBG_ERROR("keine DocShell"); //! Exception oder so? 6586*cdf0e10cSrcweir } 6587*cdf0e10cSrcweir 6588*cdf0e10cSrcweir return eRet; 6589*cdf0e10cSrcweir } 6590*cdf0e10cSrcweir 6591*cdf0e10cSrcweir table::CellContentType ScCellObj::GetResultType_Impl() 6592*cdf0e10cSrcweir { 6593*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6594*cdf0e10cSrcweir if ( pDocSh ) 6595*cdf0e10cSrcweir { 6596*cdf0e10cSrcweir ScBaseCell* pCell = pDocSh->GetDocument()->GetCell(aCellPos); 6597*cdf0e10cSrcweir if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA ) 6598*cdf0e10cSrcweir { 6599*cdf0e10cSrcweir sal_Bool bValue = ((ScFormulaCell*)pCell)->IsValue(); 6600*cdf0e10cSrcweir return bValue ? table::CellContentType_VALUE : table::CellContentType_TEXT; 6601*cdf0e10cSrcweir } 6602*cdf0e10cSrcweir } 6603*cdf0e10cSrcweir return getType(); // wenn keine Formel 6604*cdf0e10cSrcweir } 6605*cdf0e10cSrcweir 6606*cdf0e10cSrcweir sal_Int32 SAL_CALL ScCellObj::getError() throw(uno::RuntimeException) 6607*cdf0e10cSrcweir { 6608*cdf0e10cSrcweir ScUnoGuard aGuard; 6609*cdf0e10cSrcweir sal_uInt16 nError = 0; 6610*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6611*cdf0e10cSrcweir if (pDocSh) 6612*cdf0e10cSrcweir { 6613*cdf0e10cSrcweir ScBaseCell* pCell = pDocSh->GetDocument()->GetCell( aCellPos ); 6614*cdf0e10cSrcweir if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA ) 6615*cdf0e10cSrcweir nError = ((ScFormulaCell*)pCell)->GetErrCode(); 6616*cdf0e10cSrcweir // sonst bleibt's bei 0 6617*cdf0e10cSrcweir } 6618*cdf0e10cSrcweir else 6619*cdf0e10cSrcweir { 6620*cdf0e10cSrcweir DBG_ERROR("keine DocShell"); //! Exception oder so? 6621*cdf0e10cSrcweir } 6622*cdf0e10cSrcweir 6623*cdf0e10cSrcweir return nError; 6624*cdf0e10cSrcweir } 6625*cdf0e10cSrcweir 6626*cdf0e10cSrcweir // XFormulaTokens 6627*cdf0e10cSrcweir 6628*cdf0e10cSrcweir uno::Sequence<sheet::FormulaToken> SAL_CALL ScCellObj::getTokens() throw(uno::RuntimeException) 6629*cdf0e10cSrcweir { 6630*cdf0e10cSrcweir ScUnoGuard aGuard; 6631*cdf0e10cSrcweir uno::Sequence<sheet::FormulaToken> aSequence; 6632*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6633*cdf0e10cSrcweir if ( pDocSh ) 6634*cdf0e10cSrcweir { 6635*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 6636*cdf0e10cSrcweir ScBaseCell* pCell = pDoc->GetCell( aCellPos ); 6637*cdf0e10cSrcweir if ( pCell && pCell->GetCellType() == CELLTYPE_FORMULA ) 6638*cdf0e10cSrcweir { 6639*cdf0e10cSrcweir ScTokenArray* pTokenArray = static_cast<ScFormulaCell*>(pCell)->GetCode(); 6640*cdf0e10cSrcweir if ( pTokenArray ) 6641*cdf0e10cSrcweir (void)ScTokenConversion::ConvertToTokenSequence( *pDoc, aSequence, *pTokenArray ); 6642*cdf0e10cSrcweir } 6643*cdf0e10cSrcweir } 6644*cdf0e10cSrcweir return aSequence; 6645*cdf0e10cSrcweir } 6646*cdf0e10cSrcweir 6647*cdf0e10cSrcweir void SAL_CALL ScCellObj::setTokens( const uno::Sequence<sheet::FormulaToken>& rTokens ) throw(uno::RuntimeException) 6648*cdf0e10cSrcweir { 6649*cdf0e10cSrcweir ScUnoGuard aGuard; 6650*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6651*cdf0e10cSrcweir if ( pDocSh ) 6652*cdf0e10cSrcweir { 6653*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 6654*cdf0e10cSrcweir ScTokenArray aTokenArray; 6655*cdf0e10cSrcweir (void)ScTokenConversion::ConvertToTokenArray( *pDoc, aTokenArray, rTokens ); 6656*cdf0e10cSrcweir 6657*cdf0e10cSrcweir ScDocFunc aFunc( *pDocSh ); 6658*cdf0e10cSrcweir ScBaseCell* pNewCell = new ScFormulaCell( pDoc, aCellPos, &aTokenArray ); 6659*cdf0e10cSrcweir (void)aFunc.PutCell( aCellPos, pNewCell, sal_True ); 6660*cdf0e10cSrcweir } 6661*cdf0e10cSrcweir } 6662*cdf0e10cSrcweir 6663*cdf0e10cSrcweir // XCellAddressable 6664*cdf0e10cSrcweir 6665*cdf0e10cSrcweir table::CellAddress SAL_CALL ScCellObj::getCellAddress() throw(uno::RuntimeException) 6666*cdf0e10cSrcweir { 6667*cdf0e10cSrcweir ScUnoGuard aGuard; 6668*cdf0e10cSrcweir table::CellAddress aAdr; 6669*cdf0e10cSrcweir aAdr.Sheet = aCellPos.Tab(); 6670*cdf0e10cSrcweir aAdr.Column = aCellPos.Col(); 6671*cdf0e10cSrcweir aAdr.Row = aCellPos.Row(); 6672*cdf0e10cSrcweir return aAdr; 6673*cdf0e10cSrcweir } 6674*cdf0e10cSrcweir 6675*cdf0e10cSrcweir // XSheetAnnotationAnchor 6676*cdf0e10cSrcweir 6677*cdf0e10cSrcweir uno::Reference<sheet::XSheetAnnotation> SAL_CALL ScCellObj::getAnnotation() 6678*cdf0e10cSrcweir throw(uno::RuntimeException) 6679*cdf0e10cSrcweir { 6680*cdf0e10cSrcweir ScUnoGuard aGuard; 6681*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6682*cdf0e10cSrcweir if ( pDocSh ) 6683*cdf0e10cSrcweir return new ScAnnotationObj( pDocSh, aCellPos ); 6684*cdf0e10cSrcweir 6685*cdf0e10cSrcweir DBG_ERROR("getAnnotation ohne DocShell"); 6686*cdf0e10cSrcweir return NULL; 6687*cdf0e10cSrcweir } 6688*cdf0e10cSrcweir 6689*cdf0e10cSrcweir // XFieldTypesSupplier 6690*cdf0e10cSrcweir 6691*cdf0e10cSrcweir uno::Reference<container::XEnumerationAccess> SAL_CALL ScCellObj::getTextFields() 6692*cdf0e10cSrcweir throw(uno::RuntimeException) 6693*cdf0e10cSrcweir { 6694*cdf0e10cSrcweir ScUnoGuard aGuard; 6695*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 6696*cdf0e10cSrcweir if ( pDocSh ) 6697*cdf0e10cSrcweir return new ScCellFieldsObj( pDocSh, aCellPos ); 6698*cdf0e10cSrcweir 6699*cdf0e10cSrcweir return NULL; 6700*cdf0e10cSrcweir } 6701*cdf0e10cSrcweir 6702*cdf0e10cSrcweir uno::Reference<container::XNameAccess> SAL_CALL ScCellObj::getTextFieldMasters() 6703*cdf0e10cSrcweir throw(uno::RuntimeException) 6704*cdf0e10cSrcweir { 6705*cdf0e10cSrcweir // sowas gibts nicht im Calc (?) 6706*cdf0e10cSrcweir return NULL; 6707*cdf0e10cSrcweir } 6708*cdf0e10cSrcweir 6709*cdf0e10cSrcweir // XPropertySet erweitert fuer Zell-Properties 6710*cdf0e10cSrcweir 6711*cdf0e10cSrcweir uno::Reference<beans::XPropertySetInfo> SAL_CALL ScCellObj::getPropertySetInfo() 6712*cdf0e10cSrcweir throw(uno::RuntimeException) 6713*cdf0e10cSrcweir { 6714*cdf0e10cSrcweir ScUnoGuard aGuard; 6715*cdf0e10cSrcweir static uno::Reference<beans::XPropertySetInfo> aRef( 6716*cdf0e10cSrcweir new SfxItemPropertySetInfo( pCellPropSet->getPropertyMap() )); 6717*cdf0e10cSrcweir return aRef; 6718*cdf0e10cSrcweir } 6719*cdf0e10cSrcweir 6720*cdf0e10cSrcweir void ScCellObj::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, const uno::Any& aValue ) 6721*cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException) 6722*cdf0e10cSrcweir { 6723*cdf0e10cSrcweir if ( pEntry ) 6724*cdf0e10cSrcweir { 6725*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_FORMLOC ) 6726*cdf0e10cSrcweir { 6727*cdf0e10cSrcweir rtl::OUString aStrVal; 6728*cdf0e10cSrcweir aValue >>= aStrVal; 6729*cdf0e10cSrcweir String aString(aStrVal); 6730*cdf0e10cSrcweir SetString_Impl(aString, sal_True, sal_False); // lokal interpretieren 6731*cdf0e10cSrcweir } 6732*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_FORMRT ) 6733*cdf0e10cSrcweir { 6734*cdf0e10cSrcweir // Read-Only 6735*cdf0e10cSrcweir //! Exception oder so... 6736*cdf0e10cSrcweir } 6737*cdf0e10cSrcweir else 6738*cdf0e10cSrcweir ScCellRangeObj::SetOnePropertyValue( pEntry, aValue ); 6739*cdf0e10cSrcweir } 6740*cdf0e10cSrcweir } 6741*cdf0e10cSrcweir 6742*cdf0e10cSrcweir void ScCellObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, 6743*cdf0e10cSrcweir uno::Any& rAny ) 6744*cdf0e10cSrcweir throw(uno::RuntimeException) 6745*cdf0e10cSrcweir { 6746*cdf0e10cSrcweir if ( pEntry ) 6747*cdf0e10cSrcweir { 6748*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_FORMLOC ) 6749*cdf0e10cSrcweir { 6750*cdf0e10cSrcweir // sal_False = lokal 6751*cdf0e10cSrcweir rAny <<= rtl::OUString( GetInputString_Impl(sal_False) ); 6752*cdf0e10cSrcweir } 6753*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_FORMRT ) 6754*cdf0e10cSrcweir { 6755*cdf0e10cSrcweir table::CellContentType eType = GetResultType_Impl(); 6756*cdf0e10cSrcweir rAny <<= eType; 6757*cdf0e10cSrcweir } 6758*cdf0e10cSrcweir else 6759*cdf0e10cSrcweir ScCellRangeObj::GetOnePropertyValue(pEntry, rAny); 6760*cdf0e10cSrcweir } 6761*cdf0e10cSrcweir } 6762*cdf0e10cSrcweir 6763*cdf0e10cSrcweir const SfxItemPropertyMap* ScCellObj::GetItemPropertyMap() 6764*cdf0e10cSrcweir { 6765*cdf0e10cSrcweir return pCellPropSet->getPropertyMap(); 6766*cdf0e10cSrcweir } 6767*cdf0e10cSrcweir 6768*cdf0e10cSrcweir // XServiceInfo 6769*cdf0e10cSrcweir 6770*cdf0e10cSrcweir rtl::OUString SAL_CALL ScCellObj::getImplementationName() throw(uno::RuntimeException) 6771*cdf0e10cSrcweir { 6772*cdf0e10cSrcweir return rtl::OUString::createFromAscii( "ScCellObj" ); 6773*cdf0e10cSrcweir } 6774*cdf0e10cSrcweir 6775*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellObj::supportsService( const rtl::OUString& rServiceName ) 6776*cdf0e10cSrcweir throw(uno::RuntimeException) 6777*cdf0e10cSrcweir { 6778*cdf0e10cSrcweir // CellRange/SheetCellRange are not in SheetCell service description, 6779*cdf0e10cSrcweir // but ScCellObj is used instead of ScCellRangeObj in CellRanges collections, 6780*cdf0e10cSrcweir // so it must support them 6781*cdf0e10cSrcweir 6782*cdf0e10cSrcweir String aServiceStr(rServiceName); 6783*cdf0e10cSrcweir return aServiceStr.EqualsAscii( SCSHEETCELL_SERVICE ) || 6784*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCELL_SERVICE ) || 6785*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCELLPROPERTIES_SERVICE ) || 6786*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCHARPROPERTIES_SERVICE ) || 6787*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCPARAPROPERTIES_SERVICE ) || 6788*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCSHEETCELLRANGE_SERVICE ) || 6789*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCELLRANGE_SERVICE ); 6790*cdf0e10cSrcweir } 6791*cdf0e10cSrcweir 6792*cdf0e10cSrcweir uno::Sequence<rtl::OUString> SAL_CALL ScCellObj::getSupportedServiceNames() 6793*cdf0e10cSrcweir throw(uno::RuntimeException) 6794*cdf0e10cSrcweir { 6795*cdf0e10cSrcweir uno::Sequence<rtl::OUString> aRet(7); 6796*cdf0e10cSrcweir rtl::OUString* pArray = aRet.getArray(); 6797*cdf0e10cSrcweir pArray[0] = rtl::OUString::createFromAscii( SCSHEETCELL_SERVICE ); 6798*cdf0e10cSrcweir pArray[1] = rtl::OUString::createFromAscii( SCCELL_SERVICE ); 6799*cdf0e10cSrcweir pArray[2] = rtl::OUString::createFromAscii( SCCELLPROPERTIES_SERVICE ); 6800*cdf0e10cSrcweir pArray[3] = rtl::OUString::createFromAscii( SCCHARPROPERTIES_SERVICE ); 6801*cdf0e10cSrcweir pArray[4] = rtl::OUString::createFromAscii( SCPARAPROPERTIES_SERVICE ); 6802*cdf0e10cSrcweir pArray[5] = rtl::OUString::createFromAscii( SCSHEETCELLRANGE_SERVICE ); 6803*cdf0e10cSrcweir pArray[6] = rtl::OUString::createFromAscii( SCCELLRANGE_SERVICE ); 6804*cdf0e10cSrcweir return aRet; 6805*cdf0e10cSrcweir } 6806*cdf0e10cSrcweir 6807*cdf0e10cSrcweir // XActionLockable 6808*cdf0e10cSrcweir 6809*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellObj::isActionLocked() throw(uno::RuntimeException) 6810*cdf0e10cSrcweir { 6811*cdf0e10cSrcweir ScUnoGuard aGuard; 6812*cdf0e10cSrcweir return nActionLockCount != 0; 6813*cdf0e10cSrcweir } 6814*cdf0e10cSrcweir 6815*cdf0e10cSrcweir void SAL_CALL ScCellObj::addActionLock() throw(uno::RuntimeException) 6816*cdf0e10cSrcweir { 6817*cdf0e10cSrcweir ScUnoGuard aGuard; 6818*cdf0e10cSrcweir if (!nActionLockCount) 6819*cdf0e10cSrcweir { 6820*cdf0e10cSrcweir if (pUnoText) 6821*cdf0e10cSrcweir { 6822*cdf0e10cSrcweir ScSharedCellEditSource* pEditSource = 6823*cdf0e10cSrcweir static_cast<ScSharedCellEditSource*> (pUnoText->GetEditSource()); 6824*cdf0e10cSrcweir if (pEditSource) 6825*cdf0e10cSrcweir pEditSource->SetDoUpdateData(sal_False); 6826*cdf0e10cSrcweir } 6827*cdf0e10cSrcweir } 6828*cdf0e10cSrcweir nActionLockCount++; 6829*cdf0e10cSrcweir } 6830*cdf0e10cSrcweir 6831*cdf0e10cSrcweir void SAL_CALL ScCellObj::removeActionLock() throw(uno::RuntimeException) 6832*cdf0e10cSrcweir { 6833*cdf0e10cSrcweir ScUnoGuard aGuard; 6834*cdf0e10cSrcweir if (nActionLockCount > 0) 6835*cdf0e10cSrcweir { 6836*cdf0e10cSrcweir nActionLockCount--; 6837*cdf0e10cSrcweir if (!nActionLockCount) 6838*cdf0e10cSrcweir { 6839*cdf0e10cSrcweir if (pUnoText) 6840*cdf0e10cSrcweir { 6841*cdf0e10cSrcweir ScSharedCellEditSource* pEditSource = 6842*cdf0e10cSrcweir static_cast<ScSharedCellEditSource*> (pUnoText->GetEditSource()); 6843*cdf0e10cSrcweir if (pEditSource) 6844*cdf0e10cSrcweir { 6845*cdf0e10cSrcweir pEditSource->SetDoUpdateData(sal_True); 6846*cdf0e10cSrcweir if (pEditSource->IsDirty()) 6847*cdf0e10cSrcweir pEditSource->UpdateData(); 6848*cdf0e10cSrcweir } 6849*cdf0e10cSrcweir } 6850*cdf0e10cSrcweir } 6851*cdf0e10cSrcweir } 6852*cdf0e10cSrcweir } 6853*cdf0e10cSrcweir 6854*cdf0e10cSrcweir void SAL_CALL ScCellObj::setActionLocks( sal_Int16 nLock ) throw(uno::RuntimeException) 6855*cdf0e10cSrcweir { 6856*cdf0e10cSrcweir ScUnoGuard aGuard; 6857*cdf0e10cSrcweir if (pUnoText) 6858*cdf0e10cSrcweir { 6859*cdf0e10cSrcweir ScSharedCellEditSource* pEditSource = 6860*cdf0e10cSrcweir static_cast<ScSharedCellEditSource*> (pUnoText->GetEditSource()); 6861*cdf0e10cSrcweir if (pEditSource) 6862*cdf0e10cSrcweir { 6863*cdf0e10cSrcweir pEditSource->SetDoUpdateData(nLock == 0); 6864*cdf0e10cSrcweir if ((nActionLockCount > 0) && (nLock == 0) && pEditSource->IsDirty()) 6865*cdf0e10cSrcweir pEditSource->UpdateData(); 6866*cdf0e10cSrcweir } 6867*cdf0e10cSrcweir } 6868*cdf0e10cSrcweir nActionLockCount = nLock; 6869*cdf0e10cSrcweir } 6870*cdf0e10cSrcweir 6871*cdf0e10cSrcweir sal_Int16 SAL_CALL ScCellObj::resetActionLocks() throw(uno::RuntimeException) 6872*cdf0e10cSrcweir { 6873*cdf0e10cSrcweir ScUnoGuard aGuard; 6874*cdf0e10cSrcweir sal_uInt16 nRet(nActionLockCount); 6875*cdf0e10cSrcweir if (pUnoText) 6876*cdf0e10cSrcweir { 6877*cdf0e10cSrcweir ScSharedCellEditSource* pEditSource = 6878*cdf0e10cSrcweir static_cast<ScSharedCellEditSource*> (pUnoText->GetEditSource()); 6879*cdf0e10cSrcweir if (pEditSource) 6880*cdf0e10cSrcweir { 6881*cdf0e10cSrcweir pEditSource->SetDoUpdateData(sal_True); 6882*cdf0e10cSrcweir if (pEditSource->IsDirty()) 6883*cdf0e10cSrcweir pEditSource->UpdateData(); 6884*cdf0e10cSrcweir } 6885*cdf0e10cSrcweir } 6886*cdf0e10cSrcweir nActionLockCount = 0; 6887*cdf0e10cSrcweir return nRet; 6888*cdf0e10cSrcweir } 6889*cdf0e10cSrcweir 6890*cdf0e10cSrcweir //------------------------------------------------------------------------ 6891*cdf0e10cSrcweir 6892*cdf0e10cSrcweir ScTableSheetObj::ScTableSheetObj( ScDocShell* pDocSh, SCTAB nTab ) : 6893*cdf0e10cSrcweir ScCellRangeObj( pDocSh, ScRange(0,0,nTab, MAXCOL,MAXROW,nTab) ), 6894*cdf0e10cSrcweir pSheetPropSet(lcl_GetSheetPropertySet()) 6895*cdf0e10cSrcweir { 6896*cdf0e10cSrcweir } 6897*cdf0e10cSrcweir 6898*cdf0e10cSrcweir ScTableSheetObj::~ScTableSheetObj() 6899*cdf0e10cSrcweir { 6900*cdf0e10cSrcweir } 6901*cdf0e10cSrcweir 6902*cdf0e10cSrcweir void ScTableSheetObj::InitInsertSheet(ScDocShell* pDocSh, SCTAB nTab) 6903*cdf0e10cSrcweir { 6904*cdf0e10cSrcweir InitInsertRange( pDocSh, ScRange(0,0,nTab, MAXCOL,MAXROW,nTab) ); 6905*cdf0e10cSrcweir } 6906*cdf0e10cSrcweir 6907*cdf0e10cSrcweir uno::Any SAL_CALL ScTableSheetObj::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException) 6908*cdf0e10cSrcweir { 6909*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSpreadsheet ) 6910*cdf0e10cSrcweir SC_QUERYINTERFACE( container::XNamed ) 6911*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetPageBreak ) 6912*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XCellRangeMovement ) 6913*cdf0e10cSrcweir SC_QUERYINTERFACE( table::XTableChartsSupplier ) 6914*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XDataPilotTablesSupplier ) 6915*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XScenariosSupplier ) 6916*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetAnnotationsSupplier ) 6917*cdf0e10cSrcweir SC_QUERYINTERFACE( drawing::XDrawPageSupplier ) 6918*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XPrintAreas ) 6919*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetAuditing ) 6920*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetOutline ) 6921*cdf0e10cSrcweir SC_QUERYINTERFACE( util::XProtectable ) 6922*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XScenario ) 6923*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XScenarioEnhanced ) 6924*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XSheetLinkable ) 6925*cdf0e10cSrcweir SC_QUERYINTERFACE( sheet::XExternalSheetName ) 6926*cdf0e10cSrcweir SC_QUERYINTERFACE( document::XEventsSupplier ) 6927*cdf0e10cSrcweir 6928*cdf0e10cSrcweir return ScCellRangeObj::queryInterface( rType ); 6929*cdf0e10cSrcweir } 6930*cdf0e10cSrcweir 6931*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::acquire() throw() 6932*cdf0e10cSrcweir { 6933*cdf0e10cSrcweir ScCellRangeObj::acquire(); 6934*cdf0e10cSrcweir } 6935*cdf0e10cSrcweir 6936*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::release() throw() 6937*cdf0e10cSrcweir { 6938*cdf0e10cSrcweir ScCellRangeObj::release(); 6939*cdf0e10cSrcweir } 6940*cdf0e10cSrcweir 6941*cdf0e10cSrcweir uno::Sequence<uno::Type> SAL_CALL ScTableSheetObj::getTypes() throw(uno::RuntimeException) 6942*cdf0e10cSrcweir { 6943*cdf0e10cSrcweir static uno::Sequence<uno::Type> aTypes; 6944*cdf0e10cSrcweir if ( aTypes.getLength() == 0 ) 6945*cdf0e10cSrcweir { 6946*cdf0e10cSrcweir uno::Sequence<uno::Type> aParentTypes = ScCellRangeObj::getTypes(); 6947*cdf0e10cSrcweir long nParentLen = aParentTypes.getLength(); 6948*cdf0e10cSrcweir const uno::Type* pParentPtr = aParentTypes.getConstArray(); 6949*cdf0e10cSrcweir 6950*cdf0e10cSrcweir aTypes.realloc( nParentLen + 18 ); 6951*cdf0e10cSrcweir uno::Type* pPtr = aTypes.getArray(); 6952*cdf0e10cSrcweir pPtr[nParentLen + 0] = getCppuType((const uno::Reference<sheet::XSpreadsheet>*)0); 6953*cdf0e10cSrcweir pPtr[nParentLen + 1] = getCppuType((const uno::Reference<container::XNamed>*)0); 6954*cdf0e10cSrcweir pPtr[nParentLen + 2] = getCppuType((const uno::Reference<sheet::XSheetPageBreak>*)0); 6955*cdf0e10cSrcweir pPtr[nParentLen + 3] = getCppuType((const uno::Reference<sheet::XCellRangeMovement>*)0); 6956*cdf0e10cSrcweir pPtr[nParentLen + 4] = getCppuType((const uno::Reference<table::XTableChartsSupplier>*)0); 6957*cdf0e10cSrcweir pPtr[nParentLen + 5] = getCppuType((const uno::Reference<sheet::XDataPilotTablesSupplier>*)0); 6958*cdf0e10cSrcweir pPtr[nParentLen + 6] = getCppuType((const uno::Reference<sheet::XScenariosSupplier>*)0); 6959*cdf0e10cSrcweir pPtr[nParentLen + 7] = getCppuType((const uno::Reference<sheet::XSheetAnnotationsSupplier>*)0); 6960*cdf0e10cSrcweir pPtr[nParentLen + 8] = getCppuType((const uno::Reference<drawing::XDrawPageSupplier>*)0); 6961*cdf0e10cSrcweir pPtr[nParentLen + 9] = getCppuType((const uno::Reference<sheet::XPrintAreas>*)0); 6962*cdf0e10cSrcweir pPtr[nParentLen +10] = getCppuType((const uno::Reference<sheet::XSheetAuditing>*)0); 6963*cdf0e10cSrcweir pPtr[nParentLen +11] = getCppuType((const uno::Reference<sheet::XSheetOutline>*)0); 6964*cdf0e10cSrcweir pPtr[nParentLen +12] = getCppuType((const uno::Reference<util::XProtectable>*)0); 6965*cdf0e10cSrcweir pPtr[nParentLen +13] = getCppuType((const uno::Reference<sheet::XScenario>*)0); 6966*cdf0e10cSrcweir pPtr[nParentLen +14] = getCppuType((const uno::Reference<sheet::XScenarioEnhanced>*)0); 6967*cdf0e10cSrcweir pPtr[nParentLen +15] = getCppuType((const uno::Reference<sheet::XSheetLinkable>*)0); 6968*cdf0e10cSrcweir pPtr[nParentLen +16] = getCppuType((const uno::Reference<sheet::XExternalSheetName>*)0); 6969*cdf0e10cSrcweir pPtr[nParentLen +17] = getCppuType((const uno::Reference<document::XEventsSupplier>*)0); 6970*cdf0e10cSrcweir 6971*cdf0e10cSrcweir for (long i=0; i<nParentLen; i++) 6972*cdf0e10cSrcweir pPtr[i] = pParentPtr[i]; // parent types first 6973*cdf0e10cSrcweir } 6974*cdf0e10cSrcweir return aTypes; 6975*cdf0e10cSrcweir } 6976*cdf0e10cSrcweir 6977*cdf0e10cSrcweir uno::Sequence<sal_Int8> SAL_CALL ScTableSheetObj::getImplementationId() throw(uno::RuntimeException) 6978*cdf0e10cSrcweir { 6979*cdf0e10cSrcweir static uno::Sequence< sal_Int8 > aId; 6980*cdf0e10cSrcweir if( aId.getLength() == 0 ) 6981*cdf0e10cSrcweir { 6982*cdf0e10cSrcweir aId.realloc( 16 ); 6983*cdf0e10cSrcweir rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); 6984*cdf0e10cSrcweir } 6985*cdf0e10cSrcweir return aId; 6986*cdf0e10cSrcweir } 6987*cdf0e10cSrcweir 6988*cdf0e10cSrcweir // Hilfsfunktionen 6989*cdf0e10cSrcweir 6990*cdf0e10cSrcweir SCTAB ScTableSheetObj::GetTab_Impl() const 6991*cdf0e10cSrcweir { 6992*cdf0e10cSrcweir const ScRangeList& rRanges = GetRangeList(); 6993*cdf0e10cSrcweir DBG_ASSERT(rRanges.Count() == 1, "was fuer Ranges ?!?!"); 6994*cdf0e10cSrcweir const ScRange* pFirst = rRanges.GetObject(0); 6995*cdf0e10cSrcweir if (pFirst) 6996*cdf0e10cSrcweir return pFirst->aStart.Tab(); 6997*cdf0e10cSrcweir 6998*cdf0e10cSrcweir return 0; // soll nicht sein 6999*cdf0e10cSrcweir } 7000*cdf0e10cSrcweir 7001*cdf0e10cSrcweir // former XSheet 7002*cdf0e10cSrcweir 7003*cdf0e10cSrcweir uno::Reference<table::XTableCharts> SAL_CALL ScTableSheetObj::getCharts() throw(uno::RuntimeException) 7004*cdf0e10cSrcweir { 7005*cdf0e10cSrcweir ScUnoGuard aGuard; 7006*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7007*cdf0e10cSrcweir if ( pDocSh ) 7008*cdf0e10cSrcweir return new ScChartsObj( pDocSh, GetTab_Impl() ); 7009*cdf0e10cSrcweir 7010*cdf0e10cSrcweir DBG_ERROR("kein Dokument"); 7011*cdf0e10cSrcweir return NULL; 7012*cdf0e10cSrcweir } 7013*cdf0e10cSrcweir 7014*cdf0e10cSrcweir uno::Reference<sheet::XDataPilotTables> SAL_CALL ScTableSheetObj::getDataPilotTables() 7015*cdf0e10cSrcweir throw(uno::RuntimeException) 7016*cdf0e10cSrcweir { 7017*cdf0e10cSrcweir ScUnoGuard aGuard; 7018*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7019*cdf0e10cSrcweir if ( pDocSh ) 7020*cdf0e10cSrcweir return new ScDataPilotTablesObj( pDocSh, GetTab_Impl() ); 7021*cdf0e10cSrcweir 7022*cdf0e10cSrcweir DBG_ERROR("kein Dokument"); 7023*cdf0e10cSrcweir return NULL; 7024*cdf0e10cSrcweir } 7025*cdf0e10cSrcweir 7026*cdf0e10cSrcweir uno::Reference<sheet::XScenarios> SAL_CALL ScTableSheetObj::getScenarios() throw(uno::RuntimeException) 7027*cdf0e10cSrcweir { 7028*cdf0e10cSrcweir ScUnoGuard aGuard; 7029*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7030*cdf0e10cSrcweir 7031*cdf0e10cSrcweir if ( pDocSh ) 7032*cdf0e10cSrcweir return new ScScenariosObj( pDocSh, GetTab_Impl() ); 7033*cdf0e10cSrcweir 7034*cdf0e10cSrcweir DBG_ERROR("kein Dokument"); 7035*cdf0e10cSrcweir return NULL; 7036*cdf0e10cSrcweir } 7037*cdf0e10cSrcweir 7038*cdf0e10cSrcweir uno::Reference<sheet::XSheetAnnotations> SAL_CALL ScTableSheetObj::getAnnotations() 7039*cdf0e10cSrcweir throw(uno::RuntimeException) 7040*cdf0e10cSrcweir { 7041*cdf0e10cSrcweir ScUnoGuard aGuard; 7042*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7043*cdf0e10cSrcweir 7044*cdf0e10cSrcweir if ( pDocSh ) 7045*cdf0e10cSrcweir return new ScAnnotationsObj( pDocSh, GetTab_Impl() ); 7046*cdf0e10cSrcweir 7047*cdf0e10cSrcweir DBG_ERROR("kein Dokument"); 7048*cdf0e10cSrcweir return NULL; 7049*cdf0e10cSrcweir } 7050*cdf0e10cSrcweir 7051*cdf0e10cSrcweir uno::Reference<table::XCellRange> SAL_CALL ScTableSheetObj::getCellRangeByName( 7052*cdf0e10cSrcweir const rtl::OUString& rRange ) throw(uno::RuntimeException) 7053*cdf0e10cSrcweir { 7054*cdf0e10cSrcweir ScUnoGuard aGuard; 7055*cdf0e10cSrcweir return ScCellRangeObj::getCellRangeByName( rRange ); 7056*cdf0e10cSrcweir } 7057*cdf0e10cSrcweir 7058*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellCursor> SAL_CALL ScTableSheetObj::createCursor() 7059*cdf0e10cSrcweir throw(uno::RuntimeException) 7060*cdf0e10cSrcweir { 7061*cdf0e10cSrcweir ScUnoGuard aGuard; 7062*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7063*cdf0e10cSrcweir if ( pDocSh ) 7064*cdf0e10cSrcweir { 7065*cdf0e10cSrcweir //! einzelne Zelle oder ganze Tabelle??????? 7066*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7067*cdf0e10cSrcweir return new ScCellCursorObj( pDocSh, ScRange( 0,0,nTab, MAXCOL,MAXROW,nTab ) ); 7068*cdf0e10cSrcweir } 7069*cdf0e10cSrcweir return NULL; 7070*cdf0e10cSrcweir } 7071*cdf0e10cSrcweir 7072*cdf0e10cSrcweir uno::Reference<sheet::XSheetCellCursor> SAL_CALL ScTableSheetObj::createCursorByRange( 7073*cdf0e10cSrcweir const uno::Reference<sheet::XSheetCellRange>& xCellRange ) 7074*cdf0e10cSrcweir throw(uno::RuntimeException) 7075*cdf0e10cSrcweir { 7076*cdf0e10cSrcweir ScUnoGuard aGuard; 7077*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7078*cdf0e10cSrcweir if ( pDocSh && xCellRange.is() ) 7079*cdf0e10cSrcweir { 7080*cdf0e10cSrcweir ScCellRangesBase* pRangesImp = ScCellRangesBase::getImplementation( xCellRange ); 7081*cdf0e10cSrcweir if (pRangesImp) 7082*cdf0e10cSrcweir { 7083*cdf0e10cSrcweir const ScRangeList& rRanges = pRangesImp->GetRangeList(); 7084*cdf0e10cSrcweir DBG_ASSERT( rRanges.Count() == 1, "Range? Ranges?" ); 7085*cdf0e10cSrcweir return new ScCellCursorObj( pDocSh, *rRanges.GetObject(0) ); 7086*cdf0e10cSrcweir } 7087*cdf0e10cSrcweir } 7088*cdf0e10cSrcweir return NULL; 7089*cdf0e10cSrcweir } 7090*cdf0e10cSrcweir 7091*cdf0e10cSrcweir // XSheetCellRange 7092*cdf0e10cSrcweir 7093*cdf0e10cSrcweir uno::Reference<sheet::XSpreadsheet> SAL_CALL ScTableSheetObj::getSpreadsheet() 7094*cdf0e10cSrcweir throw(uno::RuntimeException) 7095*cdf0e10cSrcweir { 7096*cdf0e10cSrcweir ScUnoGuard aGuard; 7097*cdf0e10cSrcweir return this; //!??? 7098*cdf0e10cSrcweir } 7099*cdf0e10cSrcweir 7100*cdf0e10cSrcweir // XCellRange 7101*cdf0e10cSrcweir 7102*cdf0e10cSrcweir uno::Reference<table::XCell> SAL_CALL ScTableSheetObj::getCellByPosition( 7103*cdf0e10cSrcweir sal_Int32 nColumn, sal_Int32 nRow ) 7104*cdf0e10cSrcweir throw(lang::IndexOutOfBoundsException, uno::RuntimeException) 7105*cdf0e10cSrcweir { 7106*cdf0e10cSrcweir ScUnoGuard aGuard; 7107*cdf0e10cSrcweir return ScCellRangeObj::GetCellByPosition_Impl(nColumn, nRow); 7108*cdf0e10cSrcweir } 7109*cdf0e10cSrcweir 7110*cdf0e10cSrcweir uno::Reference<table::XCellRange> SAL_CALL ScTableSheetObj::getCellRangeByPosition( 7111*cdf0e10cSrcweir sal_Int32 nLeft, sal_Int32 nTop, sal_Int32 nRight, sal_Int32 nBottom ) 7112*cdf0e10cSrcweir throw(lang::IndexOutOfBoundsException, uno::RuntimeException) 7113*cdf0e10cSrcweir { 7114*cdf0e10cSrcweir ScUnoGuard aGuard; 7115*cdf0e10cSrcweir return ScCellRangeObj::getCellRangeByPosition(nLeft,nTop,nRight,nBottom); 7116*cdf0e10cSrcweir } 7117*cdf0e10cSrcweir 7118*cdf0e10cSrcweir uno::Sequence<sheet::TablePageBreakData> SAL_CALL ScTableSheetObj::getColumnPageBreaks() 7119*cdf0e10cSrcweir throw(uno::RuntimeException) 7120*cdf0e10cSrcweir { 7121*cdf0e10cSrcweir ScUnoGuard aGuard; 7122*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7123*cdf0e10cSrcweir if ( pDocSh ) 7124*cdf0e10cSrcweir { 7125*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7126*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7127*cdf0e10cSrcweir 7128*cdf0e10cSrcweir Size aSize(pDoc->GetPageSize( nTab )); 7129*cdf0e10cSrcweir if (aSize.Width() && aSize.Height()) // effektive Groesse schon gesetzt? 7130*cdf0e10cSrcweir pDoc->UpdatePageBreaks( nTab ); 7131*cdf0e10cSrcweir else 7132*cdf0e10cSrcweir { 7133*cdf0e10cSrcweir // Umbrueche updaten wie in ScDocShell::PageStyleModified: 7134*cdf0e10cSrcweir ScPrintFunc aPrintFunc( pDocSh, pDocSh->GetPrinter(), nTab ); 7135*cdf0e10cSrcweir aPrintFunc.UpdatePages(); 7136*cdf0e10cSrcweir } 7137*cdf0e10cSrcweir 7138*cdf0e10cSrcweir SCCOL nCount = 0; 7139*cdf0e10cSrcweir SCCOL nCol; 7140*cdf0e10cSrcweir for (nCol=0; nCol<=MAXCOL; nCol++) 7141*cdf0e10cSrcweir if (pDoc->HasColBreak(nCol, nTab)) 7142*cdf0e10cSrcweir ++nCount; 7143*cdf0e10cSrcweir 7144*cdf0e10cSrcweir sheet::TablePageBreakData aData; 7145*cdf0e10cSrcweir uno::Sequence<sheet::TablePageBreakData> aSeq(nCount); 7146*cdf0e10cSrcweir sheet::TablePageBreakData* pAry = aSeq.getArray(); 7147*cdf0e10cSrcweir sal_uInt16 nPos = 0; 7148*cdf0e10cSrcweir for (nCol=0; nCol<=MAXCOL; nCol++) 7149*cdf0e10cSrcweir { 7150*cdf0e10cSrcweir ScBreakType nBreak = pDoc->HasColBreak(nCol, nTab); 7151*cdf0e10cSrcweir if (nBreak) 7152*cdf0e10cSrcweir { 7153*cdf0e10cSrcweir aData.Position = nCol; 7154*cdf0e10cSrcweir aData.ManualBreak = (nBreak & BREAK_MANUAL); 7155*cdf0e10cSrcweir pAry[nPos] = aData; 7156*cdf0e10cSrcweir ++nPos; 7157*cdf0e10cSrcweir } 7158*cdf0e10cSrcweir } 7159*cdf0e10cSrcweir return aSeq; 7160*cdf0e10cSrcweir } 7161*cdf0e10cSrcweir return uno::Sequence<sheet::TablePageBreakData>(0); 7162*cdf0e10cSrcweir } 7163*cdf0e10cSrcweir 7164*cdf0e10cSrcweir uno::Sequence<sheet::TablePageBreakData> SAL_CALL ScTableSheetObj::getRowPageBreaks() 7165*cdf0e10cSrcweir throw(uno::RuntimeException) 7166*cdf0e10cSrcweir { 7167*cdf0e10cSrcweir ScUnoGuard aGuard; 7168*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7169*cdf0e10cSrcweir if ( pDocSh ) 7170*cdf0e10cSrcweir { 7171*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7172*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7173*cdf0e10cSrcweir 7174*cdf0e10cSrcweir Size aSize(pDoc->GetPageSize( nTab )); 7175*cdf0e10cSrcweir if (aSize.Width() && aSize.Height()) // effektive Groesse schon gesetzt? 7176*cdf0e10cSrcweir pDoc->UpdatePageBreaks( nTab ); 7177*cdf0e10cSrcweir else 7178*cdf0e10cSrcweir { 7179*cdf0e10cSrcweir // Umbrueche updaten wie in ScDocShell::PageStyleModified: 7180*cdf0e10cSrcweir ScPrintFunc aPrintFunc( pDocSh, pDocSh->GetPrinter(), nTab ); 7181*cdf0e10cSrcweir aPrintFunc.UpdatePages(); 7182*cdf0e10cSrcweir } 7183*cdf0e10cSrcweir return pDoc->GetRowBreakData(nTab); 7184*cdf0e10cSrcweir } 7185*cdf0e10cSrcweir return uno::Sequence<sheet::TablePageBreakData>(0); 7186*cdf0e10cSrcweir } 7187*cdf0e10cSrcweir 7188*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::removeAllManualPageBreaks() throw(uno::RuntimeException) 7189*cdf0e10cSrcweir { 7190*cdf0e10cSrcweir ScUnoGuard aGuard; 7191*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7192*cdf0e10cSrcweir if ( pDocSh ) 7193*cdf0e10cSrcweir { 7194*cdf0e10cSrcweir //! docfunc Funktion, auch fuer ScViewFunc::RemoveManualBreaks 7195*cdf0e10cSrcweir 7196*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7197*cdf0e10cSrcweir sal_Bool bUndo (pDoc->IsUndoEnabled()); 7198*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7199*cdf0e10cSrcweir 7200*cdf0e10cSrcweir if (bUndo) 7201*cdf0e10cSrcweir { 7202*cdf0e10cSrcweir ScDocument* pUndoDoc = new ScDocument( SCDOCMODE_UNDO ); 7203*cdf0e10cSrcweir pUndoDoc->InitUndo( pDoc, nTab, nTab, sal_True, sal_True ); 7204*cdf0e10cSrcweir pDoc->CopyToDocument( 0,0,nTab, MAXCOL,MAXROW,nTab, IDF_NONE, sal_False, pUndoDoc ); 7205*cdf0e10cSrcweir pDocSh->GetUndoManager()->AddUndoAction( 7206*cdf0e10cSrcweir new ScUndoRemoveBreaks( pDocSh, nTab, pUndoDoc ) ); 7207*cdf0e10cSrcweir } 7208*cdf0e10cSrcweir 7209*cdf0e10cSrcweir pDoc->RemoveManualBreaks(nTab); 7210*cdf0e10cSrcweir pDoc->UpdatePageBreaks(nTab); 7211*cdf0e10cSrcweir 7212*cdf0e10cSrcweir //? UpdatePageBreakData( sal_True ); 7213*cdf0e10cSrcweir pDocSh->SetDocumentModified(); 7214*cdf0e10cSrcweir pDocSh->PostPaint( 0,0,nTab, MAXCOL,MAXROW,nTab, PAINT_GRID ); 7215*cdf0e10cSrcweir } 7216*cdf0e10cSrcweir } 7217*cdf0e10cSrcweir 7218*cdf0e10cSrcweir // XNamed 7219*cdf0e10cSrcweir 7220*cdf0e10cSrcweir rtl::OUString SAL_CALL ScTableSheetObj::getName() throw(uno::RuntimeException) 7221*cdf0e10cSrcweir { 7222*cdf0e10cSrcweir ScUnoGuard aGuard; 7223*cdf0e10cSrcweir String aName; 7224*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7225*cdf0e10cSrcweir if ( pDocSh ) 7226*cdf0e10cSrcweir pDocSh->GetDocument()->GetName( GetTab_Impl(), aName ); 7227*cdf0e10cSrcweir return aName; 7228*cdf0e10cSrcweir } 7229*cdf0e10cSrcweir 7230*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::setName( const rtl::OUString& aNewName ) 7231*cdf0e10cSrcweir throw(uno::RuntimeException) 7232*cdf0e10cSrcweir { 7233*cdf0e10cSrcweir ScUnoGuard aGuard; 7234*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7235*cdf0e10cSrcweir if ( pDocSh ) 7236*cdf0e10cSrcweir { 7237*cdf0e10cSrcweir String aString(aNewName); 7238*cdf0e10cSrcweir ScDocFunc aFunc( *pDocSh ); 7239*cdf0e10cSrcweir aFunc.RenameTable( GetTab_Impl(), aString, sal_True, sal_True ); 7240*cdf0e10cSrcweir } 7241*cdf0e10cSrcweir } 7242*cdf0e10cSrcweir 7243*cdf0e10cSrcweir // XDrawPageSupplier 7244*cdf0e10cSrcweir 7245*cdf0e10cSrcweir uno::Reference<drawing::XDrawPage> SAL_CALL ScTableSheetObj::getDrawPage() 7246*cdf0e10cSrcweir throw(uno::RuntimeException) 7247*cdf0e10cSrcweir { 7248*cdf0e10cSrcweir ScUnoGuard aGuard; 7249*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7250*cdf0e10cSrcweir if ( pDocSh ) 7251*cdf0e10cSrcweir { 7252*cdf0e10cSrcweir ScDrawLayer* pDrawLayer = pDocSh->MakeDrawLayer(); 7253*cdf0e10cSrcweir DBG_ASSERT(pDrawLayer,"kann Draw-Layer nicht anlegen"); 7254*cdf0e10cSrcweir 7255*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7256*cdf0e10cSrcweir SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab)); 7257*cdf0e10cSrcweir DBG_ASSERT(pPage,"Draw-Page nicht gefunden"); 7258*cdf0e10cSrcweir if (pPage) 7259*cdf0e10cSrcweir return uno::Reference<drawing::XDrawPage> (pPage->getUnoPage(), uno::UNO_QUERY); 7260*cdf0e10cSrcweir 7261*cdf0e10cSrcweir // Das DrawPage-Objekt meldet sich als Listener am SdrModel an 7262*cdf0e10cSrcweir // und sollte von dort alle Aktionen mitbekommen 7263*cdf0e10cSrcweir } 7264*cdf0e10cSrcweir return NULL; 7265*cdf0e10cSrcweir } 7266*cdf0e10cSrcweir 7267*cdf0e10cSrcweir // XCellMovement 7268*cdf0e10cSrcweir 7269*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::insertCells( const table::CellRangeAddress& rRangeAddress, 7270*cdf0e10cSrcweir sheet::CellInsertMode nMode ) throw(uno::RuntimeException) 7271*cdf0e10cSrcweir { 7272*cdf0e10cSrcweir ScUnoGuard aGuard; 7273*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7274*cdf0e10cSrcweir if ( pDocSh ) 7275*cdf0e10cSrcweir { 7276*cdf0e10cSrcweir sal_Bool bDo = sal_True; 7277*cdf0e10cSrcweir InsCellCmd eCmd = INS_NONE; 7278*cdf0e10cSrcweir switch (nMode) 7279*cdf0e10cSrcweir { 7280*cdf0e10cSrcweir case sheet::CellInsertMode_NONE: bDo = sal_False; break; 7281*cdf0e10cSrcweir case sheet::CellInsertMode_DOWN: eCmd = INS_CELLSDOWN; break; 7282*cdf0e10cSrcweir case sheet::CellInsertMode_RIGHT: eCmd = INS_CELLSRIGHT; break; 7283*cdf0e10cSrcweir case sheet::CellInsertMode_ROWS: eCmd = INS_INSROWS; break; 7284*cdf0e10cSrcweir case sheet::CellInsertMode_COLUMNS: eCmd = INS_INSCOLS; break; 7285*cdf0e10cSrcweir default: 7286*cdf0e10cSrcweir DBG_ERROR("insertCells: falscher Mode"); 7287*cdf0e10cSrcweir bDo = sal_False; 7288*cdf0e10cSrcweir } 7289*cdf0e10cSrcweir 7290*cdf0e10cSrcweir if (bDo) 7291*cdf0e10cSrcweir { 7292*cdf0e10cSrcweir DBG_ASSERT( rRangeAddress.Sheet == GetTab_Impl(), "falsche Tabelle in CellRangeAddress" ); 7293*cdf0e10cSrcweir ScRange aScRange; 7294*cdf0e10cSrcweir ScUnoConversion::FillScRange( aScRange, rRangeAddress ); 7295*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7296*cdf0e10cSrcweir aFunc.InsertCells( aScRange, NULL, eCmd, sal_True, sal_True ); 7297*cdf0e10cSrcweir } 7298*cdf0e10cSrcweir } 7299*cdf0e10cSrcweir } 7300*cdf0e10cSrcweir 7301*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::removeRange( const table::CellRangeAddress& rRangeAddress, 7302*cdf0e10cSrcweir sheet::CellDeleteMode nMode ) throw(uno::RuntimeException) 7303*cdf0e10cSrcweir { 7304*cdf0e10cSrcweir ScUnoGuard aGuard; 7305*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7306*cdf0e10cSrcweir if ( pDocSh ) 7307*cdf0e10cSrcweir { 7308*cdf0e10cSrcweir sal_Bool bDo = sal_True; 7309*cdf0e10cSrcweir DelCellCmd eCmd = DEL_NONE; 7310*cdf0e10cSrcweir switch (nMode) 7311*cdf0e10cSrcweir { 7312*cdf0e10cSrcweir case sheet::CellDeleteMode_NONE: bDo = sal_False; break; 7313*cdf0e10cSrcweir case sheet::CellDeleteMode_UP: eCmd = DEL_CELLSUP; break; 7314*cdf0e10cSrcweir case sheet::CellDeleteMode_LEFT: eCmd = DEL_CELLSLEFT; break; 7315*cdf0e10cSrcweir case sheet::CellDeleteMode_ROWS: eCmd = DEL_DELROWS; break; 7316*cdf0e10cSrcweir case sheet::CellDeleteMode_COLUMNS: eCmd = DEL_DELCOLS; break; 7317*cdf0e10cSrcweir default: 7318*cdf0e10cSrcweir DBG_ERROR("deleteCells: falscher Mode"); 7319*cdf0e10cSrcweir bDo = sal_False; 7320*cdf0e10cSrcweir } 7321*cdf0e10cSrcweir 7322*cdf0e10cSrcweir if (bDo) 7323*cdf0e10cSrcweir { 7324*cdf0e10cSrcweir DBG_ASSERT( rRangeAddress.Sheet == GetTab_Impl(), "falsche Tabelle in CellRangeAddress" ); 7325*cdf0e10cSrcweir ScRange aScRange; 7326*cdf0e10cSrcweir ScUnoConversion::FillScRange( aScRange, rRangeAddress ); 7327*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7328*cdf0e10cSrcweir aFunc.DeleteCells( aScRange, NULL, eCmd, sal_True, sal_True ); 7329*cdf0e10cSrcweir } 7330*cdf0e10cSrcweir } 7331*cdf0e10cSrcweir } 7332*cdf0e10cSrcweir 7333*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::moveRange( const table::CellAddress& aDestination, 7334*cdf0e10cSrcweir const table::CellRangeAddress& aSource ) 7335*cdf0e10cSrcweir throw(uno::RuntimeException) 7336*cdf0e10cSrcweir { 7337*cdf0e10cSrcweir ScUnoGuard aGuard; 7338*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7339*cdf0e10cSrcweir if ( pDocSh ) 7340*cdf0e10cSrcweir { 7341*cdf0e10cSrcweir DBG_ASSERT( aSource.Sheet == GetTab_Impl(), "falsche Tabelle in CellRangeAddress" ); 7342*cdf0e10cSrcweir ScRange aSourceRange; 7343*cdf0e10cSrcweir ScUnoConversion::FillScRange( aSourceRange, aSource ); 7344*cdf0e10cSrcweir ScAddress aDestPos( (SCCOL)aDestination.Column, (SCROW)aDestination.Row, aDestination.Sheet ); 7345*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7346*cdf0e10cSrcweir aFunc.MoveBlock( aSourceRange, aDestPos, sal_True, sal_True, sal_True, sal_True ); 7347*cdf0e10cSrcweir } 7348*cdf0e10cSrcweir } 7349*cdf0e10cSrcweir 7350*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::copyRange( const table::CellAddress& aDestination, 7351*cdf0e10cSrcweir const table::CellRangeAddress& aSource ) 7352*cdf0e10cSrcweir throw(uno::RuntimeException) 7353*cdf0e10cSrcweir { 7354*cdf0e10cSrcweir ScUnoGuard aGuard; 7355*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7356*cdf0e10cSrcweir if ( pDocSh ) 7357*cdf0e10cSrcweir { 7358*cdf0e10cSrcweir DBG_ASSERT( aSource.Sheet == GetTab_Impl(), "falsche Tabelle in CellRangeAddress" ); 7359*cdf0e10cSrcweir ScRange aSourceRange; 7360*cdf0e10cSrcweir ScUnoConversion::FillScRange( aSourceRange, aSource ); 7361*cdf0e10cSrcweir ScAddress aDestPos( (SCCOL)aDestination.Column, (SCROW)aDestination.Row, aDestination.Sheet ); 7362*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7363*cdf0e10cSrcweir aFunc.MoveBlock( aSourceRange, aDestPos, sal_False, sal_True, sal_True, sal_True ); 7364*cdf0e10cSrcweir } 7365*cdf0e10cSrcweir } 7366*cdf0e10cSrcweir 7367*cdf0e10cSrcweir // XPrintAreas 7368*cdf0e10cSrcweir 7369*cdf0e10cSrcweir void ScTableSheetObj::PrintAreaUndo_Impl( ScPrintRangeSaver* pOldRanges ) 7370*cdf0e10cSrcweir { 7371*cdf0e10cSrcweir // Umbrueche und Undo 7372*cdf0e10cSrcweir 7373*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7374*cdf0e10cSrcweir if ( pDocSh ) 7375*cdf0e10cSrcweir { 7376*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7377*cdf0e10cSrcweir sal_Bool bUndo(pDoc->IsUndoEnabled()); 7378*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7379*cdf0e10cSrcweir 7380*cdf0e10cSrcweir ScPrintRangeSaver* pNewRanges = pDoc->CreatePrintRangeSaver(); 7381*cdf0e10cSrcweir if (bUndo) 7382*cdf0e10cSrcweir { 7383*cdf0e10cSrcweir pDocSh->GetUndoManager()->AddUndoAction( 7384*cdf0e10cSrcweir new ScUndoPrintRange( pDocSh, nTab, pOldRanges, pNewRanges ) ); 7385*cdf0e10cSrcweir } 7386*cdf0e10cSrcweir 7387*cdf0e10cSrcweir ScPrintFunc( pDocSh, pDocSh->GetPrinter(), nTab ).UpdatePages(); 7388*cdf0e10cSrcweir 7389*cdf0e10cSrcweir SfxBindings* pBindings = pDocSh->GetViewBindings(); 7390*cdf0e10cSrcweir if (pBindings) 7391*cdf0e10cSrcweir pBindings->Invalidate( SID_DELETE_PRINTAREA ); 7392*cdf0e10cSrcweir 7393*cdf0e10cSrcweir pDocSh->SetDocumentModified(); 7394*cdf0e10cSrcweir } 7395*cdf0e10cSrcweir else 7396*cdf0e10cSrcweir delete pOldRanges; 7397*cdf0e10cSrcweir } 7398*cdf0e10cSrcweir 7399*cdf0e10cSrcweir uno::Sequence<table::CellRangeAddress> SAL_CALL ScTableSheetObj::getPrintAreas() 7400*cdf0e10cSrcweir throw(uno::RuntimeException) 7401*cdf0e10cSrcweir { 7402*cdf0e10cSrcweir ScUnoGuard aGuard; 7403*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7404*cdf0e10cSrcweir if ( pDocSh ) 7405*cdf0e10cSrcweir { 7406*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7407*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7408*cdf0e10cSrcweir sal_uInt16 nCount = pDoc->GetPrintRangeCount( nTab ); 7409*cdf0e10cSrcweir 7410*cdf0e10cSrcweir table::CellRangeAddress aRangeAddress; 7411*cdf0e10cSrcweir uno::Sequence<table::CellRangeAddress> aSeq(nCount); 7412*cdf0e10cSrcweir table::CellRangeAddress* pAry = aSeq.getArray(); 7413*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++) 7414*cdf0e10cSrcweir { 7415*cdf0e10cSrcweir const ScRange* pRange = pDoc->GetPrintRange( nTab, i ); 7416*cdf0e10cSrcweir DBG_ASSERT(pRange,"wo ist der Druckbereich"); 7417*cdf0e10cSrcweir if (pRange) 7418*cdf0e10cSrcweir { 7419*cdf0e10cSrcweir ScUnoConversion::FillApiRange( aRangeAddress, *pRange ); 7420*cdf0e10cSrcweir aRangeAddress.Sheet = nTab; // core does not care about sheet index 7421*cdf0e10cSrcweir pAry[i] = aRangeAddress; 7422*cdf0e10cSrcweir } 7423*cdf0e10cSrcweir } 7424*cdf0e10cSrcweir return aSeq; 7425*cdf0e10cSrcweir } 7426*cdf0e10cSrcweir return uno::Sequence<table::CellRangeAddress>(); 7427*cdf0e10cSrcweir } 7428*cdf0e10cSrcweir 7429*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::setPrintAreas( 7430*cdf0e10cSrcweir const uno::Sequence<table::CellRangeAddress>& aPrintAreas ) 7431*cdf0e10cSrcweir throw(uno::RuntimeException) 7432*cdf0e10cSrcweir { 7433*cdf0e10cSrcweir ScUnoGuard aGuard; 7434*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7435*cdf0e10cSrcweir if ( pDocSh ) 7436*cdf0e10cSrcweir { 7437*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7438*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7439*cdf0e10cSrcweir 7440*cdf0e10cSrcweir ScPrintRangeSaver* pOldRanges = pDoc->CreatePrintRangeSaver(); 7441*cdf0e10cSrcweir 7442*cdf0e10cSrcweir sal_uInt16 nCount = (sal_uInt16) aPrintAreas.getLength(); 7443*cdf0e10cSrcweir pDoc->ClearPrintRanges( nTab ); 7444*cdf0e10cSrcweir if (nCount) 7445*cdf0e10cSrcweir { 7446*cdf0e10cSrcweir ScRange aPrintRange; 7447*cdf0e10cSrcweir const table::CellRangeAddress* pAry = aPrintAreas.getConstArray(); 7448*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++) 7449*cdf0e10cSrcweir { 7450*cdf0e10cSrcweir ScUnoConversion::FillScRange( aPrintRange, pAry[i] ); 7451*cdf0e10cSrcweir pDoc->AddPrintRange( nTab, aPrintRange ); 7452*cdf0e10cSrcweir } 7453*cdf0e10cSrcweir } 7454*cdf0e10cSrcweir 7455*cdf0e10cSrcweir PrintAreaUndo_Impl( pOldRanges ); // Undo, Umbrueche, Modified etc. 7456*cdf0e10cSrcweir } 7457*cdf0e10cSrcweir } 7458*cdf0e10cSrcweir 7459*cdf0e10cSrcweir sal_Bool SAL_CALL ScTableSheetObj::getPrintTitleColumns() throw(uno::RuntimeException) 7460*cdf0e10cSrcweir { 7461*cdf0e10cSrcweir ScUnoGuard aGuard; 7462*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7463*cdf0e10cSrcweir if ( pDocSh ) 7464*cdf0e10cSrcweir { 7465*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7466*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7467*cdf0e10cSrcweir return ( pDoc->GetRepeatColRange(nTab) != NULL ); 7468*cdf0e10cSrcweir } 7469*cdf0e10cSrcweir return sal_False; 7470*cdf0e10cSrcweir } 7471*cdf0e10cSrcweir 7472*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::setPrintTitleColumns( sal_Bool bPrintTitleColumns ) 7473*cdf0e10cSrcweir throw(uno::RuntimeException) 7474*cdf0e10cSrcweir { 7475*cdf0e10cSrcweir ScUnoGuard aGuard; 7476*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7477*cdf0e10cSrcweir if ( pDocSh ) 7478*cdf0e10cSrcweir { 7479*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7480*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7481*cdf0e10cSrcweir 7482*cdf0e10cSrcweir ScPrintRangeSaver* pOldRanges = pDoc->CreatePrintRangeSaver(); 7483*cdf0e10cSrcweir 7484*cdf0e10cSrcweir if ( bPrintTitleColumns ) 7485*cdf0e10cSrcweir { 7486*cdf0e10cSrcweir if ( !pDoc->GetRepeatColRange( nTab ) ) // keinen bestehenden Bereich veraendern 7487*cdf0e10cSrcweir { 7488*cdf0e10cSrcweir ScRange aNew( 0, 0, nTab, 0, 0, nTab ); // Default 7489*cdf0e10cSrcweir pDoc->SetRepeatColRange( nTab, &aNew ); // einschalten 7490*cdf0e10cSrcweir } 7491*cdf0e10cSrcweir } 7492*cdf0e10cSrcweir else 7493*cdf0e10cSrcweir pDoc->SetRepeatColRange( nTab, NULL ); // abschalten 7494*cdf0e10cSrcweir 7495*cdf0e10cSrcweir PrintAreaUndo_Impl( pOldRanges ); // Undo, Umbrueche, Modified etc. 7496*cdf0e10cSrcweir 7497*cdf0e10cSrcweir //! zuletzt gesetzten Bereich beim Abschalten merken und beim Einschalten wiederherstellen ??? 7498*cdf0e10cSrcweir } 7499*cdf0e10cSrcweir } 7500*cdf0e10cSrcweir 7501*cdf0e10cSrcweir table::CellRangeAddress SAL_CALL ScTableSheetObj::getTitleColumns() throw(uno::RuntimeException) 7502*cdf0e10cSrcweir { 7503*cdf0e10cSrcweir ScUnoGuard aGuard; 7504*cdf0e10cSrcweir table::CellRangeAddress aRet; 7505*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7506*cdf0e10cSrcweir if ( pDocSh ) 7507*cdf0e10cSrcweir { 7508*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7509*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7510*cdf0e10cSrcweir const ScRange* pRange = pDoc->GetRepeatColRange(nTab); 7511*cdf0e10cSrcweir if (pRange) 7512*cdf0e10cSrcweir { 7513*cdf0e10cSrcweir ScUnoConversion::FillApiRange( aRet, *pRange ); 7514*cdf0e10cSrcweir aRet.Sheet = nTab; // core does not care about sheet index 7515*cdf0e10cSrcweir } 7516*cdf0e10cSrcweir } 7517*cdf0e10cSrcweir return aRet; 7518*cdf0e10cSrcweir } 7519*cdf0e10cSrcweir 7520*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::setTitleColumns( const table::CellRangeAddress& aTitleColumns ) 7521*cdf0e10cSrcweir throw(uno::RuntimeException) 7522*cdf0e10cSrcweir { 7523*cdf0e10cSrcweir ScUnoGuard aGuard; 7524*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7525*cdf0e10cSrcweir if ( pDocSh ) 7526*cdf0e10cSrcweir { 7527*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7528*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7529*cdf0e10cSrcweir 7530*cdf0e10cSrcweir ScPrintRangeSaver* pOldRanges = pDoc->CreatePrintRangeSaver(); 7531*cdf0e10cSrcweir 7532*cdf0e10cSrcweir ScRange aNew; 7533*cdf0e10cSrcweir ScUnoConversion::FillScRange( aNew, aTitleColumns ); 7534*cdf0e10cSrcweir pDoc->SetRepeatColRange( nTab, &aNew ); // immer auch einschalten 7535*cdf0e10cSrcweir 7536*cdf0e10cSrcweir PrintAreaUndo_Impl( pOldRanges ); // Undo, Umbrueche, Modified etc. 7537*cdf0e10cSrcweir } 7538*cdf0e10cSrcweir } 7539*cdf0e10cSrcweir 7540*cdf0e10cSrcweir sal_Bool SAL_CALL ScTableSheetObj::getPrintTitleRows() throw(uno::RuntimeException) 7541*cdf0e10cSrcweir { 7542*cdf0e10cSrcweir ScUnoGuard aGuard; 7543*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7544*cdf0e10cSrcweir if ( pDocSh ) 7545*cdf0e10cSrcweir { 7546*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7547*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7548*cdf0e10cSrcweir return ( pDoc->GetRepeatRowRange(nTab) != NULL ); 7549*cdf0e10cSrcweir } 7550*cdf0e10cSrcweir return sal_False; 7551*cdf0e10cSrcweir } 7552*cdf0e10cSrcweir 7553*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::setPrintTitleRows( sal_Bool bPrintTitleRows ) 7554*cdf0e10cSrcweir throw(uno::RuntimeException) 7555*cdf0e10cSrcweir { 7556*cdf0e10cSrcweir ScUnoGuard aGuard; 7557*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7558*cdf0e10cSrcweir if ( pDocSh ) 7559*cdf0e10cSrcweir { 7560*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7561*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7562*cdf0e10cSrcweir 7563*cdf0e10cSrcweir ScPrintRangeSaver* pOldRanges = pDoc->CreatePrintRangeSaver(); 7564*cdf0e10cSrcweir 7565*cdf0e10cSrcweir if ( bPrintTitleRows ) 7566*cdf0e10cSrcweir { 7567*cdf0e10cSrcweir if ( !pDoc->GetRepeatRowRange( nTab ) ) // keinen bestehenden Bereich veraendern 7568*cdf0e10cSrcweir { 7569*cdf0e10cSrcweir ScRange aNew( 0, 0, nTab, 0, 0, nTab ); // Default 7570*cdf0e10cSrcweir pDoc->SetRepeatRowRange( nTab, &aNew ); // einschalten 7571*cdf0e10cSrcweir } 7572*cdf0e10cSrcweir } 7573*cdf0e10cSrcweir else 7574*cdf0e10cSrcweir pDoc->SetRepeatRowRange( nTab, NULL ); // abschalten 7575*cdf0e10cSrcweir 7576*cdf0e10cSrcweir PrintAreaUndo_Impl( pOldRanges ); // Undo, Umbrueche, Modified etc. 7577*cdf0e10cSrcweir 7578*cdf0e10cSrcweir //! zuletzt gesetzten Bereich beim Abschalten merken und beim Einschalten wiederherstellen ??? 7579*cdf0e10cSrcweir } 7580*cdf0e10cSrcweir } 7581*cdf0e10cSrcweir 7582*cdf0e10cSrcweir table::CellRangeAddress SAL_CALL ScTableSheetObj::getTitleRows() throw(uno::RuntimeException) 7583*cdf0e10cSrcweir { 7584*cdf0e10cSrcweir ScUnoGuard aGuard; 7585*cdf0e10cSrcweir table::CellRangeAddress aRet; 7586*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7587*cdf0e10cSrcweir if ( pDocSh ) 7588*cdf0e10cSrcweir { 7589*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7590*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7591*cdf0e10cSrcweir const ScRange* pRange = pDoc->GetRepeatRowRange(nTab); 7592*cdf0e10cSrcweir if (pRange) 7593*cdf0e10cSrcweir { 7594*cdf0e10cSrcweir ScUnoConversion::FillApiRange( aRet, *pRange ); 7595*cdf0e10cSrcweir aRet.Sheet = nTab; // core does not care about sheet index 7596*cdf0e10cSrcweir } 7597*cdf0e10cSrcweir } 7598*cdf0e10cSrcweir return aRet; 7599*cdf0e10cSrcweir } 7600*cdf0e10cSrcweir 7601*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::setTitleRows( const table::CellRangeAddress& aTitleRows ) 7602*cdf0e10cSrcweir throw(uno::RuntimeException) 7603*cdf0e10cSrcweir { 7604*cdf0e10cSrcweir ScUnoGuard aGuard; 7605*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7606*cdf0e10cSrcweir if ( pDocSh ) 7607*cdf0e10cSrcweir { 7608*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7609*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7610*cdf0e10cSrcweir 7611*cdf0e10cSrcweir ScPrintRangeSaver* pOldRanges = pDoc->CreatePrintRangeSaver(); 7612*cdf0e10cSrcweir 7613*cdf0e10cSrcweir ScRange aNew; 7614*cdf0e10cSrcweir ScUnoConversion::FillScRange( aNew, aTitleRows ); 7615*cdf0e10cSrcweir pDoc->SetRepeatRowRange( nTab, &aNew ); // immer auch einschalten 7616*cdf0e10cSrcweir 7617*cdf0e10cSrcweir PrintAreaUndo_Impl( pOldRanges ); // Undo, Umbrueche, Modified etc. 7618*cdf0e10cSrcweir } 7619*cdf0e10cSrcweir } 7620*cdf0e10cSrcweir 7621*cdf0e10cSrcweir // XSheetLinkable 7622*cdf0e10cSrcweir 7623*cdf0e10cSrcweir sheet::SheetLinkMode SAL_CALL ScTableSheetObj::getLinkMode() throw(uno::RuntimeException) 7624*cdf0e10cSrcweir { 7625*cdf0e10cSrcweir ScUnoGuard aGuard; 7626*cdf0e10cSrcweir sheet::SheetLinkMode eRet = sheet::SheetLinkMode_NONE; 7627*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7628*cdf0e10cSrcweir if ( pDocSh ) 7629*cdf0e10cSrcweir { 7630*cdf0e10cSrcweir sal_uInt8 nMode = pDocSh->GetDocument()->GetLinkMode( GetTab_Impl() ); 7631*cdf0e10cSrcweir if ( nMode == SC_LINK_NORMAL ) 7632*cdf0e10cSrcweir eRet = sheet::SheetLinkMode_NORMAL; 7633*cdf0e10cSrcweir else if ( nMode == SC_LINK_VALUE ) 7634*cdf0e10cSrcweir eRet = sheet::SheetLinkMode_VALUE; 7635*cdf0e10cSrcweir } 7636*cdf0e10cSrcweir return eRet; 7637*cdf0e10cSrcweir } 7638*cdf0e10cSrcweir 7639*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::setLinkMode( sheet::SheetLinkMode nLinkMode ) 7640*cdf0e10cSrcweir throw(uno::RuntimeException) 7641*cdf0e10cSrcweir { 7642*cdf0e10cSrcweir ScUnoGuard aGuard; 7643*cdf0e10cSrcweir 7644*cdf0e10cSrcweir //! Filter und Options aus altem Link suchen 7645*cdf0e10cSrcweir 7646*cdf0e10cSrcweir rtl::OUString aUrl(getLinkUrl()); 7647*cdf0e10cSrcweir rtl::OUString aSheet(getLinkSheetName()); 7648*cdf0e10cSrcweir 7649*cdf0e10cSrcweir rtl::OUString aEmpty; 7650*cdf0e10cSrcweir link( aUrl, aSheet, aEmpty, aEmpty, nLinkMode ); 7651*cdf0e10cSrcweir } 7652*cdf0e10cSrcweir 7653*cdf0e10cSrcweir rtl::OUString SAL_CALL ScTableSheetObj::getLinkUrl() throw(uno::RuntimeException) 7654*cdf0e10cSrcweir { 7655*cdf0e10cSrcweir ScUnoGuard aGuard; 7656*cdf0e10cSrcweir String aFile; 7657*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7658*cdf0e10cSrcweir if ( pDocSh ) 7659*cdf0e10cSrcweir aFile = pDocSh->GetDocument()->GetLinkDoc( GetTab_Impl() ); 7660*cdf0e10cSrcweir return aFile; 7661*cdf0e10cSrcweir } 7662*cdf0e10cSrcweir 7663*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::setLinkUrl( const rtl::OUString& aLinkUrl ) 7664*cdf0e10cSrcweir throw(uno::RuntimeException) 7665*cdf0e10cSrcweir { 7666*cdf0e10cSrcweir ScUnoGuard aGuard; 7667*cdf0e10cSrcweir 7668*cdf0e10cSrcweir //! Filter und Options aus altem Link suchen 7669*cdf0e10cSrcweir 7670*cdf0e10cSrcweir sheet::SheetLinkMode eMode = getLinkMode(); 7671*cdf0e10cSrcweir rtl::OUString aSheet(getLinkSheetName()); 7672*cdf0e10cSrcweir 7673*cdf0e10cSrcweir rtl::OUString aEmpty; 7674*cdf0e10cSrcweir link( aLinkUrl, aSheet, aEmpty, aEmpty, eMode ); 7675*cdf0e10cSrcweir } 7676*cdf0e10cSrcweir 7677*cdf0e10cSrcweir rtl::OUString SAL_CALL ScTableSheetObj::getLinkSheetName() throw(uno::RuntimeException) 7678*cdf0e10cSrcweir { 7679*cdf0e10cSrcweir ScUnoGuard aGuard; 7680*cdf0e10cSrcweir String aSheet; 7681*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7682*cdf0e10cSrcweir if ( pDocSh ) 7683*cdf0e10cSrcweir aSheet = pDocSh->GetDocument()->GetLinkTab( GetTab_Impl() ); 7684*cdf0e10cSrcweir return aSheet; 7685*cdf0e10cSrcweir } 7686*cdf0e10cSrcweir 7687*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::setLinkSheetName( const rtl::OUString& aLinkSheetName ) 7688*cdf0e10cSrcweir throw(uno::RuntimeException) 7689*cdf0e10cSrcweir { 7690*cdf0e10cSrcweir ScUnoGuard aGuard; 7691*cdf0e10cSrcweir 7692*cdf0e10cSrcweir //! Filter und Options aus altem Link suchen 7693*cdf0e10cSrcweir 7694*cdf0e10cSrcweir sheet::SheetLinkMode eMode = getLinkMode(); 7695*cdf0e10cSrcweir rtl::OUString aUrl(getLinkUrl()); 7696*cdf0e10cSrcweir 7697*cdf0e10cSrcweir rtl::OUString aEmpty; 7698*cdf0e10cSrcweir link( aUrl, aLinkSheetName, aEmpty, aEmpty, eMode ); 7699*cdf0e10cSrcweir } 7700*cdf0e10cSrcweir 7701*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::link( const rtl::OUString& aUrl, const rtl::OUString& aSheetName, 7702*cdf0e10cSrcweir const rtl::OUString& aFilterName, const rtl::OUString& aFilterOptions, 7703*cdf0e10cSrcweir sheet::SheetLinkMode nMode ) throw(uno::RuntimeException) 7704*cdf0e10cSrcweir { 7705*cdf0e10cSrcweir ScUnoGuard aGuard; 7706*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7707*cdf0e10cSrcweir if ( pDocSh ) 7708*cdf0e10cSrcweir { 7709*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 7710*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7711*cdf0e10cSrcweir 7712*cdf0e10cSrcweir String aFileString (aUrl); 7713*cdf0e10cSrcweir String aFilterString (aFilterName); 7714*cdf0e10cSrcweir String aOptString (aFilterOptions); 7715*cdf0e10cSrcweir String aSheetString (aSheetName); 7716*cdf0e10cSrcweir 7717*cdf0e10cSrcweir aFileString = ScGlobal::GetAbsDocName( aFileString, pDocSh ); 7718*cdf0e10cSrcweir if ( !aFilterString.Len() ) 7719*cdf0e10cSrcweir ScDocumentLoader::GetFilterName( aFileString, aFilterString, aOptString, sal_True, sal_False ); 7720*cdf0e10cSrcweir 7721*cdf0e10cSrcweir // remove application prefix from filter name here, so the filter options 7722*cdf0e10cSrcweir // aren't reset when the filter name is changed in ScTableLink::DataChanged 7723*cdf0e10cSrcweir ScDocumentLoader::RemoveAppPrefix( aFilterString ); 7724*cdf0e10cSrcweir 7725*cdf0e10cSrcweir sal_uInt8 nLinkMode = SC_LINK_NONE; 7726*cdf0e10cSrcweir if ( nMode == sheet::SheetLinkMode_NORMAL ) 7727*cdf0e10cSrcweir nLinkMode = SC_LINK_NORMAL; 7728*cdf0e10cSrcweir else if ( nMode == sheet::SheetLinkMode_VALUE ) 7729*cdf0e10cSrcweir nLinkMode = SC_LINK_VALUE; 7730*cdf0e10cSrcweir 7731*cdf0e10cSrcweir sal_uLong nRefresh = 0; 7732*cdf0e10cSrcweir pDoc->SetLink( nTab, nLinkMode, aFileString, aFilterString, aOptString, aSheetString, nRefresh ); 7733*cdf0e10cSrcweir 7734*cdf0e10cSrcweir pDocSh->UpdateLinks(); // ggf. Link eintragen oder loeschen 7735*cdf0e10cSrcweir SfxBindings* pBindings = pDocSh->GetViewBindings(); 7736*cdf0e10cSrcweir if (pBindings) 7737*cdf0e10cSrcweir pBindings->Invalidate(SID_LINKS); 7738*cdf0e10cSrcweir 7739*cdf0e10cSrcweir //! Undo fuer Link-Daten an der Table 7740*cdf0e10cSrcweir 7741*cdf0e10cSrcweir if ( nLinkMode != SC_LINK_NONE && pDoc->IsExecuteLinkEnabled() ) // Link updaten 7742*cdf0e10cSrcweir { 7743*cdf0e10cSrcweir // Update immer, auch wenn der Link schon da war 7744*cdf0e10cSrcweir //! Update nur fuer die betroffene Tabelle??? 7745*cdf0e10cSrcweir 7746*cdf0e10cSrcweir sfx2::LinkManager* pLinkManager = pDoc->GetLinkManager(); 7747*cdf0e10cSrcweir sal_uInt16 nCount = pLinkManager->GetLinks().Count(); 7748*cdf0e10cSrcweir for ( sal_uInt16 i=0; i<nCount; i++ ) 7749*cdf0e10cSrcweir { 7750*cdf0e10cSrcweir ::sfx2::SvBaseLink* pBase = *pLinkManager->GetLinks()[i]; 7751*cdf0e10cSrcweir if (pBase->ISA(ScTableLink)) 7752*cdf0e10cSrcweir { 7753*cdf0e10cSrcweir ScTableLink* pTabLink = (ScTableLink*)pBase; 7754*cdf0e10cSrcweir if ( pTabLink->GetFileName() == aFileString ) 7755*cdf0e10cSrcweir pTabLink->Update(); // inkl. Paint&Undo 7756*cdf0e10cSrcweir 7757*cdf0e10cSrcweir //! Der Dateiname sollte nur einmal vorkommen (?) 7758*cdf0e10cSrcweir } 7759*cdf0e10cSrcweir } 7760*cdf0e10cSrcweir } 7761*cdf0e10cSrcweir 7762*cdf0e10cSrcweir //! Notify fuer ScSheetLinkObj Objekte!!! 7763*cdf0e10cSrcweir } 7764*cdf0e10cSrcweir } 7765*cdf0e10cSrcweir 7766*cdf0e10cSrcweir // XSheetAuditing 7767*cdf0e10cSrcweir 7768*cdf0e10cSrcweir sal_Bool SAL_CALL ScTableSheetObj::hideDependents( const table::CellAddress& aPosition ) 7769*cdf0e10cSrcweir throw(uno::RuntimeException) 7770*cdf0e10cSrcweir { 7771*cdf0e10cSrcweir ScUnoGuard aGuard; 7772*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7773*cdf0e10cSrcweir if ( pDocSh ) 7774*cdf0e10cSrcweir { 7775*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7776*cdf0e10cSrcweir DBG_ASSERT( aPosition.Sheet == nTab, "falsche Tabelle in CellAddress" ); 7777*cdf0e10cSrcweir ScAddress aPos( (SCCOL)aPosition.Column, (SCROW)aPosition.Row, nTab ); 7778*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7779*cdf0e10cSrcweir return aFunc.DetectiveDelSucc( aPos ); 7780*cdf0e10cSrcweir } 7781*cdf0e10cSrcweir return sal_False; 7782*cdf0e10cSrcweir } 7783*cdf0e10cSrcweir 7784*cdf0e10cSrcweir sal_Bool SAL_CALL ScTableSheetObj::hidePrecedents( const table::CellAddress& aPosition ) 7785*cdf0e10cSrcweir throw(uno::RuntimeException) 7786*cdf0e10cSrcweir { 7787*cdf0e10cSrcweir ScUnoGuard aGuard; 7788*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7789*cdf0e10cSrcweir if ( pDocSh ) 7790*cdf0e10cSrcweir { 7791*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7792*cdf0e10cSrcweir DBG_ASSERT( aPosition.Sheet == nTab, "falsche Tabelle in CellAddress" ); 7793*cdf0e10cSrcweir ScAddress aPos( (SCCOL)aPosition.Column, (SCROW)aPosition.Row, nTab ); 7794*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7795*cdf0e10cSrcweir return aFunc.DetectiveDelPred( aPos ); 7796*cdf0e10cSrcweir } 7797*cdf0e10cSrcweir return sal_False; 7798*cdf0e10cSrcweir } 7799*cdf0e10cSrcweir 7800*cdf0e10cSrcweir sal_Bool SAL_CALL ScTableSheetObj::showDependents( const table::CellAddress& aPosition ) 7801*cdf0e10cSrcweir throw(uno::RuntimeException) 7802*cdf0e10cSrcweir { 7803*cdf0e10cSrcweir ScUnoGuard aGuard; 7804*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7805*cdf0e10cSrcweir if ( pDocSh ) 7806*cdf0e10cSrcweir { 7807*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7808*cdf0e10cSrcweir DBG_ASSERT( aPosition.Sheet == nTab, "falsche Tabelle in CellAddress" ); 7809*cdf0e10cSrcweir ScAddress aPos( (SCCOL)aPosition.Column, (SCROW)aPosition.Row, nTab ); 7810*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7811*cdf0e10cSrcweir return aFunc.DetectiveAddSucc( aPos ); 7812*cdf0e10cSrcweir } 7813*cdf0e10cSrcweir return sal_False; 7814*cdf0e10cSrcweir } 7815*cdf0e10cSrcweir 7816*cdf0e10cSrcweir sal_Bool SAL_CALL ScTableSheetObj::showPrecedents( const table::CellAddress& aPosition ) 7817*cdf0e10cSrcweir throw(uno::RuntimeException) 7818*cdf0e10cSrcweir { 7819*cdf0e10cSrcweir ScUnoGuard aGuard; 7820*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7821*cdf0e10cSrcweir if ( pDocSh ) 7822*cdf0e10cSrcweir { 7823*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7824*cdf0e10cSrcweir DBG_ASSERT( aPosition.Sheet == nTab, "falsche Tabelle in CellAddress" ); 7825*cdf0e10cSrcweir ScAddress aPos( (SCCOL)aPosition.Column, (SCROW)aPosition.Row, nTab ); 7826*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7827*cdf0e10cSrcweir return aFunc.DetectiveAddPred( aPos ); 7828*cdf0e10cSrcweir } 7829*cdf0e10cSrcweir return sal_False; 7830*cdf0e10cSrcweir } 7831*cdf0e10cSrcweir 7832*cdf0e10cSrcweir sal_Bool SAL_CALL ScTableSheetObj::showErrors( const table::CellAddress& aPosition ) 7833*cdf0e10cSrcweir throw(uno::RuntimeException) 7834*cdf0e10cSrcweir { 7835*cdf0e10cSrcweir ScUnoGuard aGuard; 7836*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7837*cdf0e10cSrcweir if ( pDocSh ) 7838*cdf0e10cSrcweir { 7839*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7840*cdf0e10cSrcweir DBG_ASSERT( aPosition.Sheet == nTab, "falsche Tabelle in CellAddress" ); 7841*cdf0e10cSrcweir ScAddress aPos( (SCCOL)aPosition.Column, (SCROW)aPosition.Row, nTab ); 7842*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7843*cdf0e10cSrcweir return aFunc.DetectiveAddError( aPos ); 7844*cdf0e10cSrcweir } 7845*cdf0e10cSrcweir return sal_False; 7846*cdf0e10cSrcweir } 7847*cdf0e10cSrcweir 7848*cdf0e10cSrcweir sal_Bool SAL_CALL ScTableSheetObj::showInvalid() throw(uno::RuntimeException) 7849*cdf0e10cSrcweir { 7850*cdf0e10cSrcweir ScUnoGuard aGuard; 7851*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7852*cdf0e10cSrcweir if ( pDocSh ) 7853*cdf0e10cSrcweir { 7854*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7855*cdf0e10cSrcweir return aFunc.DetectiveMarkInvalid( GetTab_Impl() ); 7856*cdf0e10cSrcweir } 7857*cdf0e10cSrcweir return sal_False; 7858*cdf0e10cSrcweir } 7859*cdf0e10cSrcweir 7860*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::clearArrows() throw(uno::RuntimeException) 7861*cdf0e10cSrcweir { 7862*cdf0e10cSrcweir ScUnoGuard aGuard; 7863*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7864*cdf0e10cSrcweir if ( pDocSh ) 7865*cdf0e10cSrcweir { 7866*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7867*cdf0e10cSrcweir aFunc.DetectiveDelAll( GetTab_Impl() ); 7868*cdf0e10cSrcweir } 7869*cdf0e10cSrcweir } 7870*cdf0e10cSrcweir 7871*cdf0e10cSrcweir // XSheetOutline 7872*cdf0e10cSrcweir 7873*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::group( const table::CellRangeAddress& rGroupRange, 7874*cdf0e10cSrcweir table::TableOrientation nOrientation ) 7875*cdf0e10cSrcweir throw(uno::RuntimeException) 7876*cdf0e10cSrcweir { 7877*cdf0e10cSrcweir ScUnoGuard aGuard; 7878*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7879*cdf0e10cSrcweir if ( pDocSh ) 7880*cdf0e10cSrcweir { 7881*cdf0e10cSrcweir sal_Bool bColumns = ( nOrientation == table::TableOrientation_COLUMNS ); 7882*cdf0e10cSrcweir ScRange aGroupRange; 7883*cdf0e10cSrcweir ScUnoConversion::FillScRange( aGroupRange, rGroupRange ); 7884*cdf0e10cSrcweir ScOutlineDocFunc aFunc(*pDocSh); 7885*cdf0e10cSrcweir aFunc.MakeOutline( aGroupRange, bColumns, sal_True, sal_True ); 7886*cdf0e10cSrcweir } 7887*cdf0e10cSrcweir } 7888*cdf0e10cSrcweir 7889*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::ungroup( const table::CellRangeAddress& rGroupRange, 7890*cdf0e10cSrcweir table::TableOrientation nOrientation ) 7891*cdf0e10cSrcweir throw(uno::RuntimeException) 7892*cdf0e10cSrcweir { 7893*cdf0e10cSrcweir ScUnoGuard aGuard; 7894*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7895*cdf0e10cSrcweir if ( pDocSh ) 7896*cdf0e10cSrcweir { 7897*cdf0e10cSrcweir sal_Bool bColumns = ( nOrientation == table::TableOrientation_COLUMNS ); 7898*cdf0e10cSrcweir ScRange aGroupRange; 7899*cdf0e10cSrcweir ScUnoConversion::FillScRange( aGroupRange, rGroupRange ); 7900*cdf0e10cSrcweir ScOutlineDocFunc aFunc(*pDocSh); 7901*cdf0e10cSrcweir aFunc.RemoveOutline( aGroupRange, bColumns, sal_True, sal_True ); 7902*cdf0e10cSrcweir } 7903*cdf0e10cSrcweir } 7904*cdf0e10cSrcweir 7905*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::autoOutline( const table::CellRangeAddress& rCellRange ) 7906*cdf0e10cSrcweir throw(uno::RuntimeException) 7907*cdf0e10cSrcweir { 7908*cdf0e10cSrcweir ScUnoGuard aGuard; 7909*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7910*cdf0e10cSrcweir if ( pDocSh ) 7911*cdf0e10cSrcweir { 7912*cdf0e10cSrcweir ScRange aFormulaRange; 7913*cdf0e10cSrcweir ScUnoConversion::FillScRange( aFormulaRange, rCellRange ); 7914*cdf0e10cSrcweir ScOutlineDocFunc aFunc(*pDocSh); 7915*cdf0e10cSrcweir aFunc.AutoOutline( aFormulaRange, sal_True, sal_True ); 7916*cdf0e10cSrcweir } 7917*cdf0e10cSrcweir } 7918*cdf0e10cSrcweir 7919*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::clearOutline() throw(uno::RuntimeException) 7920*cdf0e10cSrcweir { 7921*cdf0e10cSrcweir ScUnoGuard aGuard; 7922*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7923*cdf0e10cSrcweir if ( pDocSh ) 7924*cdf0e10cSrcweir { 7925*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7926*cdf0e10cSrcweir ScOutlineDocFunc aFunc(*pDocSh); 7927*cdf0e10cSrcweir aFunc.RemoveAllOutlines( nTab, sal_True, sal_True ); 7928*cdf0e10cSrcweir } 7929*cdf0e10cSrcweir } 7930*cdf0e10cSrcweir 7931*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::hideDetail( const table::CellRangeAddress& rCellRange ) 7932*cdf0e10cSrcweir throw(uno::RuntimeException) 7933*cdf0e10cSrcweir { 7934*cdf0e10cSrcweir ScUnoGuard aGuard; 7935*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7936*cdf0e10cSrcweir if ( pDocSh ) 7937*cdf0e10cSrcweir { 7938*cdf0e10cSrcweir ScRange aMarkRange; 7939*cdf0e10cSrcweir ScUnoConversion::FillScRange( aMarkRange, rCellRange ); 7940*cdf0e10cSrcweir ScOutlineDocFunc aFunc(*pDocSh); 7941*cdf0e10cSrcweir aFunc.HideMarkedOutlines( aMarkRange, sal_True, sal_True ); 7942*cdf0e10cSrcweir } 7943*cdf0e10cSrcweir } 7944*cdf0e10cSrcweir 7945*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::showDetail( const table::CellRangeAddress& rCellRange ) 7946*cdf0e10cSrcweir throw(uno::RuntimeException) 7947*cdf0e10cSrcweir { 7948*cdf0e10cSrcweir ScUnoGuard aGuard; 7949*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7950*cdf0e10cSrcweir if ( pDocSh ) 7951*cdf0e10cSrcweir { 7952*cdf0e10cSrcweir ScRange aMarkRange; 7953*cdf0e10cSrcweir ScUnoConversion::FillScRange( aMarkRange, rCellRange ); 7954*cdf0e10cSrcweir ScOutlineDocFunc aFunc(*pDocSh); 7955*cdf0e10cSrcweir aFunc.ShowMarkedOutlines( aMarkRange, sal_True, sal_True ); 7956*cdf0e10cSrcweir } 7957*cdf0e10cSrcweir } 7958*cdf0e10cSrcweir 7959*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::showLevel( sal_Int16 nLevel, table::TableOrientation nOrientation ) 7960*cdf0e10cSrcweir throw(uno::RuntimeException) 7961*cdf0e10cSrcweir { 7962*cdf0e10cSrcweir ScUnoGuard aGuard; 7963*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7964*cdf0e10cSrcweir if ( pDocSh ) 7965*cdf0e10cSrcweir { 7966*cdf0e10cSrcweir sal_Bool bColumns = ( nOrientation == table::TableOrientation_COLUMNS ); 7967*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 7968*cdf0e10cSrcweir ScOutlineDocFunc aFunc(*pDocSh); 7969*cdf0e10cSrcweir aFunc.SelectLevel( nTab, bColumns, nLevel, sal_True, sal_True, sal_True ); 7970*cdf0e10cSrcweir } 7971*cdf0e10cSrcweir } 7972*cdf0e10cSrcweir 7973*cdf0e10cSrcweir // XProtectable 7974*cdf0e10cSrcweir 7975*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::protect( const rtl::OUString& aPassword ) 7976*cdf0e10cSrcweir throw(uno::RuntimeException) 7977*cdf0e10cSrcweir { 7978*cdf0e10cSrcweir ScUnoGuard aGuard; 7979*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7980*cdf0e10cSrcweir // #i108245# if already protected, don't change anything 7981*cdf0e10cSrcweir if ( pDocSh && !pDocSh->GetDocument()->IsTabProtected( GetTab_Impl() ) ) 7982*cdf0e10cSrcweir { 7983*cdf0e10cSrcweir String aString(aPassword); 7984*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7985*cdf0e10cSrcweir aFunc.Protect( GetTab_Impl(), aString, sal_True ); 7986*cdf0e10cSrcweir } 7987*cdf0e10cSrcweir } 7988*cdf0e10cSrcweir 7989*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::unprotect( const rtl::OUString& aPassword ) 7990*cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException) 7991*cdf0e10cSrcweir { 7992*cdf0e10cSrcweir ScUnoGuard aGuard; 7993*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 7994*cdf0e10cSrcweir if ( pDocSh ) 7995*cdf0e10cSrcweir { 7996*cdf0e10cSrcweir String aString(aPassword); 7997*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 7998*cdf0e10cSrcweir sal_Bool bDone = aFunc.Unprotect( GetTab_Impl(), aString, sal_True ); 7999*cdf0e10cSrcweir if (!bDone) 8000*cdf0e10cSrcweir throw lang::IllegalArgumentException(); 8001*cdf0e10cSrcweir } 8002*cdf0e10cSrcweir } 8003*cdf0e10cSrcweir 8004*cdf0e10cSrcweir sal_Bool SAL_CALL ScTableSheetObj::isProtected() throw(uno::RuntimeException) 8005*cdf0e10cSrcweir { 8006*cdf0e10cSrcweir ScUnoGuard aGuard; 8007*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8008*cdf0e10cSrcweir if ( pDocSh ) 8009*cdf0e10cSrcweir return pDocSh->GetDocument()->IsTabProtected( GetTab_Impl() ); 8010*cdf0e10cSrcweir 8011*cdf0e10cSrcweir DBG_ERROR("keine DocShell"); //! Exception oder so? 8012*cdf0e10cSrcweir return sal_False; 8013*cdf0e10cSrcweir } 8014*cdf0e10cSrcweir 8015*cdf0e10cSrcweir // XScenario 8016*cdf0e10cSrcweir 8017*cdf0e10cSrcweir sal_Bool SAL_CALL ScTableSheetObj::getIsScenario() throw(uno::RuntimeException) 8018*cdf0e10cSrcweir { 8019*cdf0e10cSrcweir ScUnoGuard aGuard; 8020*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8021*cdf0e10cSrcweir if ( pDocSh ) 8022*cdf0e10cSrcweir return pDocSh->GetDocument()->IsScenario( GetTab_Impl() ); 8023*cdf0e10cSrcweir 8024*cdf0e10cSrcweir return sal_False; 8025*cdf0e10cSrcweir } 8026*cdf0e10cSrcweir 8027*cdf0e10cSrcweir rtl::OUString SAL_CALL ScTableSheetObj::getScenarioComment() throw(uno::RuntimeException) 8028*cdf0e10cSrcweir { 8029*cdf0e10cSrcweir ScUnoGuard aGuard; 8030*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8031*cdf0e10cSrcweir if ( pDocSh ) 8032*cdf0e10cSrcweir { 8033*cdf0e10cSrcweir String aComment; 8034*cdf0e10cSrcweir Color aColor; 8035*cdf0e10cSrcweir sal_uInt16 nFlags; 8036*cdf0e10cSrcweir pDocSh->GetDocument()->GetScenarioData( GetTab_Impl(), aComment, aColor, nFlags ); 8037*cdf0e10cSrcweir return aComment; 8038*cdf0e10cSrcweir } 8039*cdf0e10cSrcweir return rtl::OUString(); 8040*cdf0e10cSrcweir } 8041*cdf0e10cSrcweir 8042*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::setScenarioComment( const rtl::OUString& aScenarioComment ) 8043*cdf0e10cSrcweir throw(uno::RuntimeException) 8044*cdf0e10cSrcweir { 8045*cdf0e10cSrcweir ScUnoGuard aGuard; 8046*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8047*cdf0e10cSrcweir if ( pDocSh ) 8048*cdf0e10cSrcweir { 8049*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 8050*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 8051*cdf0e10cSrcweir 8052*cdf0e10cSrcweir String aName; 8053*cdf0e10cSrcweir String aComment; 8054*cdf0e10cSrcweir Color aColor; 8055*cdf0e10cSrcweir sal_uInt16 nFlags; 8056*cdf0e10cSrcweir pDoc->GetName( nTab, aName ); 8057*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8058*cdf0e10cSrcweir 8059*cdf0e10cSrcweir aComment = String( aScenarioComment ); 8060*cdf0e10cSrcweir 8061*cdf0e10cSrcweir pDocSh->ModifyScenario( nTab, aName, aComment, aColor, nFlags ); 8062*cdf0e10cSrcweir } 8063*cdf0e10cSrcweir } 8064*cdf0e10cSrcweir 8065*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::addRanges( const uno::Sequence<table::CellRangeAddress>& rScenRanges ) 8066*cdf0e10cSrcweir throw(uno::RuntimeException) 8067*cdf0e10cSrcweir { 8068*cdf0e10cSrcweir ScUnoGuard aGuard; 8069*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8070*cdf0e10cSrcweir if ( pDocSh ) 8071*cdf0e10cSrcweir { 8072*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 8073*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 8074*cdf0e10cSrcweir 8075*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8076*cdf0e10cSrcweir { 8077*cdf0e10cSrcweir ScMarkData aMarkData; 8078*cdf0e10cSrcweir aMarkData.SelectTable( nTab, sal_True ); 8079*cdf0e10cSrcweir 8080*cdf0e10cSrcweir sal_uInt16 nRangeCount = (sal_uInt16)rScenRanges.getLength(); 8081*cdf0e10cSrcweir if (nRangeCount) 8082*cdf0e10cSrcweir { 8083*cdf0e10cSrcweir const table::CellRangeAddress* pAry = rScenRanges.getConstArray(); 8084*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nRangeCount; i++) 8085*cdf0e10cSrcweir { 8086*cdf0e10cSrcweir DBG_ASSERT( pAry[i].Sheet == nTab, "addRanges mit falscher Tab" ); 8087*cdf0e10cSrcweir ScRange aOneRange( (SCCOL)pAry[i].StartColumn, (SCROW)pAry[i].StartRow, nTab, 8088*cdf0e10cSrcweir (SCCOL)pAry[i].EndColumn, (SCROW)pAry[i].EndRow, nTab ); 8089*cdf0e10cSrcweir 8090*cdf0e10cSrcweir aMarkData.SetMultiMarkArea( aOneRange ); 8091*cdf0e10cSrcweir } 8092*cdf0e10cSrcweir } 8093*cdf0e10cSrcweir 8094*cdf0e10cSrcweir // Szenario-Ranges sind durch Attribut gekennzeichnet 8095*cdf0e10cSrcweir ScPatternAttr aPattern( pDoc->GetPool() ); 8096*cdf0e10cSrcweir aPattern.GetItemSet().Put( ScMergeFlagAttr( SC_MF_SCENARIO ) ); 8097*cdf0e10cSrcweir aPattern.GetItemSet().Put( ScProtectionAttr( sal_True ) ); 8098*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 8099*cdf0e10cSrcweir aFunc.ApplyAttributes( aMarkData, aPattern, sal_True, sal_True ); 8100*cdf0e10cSrcweir } 8101*cdf0e10cSrcweir 8102*cdf0e10cSrcweir // don't use. We should use therefor a private interface, so we can also set the flags. 8103*cdf0e10cSrcweir /* else if (nTab > 0 && pDoc->IsImportingXML()) // make this sheet as an scenario and only if it is not the first sheet and only if it is ImportingXML, 8104*cdf0e10cSrcweir // because than no UNDO and repaint is necessary. 8105*cdf0e10cSrcweir { 8106*cdf0e10cSrcweir sal_uInt16 nRangeCount = (sal_uInt16)rScenRanges.getLength(); 8107*cdf0e10cSrcweir if (nRangeCount) 8108*cdf0e10cSrcweir { 8109*cdf0e10cSrcweir pDoc->SetScenario( nTab, sal_True ); 8110*cdf0e10cSrcweir 8111*cdf0e10cSrcweir // default flags 8112*cdf0e10cSrcweir Color aColor( COL_LIGHTGRAY ); // Default 8113*cdf0e10cSrcweir sal_uInt16 nFlags = SC_SCENARIO_SHOWFRAME | SC_SCENARIO_PRINTFRAME | SC_SCENARIO_TWOWAY; 8114*cdf0e10cSrcweir String aComment; 8115*cdf0e10cSrcweir 8116*cdf0e10cSrcweir pDoc->SetScenarioData( nTab, aComment, aColor, nFlags ); 8117*cdf0e10cSrcweir const table::CellRangeAddress* pAry = rScenRanges.getConstArray(); 8118*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nRangeCount; i++) 8119*cdf0e10cSrcweir { 8120*cdf0e10cSrcweir DBG_ASSERT( pAry[i].Sheet == nTab, "addRanges mit falscher Tab" ); 8121*cdf0e10cSrcweir pDoc->ApplyFlagsTab( (sal_uInt16)pAry[i].StartColumn, (sal_uInt16)pAry[i].StartRow, 8122*cdf0e10cSrcweir (sal_uInt16)pAry[i].EndColumn, (sal_uInt16)pAry[i].EndRow, nTab, SC_MF_SCENARIO ); 8123*cdf0e10cSrcweir } 8124*cdf0e10cSrcweir pDoc->SetActiveScenario( nTab, sal_True ); 8125*cdf0e10cSrcweir 8126*cdf0e10cSrcweir // set to next visible tab 8127*cdf0e10cSrcweir sal_uInt16 j = nTab - 1; 8128*cdf0e10cSrcweir sal_Bool bFinished = sal_False; 8129*cdf0e10cSrcweir while (j < nTab && !bFinished) 8130*cdf0e10cSrcweir { 8131*cdf0e10cSrcweir if (pDoc->IsVisible(j)) 8132*cdf0e10cSrcweir { 8133*cdf0e10cSrcweir pDoc->SetVisibleTab(j); 8134*cdf0e10cSrcweir bFinished = sal_True; 8135*cdf0e10cSrcweir } 8136*cdf0e10cSrcweir else 8137*cdf0e10cSrcweir --j; 8138*cdf0e10cSrcweir } 8139*cdf0e10cSrcweir 8140*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 8141*cdf0e10cSrcweir aFunc.SetTableVisible( nTab, sal_False, sal_True ); 8142*cdf0e10cSrcweir } 8143*cdf0e10cSrcweir }*/ 8144*cdf0e10cSrcweir } 8145*cdf0e10cSrcweir } 8146*cdf0e10cSrcweir 8147*cdf0e10cSrcweir void SAL_CALL ScTableSheetObj::apply() throw(uno::RuntimeException) 8148*cdf0e10cSrcweir { 8149*cdf0e10cSrcweir ScUnoGuard aGuard; 8150*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8151*cdf0e10cSrcweir if ( pDocSh ) 8152*cdf0e10cSrcweir { 8153*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 8154*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 8155*cdf0e10cSrcweir String aName; 8156*cdf0e10cSrcweir pDoc->GetName( nTab, aName ); // Name dieses Szenarios 8157*cdf0e10cSrcweir 8158*cdf0e10cSrcweir SCTAB nDestTab = nTab; 8159*cdf0e10cSrcweir while ( nDestTab > 0 && pDoc->IsScenario(nDestTab) ) 8160*cdf0e10cSrcweir --nDestTab; 8161*cdf0e10cSrcweir 8162*cdf0e10cSrcweir if ( !pDoc->IsScenario(nDestTab) ) 8163*cdf0e10cSrcweir pDocSh->UseScenario( nDestTab, aName ); 8164*cdf0e10cSrcweir 8165*cdf0e10cSrcweir //! sonst Fehler oder so 8166*cdf0e10cSrcweir } 8167*cdf0e10cSrcweir } 8168*cdf0e10cSrcweir 8169*cdf0e10cSrcweir // XScenarioEnhanced 8170*cdf0e10cSrcweir 8171*cdf0e10cSrcweir uno::Sequence< table::CellRangeAddress > SAL_CALL ScTableSheetObj::getRanges( ) 8172*cdf0e10cSrcweir throw(uno::RuntimeException) 8173*cdf0e10cSrcweir { 8174*cdf0e10cSrcweir ScUnoGuard aGuard; 8175*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8176*cdf0e10cSrcweir if ( pDocSh ) 8177*cdf0e10cSrcweir { 8178*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 8179*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 8180*cdf0e10cSrcweir const ScRangeList* pRangeList = pDoc->GetScenarioRanges(nTab); 8181*cdf0e10cSrcweir if (pRangeList) 8182*cdf0e10cSrcweir { 8183*cdf0e10cSrcweir sal_Int32 nCount = pRangeList->Count(); 8184*cdf0e10cSrcweir uno::Sequence< table::CellRangeAddress > aRetRanges(nCount); 8185*cdf0e10cSrcweir table::CellRangeAddress* pAry = aRetRanges.getArray(); 8186*cdf0e10cSrcweir for( sal_Int32 nIndex = 0; nIndex < nCount; nIndex++ ) 8187*cdf0e10cSrcweir { 8188*cdf0e10cSrcweir const ScRange* pRange = pRangeList->GetObject( nIndex ); 8189*cdf0e10cSrcweir pAry->StartColumn = pRange->aStart.Col(); 8190*cdf0e10cSrcweir pAry->StartRow = pRange->aStart.Row(); 8191*cdf0e10cSrcweir pAry->EndColumn = pRange->aEnd.Col(); 8192*cdf0e10cSrcweir pAry->EndRow = pRange->aEnd.Row(); 8193*cdf0e10cSrcweir pAry->Sheet = pRange->aStart.Tab(); 8194*cdf0e10cSrcweir ++pAry; 8195*cdf0e10cSrcweir } 8196*cdf0e10cSrcweir return aRetRanges; 8197*cdf0e10cSrcweir } 8198*cdf0e10cSrcweir } 8199*cdf0e10cSrcweir return uno::Sequence< table::CellRangeAddress > (); 8200*cdf0e10cSrcweir } 8201*cdf0e10cSrcweir 8202*cdf0e10cSrcweir // XExternalSheetName 8203*cdf0e10cSrcweir 8204*cdf0e10cSrcweir void ScTableSheetObj::setExternalName( const ::rtl::OUString& aUrl, const ::rtl::OUString& aSheetName ) 8205*cdf0e10cSrcweir throw (container::ElementExistException, uno::RuntimeException) 8206*cdf0e10cSrcweir { 8207*cdf0e10cSrcweir ScUnoGuard aGuard; 8208*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8209*cdf0e10cSrcweir if ( pDocSh ) 8210*cdf0e10cSrcweir { 8211*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 8212*cdf0e10cSrcweir if ( pDoc ) 8213*cdf0e10cSrcweir { 8214*cdf0e10cSrcweir const SCTAB nTab = GetTab_Impl(); 8215*cdf0e10cSrcweir const String aAbsDocName( ScGlobal::GetAbsDocName( aUrl, pDocSh ) ); 8216*cdf0e10cSrcweir const String aDocTabName( ScGlobal::GetDocTabName( aAbsDocName, aSheetName ) ); 8217*cdf0e10cSrcweir if ( !pDoc->RenameTab( nTab, aDocTabName, sal_False /*bUpdateRef*/, sal_True /*bExternalDocument*/ ) ) 8218*cdf0e10cSrcweir { 8219*cdf0e10cSrcweir throw container::ElementExistException( ::rtl::OUString(), *this ); 8220*cdf0e10cSrcweir } 8221*cdf0e10cSrcweir } 8222*cdf0e10cSrcweir } 8223*cdf0e10cSrcweir } 8224*cdf0e10cSrcweir 8225*cdf0e10cSrcweir // XEventsSupplier 8226*cdf0e10cSrcweir 8227*cdf0e10cSrcweir uno::Reference<container::XNameReplace> SAL_CALL ScTableSheetObj::getEvents() throw (uno::RuntimeException) 8228*cdf0e10cSrcweir { 8229*cdf0e10cSrcweir ScUnoGuard aGuard; 8230*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8231*cdf0e10cSrcweir if ( pDocSh ) 8232*cdf0e10cSrcweir return new ScSheetEventsObj( pDocSh, GetTab_Impl() ); 8233*cdf0e10cSrcweir 8234*cdf0e10cSrcweir return NULL; 8235*cdf0e10cSrcweir } 8236*cdf0e10cSrcweir 8237*cdf0e10cSrcweir // XPropertySet erweitert fuer Sheet-Properties 8238*cdf0e10cSrcweir 8239*cdf0e10cSrcweir uno::Reference<beans::XPropertySetInfo> SAL_CALL ScTableSheetObj::getPropertySetInfo() 8240*cdf0e10cSrcweir throw(uno::RuntimeException) 8241*cdf0e10cSrcweir { 8242*cdf0e10cSrcweir ScUnoGuard aGuard; 8243*cdf0e10cSrcweir static uno::Reference<beans::XPropertySetInfo> aRef( 8244*cdf0e10cSrcweir new SfxItemPropertySetInfo( pSheetPropSet->getPropertyMap() )); 8245*cdf0e10cSrcweir return aRef; 8246*cdf0e10cSrcweir } 8247*cdf0e10cSrcweir 8248*cdf0e10cSrcweir void ScTableSheetObj::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, const uno::Any& aValue ) 8249*cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException) 8250*cdf0e10cSrcweir { 8251*cdf0e10cSrcweir if ( pEntry ) 8252*cdf0e10cSrcweir { 8253*cdf0e10cSrcweir if ( IsScItemWid( pEntry->nWID ) ) 8254*cdf0e10cSrcweir { 8255*cdf0e10cSrcweir // for Item WIDs, call ScCellRangesBase directly 8256*cdf0e10cSrcweir ScCellRangesBase::SetOnePropertyValue(pEntry, aValue); 8257*cdf0e10cSrcweir return; 8258*cdf0e10cSrcweir } 8259*cdf0e10cSrcweir 8260*cdf0e10cSrcweir // own properties 8261*cdf0e10cSrcweir 8262*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8263*cdf0e10cSrcweir if (!pDocSh) 8264*cdf0e10cSrcweir return; //! Exception oder so? 8265*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 8266*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 8267*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 8268*cdf0e10cSrcweir 8269*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_PAGESTL ) 8270*cdf0e10cSrcweir { 8271*cdf0e10cSrcweir rtl::OUString aStrVal; 8272*cdf0e10cSrcweir aValue >>= aStrVal; 8273*cdf0e10cSrcweir String aNewStr(ScStyleNameConversion::ProgrammaticToDisplayName( 8274*cdf0e10cSrcweir aStrVal, SFX_STYLE_FAMILY_PAGE )); 8275*cdf0e10cSrcweir 8276*cdf0e10cSrcweir //! Undo? (auch bei SID_STYLE_APPLY an der View) 8277*cdf0e10cSrcweir 8278*cdf0e10cSrcweir if ( pDoc->GetPageStyle( nTab ) != aNewStr ) 8279*cdf0e10cSrcweir { 8280*cdf0e10cSrcweir pDoc->SetPageStyle( nTab, aNewStr ); 8281*cdf0e10cSrcweir if (!pDoc->IsImportingXML()) 8282*cdf0e10cSrcweir { 8283*cdf0e10cSrcweir ScPrintFunc( pDocSh, pDocSh->GetPrinter(), nTab ).UpdatePages(); 8284*cdf0e10cSrcweir 8285*cdf0e10cSrcweir SfxBindings* pBindings = pDocSh->GetViewBindings(); 8286*cdf0e10cSrcweir if (pBindings) 8287*cdf0e10cSrcweir { 8288*cdf0e10cSrcweir pBindings->Invalidate( SID_STYLE_FAMILY4 ); 8289*cdf0e10cSrcweir pBindings->Invalidate( SID_STATUS_PAGESTYLE ); 8290*cdf0e10cSrcweir pBindings->Invalidate( FID_RESET_PRINTZOOM ); 8291*cdf0e10cSrcweir pBindings->Invalidate( SID_ATTR_PARA_LEFT_TO_RIGHT ); 8292*cdf0e10cSrcweir pBindings->Invalidate( SID_ATTR_PARA_RIGHT_TO_LEFT ); 8293*cdf0e10cSrcweir } 8294*cdf0e10cSrcweir } 8295*cdf0e10cSrcweir pDocSh->SetDocumentModified(); 8296*cdf0e10cSrcweir } 8297*cdf0e10cSrcweir } 8298*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CELLVIS ) 8299*cdf0e10cSrcweir { 8300*cdf0e10cSrcweir sal_Bool bVis = ScUnoHelpFunctions::GetBoolFromAny( aValue ); 8301*cdf0e10cSrcweir aFunc.SetTableVisible( nTab, bVis, sal_True ); 8302*cdf0e10cSrcweir } 8303*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_ISACTIVE ) 8304*cdf0e10cSrcweir { 8305*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8306*cdf0e10cSrcweir pDoc->SetActiveScenario( nTab, ScUnoHelpFunctions::GetBoolFromAny( aValue ) ); 8307*cdf0e10cSrcweir } 8308*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_BORDCOL ) 8309*cdf0e10cSrcweir { 8310*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8311*cdf0e10cSrcweir { 8312*cdf0e10cSrcweir sal_Int32 nNewColor = 0; 8313*cdf0e10cSrcweir if (aValue >>= nNewColor) 8314*cdf0e10cSrcweir { 8315*cdf0e10cSrcweir String aName; 8316*cdf0e10cSrcweir String aComment; 8317*cdf0e10cSrcweir Color aColor; 8318*cdf0e10cSrcweir sal_uInt16 nFlags; 8319*cdf0e10cSrcweir pDoc->GetName( nTab, aName ); 8320*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8321*cdf0e10cSrcweir 8322*cdf0e10cSrcweir aColor = Color(static_cast<sal_uInt32>(nNewColor)); 8323*cdf0e10cSrcweir 8324*cdf0e10cSrcweir pDocSh->ModifyScenario( nTab, aName, aComment, aColor, nFlags ); 8325*cdf0e10cSrcweir } 8326*cdf0e10cSrcweir } 8327*cdf0e10cSrcweir } 8328*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_PROTECT ) 8329*cdf0e10cSrcweir { 8330*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8331*cdf0e10cSrcweir { 8332*cdf0e10cSrcweir String aName; 8333*cdf0e10cSrcweir String aComment; 8334*cdf0e10cSrcweir Color aColor; 8335*cdf0e10cSrcweir sal_uInt16 nFlags; 8336*cdf0e10cSrcweir pDoc->GetName( nTab, aName ); 8337*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8338*cdf0e10cSrcweir sal_Bool bModify(sal_False); 8339*cdf0e10cSrcweir 8340*cdf0e10cSrcweir if (ScUnoHelpFunctions::GetBoolFromAny( aValue )) 8341*cdf0e10cSrcweir { 8342*cdf0e10cSrcweir if (!(nFlags & SC_SCENARIO_PROTECT)) 8343*cdf0e10cSrcweir { 8344*cdf0e10cSrcweir nFlags |= SC_SCENARIO_PROTECT; 8345*cdf0e10cSrcweir bModify = sal_True; 8346*cdf0e10cSrcweir } 8347*cdf0e10cSrcweir } 8348*cdf0e10cSrcweir else 8349*cdf0e10cSrcweir { 8350*cdf0e10cSrcweir if (nFlags & SC_SCENARIO_PROTECT) 8351*cdf0e10cSrcweir { 8352*cdf0e10cSrcweir nFlags -= SC_SCENARIO_PROTECT; 8353*cdf0e10cSrcweir bModify = sal_True; 8354*cdf0e10cSrcweir } 8355*cdf0e10cSrcweir } 8356*cdf0e10cSrcweir 8357*cdf0e10cSrcweir if (bModify) 8358*cdf0e10cSrcweir pDocSh->ModifyScenario( nTab, aName, aComment, aColor, nFlags ); 8359*cdf0e10cSrcweir } 8360*cdf0e10cSrcweir } 8361*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_SHOWBORD ) 8362*cdf0e10cSrcweir { 8363*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8364*cdf0e10cSrcweir { 8365*cdf0e10cSrcweir String aName; 8366*cdf0e10cSrcweir String aComment; 8367*cdf0e10cSrcweir Color aColor; 8368*cdf0e10cSrcweir sal_uInt16 nFlags; 8369*cdf0e10cSrcweir pDoc->GetName( nTab, aName ); 8370*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8371*cdf0e10cSrcweir sal_Bool bModify(sal_False); 8372*cdf0e10cSrcweir 8373*cdf0e10cSrcweir if (ScUnoHelpFunctions::GetBoolFromAny( aValue )) 8374*cdf0e10cSrcweir { 8375*cdf0e10cSrcweir if (!(nFlags & SC_SCENARIO_SHOWFRAME)) 8376*cdf0e10cSrcweir { 8377*cdf0e10cSrcweir nFlags |= SC_SCENARIO_SHOWFRAME; 8378*cdf0e10cSrcweir bModify = sal_True; 8379*cdf0e10cSrcweir } 8380*cdf0e10cSrcweir } 8381*cdf0e10cSrcweir else 8382*cdf0e10cSrcweir { 8383*cdf0e10cSrcweir if (nFlags & SC_SCENARIO_SHOWFRAME) 8384*cdf0e10cSrcweir { 8385*cdf0e10cSrcweir nFlags -= SC_SCENARIO_SHOWFRAME; 8386*cdf0e10cSrcweir bModify = sal_True; 8387*cdf0e10cSrcweir } 8388*cdf0e10cSrcweir } 8389*cdf0e10cSrcweir 8390*cdf0e10cSrcweir if (bModify) 8391*cdf0e10cSrcweir pDocSh->ModifyScenario( nTab, aName, aComment, aColor, nFlags ); 8392*cdf0e10cSrcweir } 8393*cdf0e10cSrcweir } 8394*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_PRINTBORD ) 8395*cdf0e10cSrcweir { 8396*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8397*cdf0e10cSrcweir { 8398*cdf0e10cSrcweir String aName; 8399*cdf0e10cSrcweir String aComment; 8400*cdf0e10cSrcweir Color aColor; 8401*cdf0e10cSrcweir sal_uInt16 nFlags; 8402*cdf0e10cSrcweir pDoc->GetName( nTab, aName ); 8403*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8404*cdf0e10cSrcweir sal_Bool bModify(sal_False); 8405*cdf0e10cSrcweir 8406*cdf0e10cSrcweir if (ScUnoHelpFunctions::GetBoolFromAny( aValue )) 8407*cdf0e10cSrcweir { 8408*cdf0e10cSrcweir if (!(nFlags & SC_SCENARIO_PRINTFRAME)) 8409*cdf0e10cSrcweir { 8410*cdf0e10cSrcweir nFlags |= SC_SCENARIO_PRINTFRAME; 8411*cdf0e10cSrcweir bModify = sal_True; 8412*cdf0e10cSrcweir } 8413*cdf0e10cSrcweir } 8414*cdf0e10cSrcweir else 8415*cdf0e10cSrcweir { 8416*cdf0e10cSrcweir if (nFlags & SC_SCENARIO_PRINTFRAME) 8417*cdf0e10cSrcweir { 8418*cdf0e10cSrcweir nFlags -= SC_SCENARIO_PRINTFRAME; 8419*cdf0e10cSrcweir bModify = sal_True; 8420*cdf0e10cSrcweir } 8421*cdf0e10cSrcweir } 8422*cdf0e10cSrcweir 8423*cdf0e10cSrcweir if (bModify) 8424*cdf0e10cSrcweir pDocSh->ModifyScenario( nTab, aName, aComment, aColor, nFlags ); 8425*cdf0e10cSrcweir } 8426*cdf0e10cSrcweir } 8427*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_COPYBACK ) 8428*cdf0e10cSrcweir { 8429*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8430*cdf0e10cSrcweir { 8431*cdf0e10cSrcweir String aName; 8432*cdf0e10cSrcweir String aComment; 8433*cdf0e10cSrcweir Color aColor; 8434*cdf0e10cSrcweir sal_uInt16 nFlags; 8435*cdf0e10cSrcweir pDoc->GetName( nTab, aName ); 8436*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8437*cdf0e10cSrcweir sal_Bool bModify(sal_False); 8438*cdf0e10cSrcweir 8439*cdf0e10cSrcweir if (ScUnoHelpFunctions::GetBoolFromAny( aValue )) 8440*cdf0e10cSrcweir { 8441*cdf0e10cSrcweir if (!(nFlags & SC_SCENARIO_TWOWAY)) 8442*cdf0e10cSrcweir { 8443*cdf0e10cSrcweir nFlags |= SC_SCENARIO_TWOWAY; 8444*cdf0e10cSrcweir bModify = sal_True; 8445*cdf0e10cSrcweir } 8446*cdf0e10cSrcweir } 8447*cdf0e10cSrcweir else 8448*cdf0e10cSrcweir { 8449*cdf0e10cSrcweir if (nFlags & SC_SCENARIO_TWOWAY) 8450*cdf0e10cSrcweir { 8451*cdf0e10cSrcweir nFlags -= SC_SCENARIO_TWOWAY; 8452*cdf0e10cSrcweir bModify = sal_True; 8453*cdf0e10cSrcweir } 8454*cdf0e10cSrcweir } 8455*cdf0e10cSrcweir 8456*cdf0e10cSrcweir if (bModify) 8457*cdf0e10cSrcweir pDocSh->ModifyScenario( nTab, aName, aComment, aColor, nFlags ); 8458*cdf0e10cSrcweir } 8459*cdf0e10cSrcweir } 8460*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_COPYSTYL ) 8461*cdf0e10cSrcweir { 8462*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8463*cdf0e10cSrcweir { 8464*cdf0e10cSrcweir String aName; 8465*cdf0e10cSrcweir String aComment; 8466*cdf0e10cSrcweir Color aColor; 8467*cdf0e10cSrcweir sal_uInt16 nFlags; 8468*cdf0e10cSrcweir pDoc->GetName( nTab, aName ); 8469*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8470*cdf0e10cSrcweir sal_Bool bModify(sal_False); 8471*cdf0e10cSrcweir 8472*cdf0e10cSrcweir if (ScUnoHelpFunctions::GetBoolFromAny( aValue )) 8473*cdf0e10cSrcweir { 8474*cdf0e10cSrcweir if (!(nFlags & SC_SCENARIO_ATTRIB)) 8475*cdf0e10cSrcweir { 8476*cdf0e10cSrcweir nFlags |= SC_SCENARIO_ATTRIB; 8477*cdf0e10cSrcweir bModify = sal_True; 8478*cdf0e10cSrcweir } 8479*cdf0e10cSrcweir } 8480*cdf0e10cSrcweir else 8481*cdf0e10cSrcweir { 8482*cdf0e10cSrcweir if (nFlags & SC_SCENARIO_ATTRIB) 8483*cdf0e10cSrcweir { 8484*cdf0e10cSrcweir nFlags -= SC_SCENARIO_ATTRIB; 8485*cdf0e10cSrcweir bModify = sal_True; 8486*cdf0e10cSrcweir } 8487*cdf0e10cSrcweir } 8488*cdf0e10cSrcweir 8489*cdf0e10cSrcweir if (bModify) 8490*cdf0e10cSrcweir pDocSh->ModifyScenario( nTab, aName, aComment, aColor, nFlags ); 8491*cdf0e10cSrcweir } 8492*cdf0e10cSrcweir } 8493*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_COPYFORM ) 8494*cdf0e10cSrcweir { 8495*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8496*cdf0e10cSrcweir { 8497*cdf0e10cSrcweir String aName; 8498*cdf0e10cSrcweir String aComment; 8499*cdf0e10cSrcweir Color aColor; 8500*cdf0e10cSrcweir sal_uInt16 nFlags; 8501*cdf0e10cSrcweir pDoc->GetName( nTab, aName ); 8502*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8503*cdf0e10cSrcweir sal_Bool bModify(sal_False); 8504*cdf0e10cSrcweir 8505*cdf0e10cSrcweir if (ScUnoHelpFunctions::GetBoolFromAny( aValue )) 8506*cdf0e10cSrcweir { 8507*cdf0e10cSrcweir if (nFlags & SC_SCENARIO_VALUE) 8508*cdf0e10cSrcweir { 8509*cdf0e10cSrcweir nFlags -= SC_SCENARIO_VALUE; 8510*cdf0e10cSrcweir bModify = sal_True; 8511*cdf0e10cSrcweir } 8512*cdf0e10cSrcweir } 8513*cdf0e10cSrcweir else 8514*cdf0e10cSrcweir { 8515*cdf0e10cSrcweir if (!(nFlags & SC_SCENARIO_VALUE)) 8516*cdf0e10cSrcweir { 8517*cdf0e10cSrcweir nFlags |= SC_SCENARIO_VALUE; 8518*cdf0e10cSrcweir bModify = sal_True; 8519*cdf0e10cSrcweir } 8520*cdf0e10cSrcweir } 8521*cdf0e10cSrcweir 8522*cdf0e10cSrcweir if (bModify) 8523*cdf0e10cSrcweir pDocSh->ModifyScenario( nTab, aName, aComment, aColor, nFlags ); 8524*cdf0e10cSrcweir } 8525*cdf0e10cSrcweir } 8526*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_TABLAYOUT ) 8527*cdf0e10cSrcweir { 8528*cdf0e10cSrcweir sal_Int16 nValue = 0; 8529*cdf0e10cSrcweir if (aValue >>= nValue) 8530*cdf0e10cSrcweir { 8531*cdf0e10cSrcweir if (nValue == com::sun::star::text::WritingMode2::RL_TB) 8532*cdf0e10cSrcweir aFunc.SetLayoutRTL(nTab, sal_True, sal_True); 8533*cdf0e10cSrcweir else 8534*cdf0e10cSrcweir aFunc.SetLayoutRTL(nTab, sal_False, sal_True); 8535*cdf0e10cSrcweir } 8536*cdf0e10cSrcweir } 8537*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_AUTOPRINT ) 8538*cdf0e10cSrcweir { 8539*cdf0e10cSrcweir sal_Bool bAutoPrint = ScUnoHelpFunctions::GetBoolFromAny( aValue ); 8540*cdf0e10cSrcweir if (bAutoPrint) 8541*cdf0e10cSrcweir pDoc->SetPrintEntireSheet( nTab ); // clears all print ranges 8542*cdf0e10cSrcweir else 8543*cdf0e10cSrcweir { 8544*cdf0e10cSrcweir if (pDoc->IsPrintEntireSheet( nTab )) 8545*cdf0e10cSrcweir pDoc->ClearPrintRanges( nTab ); // if this flag is true, there are no PrintRanges, so Clear clears only the flag. 8546*cdf0e10cSrcweir } 8547*cdf0e10cSrcweir } 8548*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_TABCOLOR ) 8549*cdf0e10cSrcweir { 8550*cdf0e10cSrcweir sal_Int32 nColor = COL_AUTO; 8551*cdf0e10cSrcweir if (aValue >>= nColor) 8552*cdf0e10cSrcweir { 8553*cdf0e10cSrcweir if (static_cast<ColorData>(nColor) != COL_AUTO) 8554*cdf0e10cSrcweir pDoc->SetTabBgColor(nTab, Color(static_cast<ColorData>(nColor))); 8555*cdf0e10cSrcweir } 8556*cdf0e10cSrcweir } 8557*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CODENAME ) 8558*cdf0e10cSrcweir { 8559*cdf0e10cSrcweir rtl::OUString aCodeName; 8560*cdf0e10cSrcweir if ( pDocSh && ( aValue >>= aCodeName ) ) 8561*cdf0e10cSrcweir { 8562*cdf0e10cSrcweir pDocSh->GetDocument()->SetCodeName( GetTab_Impl(), aCodeName ); 8563*cdf0e10cSrcweir } 8564*cdf0e10cSrcweir } 8565*cdf0e10cSrcweir else 8566*cdf0e10cSrcweir ScCellRangeObj::SetOnePropertyValue(pEntry, aValue); // base class, no Item WID 8567*cdf0e10cSrcweir } 8568*cdf0e10cSrcweir } 8569*cdf0e10cSrcweir 8570*cdf0e10cSrcweir void ScTableSheetObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, 8571*cdf0e10cSrcweir uno::Any& rAny ) 8572*cdf0e10cSrcweir throw(uno::RuntimeException) 8573*cdf0e10cSrcweir { 8574*cdf0e10cSrcweir if ( pEntry ) 8575*cdf0e10cSrcweir { 8576*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8577*cdf0e10cSrcweir if (!pDocSh) 8578*cdf0e10cSrcweir throw uno::RuntimeException(); 8579*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 8580*cdf0e10cSrcweir SCTAB nTab = GetTab_Impl(); 8581*cdf0e10cSrcweir 8582*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_PAGESTL ) 8583*cdf0e10cSrcweir { 8584*cdf0e10cSrcweir rAny <<= rtl::OUString( ScStyleNameConversion::DisplayToProgrammaticName( 8585*cdf0e10cSrcweir pDoc->GetPageStyle( nTab ), SFX_STYLE_FAMILY_PAGE ) ); 8586*cdf0e10cSrcweir } 8587*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CELLVIS ) 8588*cdf0e10cSrcweir { 8589*cdf0e10cSrcweir sal_Bool bVis = pDoc->IsVisible( nTab ); 8590*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, bVis ); 8591*cdf0e10cSrcweir } 8592*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_LINKDISPBIT ) 8593*cdf0e10cSrcweir { 8594*cdf0e10cSrcweir // no target bitmaps for individual entries (would be all equal) 8595*cdf0e10cSrcweir // ScLinkTargetTypeObj::SetLinkTargetBitmap( aAny, SC_LINKTARGETTYPE_SHEET ); 8596*cdf0e10cSrcweir } 8597*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_LINKDISPNAME ) 8598*cdf0e10cSrcweir { 8599*cdf0e10cSrcweir // LinkDisplayName for hyperlink dialog 8600*cdf0e10cSrcweir rAny <<= getName(); // sheet name 8601*cdf0e10cSrcweir } 8602*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_ISACTIVE ) 8603*cdf0e10cSrcweir { 8604*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8605*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, pDoc->IsActiveScenario( nTab )); 8606*cdf0e10cSrcweir } 8607*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_BORDCOL ) 8608*cdf0e10cSrcweir { 8609*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8610*cdf0e10cSrcweir { 8611*cdf0e10cSrcweir String aComment; 8612*cdf0e10cSrcweir Color aColor; 8613*cdf0e10cSrcweir sal_uInt16 nFlags; 8614*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8615*cdf0e10cSrcweir 8616*cdf0e10cSrcweir rAny <<= static_cast<sal_Int32>(aColor.GetColor()); 8617*cdf0e10cSrcweir } 8618*cdf0e10cSrcweir } 8619*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_PROTECT ) 8620*cdf0e10cSrcweir { 8621*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8622*cdf0e10cSrcweir { 8623*cdf0e10cSrcweir String aComment; 8624*cdf0e10cSrcweir Color aColor; 8625*cdf0e10cSrcweir sal_uInt16 nFlags; 8626*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8627*cdf0e10cSrcweir 8628*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, (nFlags & SC_SCENARIO_PROTECT) != 0 ); 8629*cdf0e10cSrcweir } 8630*cdf0e10cSrcweir } 8631*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_SHOWBORD ) 8632*cdf0e10cSrcweir { 8633*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8634*cdf0e10cSrcweir { 8635*cdf0e10cSrcweir String aComment; 8636*cdf0e10cSrcweir Color aColor; 8637*cdf0e10cSrcweir sal_uInt16 nFlags; 8638*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8639*cdf0e10cSrcweir 8640*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, (nFlags & SC_SCENARIO_SHOWFRAME) != 0 ); 8641*cdf0e10cSrcweir } 8642*cdf0e10cSrcweir } 8643*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_PRINTBORD ) 8644*cdf0e10cSrcweir { 8645*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8646*cdf0e10cSrcweir { 8647*cdf0e10cSrcweir String aComment; 8648*cdf0e10cSrcweir Color aColor; 8649*cdf0e10cSrcweir sal_uInt16 nFlags; 8650*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8651*cdf0e10cSrcweir 8652*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, (nFlags & SC_SCENARIO_PRINTFRAME) != 0 ); 8653*cdf0e10cSrcweir } 8654*cdf0e10cSrcweir } 8655*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_COPYBACK ) 8656*cdf0e10cSrcweir { 8657*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8658*cdf0e10cSrcweir { 8659*cdf0e10cSrcweir String aComment; 8660*cdf0e10cSrcweir Color aColor; 8661*cdf0e10cSrcweir sal_uInt16 nFlags; 8662*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8663*cdf0e10cSrcweir 8664*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, (nFlags & SC_SCENARIO_TWOWAY) != 0 ); 8665*cdf0e10cSrcweir } 8666*cdf0e10cSrcweir } 8667*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_COPYSTYL ) 8668*cdf0e10cSrcweir { 8669*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8670*cdf0e10cSrcweir { 8671*cdf0e10cSrcweir String aComment; 8672*cdf0e10cSrcweir Color aColor; 8673*cdf0e10cSrcweir sal_uInt16 nFlags; 8674*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8675*cdf0e10cSrcweir 8676*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, (nFlags & SC_SCENARIO_ATTRIB) != 0 ); 8677*cdf0e10cSrcweir } 8678*cdf0e10cSrcweir } 8679*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_COPYFORM ) 8680*cdf0e10cSrcweir { 8681*cdf0e10cSrcweir if (pDoc->IsScenario(nTab)) 8682*cdf0e10cSrcweir { 8683*cdf0e10cSrcweir String aComment; 8684*cdf0e10cSrcweir Color aColor; 8685*cdf0e10cSrcweir sal_uInt16 nFlags; 8686*cdf0e10cSrcweir pDoc->GetScenarioData( nTab, aComment, aColor, nFlags ); 8687*cdf0e10cSrcweir 8688*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, !(nFlags & SC_SCENARIO_VALUE)); 8689*cdf0e10cSrcweir } 8690*cdf0e10cSrcweir } 8691*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_TABLAYOUT ) 8692*cdf0e10cSrcweir { 8693*cdf0e10cSrcweir if (pDoc->IsLayoutRTL(nTab)) 8694*cdf0e10cSrcweir rAny <<= sal_Int16(com::sun::star::text::WritingMode2::RL_TB); 8695*cdf0e10cSrcweir else 8696*cdf0e10cSrcweir rAny <<= sal_Int16(com::sun::star::text::WritingMode2::LR_TB); 8697*cdf0e10cSrcweir } 8698*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_AUTOPRINT ) 8699*cdf0e10cSrcweir { 8700*cdf0e10cSrcweir sal_Bool bAutoPrint = pDoc->IsPrintEntireSheet( nTab ); 8701*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, bAutoPrint ); 8702*cdf0e10cSrcweir } 8703*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_TABCOLOR ) 8704*cdf0e10cSrcweir { 8705*cdf0e10cSrcweir rAny <<= sal_Int32(pDoc->GetTabBgColor(nTab).GetColor()); 8706*cdf0e10cSrcweir } 8707*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CODENAME ) 8708*cdf0e10cSrcweir { 8709*cdf0e10cSrcweir String aCodeName; 8710*cdf0e10cSrcweir if ( pDocSh ) 8711*cdf0e10cSrcweir pDocSh->GetDocument()->GetCodeName( GetTab_Impl(), aCodeName ); 8712*cdf0e10cSrcweir rAny <<= rtl::OUString( aCodeName ); 8713*cdf0e10cSrcweir } 8714*cdf0e10cSrcweir else 8715*cdf0e10cSrcweir ScCellRangeObj::GetOnePropertyValue(pEntry, rAny); 8716*cdf0e10cSrcweir } 8717*cdf0e10cSrcweir } 8718*cdf0e10cSrcweir 8719*cdf0e10cSrcweir const SfxItemPropertyMap* ScTableSheetObj::GetItemPropertyMap() 8720*cdf0e10cSrcweir { 8721*cdf0e10cSrcweir return pSheetPropSet->getPropertyMap(); 8722*cdf0e10cSrcweir } 8723*cdf0e10cSrcweir 8724*cdf0e10cSrcweir // XServiceInfo 8725*cdf0e10cSrcweir 8726*cdf0e10cSrcweir rtl::OUString SAL_CALL ScTableSheetObj::getImplementationName() throw(uno::RuntimeException) 8727*cdf0e10cSrcweir { 8728*cdf0e10cSrcweir return rtl::OUString::createFromAscii( "ScTableSheetObj" ); 8729*cdf0e10cSrcweir } 8730*cdf0e10cSrcweir 8731*cdf0e10cSrcweir sal_Bool SAL_CALL ScTableSheetObj::supportsService( const rtl::OUString& rServiceName ) 8732*cdf0e10cSrcweir throw(uno::RuntimeException) 8733*cdf0e10cSrcweir { 8734*cdf0e10cSrcweir String aServiceStr( rServiceName ); 8735*cdf0e10cSrcweir return aServiceStr.EqualsAscii( SCSPREADSHEET_SERVICE ) || 8736*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCSHEETCELLRANGE_SERVICE ) || 8737*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCELLRANGE_SERVICE ) || 8738*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCELLPROPERTIES_SERVICE ) || 8739*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCCHARPROPERTIES_SERVICE ) || 8740*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCPARAPROPERTIES_SERVICE ) || 8741*cdf0e10cSrcweir aServiceStr.EqualsAscii( SCLINKTARGET_SERVICE ); 8742*cdf0e10cSrcweir } 8743*cdf0e10cSrcweir 8744*cdf0e10cSrcweir uno::Sequence<rtl::OUString> SAL_CALL ScTableSheetObj::getSupportedServiceNames() 8745*cdf0e10cSrcweir throw(uno::RuntimeException) 8746*cdf0e10cSrcweir { 8747*cdf0e10cSrcweir uno::Sequence<rtl::OUString> aRet(7); 8748*cdf0e10cSrcweir rtl::OUString* pArray = aRet.getArray(); 8749*cdf0e10cSrcweir pArray[0] = rtl::OUString::createFromAscii( SCSPREADSHEET_SERVICE ); 8750*cdf0e10cSrcweir pArray[1] = rtl::OUString::createFromAscii( SCSHEETCELLRANGE_SERVICE ); 8751*cdf0e10cSrcweir pArray[2] = rtl::OUString::createFromAscii( SCCELLRANGE_SERVICE ); 8752*cdf0e10cSrcweir pArray[3] = rtl::OUString::createFromAscii( SCCELLPROPERTIES_SERVICE ); 8753*cdf0e10cSrcweir pArray[4] = rtl::OUString::createFromAscii( SCCHARPROPERTIES_SERVICE ); 8754*cdf0e10cSrcweir pArray[5] = rtl::OUString::createFromAscii( SCPARAPROPERTIES_SERVICE ); 8755*cdf0e10cSrcweir pArray[6] = rtl::OUString::createFromAscii( SCLINKTARGET_SERVICE ); 8756*cdf0e10cSrcweir return aRet; 8757*cdf0e10cSrcweir } 8758*cdf0e10cSrcweir 8759*cdf0e10cSrcweir // XUnoTunnel 8760*cdf0e10cSrcweir 8761*cdf0e10cSrcweir sal_Int64 SAL_CALL ScTableSheetObj::getSomething( 8762*cdf0e10cSrcweir const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException) 8763*cdf0e10cSrcweir { 8764*cdf0e10cSrcweir if ( rId.getLength() == 16 && 8765*cdf0e10cSrcweir 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), 8766*cdf0e10cSrcweir rId.getConstArray(), 16 ) ) 8767*cdf0e10cSrcweir { 8768*cdf0e10cSrcweir return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this)); 8769*cdf0e10cSrcweir } 8770*cdf0e10cSrcweir 8771*cdf0e10cSrcweir return ScCellRangeObj::getSomething( rId ); 8772*cdf0e10cSrcweir } 8773*cdf0e10cSrcweir 8774*cdf0e10cSrcweir // static 8775*cdf0e10cSrcweir const uno::Sequence<sal_Int8>& ScTableSheetObj::getUnoTunnelId() 8776*cdf0e10cSrcweir { 8777*cdf0e10cSrcweir static uno::Sequence<sal_Int8> * pSeq = 0; 8778*cdf0e10cSrcweir if( !pSeq ) 8779*cdf0e10cSrcweir { 8780*cdf0e10cSrcweir osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() ); 8781*cdf0e10cSrcweir if( !pSeq ) 8782*cdf0e10cSrcweir { 8783*cdf0e10cSrcweir static uno::Sequence< sal_Int8 > aSeq( 16 ); 8784*cdf0e10cSrcweir rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); 8785*cdf0e10cSrcweir pSeq = &aSeq; 8786*cdf0e10cSrcweir } 8787*cdf0e10cSrcweir } 8788*cdf0e10cSrcweir return *pSeq; 8789*cdf0e10cSrcweir } 8790*cdf0e10cSrcweir 8791*cdf0e10cSrcweir // static 8792*cdf0e10cSrcweir ScTableSheetObj* ScTableSheetObj::getImplementation( const uno::Reference<uno::XInterface> xObj ) 8793*cdf0e10cSrcweir { 8794*cdf0e10cSrcweir ScTableSheetObj* pRet = NULL; 8795*cdf0e10cSrcweir uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY ); 8796*cdf0e10cSrcweir if (xUT.is()) 8797*cdf0e10cSrcweir pRet = reinterpret_cast<ScTableSheetObj*>(sal::static_int_cast<sal_IntPtr>(xUT->getSomething(getUnoTunnelId()))); 8798*cdf0e10cSrcweir return pRet; 8799*cdf0e10cSrcweir } 8800*cdf0e10cSrcweir 8801*cdf0e10cSrcweir //------------------------------------------------------------------------ 8802*cdf0e10cSrcweir 8803*cdf0e10cSrcweir ScTableColumnObj::ScTableColumnObj( ScDocShell* pDocSh, SCCOL nCol, SCTAB nTab ) : 8804*cdf0e10cSrcweir ScCellRangeObj( pDocSh, ScRange(nCol,0,nTab, nCol,MAXROW,nTab) ), 8805*cdf0e10cSrcweir pColPropSet(lcl_GetColumnPropertySet()) 8806*cdf0e10cSrcweir { 8807*cdf0e10cSrcweir } 8808*cdf0e10cSrcweir 8809*cdf0e10cSrcweir ScTableColumnObj::~ScTableColumnObj() 8810*cdf0e10cSrcweir { 8811*cdf0e10cSrcweir } 8812*cdf0e10cSrcweir 8813*cdf0e10cSrcweir uno::Any SAL_CALL ScTableColumnObj::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException) 8814*cdf0e10cSrcweir { 8815*cdf0e10cSrcweir SC_QUERYINTERFACE( container::XNamed ) 8816*cdf0e10cSrcweir 8817*cdf0e10cSrcweir return ScCellRangeObj::queryInterface( rType ); 8818*cdf0e10cSrcweir } 8819*cdf0e10cSrcweir 8820*cdf0e10cSrcweir void SAL_CALL ScTableColumnObj::acquire() throw() 8821*cdf0e10cSrcweir { 8822*cdf0e10cSrcweir ScCellRangeObj::acquire(); 8823*cdf0e10cSrcweir } 8824*cdf0e10cSrcweir 8825*cdf0e10cSrcweir void SAL_CALL ScTableColumnObj::release() throw() 8826*cdf0e10cSrcweir { 8827*cdf0e10cSrcweir ScCellRangeObj::release(); 8828*cdf0e10cSrcweir } 8829*cdf0e10cSrcweir 8830*cdf0e10cSrcweir uno::Sequence<uno::Type> SAL_CALL ScTableColumnObj::getTypes() throw(uno::RuntimeException) 8831*cdf0e10cSrcweir { 8832*cdf0e10cSrcweir static uno::Sequence<uno::Type> aTypes; 8833*cdf0e10cSrcweir if ( aTypes.getLength() == 0 ) 8834*cdf0e10cSrcweir { 8835*cdf0e10cSrcweir uno::Sequence<uno::Type> aParentTypes(ScCellRangeObj::getTypes()); 8836*cdf0e10cSrcweir long nParentLen = aParentTypes.getLength(); 8837*cdf0e10cSrcweir const uno::Type* pParentPtr = aParentTypes.getConstArray(); 8838*cdf0e10cSrcweir 8839*cdf0e10cSrcweir aTypes.realloc( nParentLen + 1 ); 8840*cdf0e10cSrcweir uno::Type* pPtr = aTypes.getArray(); 8841*cdf0e10cSrcweir pPtr[nParentLen + 0] = getCppuType((const uno::Reference<container::XNamed>*)0); 8842*cdf0e10cSrcweir 8843*cdf0e10cSrcweir for (long i=0; i<nParentLen; i++) 8844*cdf0e10cSrcweir pPtr[i] = pParentPtr[i]; // parent types first 8845*cdf0e10cSrcweir } 8846*cdf0e10cSrcweir return aTypes; 8847*cdf0e10cSrcweir } 8848*cdf0e10cSrcweir 8849*cdf0e10cSrcweir uno::Sequence<sal_Int8> SAL_CALL ScTableColumnObj::getImplementationId() throw(uno::RuntimeException) 8850*cdf0e10cSrcweir { 8851*cdf0e10cSrcweir static uno::Sequence< sal_Int8 > aId; 8852*cdf0e10cSrcweir if( aId.getLength() == 0 ) 8853*cdf0e10cSrcweir { 8854*cdf0e10cSrcweir aId.realloc( 16 ); 8855*cdf0e10cSrcweir rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True ); 8856*cdf0e10cSrcweir } 8857*cdf0e10cSrcweir return aId; 8858*cdf0e10cSrcweir } 8859*cdf0e10cSrcweir 8860*cdf0e10cSrcweir // XNamed 8861*cdf0e10cSrcweir 8862*cdf0e10cSrcweir rtl::OUString SAL_CALL ScTableColumnObj::getName() throw(uno::RuntimeException) 8863*cdf0e10cSrcweir { 8864*cdf0e10cSrcweir ScUnoGuard aGuard; 8865*cdf0e10cSrcweir 8866*cdf0e10cSrcweir const ScRange& rRange = GetRange(); 8867*cdf0e10cSrcweir DBG_ASSERT(rRange.aStart.Col() == rRange.aEnd.Col(), "too many columns"); 8868*cdf0e10cSrcweir SCCOL nCol = rRange.aStart.Col(); 8869*cdf0e10cSrcweir 8870*cdf0e10cSrcweir return ScColToAlpha( nCol ); // from global.hxx 8871*cdf0e10cSrcweir } 8872*cdf0e10cSrcweir 8873*cdf0e10cSrcweir void SAL_CALL ScTableColumnObj::setName( const rtl::OUString& /* aNewName */ ) 8874*cdf0e10cSrcweir throw(uno::RuntimeException) 8875*cdf0e10cSrcweir { 8876*cdf0e10cSrcweir ScUnoGuard aGuard; 8877*cdf0e10cSrcweir throw uno::RuntimeException(); // read-only 8878*cdf0e10cSrcweir } 8879*cdf0e10cSrcweir 8880*cdf0e10cSrcweir // XPropertySet erweitert fuer Spalten-Properties 8881*cdf0e10cSrcweir 8882*cdf0e10cSrcweir uno::Reference<beans::XPropertySetInfo> SAL_CALL ScTableColumnObj::getPropertySetInfo() 8883*cdf0e10cSrcweir throw(uno::RuntimeException) 8884*cdf0e10cSrcweir { 8885*cdf0e10cSrcweir ScUnoGuard aGuard; 8886*cdf0e10cSrcweir static uno::Reference<beans::XPropertySetInfo> aRef( 8887*cdf0e10cSrcweir new SfxItemPropertySetInfo( pColPropSet->getPropertyMap() )); 8888*cdf0e10cSrcweir return aRef; 8889*cdf0e10cSrcweir } 8890*cdf0e10cSrcweir 8891*cdf0e10cSrcweir void ScTableColumnObj::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, const uno::Any& aValue ) 8892*cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException) 8893*cdf0e10cSrcweir { 8894*cdf0e10cSrcweir if ( pEntry ) 8895*cdf0e10cSrcweir { 8896*cdf0e10cSrcweir if ( IsScItemWid( pEntry->nWID ) ) 8897*cdf0e10cSrcweir { 8898*cdf0e10cSrcweir // for Item WIDs, call ScCellRangesBase directly 8899*cdf0e10cSrcweir ScCellRangesBase::SetOnePropertyValue(pEntry, aValue); 8900*cdf0e10cSrcweir return; 8901*cdf0e10cSrcweir } 8902*cdf0e10cSrcweir 8903*cdf0e10cSrcweir // own properties 8904*cdf0e10cSrcweir 8905*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8906*cdf0e10cSrcweir if (!pDocSh) 8907*cdf0e10cSrcweir return; //! Exception oder so? 8908*cdf0e10cSrcweir const ScRange& rRange = GetRange(); 8909*cdf0e10cSrcweir DBG_ASSERT(rRange.aStart.Col() == rRange.aEnd.Col(), "zuviele Spalten"); 8910*cdf0e10cSrcweir SCCOL nCol = rRange.aStart.Col(); 8911*cdf0e10cSrcweir SCTAB nTab = rRange.aStart.Tab(); 8912*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 8913*cdf0e10cSrcweir 8914*cdf0e10cSrcweir SCCOLROW nColArr[2]; 8915*cdf0e10cSrcweir nColArr[0] = nColArr[1] = nCol; 8916*cdf0e10cSrcweir 8917*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_CELLWID ) 8918*cdf0e10cSrcweir { 8919*cdf0e10cSrcweir sal_Int32 nNewWidth = 0; 8920*cdf0e10cSrcweir if ( aValue >>= nNewWidth ) 8921*cdf0e10cSrcweir { 8922*cdf0e10cSrcweir // property is 1/100mm, column width is twips 8923*cdf0e10cSrcweir nNewWidth = HMMToTwips(nNewWidth); 8924*cdf0e10cSrcweir aFunc.SetWidthOrHeight( sal_True, 1, nColArr, nTab, SC_SIZE_ORIGINAL, 8925*cdf0e10cSrcweir (sal_uInt16)nNewWidth, sal_True, sal_True ); 8926*cdf0e10cSrcweir } 8927*cdf0e10cSrcweir } 8928*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CELLVIS ) 8929*cdf0e10cSrcweir { 8930*cdf0e10cSrcweir sal_Bool bVis = ScUnoHelpFunctions::GetBoolFromAny( aValue ); 8931*cdf0e10cSrcweir ScSizeMode eMode = bVis ? SC_SIZE_SHOW : SC_SIZE_DIRECT; 8932*cdf0e10cSrcweir aFunc.SetWidthOrHeight( sal_True, 1, nColArr, nTab, eMode, 0, sal_True, sal_True ); 8933*cdf0e10cSrcweir // SC_SIZE_DIRECT mit Groesse 0 blendet aus 8934*cdf0e10cSrcweir } 8935*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_OWIDTH ) 8936*cdf0e10cSrcweir { 8937*cdf0e10cSrcweir sal_Bool bOpt = ScUnoHelpFunctions::GetBoolFromAny( aValue ); 8938*cdf0e10cSrcweir if (bOpt) 8939*cdf0e10cSrcweir aFunc.SetWidthOrHeight( sal_True, 1, nColArr, nTab, 8940*cdf0e10cSrcweir SC_SIZE_OPTIMAL, STD_EXTRA_WIDTH, sal_True, sal_True ); 8941*cdf0e10cSrcweir // sal_False bei Spalten momentan ohne Auswirkung 8942*cdf0e10cSrcweir } 8943*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_NEWPAGE || pEntry->nWID == SC_WID_UNO_MANPAGE ) 8944*cdf0e10cSrcweir { 8945*cdf0e10cSrcweir sal_Bool bSet = ScUnoHelpFunctions::GetBoolFromAny( aValue ); 8946*cdf0e10cSrcweir if (bSet) 8947*cdf0e10cSrcweir aFunc.InsertPageBreak( sal_True, rRange.aStart, sal_True, sal_True, sal_True ); 8948*cdf0e10cSrcweir else 8949*cdf0e10cSrcweir aFunc.RemovePageBreak( sal_True, rRange.aStart, sal_True, sal_True, sal_True ); 8950*cdf0e10cSrcweir } 8951*cdf0e10cSrcweir else 8952*cdf0e10cSrcweir ScCellRangeObj::SetOnePropertyValue(pEntry, aValue); // base class, no Item WID 8953*cdf0e10cSrcweir } 8954*cdf0e10cSrcweir } 8955*cdf0e10cSrcweir 8956*cdf0e10cSrcweir void ScTableColumnObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, 8957*cdf0e10cSrcweir uno::Any& rAny ) 8958*cdf0e10cSrcweir throw(uno::RuntimeException) 8959*cdf0e10cSrcweir { 8960*cdf0e10cSrcweir if ( pEntry ) 8961*cdf0e10cSrcweir { 8962*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 8963*cdf0e10cSrcweir if (!pDocSh) 8964*cdf0e10cSrcweir throw uno::RuntimeException(); 8965*cdf0e10cSrcweir 8966*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 8967*cdf0e10cSrcweir const ScRange& rRange = GetRange(); 8968*cdf0e10cSrcweir DBG_ASSERT(rRange.aStart.Col() == rRange.aEnd.Col(), "zuviele Spalten"); 8969*cdf0e10cSrcweir SCCOL nCol = rRange.aStart.Col(); 8970*cdf0e10cSrcweir SCTAB nTab = rRange.aStart.Tab(); 8971*cdf0e10cSrcweir 8972*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_CELLWID ) 8973*cdf0e10cSrcweir { 8974*cdf0e10cSrcweir // for hidden column, return original height 8975*cdf0e10cSrcweir sal_uInt16 nWidth = pDoc->GetOriginalWidth( nCol, nTab ); 8976*cdf0e10cSrcweir // property is 1/100mm, column width is twips 8977*cdf0e10cSrcweir nWidth = (sal_uInt16) TwipsToHMM(nWidth); 8978*cdf0e10cSrcweir rAny <<= (sal_Int32)( nWidth ); 8979*cdf0e10cSrcweir } 8980*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CELLVIS ) 8981*cdf0e10cSrcweir { 8982*cdf0e10cSrcweir SCCOL nDummy; 8983*cdf0e10cSrcweir bool bHidden = pDoc->ColHidden(nCol, nTab, nDummy); 8984*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, !bHidden ); 8985*cdf0e10cSrcweir } 8986*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_OWIDTH ) 8987*cdf0e10cSrcweir { 8988*cdf0e10cSrcweir //! momentan immer gesetzt ??!?! 8989*cdf0e10cSrcweir sal_Bool bOpt = !(pDoc->GetColFlags( nCol, nTab ) & CR_MANUALSIZE); 8990*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, bOpt ); 8991*cdf0e10cSrcweir } 8992*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_NEWPAGE ) 8993*cdf0e10cSrcweir { 8994*cdf0e10cSrcweir ScBreakType nBreak = pDoc->HasColBreak(nCol, nTab); 8995*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, nBreak ); 8996*cdf0e10cSrcweir } 8997*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_MANPAGE ) 8998*cdf0e10cSrcweir { 8999*cdf0e10cSrcweir ScBreakType nBreak = pDoc->HasColBreak(nCol, nTab); 9000*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny(rAny, (nBreak & BREAK_MANUAL)); 9001*cdf0e10cSrcweir } 9002*cdf0e10cSrcweir else 9003*cdf0e10cSrcweir ScCellRangeObj::GetOnePropertyValue(pEntry, rAny); 9004*cdf0e10cSrcweir } 9005*cdf0e10cSrcweir } 9006*cdf0e10cSrcweir 9007*cdf0e10cSrcweir const SfxItemPropertyMap* ScTableColumnObj::GetItemPropertyMap() 9008*cdf0e10cSrcweir { 9009*cdf0e10cSrcweir return pColPropSet->getPropertyMap(); 9010*cdf0e10cSrcweir } 9011*cdf0e10cSrcweir 9012*cdf0e10cSrcweir //------------------------------------------------------------------------ 9013*cdf0e10cSrcweir 9014*cdf0e10cSrcweir ScTableRowObj::ScTableRowObj(ScDocShell* pDocSh, SCROW nRow, SCTAB nTab) : 9015*cdf0e10cSrcweir ScCellRangeObj( pDocSh, ScRange(0,nRow,nTab, MAXCOL,nRow,nTab) ), 9016*cdf0e10cSrcweir pRowPropSet(lcl_GetRowPropertySet()) 9017*cdf0e10cSrcweir { 9018*cdf0e10cSrcweir } 9019*cdf0e10cSrcweir 9020*cdf0e10cSrcweir ScTableRowObj::~ScTableRowObj() 9021*cdf0e10cSrcweir { 9022*cdf0e10cSrcweir } 9023*cdf0e10cSrcweir 9024*cdf0e10cSrcweir // XPropertySet erweitert fuer Zeilen-Properties 9025*cdf0e10cSrcweir 9026*cdf0e10cSrcweir uno::Reference<beans::XPropertySetInfo> SAL_CALL ScTableRowObj::getPropertySetInfo() 9027*cdf0e10cSrcweir throw(uno::RuntimeException) 9028*cdf0e10cSrcweir { 9029*cdf0e10cSrcweir ScUnoGuard aGuard; 9030*cdf0e10cSrcweir static uno::Reference<beans::XPropertySetInfo> aRef( 9031*cdf0e10cSrcweir new SfxItemPropertySetInfo( pRowPropSet->getPropertyMap() )); 9032*cdf0e10cSrcweir return aRef; 9033*cdf0e10cSrcweir } 9034*cdf0e10cSrcweir 9035*cdf0e10cSrcweir void ScTableRowObj::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, const uno::Any& aValue ) 9036*cdf0e10cSrcweir throw(lang::IllegalArgumentException, uno::RuntimeException) 9037*cdf0e10cSrcweir { 9038*cdf0e10cSrcweir if ( pEntry ) 9039*cdf0e10cSrcweir { 9040*cdf0e10cSrcweir if ( IsScItemWid( pEntry->nWID ) ) 9041*cdf0e10cSrcweir { 9042*cdf0e10cSrcweir // for Item WIDs, call ScCellRangesBase directly 9043*cdf0e10cSrcweir ScCellRangesBase::SetOnePropertyValue(pEntry, aValue); 9044*cdf0e10cSrcweir return; 9045*cdf0e10cSrcweir } 9046*cdf0e10cSrcweir 9047*cdf0e10cSrcweir // own properties 9048*cdf0e10cSrcweir 9049*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 9050*cdf0e10cSrcweir if (!pDocSh) 9051*cdf0e10cSrcweir return; //! Exception oder so? 9052*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 9053*cdf0e10cSrcweir const ScRange& rRange = GetRange(); 9054*cdf0e10cSrcweir DBG_ASSERT(rRange.aStart.Row() == rRange.aEnd.Row(), "zuviele Zeilen"); 9055*cdf0e10cSrcweir SCROW nRow = rRange.aStart.Row(); 9056*cdf0e10cSrcweir SCTAB nTab = rRange.aStart.Tab(); 9057*cdf0e10cSrcweir ScDocFunc aFunc(*pDocSh); 9058*cdf0e10cSrcweir 9059*cdf0e10cSrcweir SCCOLROW nRowArr[2]; 9060*cdf0e10cSrcweir nRowArr[0] = nRowArr[1] = nRow; 9061*cdf0e10cSrcweir 9062*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_CELLHGT ) 9063*cdf0e10cSrcweir { 9064*cdf0e10cSrcweir sal_Int32 nNewHeight = 0; 9065*cdf0e10cSrcweir if ( aValue >>= nNewHeight ) 9066*cdf0e10cSrcweir { 9067*cdf0e10cSrcweir // property is 1/100mm, row height is twips 9068*cdf0e10cSrcweir nNewHeight = HMMToTwips(nNewHeight); 9069*cdf0e10cSrcweir aFunc.SetWidthOrHeight( sal_False, 1, nRowArr, nTab, SC_SIZE_ORIGINAL, 9070*cdf0e10cSrcweir (sal_uInt16)nNewHeight, sal_True, sal_True ); 9071*cdf0e10cSrcweir } 9072*cdf0e10cSrcweir } 9073*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CELLVIS ) 9074*cdf0e10cSrcweir { 9075*cdf0e10cSrcweir sal_Bool bVis = ScUnoHelpFunctions::GetBoolFromAny( aValue ); 9076*cdf0e10cSrcweir ScSizeMode eMode = bVis ? SC_SIZE_SHOW : SC_SIZE_DIRECT; 9077*cdf0e10cSrcweir aFunc.SetWidthOrHeight( sal_False, 1, nRowArr, nTab, eMode, 0, sal_True, sal_True ); 9078*cdf0e10cSrcweir // SC_SIZE_DIRECT mit Groesse 0 blendet aus 9079*cdf0e10cSrcweir } 9080*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CELLFILT ) 9081*cdf0e10cSrcweir { 9082*cdf0e10cSrcweir sal_Bool bFil = ScUnoHelpFunctions::GetBoolFromAny( aValue ); 9083*cdf0e10cSrcweir // ScSizeMode eMode = bVis ? SC_SIZE_SHOW : SC_SIZE_DIRECT; 9084*cdf0e10cSrcweir // aFunc.SetWidthOrHeight( sal_False, 1, nRowArr, nTab, eMode, 0, sal_True, sal_True ); 9085*cdf0e10cSrcweir // SC_SIZE_DIRECT mit Groesse 0 blendet aus 9086*cdf0e10cSrcweir pDoc->SetRowFiltered(nRow, nRow, nTab, bFil); 9087*cdf0e10cSrcweir } 9088*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_OHEIGHT ) 9089*cdf0e10cSrcweir { 9090*cdf0e10cSrcweir sal_Bool bOpt = ScUnoHelpFunctions::GetBoolFromAny( aValue ); 9091*cdf0e10cSrcweir if (bOpt) 9092*cdf0e10cSrcweir aFunc.SetWidthOrHeight( sal_False, 1, nRowArr, nTab, SC_SIZE_OPTIMAL, 0, sal_True, sal_True ); 9093*cdf0e10cSrcweir else 9094*cdf0e10cSrcweir { 9095*cdf0e10cSrcweir // set current height again manually 9096*cdf0e10cSrcweir sal_uInt16 nHeight = pDoc->GetOriginalHeight( nRow, nTab ); 9097*cdf0e10cSrcweir aFunc.SetWidthOrHeight( sal_False, 1, nRowArr, nTab, SC_SIZE_ORIGINAL, nHeight, sal_True, sal_True ); 9098*cdf0e10cSrcweir } 9099*cdf0e10cSrcweir } 9100*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_NEWPAGE || pEntry->nWID == SC_WID_UNO_MANPAGE ) 9101*cdf0e10cSrcweir { 9102*cdf0e10cSrcweir sal_Bool bSet = ScUnoHelpFunctions::GetBoolFromAny( aValue ); 9103*cdf0e10cSrcweir if (bSet) 9104*cdf0e10cSrcweir aFunc.InsertPageBreak( sal_False, rRange.aStart, sal_True, sal_True, sal_True ); 9105*cdf0e10cSrcweir else 9106*cdf0e10cSrcweir aFunc.RemovePageBreak( sal_False, rRange.aStart, sal_True, sal_True, sal_True ); 9107*cdf0e10cSrcweir } 9108*cdf0e10cSrcweir else 9109*cdf0e10cSrcweir ScCellRangeObj::SetOnePropertyValue(pEntry, aValue); // base class, no Item WID 9110*cdf0e10cSrcweir } 9111*cdf0e10cSrcweir } 9112*cdf0e10cSrcweir 9113*cdf0e10cSrcweir void ScTableRowObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntry, 9114*cdf0e10cSrcweir uno::Any& rAny ) 9115*cdf0e10cSrcweir throw(uno::RuntimeException) 9116*cdf0e10cSrcweir { 9117*cdf0e10cSrcweir if ( pEntry ) 9118*cdf0e10cSrcweir { 9119*cdf0e10cSrcweir ScDocShell* pDocSh = GetDocShell(); 9120*cdf0e10cSrcweir if (!pDocSh) 9121*cdf0e10cSrcweir throw uno::RuntimeException(); 9122*cdf0e10cSrcweir ScDocument* pDoc = pDocSh->GetDocument(); 9123*cdf0e10cSrcweir const ScRange& rRange = GetRange(); 9124*cdf0e10cSrcweir DBG_ASSERT(rRange.aStart.Row() == rRange.aEnd.Row(), "zuviele Zeilen"); 9125*cdf0e10cSrcweir SCROW nRow = rRange.aStart.Row(); 9126*cdf0e10cSrcweir SCTAB nTab = rRange.aStart.Tab(); 9127*cdf0e10cSrcweir 9128*cdf0e10cSrcweir if ( pEntry->nWID == SC_WID_UNO_CELLHGT ) 9129*cdf0e10cSrcweir { 9130*cdf0e10cSrcweir // for hidden row, return original height 9131*cdf0e10cSrcweir sal_uInt16 nHeight = pDoc->GetOriginalHeight( nRow, nTab ); 9132*cdf0e10cSrcweir // property is 1/100mm, row height is twips 9133*cdf0e10cSrcweir nHeight = (sal_uInt16) TwipsToHMM(nHeight); 9134*cdf0e10cSrcweir rAny <<= (sal_Int32)( nHeight ); 9135*cdf0e10cSrcweir } 9136*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CELLVIS ) 9137*cdf0e10cSrcweir { 9138*cdf0e10cSrcweir SCROW nDummy; 9139*cdf0e10cSrcweir bool bHidden = pDoc->RowHidden(nRow, nTab, nDummy); 9140*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, !bHidden ); 9141*cdf0e10cSrcweir } 9142*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_CELLFILT ) 9143*cdf0e10cSrcweir { 9144*cdf0e10cSrcweir bool bVis = pDoc->RowFiltered(nRow, nTab); 9145*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, bVis ); 9146*cdf0e10cSrcweir } 9147*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_OHEIGHT ) 9148*cdf0e10cSrcweir { 9149*cdf0e10cSrcweir sal_Bool bOpt = !(pDoc->GetRowFlags( nRow, nTab ) & CR_MANUALSIZE); 9150*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, bOpt ); 9151*cdf0e10cSrcweir } 9152*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_NEWPAGE ) 9153*cdf0e10cSrcweir { 9154*cdf0e10cSrcweir ScBreakType nBreak = pDoc->HasRowBreak(nRow, nTab); 9155*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, nBreak ); 9156*cdf0e10cSrcweir } 9157*cdf0e10cSrcweir else if ( pEntry->nWID == SC_WID_UNO_MANPAGE ) 9158*cdf0e10cSrcweir { 9159*cdf0e10cSrcweir ScBreakType nBreak = (pDoc->HasRowBreak(nRow, nTab) & BREAK_MANUAL); 9160*cdf0e10cSrcweir ScUnoHelpFunctions::SetBoolInAny( rAny, nBreak ); 9161*cdf0e10cSrcweir } 9162*cdf0e10cSrcweir else 9163*cdf0e10cSrcweir ScCellRangeObj::GetOnePropertyValue(pEntry, rAny); 9164*cdf0e10cSrcweir } 9165*cdf0e10cSrcweir } 9166*cdf0e10cSrcweir 9167*cdf0e10cSrcweir const SfxItemPropertyMap* ScTableRowObj::GetItemPropertyMap() 9168*cdf0e10cSrcweir { 9169*cdf0e10cSrcweir return pRowPropSet->getPropertyMap(); 9170*cdf0e10cSrcweir } 9171*cdf0e10cSrcweir 9172*cdf0e10cSrcweir //------------------------------------------------------------------------ 9173*cdf0e10cSrcweir 9174*cdf0e10cSrcweir ScCellsObj::ScCellsObj(ScDocShell* pDocSh, const ScRangeList& rR) : 9175*cdf0e10cSrcweir pDocShell( pDocSh ), 9176*cdf0e10cSrcweir aRanges( rR ) 9177*cdf0e10cSrcweir { 9178*cdf0e10cSrcweir pDocShell->GetDocument()->AddUnoObject(*this); 9179*cdf0e10cSrcweir } 9180*cdf0e10cSrcweir 9181*cdf0e10cSrcweir ScCellsObj::~ScCellsObj() 9182*cdf0e10cSrcweir { 9183*cdf0e10cSrcweir if (pDocShell) 9184*cdf0e10cSrcweir pDocShell->GetDocument()->RemoveUnoObject(*this); 9185*cdf0e10cSrcweir } 9186*cdf0e10cSrcweir 9187*cdf0e10cSrcweir void ScCellsObj::Notify( SfxBroadcaster&, const SfxHint& rHint ) 9188*cdf0e10cSrcweir { 9189*cdf0e10cSrcweir if ( rHint.ISA( ScUpdateRefHint ) ) 9190*cdf0e10cSrcweir { 9191*cdf0e10cSrcweir const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; 9192*cdf0e10cSrcweir aRanges.UpdateReference( rRef.GetMode(), pDocShell->GetDocument(), rRef.GetRange(), 9193*cdf0e10cSrcweir rRef.GetDx(), rRef.GetDy(), rRef.GetDz() ); 9194*cdf0e10cSrcweir } 9195*cdf0e10cSrcweir else if ( rHint.ISA( SfxSimpleHint ) && 9196*cdf0e10cSrcweir ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) 9197*cdf0e10cSrcweir { 9198*cdf0e10cSrcweir pDocShell = NULL; // ungueltig geworden 9199*cdf0e10cSrcweir } 9200*cdf0e10cSrcweir } 9201*cdf0e10cSrcweir 9202*cdf0e10cSrcweir // XEnumerationAccess 9203*cdf0e10cSrcweir 9204*cdf0e10cSrcweir uno::Reference<container::XEnumeration> SAL_CALL ScCellsObj::createEnumeration() 9205*cdf0e10cSrcweir throw(uno::RuntimeException) 9206*cdf0e10cSrcweir { 9207*cdf0e10cSrcweir ScUnoGuard aGuard; 9208*cdf0e10cSrcweir if (pDocShell) 9209*cdf0e10cSrcweir return new ScCellsEnumeration( pDocShell, aRanges ); 9210*cdf0e10cSrcweir return NULL; 9211*cdf0e10cSrcweir } 9212*cdf0e10cSrcweir 9213*cdf0e10cSrcweir uno::Type SAL_CALL ScCellsObj::getElementType() throw(uno::RuntimeException) 9214*cdf0e10cSrcweir { 9215*cdf0e10cSrcweir ScUnoGuard aGuard; 9216*cdf0e10cSrcweir return getCppuType((uno::Reference<table::XCell>*)0); 9217*cdf0e10cSrcweir } 9218*cdf0e10cSrcweir 9219*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellsObj::hasElements() throw(uno::RuntimeException) 9220*cdf0e10cSrcweir { 9221*cdf0e10cSrcweir ScUnoGuard aGuard; 9222*cdf0e10cSrcweir sal_Bool bHas = sal_False; 9223*cdf0e10cSrcweir if ( pDocShell ) 9224*cdf0e10cSrcweir { 9225*cdf0e10cSrcweir //! schneller selber testen? 9226*cdf0e10cSrcweir 9227*cdf0e10cSrcweir uno::Reference<container::XEnumeration> xEnum(new ScCellsEnumeration( pDocShell, aRanges )); 9228*cdf0e10cSrcweir bHas = xEnum->hasMoreElements(); 9229*cdf0e10cSrcweir } 9230*cdf0e10cSrcweir return bHas; 9231*cdf0e10cSrcweir } 9232*cdf0e10cSrcweir 9233*cdf0e10cSrcweir //------------------------------------------------------------------------ 9234*cdf0e10cSrcweir 9235*cdf0e10cSrcweir ScCellsEnumeration::ScCellsEnumeration(ScDocShell* pDocSh, const ScRangeList& rR) : 9236*cdf0e10cSrcweir pDocShell( pDocSh ), 9237*cdf0e10cSrcweir aRanges( rR ), 9238*cdf0e10cSrcweir pMark( NULL ), 9239*cdf0e10cSrcweir bAtEnd( sal_False ) 9240*cdf0e10cSrcweir { 9241*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 9242*cdf0e10cSrcweir pDoc->AddUnoObject(*this); 9243*cdf0e10cSrcweir 9244*cdf0e10cSrcweir if ( aRanges.Count() == 0 ) 9245*cdf0e10cSrcweir bAtEnd = sal_True; 9246*cdf0e10cSrcweir else 9247*cdf0e10cSrcweir { 9248*cdf0e10cSrcweir SCTAB nTab = 0; 9249*cdf0e10cSrcweir const ScRange* pFirst = aRanges.GetObject(0); 9250*cdf0e10cSrcweir if (pFirst) 9251*cdf0e10cSrcweir nTab = pFirst->aStart.Tab(); 9252*cdf0e10cSrcweir aPos = ScAddress(0,0,nTab); 9253*cdf0e10cSrcweir CheckPos_Impl(); // aPos auf erste passende Zelle setzen 9254*cdf0e10cSrcweir } 9255*cdf0e10cSrcweir } 9256*cdf0e10cSrcweir 9257*cdf0e10cSrcweir void ScCellsEnumeration::CheckPos_Impl() 9258*cdf0e10cSrcweir { 9259*cdf0e10cSrcweir if (pDocShell) 9260*cdf0e10cSrcweir { 9261*cdf0e10cSrcweir sal_Bool bFound = sal_False; 9262*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 9263*cdf0e10cSrcweir ScBaseCell* pCell = pDoc->GetCell(aPos); 9264*cdf0e10cSrcweir if ( pCell && pCell->GetCellType() != CELLTYPE_NOTE ) 9265*cdf0e10cSrcweir { 9266*cdf0e10cSrcweir if (!pMark) 9267*cdf0e10cSrcweir { 9268*cdf0e10cSrcweir pMark = new ScMarkData; 9269*cdf0e10cSrcweir pMark->MarkFromRangeList( aRanges, sal_False ); 9270*cdf0e10cSrcweir pMark->MarkToMulti(); // needed for GetNextMarkedCell 9271*cdf0e10cSrcweir } 9272*cdf0e10cSrcweir bFound = pMark->IsCellMarked( aPos.Col(), aPos.Row() ); 9273*cdf0e10cSrcweir } 9274*cdf0e10cSrcweir if (!bFound) 9275*cdf0e10cSrcweir Advance_Impl(); 9276*cdf0e10cSrcweir } 9277*cdf0e10cSrcweir } 9278*cdf0e10cSrcweir 9279*cdf0e10cSrcweir ScCellsEnumeration::~ScCellsEnumeration() 9280*cdf0e10cSrcweir { 9281*cdf0e10cSrcweir if (pDocShell) 9282*cdf0e10cSrcweir pDocShell->GetDocument()->RemoveUnoObject(*this); 9283*cdf0e10cSrcweir delete pMark; 9284*cdf0e10cSrcweir } 9285*cdf0e10cSrcweir 9286*cdf0e10cSrcweir void ScCellsEnumeration::Advance_Impl() 9287*cdf0e10cSrcweir { 9288*cdf0e10cSrcweir DBG_ASSERT(!bAtEnd,"zuviel Advance_Impl"); 9289*cdf0e10cSrcweir if (!pMark) 9290*cdf0e10cSrcweir { 9291*cdf0e10cSrcweir pMark = new ScMarkData; 9292*cdf0e10cSrcweir pMark->MarkFromRangeList( aRanges, sal_False ); 9293*cdf0e10cSrcweir pMark->MarkToMulti(); // needed for GetNextMarkedCell 9294*cdf0e10cSrcweir } 9295*cdf0e10cSrcweir 9296*cdf0e10cSrcweir SCCOL nCol = aPos.Col(); 9297*cdf0e10cSrcweir SCROW nRow = aPos.Row(); 9298*cdf0e10cSrcweir SCTAB nTab = aPos.Tab(); 9299*cdf0e10cSrcweir sal_Bool bFound = pDocShell->GetDocument()->GetNextMarkedCell( nCol, nRow, nTab, *pMark ); 9300*cdf0e10cSrcweir if (bFound) 9301*cdf0e10cSrcweir aPos.Set( nCol, nRow, nTab ); 9302*cdf0e10cSrcweir else 9303*cdf0e10cSrcweir bAtEnd = sal_True; // kommt nix mehr 9304*cdf0e10cSrcweir } 9305*cdf0e10cSrcweir 9306*cdf0e10cSrcweir void ScCellsEnumeration::Notify( SfxBroadcaster&, const SfxHint& rHint ) 9307*cdf0e10cSrcweir { 9308*cdf0e10cSrcweir if ( rHint.ISA( ScUpdateRefHint ) ) 9309*cdf0e10cSrcweir { 9310*cdf0e10cSrcweir if (pDocShell) 9311*cdf0e10cSrcweir { 9312*cdf0e10cSrcweir const ScUpdateRefHint& rRef = (const ScUpdateRefHint&)rHint; 9313*cdf0e10cSrcweir aRanges.UpdateReference( rRef.GetMode(), pDocShell->GetDocument(), rRef.GetRange(), 9314*cdf0e10cSrcweir rRef.GetDx(), rRef.GetDy(), rRef.GetDz() ); 9315*cdf0e10cSrcweir 9316*cdf0e10cSrcweir delete pMark; // aus verschobenen Bereichen neu erzeugen 9317*cdf0e10cSrcweir pMark = NULL; 9318*cdf0e10cSrcweir 9319*cdf0e10cSrcweir if (!bAtEnd) // aPos anpassen 9320*cdf0e10cSrcweir { 9321*cdf0e10cSrcweir ScRangeList aNew; 9322*cdf0e10cSrcweir aNew.Append(ScRange(aPos)); 9323*cdf0e10cSrcweir aNew.UpdateReference( rRef.GetMode(), pDocShell->GetDocument(), rRef.GetRange(), 9324*cdf0e10cSrcweir rRef.GetDx(), rRef.GetDy(), rRef.GetDz() ); 9325*cdf0e10cSrcweir if (aNew.Count()==1) 9326*cdf0e10cSrcweir { 9327*cdf0e10cSrcweir aPos = aNew.GetObject(0)->aStart; 9328*cdf0e10cSrcweir CheckPos_Impl(); 9329*cdf0e10cSrcweir } 9330*cdf0e10cSrcweir } 9331*cdf0e10cSrcweir } 9332*cdf0e10cSrcweir } 9333*cdf0e10cSrcweir else if ( rHint.ISA( SfxSimpleHint ) && 9334*cdf0e10cSrcweir ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) 9335*cdf0e10cSrcweir { 9336*cdf0e10cSrcweir pDocShell = NULL; // ungueltig geworden 9337*cdf0e10cSrcweir } 9338*cdf0e10cSrcweir } 9339*cdf0e10cSrcweir 9340*cdf0e10cSrcweir // XEnumeration 9341*cdf0e10cSrcweir 9342*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellsEnumeration::hasMoreElements() throw(uno::RuntimeException) 9343*cdf0e10cSrcweir { 9344*cdf0e10cSrcweir ScUnoGuard aGuard; 9345*cdf0e10cSrcweir return !bAtEnd; 9346*cdf0e10cSrcweir } 9347*cdf0e10cSrcweir 9348*cdf0e10cSrcweir uno::Any SAL_CALL ScCellsEnumeration::nextElement() throw(container::NoSuchElementException, 9349*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 9350*cdf0e10cSrcweir { 9351*cdf0e10cSrcweir ScUnoGuard aGuard; 9352*cdf0e10cSrcweir if (pDocShell && !bAtEnd) 9353*cdf0e10cSrcweir { 9354*cdf0e10cSrcweir // Interface-Typ muss zu ScCellsObj::getElementType passen 9355*cdf0e10cSrcweir 9356*cdf0e10cSrcweir ScAddress aTempPos(aPos); 9357*cdf0e10cSrcweir Advance_Impl(); 9358*cdf0e10cSrcweir return uno::makeAny(uno::Reference<table::XCell>(new ScCellObj( pDocShell, aTempPos ))); 9359*cdf0e10cSrcweir } 9360*cdf0e10cSrcweir 9361*cdf0e10cSrcweir throw container::NoSuchElementException(); // no more elements 9362*cdf0e10cSrcweir // return uno::Any(); 9363*cdf0e10cSrcweir } 9364*cdf0e10cSrcweir 9365*cdf0e10cSrcweir //------------------------------------------------------------------------ 9366*cdf0e10cSrcweir 9367*cdf0e10cSrcweir ScCellFormatsObj::ScCellFormatsObj(ScDocShell* pDocSh, const ScRange& rRange) : 9368*cdf0e10cSrcweir pDocShell( pDocSh ), 9369*cdf0e10cSrcweir aTotalRange( rRange ) 9370*cdf0e10cSrcweir { 9371*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 9372*cdf0e10cSrcweir pDoc->AddUnoObject(*this); 9373*cdf0e10cSrcweir 9374*cdf0e10cSrcweir DBG_ASSERT( aTotalRange.aStart.Tab() == aTotalRange.aEnd.Tab(), "unterschiedliche Tabellen" ); 9375*cdf0e10cSrcweir } 9376*cdf0e10cSrcweir 9377*cdf0e10cSrcweir ScCellFormatsObj::~ScCellFormatsObj() 9378*cdf0e10cSrcweir { 9379*cdf0e10cSrcweir if (pDocShell) 9380*cdf0e10cSrcweir pDocShell->GetDocument()->RemoveUnoObject(*this); 9381*cdf0e10cSrcweir } 9382*cdf0e10cSrcweir 9383*cdf0e10cSrcweir void ScCellFormatsObj::Notify( SfxBroadcaster&, const SfxHint& rHint ) 9384*cdf0e10cSrcweir { 9385*cdf0e10cSrcweir if ( rHint.ISA( ScUpdateRefHint ) ) 9386*cdf0e10cSrcweir { 9387*cdf0e10cSrcweir //! aTotalRange... 9388*cdf0e10cSrcweir } 9389*cdf0e10cSrcweir else if ( rHint.ISA( SfxSimpleHint ) && 9390*cdf0e10cSrcweir ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING ) 9391*cdf0e10cSrcweir { 9392*cdf0e10cSrcweir pDocShell = NULL; // ungueltig geworden 9393*cdf0e10cSrcweir } 9394*cdf0e10cSrcweir } 9395*cdf0e10cSrcweir 9396*cdf0e10cSrcweir ScCellRangeObj* ScCellFormatsObj::GetObjectByIndex_Impl(long nIndex) const 9397*cdf0e10cSrcweir { 9398*cdf0e10cSrcweir //! direkt auf die AttrArrays zugreifen !!!! 9399*cdf0e10cSrcweir 9400*cdf0e10cSrcweir ScCellRangeObj* pRet = NULL; 9401*cdf0e10cSrcweir if (pDocShell) 9402*cdf0e10cSrcweir { 9403*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 9404*cdf0e10cSrcweir long nPos = 0; 9405*cdf0e10cSrcweir ScAttrRectIterator aIter( pDoc, aTotalRange.aStart.Tab(), 9406*cdf0e10cSrcweir aTotalRange.aStart.Col(), aTotalRange.aStart.Row(), 9407*cdf0e10cSrcweir aTotalRange.aEnd.Col(), aTotalRange.aEnd.Row() ); 9408*cdf0e10cSrcweir SCCOL nCol1, nCol2; 9409*cdf0e10cSrcweir SCROW nRow1, nRow2; 9410*cdf0e10cSrcweir while ( aIter.GetNext( nCol1, nCol2, nRow1, nRow2 ) ) 9411*cdf0e10cSrcweir { 9412*cdf0e10cSrcweir if ( nPos == nIndex ) 9413*cdf0e10cSrcweir { 9414*cdf0e10cSrcweir SCTAB nTab = aTotalRange.aStart.Tab(); 9415*cdf0e10cSrcweir ScRange aNext( nCol1, nRow1, nTab, nCol2, nRow2, nTab ); 9416*cdf0e10cSrcweir 9417*cdf0e10cSrcweir if ( aNext.aStart == aNext.aEnd ) 9418*cdf0e10cSrcweir pRet = new ScCellObj( pDocShell, aNext.aStart ); 9419*cdf0e10cSrcweir else 9420*cdf0e10cSrcweir pRet = new ScCellRangeObj( pDocShell, aNext ); 9421*cdf0e10cSrcweir } 9422*cdf0e10cSrcweir ++nPos; 9423*cdf0e10cSrcweir } 9424*cdf0e10cSrcweir } 9425*cdf0e10cSrcweir return pRet; 9426*cdf0e10cSrcweir } 9427*cdf0e10cSrcweir 9428*cdf0e10cSrcweir // XIndexAccess 9429*cdf0e10cSrcweir 9430*cdf0e10cSrcweir sal_Int32 SAL_CALL ScCellFormatsObj::getCount() throw(uno::RuntimeException) 9431*cdf0e10cSrcweir { 9432*cdf0e10cSrcweir ScUnoGuard aGuard; 9433*cdf0e10cSrcweir 9434*cdf0e10cSrcweir //! direkt auf die AttrArrays zugreifen !!!! 9435*cdf0e10cSrcweir 9436*cdf0e10cSrcweir long nCount = 0; 9437*cdf0e10cSrcweir if (pDocShell) 9438*cdf0e10cSrcweir { 9439*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 9440*cdf0e10cSrcweir ScAttrRectIterator aIter( pDoc, aTotalRange.aStart.Tab(), 9441*cdf0e10cSrcweir aTotalRange.aStart.Col(), aTotalRange.aStart.Row(), 9442*cdf0e10cSrcweir aTotalRange.aEnd.Col(), aTotalRange.aEnd.Row() ); 9443*cdf0e10cSrcweir SCCOL nCol1, nCol2; 9444*cdf0e10cSrcweir SCROW nRow1, nRow2; 9445*cdf0e10cSrcweir while ( aIter.GetNext( nCol1, nCol2, nRow1, nRow2 ) ) 9446*cdf0e10cSrcweir ++nCount; 9447*cdf0e10cSrcweir } 9448*cdf0e10cSrcweir return nCount; 9449*cdf0e10cSrcweir } 9450*cdf0e10cSrcweir 9451*cdf0e10cSrcweir uno::Any SAL_CALL ScCellFormatsObj::getByIndex( sal_Int32 nIndex ) 9452*cdf0e10cSrcweir throw(lang::IndexOutOfBoundsException, 9453*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 9454*cdf0e10cSrcweir { 9455*cdf0e10cSrcweir ScUnoGuard aGuard; 9456*cdf0e10cSrcweir 9457*cdf0e10cSrcweir uno::Reference<table::XCellRange> xRange(GetObjectByIndex_Impl(nIndex)); 9458*cdf0e10cSrcweir if (xRange.is()) 9459*cdf0e10cSrcweir return uno::makeAny(xRange); 9460*cdf0e10cSrcweir else 9461*cdf0e10cSrcweir throw lang::IndexOutOfBoundsException(); 9462*cdf0e10cSrcweir // return uno::Any(); 9463*cdf0e10cSrcweir } 9464*cdf0e10cSrcweir 9465*cdf0e10cSrcweir uno::Type SAL_CALL ScCellFormatsObj::getElementType() throw(uno::RuntimeException) 9466*cdf0e10cSrcweir { 9467*cdf0e10cSrcweir ScUnoGuard aGuard; 9468*cdf0e10cSrcweir return getCppuType((uno::Reference<table::XCellRange>*)0); 9469*cdf0e10cSrcweir } 9470*cdf0e10cSrcweir 9471*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellFormatsObj::hasElements() throw(uno::RuntimeException) 9472*cdf0e10cSrcweir { 9473*cdf0e10cSrcweir ScUnoGuard aGuard; 9474*cdf0e10cSrcweir return ( getCount() != 0 ); //! immer groesser 0 ?? 9475*cdf0e10cSrcweir } 9476*cdf0e10cSrcweir 9477*cdf0e10cSrcweir // XEnumerationAccess 9478*cdf0e10cSrcweir 9479*cdf0e10cSrcweir uno::Reference<container::XEnumeration> SAL_CALL ScCellFormatsObj::createEnumeration() 9480*cdf0e10cSrcweir throw(uno::RuntimeException) 9481*cdf0e10cSrcweir { 9482*cdf0e10cSrcweir ScUnoGuard aGuard; 9483*cdf0e10cSrcweir if (pDocShell) 9484*cdf0e10cSrcweir return new ScCellFormatsEnumeration( pDocShell, aTotalRange ); 9485*cdf0e10cSrcweir return NULL; 9486*cdf0e10cSrcweir } 9487*cdf0e10cSrcweir 9488*cdf0e10cSrcweir //------------------------------------------------------------------------ 9489*cdf0e10cSrcweir 9490*cdf0e10cSrcweir ScCellFormatsEnumeration::ScCellFormatsEnumeration(ScDocShell* pDocSh, const ScRange& rRange) : 9491*cdf0e10cSrcweir pDocShell( pDocSh ), 9492*cdf0e10cSrcweir nTab( rRange.aStart.Tab() ), 9493*cdf0e10cSrcweir pIter( NULL ), 9494*cdf0e10cSrcweir bAtEnd( sal_False ), 9495*cdf0e10cSrcweir bDirty( sal_False ) 9496*cdf0e10cSrcweir { 9497*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 9498*cdf0e10cSrcweir pDoc->AddUnoObject(*this); 9499*cdf0e10cSrcweir 9500*cdf0e10cSrcweir DBG_ASSERT( rRange.aStart.Tab() == rRange.aEnd.Tab(), 9501*cdf0e10cSrcweir "CellFormatsEnumeration: unterschiedliche Tabellen" ); 9502*cdf0e10cSrcweir 9503*cdf0e10cSrcweir pIter = new ScAttrRectIterator( pDoc, nTab, 9504*cdf0e10cSrcweir rRange.aStart.Col(), rRange.aStart.Row(), 9505*cdf0e10cSrcweir rRange.aEnd.Col(), rRange.aEnd.Row() ); 9506*cdf0e10cSrcweir Advance_Impl(); 9507*cdf0e10cSrcweir } 9508*cdf0e10cSrcweir 9509*cdf0e10cSrcweir ScCellFormatsEnumeration::~ScCellFormatsEnumeration() 9510*cdf0e10cSrcweir { 9511*cdf0e10cSrcweir if (pDocShell) 9512*cdf0e10cSrcweir pDocShell->GetDocument()->RemoveUnoObject(*this); 9513*cdf0e10cSrcweir delete pIter; 9514*cdf0e10cSrcweir } 9515*cdf0e10cSrcweir 9516*cdf0e10cSrcweir void ScCellFormatsEnumeration::Advance_Impl() 9517*cdf0e10cSrcweir { 9518*cdf0e10cSrcweir DBG_ASSERT(!bAtEnd,"zuviel Advance_Impl"); 9519*cdf0e10cSrcweir 9520*cdf0e10cSrcweir if ( pIter ) 9521*cdf0e10cSrcweir { 9522*cdf0e10cSrcweir if ( bDirty ) 9523*cdf0e10cSrcweir { 9524*cdf0e10cSrcweir pIter->DataChanged(); // AttrArray-Index neu suchen 9525*cdf0e10cSrcweir bDirty = sal_False; 9526*cdf0e10cSrcweir } 9527*cdf0e10cSrcweir 9528*cdf0e10cSrcweir SCCOL nCol1, nCol2; 9529*cdf0e10cSrcweir SCROW nRow1, nRow2; 9530*cdf0e10cSrcweir if ( pIter->GetNext( nCol1, nCol2, nRow1, nRow2 ) ) 9531*cdf0e10cSrcweir aNext = ScRange( nCol1, nRow1, nTab, nCol2, nRow2, nTab ); 9532*cdf0e10cSrcweir else 9533*cdf0e10cSrcweir bAtEnd = sal_True; // kommt nix mehr 9534*cdf0e10cSrcweir } 9535*cdf0e10cSrcweir else 9536*cdf0e10cSrcweir bAtEnd = sal_True; // Dok weggekommen oder so 9537*cdf0e10cSrcweir } 9538*cdf0e10cSrcweir 9539*cdf0e10cSrcweir ScCellRangeObj* ScCellFormatsEnumeration::NextObject_Impl() 9540*cdf0e10cSrcweir { 9541*cdf0e10cSrcweir ScCellRangeObj* pRet = NULL; 9542*cdf0e10cSrcweir if (pDocShell && !bAtEnd) 9543*cdf0e10cSrcweir { 9544*cdf0e10cSrcweir if ( aNext.aStart == aNext.aEnd ) 9545*cdf0e10cSrcweir pRet = new ScCellObj( pDocShell, aNext.aStart ); 9546*cdf0e10cSrcweir else 9547*cdf0e10cSrcweir pRet = new ScCellRangeObj( pDocShell, aNext ); 9548*cdf0e10cSrcweir Advance_Impl(); 9549*cdf0e10cSrcweir } 9550*cdf0e10cSrcweir return pRet; 9551*cdf0e10cSrcweir } 9552*cdf0e10cSrcweir 9553*cdf0e10cSrcweir void ScCellFormatsEnumeration::Notify( SfxBroadcaster&, const SfxHint& rHint ) 9554*cdf0e10cSrcweir { 9555*cdf0e10cSrcweir if ( rHint.ISA( ScUpdateRefHint ) ) 9556*cdf0e10cSrcweir { 9557*cdf0e10cSrcweir //! und nun ??? 9558*cdf0e10cSrcweir } 9559*cdf0e10cSrcweir else if ( rHint.ISA( SfxSimpleHint ) ) 9560*cdf0e10cSrcweir { 9561*cdf0e10cSrcweir sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId(); 9562*cdf0e10cSrcweir if ( nId == SFX_HINT_DYING ) 9563*cdf0e10cSrcweir { 9564*cdf0e10cSrcweir pDocShell = NULL; // ungueltig geworden 9565*cdf0e10cSrcweir delete pIter; 9566*cdf0e10cSrcweir pIter = NULL; 9567*cdf0e10cSrcweir } 9568*cdf0e10cSrcweir else if ( nId == SFX_HINT_DATACHANGED ) 9569*cdf0e10cSrcweir { 9570*cdf0e10cSrcweir bDirty = sal_True; // AttrArray-Index evtl. ungueltig geworden 9571*cdf0e10cSrcweir } 9572*cdf0e10cSrcweir } 9573*cdf0e10cSrcweir } 9574*cdf0e10cSrcweir 9575*cdf0e10cSrcweir // XEnumeration 9576*cdf0e10cSrcweir 9577*cdf0e10cSrcweir sal_Bool SAL_CALL ScCellFormatsEnumeration::hasMoreElements() throw(uno::RuntimeException) 9578*cdf0e10cSrcweir { 9579*cdf0e10cSrcweir ScUnoGuard aGuard; 9580*cdf0e10cSrcweir return !bAtEnd; 9581*cdf0e10cSrcweir } 9582*cdf0e10cSrcweir 9583*cdf0e10cSrcweir uno::Any SAL_CALL ScCellFormatsEnumeration::nextElement() throw(container::NoSuchElementException, 9584*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 9585*cdf0e10cSrcweir { 9586*cdf0e10cSrcweir ScUnoGuard aGuard; 9587*cdf0e10cSrcweir 9588*cdf0e10cSrcweir if ( bAtEnd || !pDocShell ) 9589*cdf0e10cSrcweir throw container::NoSuchElementException(); // no more elements 9590*cdf0e10cSrcweir 9591*cdf0e10cSrcweir // Interface-Typ muss zu ScCellFormatsObj::getElementType passen 9592*cdf0e10cSrcweir 9593*cdf0e10cSrcweir return uno::makeAny(uno::Reference<table::XCellRange> (NextObject_Impl())); 9594*cdf0e10cSrcweir } 9595*cdf0e10cSrcweir 9596*cdf0e10cSrcweir //------------------------------------------------------------------------ 9597*cdf0e10cSrcweir 9598*cdf0e10cSrcweir ScUniqueCellFormatsObj::ScUniqueCellFormatsObj(ScDocShell* pDocSh, const ScRange& rRange) : 9599*cdf0e10cSrcweir pDocShell( pDocSh ), 9600*cdf0e10cSrcweir aTotalRange( rRange ), 9601*cdf0e10cSrcweir aRangeLists() 9602*cdf0e10cSrcweir { 9603*cdf0e10cSrcweir pDocShell->GetDocument()->AddUnoObject(*this); 9604*cdf0e10cSrcweir 9605*cdf0e10cSrcweir DBG_ASSERT( aTotalRange.aStart.Tab() == aTotalRange.aEnd.Tab(), "unterschiedliche Tabellen" ); 9606*cdf0e10cSrcweir 9607*cdf0e10cSrcweir GetObjects_Impl(); 9608*cdf0e10cSrcweir } 9609*cdf0e10cSrcweir 9610*cdf0e10cSrcweir ScUniqueCellFormatsObj::~ScUniqueCellFormatsObj() 9611*cdf0e10cSrcweir { 9612*cdf0e10cSrcweir if (pDocShell) 9613*cdf0e10cSrcweir pDocShell->GetDocument()->RemoveUnoObject(*this); 9614*cdf0e10cSrcweir } 9615*cdf0e10cSrcweir 9616*cdf0e10cSrcweir void ScUniqueCellFormatsObj::Notify( SfxBroadcaster&, const SfxHint& rHint ) 9617*cdf0e10cSrcweir { 9618*cdf0e10cSrcweir if ( rHint.ISA( ScUpdateRefHint ) ) 9619*cdf0e10cSrcweir { 9620*cdf0e10cSrcweir //! aTotalRange... 9621*cdf0e10cSrcweir } 9622*cdf0e10cSrcweir else if ( rHint.ISA( SfxSimpleHint ) ) 9623*cdf0e10cSrcweir { 9624*cdf0e10cSrcweir sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId(); 9625*cdf0e10cSrcweir if ( nId == SFX_HINT_DYING ) 9626*cdf0e10cSrcweir pDocShell = NULL; // ungueltig geworden 9627*cdf0e10cSrcweir } 9628*cdf0e10cSrcweir } 9629*cdf0e10cSrcweir 9630*cdf0e10cSrcweir // 9631*cdf0e10cSrcweir // Fill the list of formats from the document 9632*cdf0e10cSrcweir // 9633*cdf0e10cSrcweir 9634*cdf0e10cSrcweir // hash code to access the range lists by ScPatternAttr pointer 9635*cdf0e10cSrcweir struct ScPatternHashCode 9636*cdf0e10cSrcweir { 9637*cdf0e10cSrcweir size_t operator()( const ScPatternAttr* pPattern ) const 9638*cdf0e10cSrcweir { 9639*cdf0e10cSrcweir return reinterpret_cast<size_t>(pPattern); 9640*cdf0e10cSrcweir } 9641*cdf0e10cSrcweir }; 9642*cdf0e10cSrcweir 9643*cdf0e10cSrcweir // Hash map to find a range by its start row 9644*cdf0e10cSrcweir typedef ::std::hash_map< SCROW, ScRange > ScRowRangeHashMap; 9645*cdf0e10cSrcweir 9646*cdf0e10cSrcweir typedef ::std::vector<ScRange> ScRangeVector; 9647*cdf0e10cSrcweir 9648*cdf0e10cSrcweir // Hash map entry. 9649*cdf0e10cSrcweir // The Join method depends on the column-wise order of ScAttrRectIterator 9650*cdf0e10cSrcweir class ScUniqueFormatsEntry 9651*cdf0e10cSrcweir { 9652*cdf0e10cSrcweir enum EntryState { STATE_EMPTY, STATE_SINGLE, STATE_COMPLEX }; 9653*cdf0e10cSrcweir 9654*cdf0e10cSrcweir EntryState eState; 9655*cdf0e10cSrcweir ScRange aSingleRange; 9656*cdf0e10cSrcweir ScRowRangeHashMap aJoinedRanges; // "active" ranges to be merged 9657*cdf0e10cSrcweir ScRangeVector aCompletedRanges; // ranges that will no longer be touched 9658*cdf0e10cSrcweir ScRangeListRef aReturnRanges; // result as ScRangeList for further use 9659*cdf0e10cSrcweir 9660*cdf0e10cSrcweir public: 9661*cdf0e10cSrcweir ScUniqueFormatsEntry() : eState( STATE_EMPTY ) {} 9662*cdf0e10cSrcweir ScUniqueFormatsEntry( const ScUniqueFormatsEntry& r ) : 9663*cdf0e10cSrcweir eState( r.eState ), 9664*cdf0e10cSrcweir aSingleRange( r.aSingleRange ), 9665*cdf0e10cSrcweir aJoinedRanges( r.aJoinedRanges ), 9666*cdf0e10cSrcweir aCompletedRanges( r.aCompletedRanges ), 9667*cdf0e10cSrcweir aReturnRanges( r.aReturnRanges ) {} 9668*cdf0e10cSrcweir ~ScUniqueFormatsEntry() {} 9669*cdf0e10cSrcweir 9670*cdf0e10cSrcweir void Join( const ScRange& rNewRange ); 9671*cdf0e10cSrcweir const ScRangeList& GetRanges(); 9672*cdf0e10cSrcweir void Clear() { aReturnRanges.Clear(); } // aJoinedRanges and aCompletedRanges are cleared in GetRanges 9673*cdf0e10cSrcweir }; 9674*cdf0e10cSrcweir 9675*cdf0e10cSrcweir void ScUniqueFormatsEntry::Join( const ScRange& rNewRange ) 9676*cdf0e10cSrcweir { 9677*cdf0e10cSrcweir // Special-case handling for single range 9678*cdf0e10cSrcweir 9679*cdf0e10cSrcweir if ( eState == STATE_EMPTY ) 9680*cdf0e10cSrcweir { 9681*cdf0e10cSrcweir aSingleRange = rNewRange; 9682*cdf0e10cSrcweir eState = STATE_SINGLE; 9683*cdf0e10cSrcweir return; 9684*cdf0e10cSrcweir } 9685*cdf0e10cSrcweir if ( eState == STATE_SINGLE ) 9686*cdf0e10cSrcweir { 9687*cdf0e10cSrcweir if ( aSingleRange.aStart.Row() == rNewRange.aStart.Row() && 9688*cdf0e10cSrcweir aSingleRange.aEnd.Row() == rNewRange.aEnd.Row() && 9689*cdf0e10cSrcweir aSingleRange.aEnd.Col() + 1 == rNewRange.aStart.Col() ) 9690*cdf0e10cSrcweir { 9691*cdf0e10cSrcweir aSingleRange.aEnd.SetCol( rNewRange.aEnd.Col() ); 9692*cdf0e10cSrcweir return; // still a single range 9693*cdf0e10cSrcweir } 9694*cdf0e10cSrcweir 9695*cdf0e10cSrcweir SCROW nSingleRow = aSingleRange.aStart.Row(); 9696*cdf0e10cSrcweir aJoinedRanges.insert( ScRowRangeHashMap::value_type( nSingleRow, aSingleRange ) ); 9697*cdf0e10cSrcweir eState = STATE_COMPLEX; 9698*cdf0e10cSrcweir // continue normally 9699*cdf0e10cSrcweir } 9700*cdf0e10cSrcweir 9701*cdf0e10cSrcweir // This is called in the order of ScAttrRectIterator results. 9702*cdf0e10cSrcweir // rNewRange can only be joined with an existing entry if it's the same rows, starting in the next column. 9703*cdf0e10cSrcweir // If the old entry for the start row extends to a different end row, or ends in a different column, it 9704*cdf0e10cSrcweir // can be moved to aCompletedRanges because it can't be joined with following iterator results. 9705*cdf0e10cSrcweir // Everything happens within one sheet, so Tab can be ignored. 9706*cdf0e10cSrcweir 9707*cdf0e10cSrcweir SCROW nStartRow = rNewRange.aStart.Row(); 9708*cdf0e10cSrcweir ScRowRangeHashMap::iterator aIter( aJoinedRanges.find( nStartRow ) ); // find the active entry for the start row 9709*cdf0e10cSrcweir if ( aIter != aJoinedRanges.end() ) 9710*cdf0e10cSrcweir { 9711*cdf0e10cSrcweir ScRange& rOldRange = aIter->second; 9712*cdf0e10cSrcweir if ( rOldRange.aEnd.Row() == rNewRange.aEnd.Row() && 9713*cdf0e10cSrcweir rOldRange.aEnd.Col() + 1 == rNewRange.aStart.Col() ) 9714*cdf0e10cSrcweir { 9715*cdf0e10cSrcweir // extend existing range 9716*cdf0e10cSrcweir rOldRange.aEnd.SetCol( rNewRange.aEnd.Col() ); 9717*cdf0e10cSrcweir } 9718*cdf0e10cSrcweir else 9719*cdf0e10cSrcweir { 9720*cdf0e10cSrcweir // move old range to aCompletedRanges, keep rNewRange for joining 9721*cdf0e10cSrcweir aCompletedRanges.push_back( rOldRange ); 9722*cdf0e10cSrcweir rOldRange = rNewRange; // replace in hash map 9723*cdf0e10cSrcweir } 9724*cdf0e10cSrcweir } 9725*cdf0e10cSrcweir else 9726*cdf0e10cSrcweir { 9727*cdf0e10cSrcweir // keep rNewRange for joining 9728*cdf0e10cSrcweir aJoinedRanges.insert( ScRowRangeHashMap::value_type( nStartRow, rNewRange ) ); 9729*cdf0e10cSrcweir } 9730*cdf0e10cSrcweir } 9731*cdf0e10cSrcweir 9732*cdf0e10cSrcweir const ScRangeList& ScUniqueFormatsEntry::GetRanges() 9733*cdf0e10cSrcweir { 9734*cdf0e10cSrcweir if ( eState == STATE_SINGLE ) 9735*cdf0e10cSrcweir { 9736*cdf0e10cSrcweir aReturnRanges = new ScRangeList; 9737*cdf0e10cSrcweir aReturnRanges->Append( aSingleRange ); 9738*cdf0e10cSrcweir return *aReturnRanges; 9739*cdf0e10cSrcweir } 9740*cdf0e10cSrcweir 9741*cdf0e10cSrcweir // move remaining entries from aJoinedRanges to aCompletedRanges 9742*cdf0e10cSrcweir 9743*cdf0e10cSrcweir ScRowRangeHashMap::const_iterator aJoinedEnd = aJoinedRanges.end(); 9744*cdf0e10cSrcweir for ( ScRowRangeHashMap::const_iterator aJoinedIter = aJoinedRanges.begin(); aJoinedIter != aJoinedEnd; ++aJoinedIter ) 9745*cdf0e10cSrcweir aCompletedRanges.push_back( aJoinedIter->second ); 9746*cdf0e10cSrcweir aJoinedRanges.clear(); 9747*cdf0e10cSrcweir 9748*cdf0e10cSrcweir // sort all ranges for a predictable API result 9749*cdf0e10cSrcweir 9750*cdf0e10cSrcweir std::sort( aCompletedRanges.begin(), aCompletedRanges.end() ); 9751*cdf0e10cSrcweir 9752*cdf0e10cSrcweir // fill and return ScRangeList 9753*cdf0e10cSrcweir 9754*cdf0e10cSrcweir aReturnRanges = new ScRangeList; 9755*cdf0e10cSrcweir ScRangeVector::const_iterator aCompEnd( aCompletedRanges.end() ); 9756*cdf0e10cSrcweir for ( ScRangeVector::const_iterator aCompIter( aCompletedRanges.begin() ); aCompIter != aCompEnd; ++aCompIter ) 9757*cdf0e10cSrcweir aReturnRanges->Append( *aCompIter ); 9758*cdf0e10cSrcweir aCompletedRanges.clear(); 9759*cdf0e10cSrcweir 9760*cdf0e10cSrcweir return *aReturnRanges; 9761*cdf0e10cSrcweir } 9762*cdf0e10cSrcweir 9763*cdf0e10cSrcweir typedef ::std::hash_map< const ScPatternAttr*, ScUniqueFormatsEntry, ScPatternHashCode > ScUniqueFormatsHashMap; 9764*cdf0e10cSrcweir 9765*cdf0e10cSrcweir // function object to sort the range lists by start of first range 9766*cdf0e10cSrcweir struct ScUniqueFormatsOrder 9767*cdf0e10cSrcweir { 9768*cdf0e10cSrcweir bool operator()( const ScRangeList& rList1, const ScRangeList& rList2 ) const 9769*cdf0e10cSrcweir { 9770*cdf0e10cSrcweir // all range lists have at least one entry 9771*cdf0e10cSrcweir DBG_ASSERT( rList1.Count() > 0 && rList2.Count() > 0, "ScUniqueFormatsOrder: empty list" ); 9772*cdf0e10cSrcweir 9773*cdf0e10cSrcweir // compare start positions using ScAddress comparison operator 9774*cdf0e10cSrcweir return ( rList1.GetObject(0)->aStart < rList2.GetObject(0)->aStart ); 9775*cdf0e10cSrcweir } 9776*cdf0e10cSrcweir }; 9777*cdf0e10cSrcweir 9778*cdf0e10cSrcweir void ScUniqueCellFormatsObj::GetObjects_Impl() 9779*cdf0e10cSrcweir { 9780*cdf0e10cSrcweir if (pDocShell) 9781*cdf0e10cSrcweir { 9782*cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument(); 9783*cdf0e10cSrcweir SCTAB nTab = aTotalRange.aStart.Tab(); 9784*cdf0e10cSrcweir ScAttrRectIterator aIter( pDoc, nTab, 9785*cdf0e10cSrcweir aTotalRange.aStart.Col(), aTotalRange.aStart.Row(), 9786*cdf0e10cSrcweir aTotalRange.aEnd.Col(), aTotalRange.aEnd.Row() ); 9787*cdf0e10cSrcweir SCCOL nCol1, nCol2; 9788*cdf0e10cSrcweir SCROW nRow1, nRow2; 9789*cdf0e10cSrcweir 9790*cdf0e10cSrcweir // Collect the ranges for each format in a hash map, to avoid nested loops 9791*cdf0e10cSrcweir 9792*cdf0e10cSrcweir ScUniqueFormatsHashMap aHashMap; 9793*cdf0e10cSrcweir while (aIter.GetNext( nCol1, nCol2, nRow1, nRow2 ) ) 9794*cdf0e10cSrcweir { 9795*cdf0e10cSrcweir ScRange aRange( nCol1, nRow1, nTab, nCol2, nRow2, nTab ); 9796*cdf0e10cSrcweir const ScPatternAttr* pPattern = pDoc->GetPattern(nCol1, nRow1, nTab); 9797*cdf0e10cSrcweir aHashMap[pPattern].Join( aRange ); 9798*cdf0e10cSrcweir } 9799*cdf0e10cSrcweir 9800*cdf0e10cSrcweir // Fill the vector aRangeLists with the range lists from the hash map 9801*cdf0e10cSrcweir 9802*cdf0e10cSrcweir aRangeLists.reserve( aHashMap.size() ); 9803*cdf0e10cSrcweir ScUniqueFormatsHashMap::iterator aMapIter( aHashMap.begin() ); 9804*cdf0e10cSrcweir ScUniqueFormatsHashMap::iterator aMapEnd( aHashMap.end() ); 9805*cdf0e10cSrcweir while ( aMapIter != aMapEnd ) 9806*cdf0e10cSrcweir { 9807*cdf0e10cSrcweir ScUniqueFormatsEntry& rEntry = aMapIter->second; 9808*cdf0e10cSrcweir const ScRangeList& rRanges = rEntry.GetRanges(); 9809*cdf0e10cSrcweir aRangeLists.push_back( rRanges ); // copy ScRangeList 9810*cdf0e10cSrcweir rEntry.Clear(); // free memory, don't hold both copies of all ranges 9811*cdf0e10cSrcweir ++aMapIter; 9812*cdf0e10cSrcweir } 9813*cdf0e10cSrcweir 9814*cdf0e10cSrcweir // Sort the vector by first range's start position, to avoid random shuffling 9815*cdf0e10cSrcweir // due to using the ScPatterAttr pointers 9816*cdf0e10cSrcweir 9817*cdf0e10cSrcweir ScUniqueFormatsOrder aComp; 9818*cdf0e10cSrcweir ::std::sort( aRangeLists.begin(), aRangeLists.end(), aComp ); 9819*cdf0e10cSrcweir } 9820*cdf0e10cSrcweir } 9821*cdf0e10cSrcweir 9822*cdf0e10cSrcweir // XIndexAccess 9823*cdf0e10cSrcweir 9824*cdf0e10cSrcweir sal_Int32 SAL_CALL ScUniqueCellFormatsObj::getCount() throw(uno::RuntimeException) 9825*cdf0e10cSrcweir { 9826*cdf0e10cSrcweir ScUnoGuard aGuard; 9827*cdf0e10cSrcweir 9828*cdf0e10cSrcweir return aRangeLists.size(); 9829*cdf0e10cSrcweir } 9830*cdf0e10cSrcweir 9831*cdf0e10cSrcweir uno::Any SAL_CALL ScUniqueCellFormatsObj::getByIndex( sal_Int32 nIndex ) 9832*cdf0e10cSrcweir throw(lang::IndexOutOfBoundsException, 9833*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 9834*cdf0e10cSrcweir { 9835*cdf0e10cSrcweir ScUnoGuard aGuard; 9836*cdf0e10cSrcweir 9837*cdf0e10cSrcweir if(static_cast<sal_uInt32>(nIndex) < aRangeLists.size()) 9838*cdf0e10cSrcweir return uno::makeAny(uno::Reference<sheet::XSheetCellRangeContainer>(new ScCellRangesObj(pDocShell, aRangeLists[nIndex]))); 9839*cdf0e10cSrcweir else 9840*cdf0e10cSrcweir throw lang::IndexOutOfBoundsException(); 9841*cdf0e10cSrcweir // return uno::Any(); 9842*cdf0e10cSrcweir } 9843*cdf0e10cSrcweir 9844*cdf0e10cSrcweir uno::Type SAL_CALL ScUniqueCellFormatsObj::getElementType() throw(uno::RuntimeException) 9845*cdf0e10cSrcweir { 9846*cdf0e10cSrcweir ScUnoGuard aGuard; 9847*cdf0e10cSrcweir return getCppuType((uno::Reference<sheet::XSheetCellRangeContainer>*)0); 9848*cdf0e10cSrcweir } 9849*cdf0e10cSrcweir 9850*cdf0e10cSrcweir sal_Bool SAL_CALL ScUniqueCellFormatsObj::hasElements() throw(uno::RuntimeException) 9851*cdf0e10cSrcweir { 9852*cdf0e10cSrcweir ScUnoGuard aGuard; 9853*cdf0e10cSrcweir return ( aRangeLists.size() != 0 ); 9854*cdf0e10cSrcweir } 9855*cdf0e10cSrcweir 9856*cdf0e10cSrcweir // XEnumerationAccess 9857*cdf0e10cSrcweir 9858*cdf0e10cSrcweir uno::Reference<container::XEnumeration> SAL_CALL ScUniqueCellFormatsObj::createEnumeration() 9859*cdf0e10cSrcweir throw(uno::RuntimeException) 9860*cdf0e10cSrcweir { 9861*cdf0e10cSrcweir ScUnoGuard aGuard; 9862*cdf0e10cSrcweir if (pDocShell) 9863*cdf0e10cSrcweir return new ScUniqueCellFormatsEnumeration( pDocShell, aRangeLists ); 9864*cdf0e10cSrcweir return NULL; 9865*cdf0e10cSrcweir } 9866*cdf0e10cSrcweir 9867*cdf0e10cSrcweir //------------------------------------------------------------------------ 9868*cdf0e10cSrcweir 9869*cdf0e10cSrcweir ScUniqueCellFormatsEnumeration::ScUniqueCellFormatsEnumeration(ScDocShell* pDocSh, const ScMyRangeLists& rRangeLists) : 9870*cdf0e10cSrcweir aRangeLists(rRangeLists), 9871*cdf0e10cSrcweir pDocShell( pDocSh ), 9872*cdf0e10cSrcweir nCurrentPosition(0) 9873*cdf0e10cSrcweir { 9874*cdf0e10cSrcweir pDocShell->GetDocument()->AddUnoObject(*this); 9875*cdf0e10cSrcweir } 9876*cdf0e10cSrcweir 9877*cdf0e10cSrcweir ScUniqueCellFormatsEnumeration::~ScUniqueCellFormatsEnumeration() 9878*cdf0e10cSrcweir { 9879*cdf0e10cSrcweir if (pDocShell) 9880*cdf0e10cSrcweir pDocShell->GetDocument()->RemoveUnoObject(*this); 9881*cdf0e10cSrcweir } 9882*cdf0e10cSrcweir 9883*cdf0e10cSrcweir void ScUniqueCellFormatsEnumeration::Notify( SfxBroadcaster&, const SfxHint& rHint ) 9884*cdf0e10cSrcweir { 9885*cdf0e10cSrcweir if ( rHint.ISA( ScUpdateRefHint ) ) 9886*cdf0e10cSrcweir { 9887*cdf0e10cSrcweir //! und nun ??? 9888*cdf0e10cSrcweir } 9889*cdf0e10cSrcweir else if ( rHint.ISA( SfxSimpleHint ) ) 9890*cdf0e10cSrcweir { 9891*cdf0e10cSrcweir sal_uLong nId = ((const SfxSimpleHint&)rHint).GetId(); 9892*cdf0e10cSrcweir if ( nId == SFX_HINT_DYING ) 9893*cdf0e10cSrcweir pDocShell = NULL; // ungueltig geworden 9894*cdf0e10cSrcweir } 9895*cdf0e10cSrcweir } 9896*cdf0e10cSrcweir 9897*cdf0e10cSrcweir // XEnumeration 9898*cdf0e10cSrcweir 9899*cdf0e10cSrcweir sal_Bool SAL_CALL ScUniqueCellFormatsEnumeration::hasMoreElements() throw(uno::RuntimeException) 9900*cdf0e10cSrcweir { 9901*cdf0e10cSrcweir ScUnoGuard aGuard; 9902*cdf0e10cSrcweir return static_cast<sal_uInt32>(nCurrentPosition) < aRangeLists.size(); 9903*cdf0e10cSrcweir } 9904*cdf0e10cSrcweir 9905*cdf0e10cSrcweir uno::Any SAL_CALL ScUniqueCellFormatsEnumeration::nextElement() throw(container::NoSuchElementException, 9906*cdf0e10cSrcweir lang::WrappedTargetException, uno::RuntimeException) 9907*cdf0e10cSrcweir { 9908*cdf0e10cSrcweir ScUnoGuard aGuard; 9909*cdf0e10cSrcweir 9910*cdf0e10cSrcweir if ( !hasMoreElements() || !pDocShell ) 9911*cdf0e10cSrcweir throw container::NoSuchElementException(); // no more elements 9912*cdf0e10cSrcweir 9913*cdf0e10cSrcweir // Interface-Typ muss zu ScCellFormatsObj::getElementType passen 9914*cdf0e10cSrcweir 9915*cdf0e10cSrcweir return uno::makeAny(uno::Reference<sheet::XSheetCellRangeContainer>(new ScCellRangesObj(pDocShell, aRangeLists[nCurrentPosition++]))); 9916*cdf0e10cSrcweir } 9917*cdf0e10cSrcweir 9918*cdf0e10cSrcweir 9919