blob: d52ebff2e7e284eac4efd90c3b6aed3505bf9064 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sc.hxx"
#include "scitems.hxx"
#include <editeng/memberids.hrc>
#include <svx/algitem.hxx>
#include <editeng/boxitem.hxx>
#include <editeng/langitem.hxx>
#include <editeng/numitem.hxx>
#include <svx/pageitem.hxx>
#include <editeng/pbinitem.hxx>
#include <svx/unomid.hxx>
#include <editeng/unonrule.hxx>
#include <sfx2/bindings.hxx>
#include <sfx2/printer.hxx>
#include <vcl/virdev.hxx>
#include <svl/itempool.hxx>
#include <svl/itemset.hxx>
#include <svl/intitem.hxx>
#include <svl/zformat.hxx>
#include <rtl/uuid.h>
#include <com/sun/star/table/BorderLine.hpp>
#include <com/sun/star/table/CellVertJustify.hpp>
#include <com/sun/star/table/TableBorder.hpp>
#include <com/sun/star/table/ShadowFormat.hpp>
#include <com/sun/star/table/CellHoriJustify.hpp>
#include <com/sun/star/table/CellOrientation.hpp>
#include <com/sun/star/style/PageStyleLayout.hpp>
#include <com/sun/star/style/GraphicLocation.hpp>
#include <com/sun/star/sheet/XHeaderFooterContent.hpp>
#include <com/sun/star/util/CellProtection.hpp>
#include <com/sun/star/awt/FontSlant.hpp>
#include <com/sun/star/awt/Size.hpp>
#include <com/sun/star/lang/Locale.hpp>
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include "styleuno.hxx"
#include "docsh.hxx"
#include "attrib.hxx"
#include "stlpool.hxx"
#include "docpool.hxx"
#include "unoguard.hxx"
#include "miscuno.hxx"
#include "convuno.hxx"
#include "tablink.hxx"
#include "unonames.hxx"
#include "unowids.hxx"
#include "globstr.hrc"
#include "cellsuno.hxx"
using namespace ::com::sun::star;
//------------------------------------------------------------------------
const SfxItemPropertySet* lcl_GetCellStyleSet()
{
static SfxItemPropertyMapEntry aCellStyleMap_Impl[] =
{
{MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR },
{MAP_CHAR_LEN(SC_UNONAME_CELLPRO), ATTR_PROTECTION, &::getCppuType((const util::CellProtection*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_CCOLOR), ATTR_FONT_COLOR, &::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_COUTL), ATTR_FONT_CONTOUR, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_CCROSS), ATTR_FONT_CROSSEDOUT,&::getBooleanCppuType(), 0, MID_CROSSED_OUT },
{MAP_CHAR_LEN(SC_UNONAME_CEMPHAS), ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0), 0, MID_EMPHASIS },
{MAP_CHAR_LEN(SC_UNONAME_CFONT), ATTR_FONT, &::getCppuType((const sal_Int16*)0), 0, MID_FONT_FAMILY },
{MAP_CHAR_LEN(SC_UNONAME_CFCHARS), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET },
{MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET },
{MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_CHAR_SET },
{MAP_CHAR_LEN(SC_UNONAME_CFFAMIL), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY },
{MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY },
{MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_FAMILY },
{MAP_CHAR_LEN(SC_UNONAME_CFNAME), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME },
{MAP_CHAR_LEN(SC_UNO_CJK_CFNAME), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME },
{MAP_CHAR_LEN(SC_UNO_CTL_CFNAME), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_FAMILY_NAME },
{MAP_CHAR_LEN(SC_UNONAME_CFPITCH), ATTR_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH },
{MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH), ATTR_CJK_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH },
{MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH), ATTR_CTL_FONT, &getCppuType((sal_Int16*)0), 0, MID_FONT_PITCH },
{MAP_CHAR_LEN(SC_UNONAME_CFSTYLE), ATTR_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME },
{MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE), ATTR_CJK_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME },
{MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE), ATTR_CTL_FONT, &getCppuType((rtl::OUString*)0), 0, MID_FONT_STYLE_NAME },
{MAP_CHAR_LEN(SC_UNONAME_CHEIGHT), ATTR_FONT_HEIGHT, &::getCppuType((const float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT), ATTR_CJK_FONT_HEIGHT,&::getCppuType((const float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT), ATTR_CTL_FONT_HEIGHT,&::getCppuType((const float*)0), 0, MID_FONTHEIGHT | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_CLOCAL), ATTR_FONT_LANGUAGE, &::getCppuType((const lang::Locale*)0), 0, MID_LANG_LOCALE },
{MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL), ATTR_CJK_FONT_LANGUAGE,&::getCppuType((const lang::Locale*)0), 0, MID_LANG_LOCALE },
{MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL), ATTR_CTL_FONT_LANGUAGE,&::getCppuType((const lang::Locale*)0), 0, MID_LANG_LOCALE },
{MAP_CHAR_LEN(SC_UNONAME_COVER), ATTR_FONT_OVERLINE, &::getCppuType((const sal_Int16*)0), 0, MID_TL_STYLE },
{MAP_CHAR_LEN(SC_UNONAME_COVRLCOL), ATTR_FONT_OVERLINE, &getCppuType((sal_Int32*)0), 0, MID_TL_COLOR },
{MAP_CHAR_LEN(SC_UNONAME_COVRLHAS), ATTR_FONT_OVERLINE, &getBooleanCppuType(), 0, MID_TL_HASCOLOR },
{MAP_CHAR_LEN(SC_UNONAME_CPOST), ATTR_FONT_POSTURE, &::getCppuType((const awt::FontSlant*)0), 0, MID_POSTURE },
{MAP_CHAR_LEN(SC_UNO_CJK_CPOST), ATTR_CJK_FONT_POSTURE,&::getCppuType((const awt::FontSlant*)0), 0, MID_POSTURE },
{MAP_CHAR_LEN(SC_UNO_CTL_CPOST), ATTR_CTL_FONT_POSTURE,&::getCppuType((const awt::FontSlant*)0), 0, MID_POSTURE },
{MAP_CHAR_LEN(SC_UNONAME_CRELIEF), ATTR_FONT_RELIEF, &getCppuType((sal_Int16*)0), 0, MID_RELIEF },
{MAP_CHAR_LEN(SC_UNONAME_CSHADD), ATTR_FONT_SHADOWED, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_CSTRIKE), ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0), 0, MID_CROSS_OUT },
{MAP_CHAR_LEN(SC_UNONAME_CUNDER), ATTR_FONT_UNDERLINE,&::getCppuType((const sal_Int16*)0), 0, MID_TL_STYLE },
{MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0), 0, MID_TL_COLOR },
{MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(), 0, MID_TL_HASCOLOR },
{MAP_CHAR_LEN(SC_UNONAME_CWEIGHT), ATTR_FONT_WEIGHT, &::getCppuType((const float*)0), 0, MID_WEIGHT },
{MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT), ATTR_CJK_FONT_WEIGHT,&::getCppuType((const float*)0), 0, MID_WEIGHT },
{MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT), ATTR_CTL_FONT_WEIGHT,&::getCppuType((const float*)0), 0, MID_WEIGHT },
{MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_DISPNAME), SC_WID_UNO_DISPNAME,&::getCppuType((rtl::OUString*)0), beans::PropertyAttribute::READONLY, 0 },
{MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY, &::getCppuType((const table::CellHoriJustify*)0), 0, MID_HORJUST_HORJUST },
{MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
{MAP_CHAR_LEN(SC_UNONAME_WRAP), ATTR_LINEBREAK, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_NUMFMT), ATTR_VALUE_FORMAT, &::getCppuType((const sal_Int32*)0), 0, 0 },
// {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_CELLORI), ATTR_STACKED, &::getCppuType((const table::CellOrientation*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_PADJUST), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST },
{MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_PINDENT), ATTR_INDENT, &::getCppuType((const sal_Int16*)0), 0, 0 }, //! CONVERT_TWIPS
{MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_PISHANG), ATTR_HANGPUNCTUATION,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE, &getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY, &::getCppuType((const sal_Int16*)0), 0, MID_HORJUST_ADJUST },
{MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_L_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_R_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN, &::getCppuType((const sal_Int32*)0), 0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_ROTANG), ATTR_ROTATE_VALUE, &::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_ROTREF), ATTR_ROTATE_MODE, &::getCppuType((const table::CellVertJustify*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_SHADOW), ATTR_SHADOW, &::getCppuType((const table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_TBLBORD), SC_WID_UNO_TBLBORD, &::getCppuType((const table::TableBorder*)0), 0, 0 | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &::getCppuType((const table::CellVertJustify*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 },
{0,0,0,0,0,0}
};
static SfxItemPropertySet aCellStyleSet_Impl( aCellStyleMap_Impl );
return &aCellStyleSet_Impl;
}
// Map mit allen Seitenattributen, incl. Kopf-/Fusszeilenattribute
const SfxItemPropertySet * lcl_GetPageStyleSet()
{
static SfxItemPropertyMapEntry aPageStyleMap_Impl[] =
{
{MAP_CHAR_LEN(SC_UNO_PAGE_BACKCOLOR), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR },
{MAP_CHAR_LEN(SC_UNO_PAGE_GRAPHICFILT), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_FILTER },
{MAP_CHAR_LEN(SC_UNO_PAGE_GRAPHICLOC), ATTR_BACKGROUND, &::getCppuType((const style::GraphicLocation*)0), 0, MID_GRAPHIC_POSITION },
{MAP_CHAR_LEN(SC_UNO_PAGE_GRAPHICURL), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_URL },
{MAP_CHAR_LEN(SC_UNO_PAGE_BACKTRANS), ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
{MAP_CHAR_LEN(OLD_UNO_PAGE_BACKCOLOR), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR },
{MAP_CHAR_LEN(SC_UNO_PAGE_BORDERDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_BOTTBORDER), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_BOTTBRDDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BOTTOM_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_BOTTMARGIN), ATTR_ULSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_LO_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_CENTERHOR), ATTR_PAGE_HORCENTER,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_CENTERVER), ATTR_PAGE_VERCENTER,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_DISPNAME), SC_WID_UNO_DISPNAME,&::getCppuType((rtl::OUString*)0), beans::PropertyAttribute::READONLY, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FIRSTPAGE), ATTR_PAGE_FIRSTPAGENO,&::getCppuType((const sal_Int16*)0), 0, 0 },
//
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKCOL), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFFILT), SC_WID_UNO_FOOTERSET,&::getCppuType((const ::rtl::OUString*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFLOC), SC_WID_UNO_FOOTERSET,&::getCppuType((const style::GraphicLocation*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFURL), SC_WID_UNO_FOOTERSET,&::getCppuType((const ::rtl::OUString*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKTRAN), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKCOL), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBODYDIST), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBRDDIST), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBOR), SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBDIS), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(OLD_UNO_PAGE_FTRDYNAMIC), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRHEIGHT), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRDYNAMIC), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRON), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHARED), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBOR), SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBDIS), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTMAR), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(OLD_UNO_PAGE_FTRON), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBOR), SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBDIS),SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTMAR), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHADOW), SC_WID_UNO_FOOTERSET,&::getCppuType((const table::ShadowFormat*)0), 0, 0 },
{MAP_CHAR_LEN(OLD_UNO_PAGE_FTRSHARED), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBOR), SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBDIS), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
//
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKCOL), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFFILT), SC_WID_UNO_HEADERSET,&::getCppuType((const ::rtl::OUString*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFLOC), SC_WID_UNO_HEADERSET,&::getCppuType((const style::GraphicLocation*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFURL), SC_WID_UNO_HEADERSET,&::getCppuType((const ::rtl::OUString*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKTRAN), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKCOL), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBODYDIST), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBRDDIST), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBOR), SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBDIS), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(OLD_UNO_PAGE_HDRDYNAMIC), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRHEIGHT), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRDYNAMIC), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRON), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHARED), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBOR), SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBDIS), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTMAR), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(OLD_UNO_PAGE_HDRON), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBOR), SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBDIS),SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTMAR), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHADOW), SC_WID_UNO_HEADERSET,&::getCppuType((const table::ShadowFormat*)0), 0, 0 },
{MAP_CHAR_LEN(OLD_UNO_PAGE_HDRSHARED), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBOR), SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBDIS), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0), 0, 0 },
//
{MAP_CHAR_LEN(SC_UNO_PAGE_HEIGHT), ATTR_PAGE_SIZE, &::getCppuType((const sal_Int32*)0), 0, MID_SIZE_HEIGHT | CONVERT_TWIPS },
{MAP_CHAR_LEN(OLD_UNO_PAGE_BACKTRANS), ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
{MAP_CHAR_LEN(SC_UNO_PAGE_LANDSCAPE), ATTR_PAGE, &::getBooleanCppuType(), 0, MID_PAGE_ORIENTATION },
{MAP_CHAR_LEN(SC_UNO_PAGE_LEFTBORDER), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_LEFTBRDDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, LEFT_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_LEFTMARGIN), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_L_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_LEFTFTRCONT), ATTR_PAGE_FOOTERLEFT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_LEFTHDRCONT), ATTR_PAGE_HEADERLEFT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_NUMBERTYPE), ATTR_PAGE, &::getCppuType((const sal_Int16*)0), 0, MID_PAGE_NUMTYPE },
{MAP_CHAR_LEN(SC_UNO_PAGE_SCALEVAL), ATTR_PAGE_SCALE, &::getCppuType((const sal_Int16*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_SYTLELAYOUT), ATTR_PAGE, &::getCppuType((const style::PageStyleLayout*)0), 0, MID_PAGE_LAYOUT },
{MAP_CHAR_LEN(SC_UNO_PAGE_PRINTANNOT), ATTR_PAGE_NOTES, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_PRINTCHARTS), ATTR_PAGE_CHARTS, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_PRINTDOWN), ATTR_PAGE_TOPDOWN, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_PRINTDRAW), ATTR_PAGE_DRAWINGS, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_PRINTFORMUL), ATTR_PAGE_FORMULAS, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_PRINTGRID), ATTR_PAGE_GRID, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_PRINTHEADER), ATTR_PAGE_HEADERS, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_PRINTOBJS), ATTR_PAGE_OBJECTS, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_PRINTZERO), ATTR_PAGE_NULLVALS, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_PAPERTRAY), ATTR_PAGE_PAPERBIN, &::getCppuType((const ::rtl::OUString*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTBORDER), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTBRDDIST),ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, RIGHT_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTMARGIN), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_R_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTFTRCON), ATTR_PAGE_FOOTERRIGHT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTHDRCON), ATTR_PAGE_HEADERRIGHT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_SCALETOPAG), ATTR_PAGE_SCALETOPAGES,&::getCppuType((const sal_Int16*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_SCALETOX), ATTR_PAGE_SCALETO, &::getCppuType((const sal_Int16*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_SCALETOY), ATTR_PAGE_SCALETO, &::getCppuType((const sal_Int16*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_SHADOWFORM), ATTR_SHADOW, &::getCppuType((const table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_SIZE), ATTR_PAGE_SIZE, &::getCppuType((const awt::Size*)0), 0, MID_SIZE_SIZE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_TOPBORDER), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_TOPBRDDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, TOP_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_TOPMARGIN), ATTR_ULSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_UP_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKTRAN),SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKTRAN),SC_WID_UNO_HEADERSET,&::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_USERDEF), ATTR_USERDEF, &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_WIDTH), ATTR_PAGE_SIZE, &::getCppuType((const sal_Int32*)0), 0, MID_SIZE_WIDTH | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 },
{0,0,0,0,0,0}
};
static SfxItemPropertySet aPageStyleSet_Impl( aPageStyleMap_Impl );
return &aPageStyleSet_Impl;
}
// Map mit Inhalten des Header-Item-Sets
const SfxItemPropertyMap* lcl_GetHeaderStyleMap()
{
static SfxItemPropertyMapEntry aHeaderStyleMap_Impl[] =
{
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKCOL), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFFILT), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_FILTER },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFLOC), ATTR_BACKGROUND, &::getCppuType((const style::GraphicLocation*)0), 0, MID_GRAPHIC_POSITION },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFURL), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_URL },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKTRAN), ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
{MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKCOL), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBODYDIST), ATTR_ULSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_LO_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBRDDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BOTTOM_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(OLD_UNO_PAGE_HDRDYNAMIC), ATTR_PAGE_DYNAMIC, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRHEIGHT), ATTR_PAGE_SIZE, &::getCppuType((const sal_Int32*)0), 0, MID_SIZE_HEIGHT | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRDYNAMIC), ATTR_PAGE_DYNAMIC, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRON), ATTR_PAGE_ON, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHARED), ATTR_PAGE_SHARED, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, LEFT_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTMAR), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_L_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(OLD_UNO_PAGE_HDRON), ATTR_PAGE_ON, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBDIS),ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, RIGHT_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTMAR), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_R_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHADOW), ATTR_SHADOW, &::getCppuType((const table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS },
{MAP_CHAR_LEN(OLD_UNO_PAGE_HDRSHARED), ATTR_PAGE_SHARED, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, TOP_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKTRAN),ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
{0,0,0,0,0,0}
};
static SfxItemPropertyMap aHeaderStyleMap( aHeaderStyleMap_Impl );
return &aHeaderStyleMap;
}
// Map mit Inhalten des Footer-Item-Sets
const SfxItemPropertyMap* lcl_GetFooterStyleMap()
{
static SfxItemPropertyMapEntry aFooterStyleMap_Impl[] =
{
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKCOL), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFFILT), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_FILTER },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFLOC), ATTR_BACKGROUND, &::getCppuType((const style::GraphicLocation*)0), 0, MID_GRAPHIC_POSITION },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFURL), ATTR_BACKGROUND, &::getCppuType((const ::rtl::OUString*)0), 0, MID_GRAPHIC_URL },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKTRAN), ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
{MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKCOL), ATTR_BACKGROUND, &::getCppuType((const sal_Int32*)0), 0, MID_BACK_COLOR },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBODYDIST), ATTR_ULSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_UP_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBRDDIST), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, BOTTOM_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, BOTTOM_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(OLD_UNO_PAGE_FTRDYNAMIC), ATTR_PAGE_DYNAMIC, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRHEIGHT), ATTR_PAGE_SIZE, &::getCppuType((const sal_Int32*)0), 0, MID_SIZE_HEIGHT | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRDYNAMIC), ATTR_PAGE_DYNAMIC, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRON), ATTR_PAGE_ON, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHARED), ATTR_PAGE_SHARED, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, LEFT_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, LEFT_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTMAR), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_L_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(OLD_UNO_PAGE_FTRON), ATTR_PAGE_ON, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, RIGHT_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBDIS),ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, RIGHT_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTMAR), ATTR_LRSPACE, &::getCppuType((const sal_Int32*)0), 0, MID_R_MARGIN | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHADOW), ATTR_SHADOW, &::getCppuType((const table::ShadowFormat*)0), 0, 0 | CONVERT_TWIPS },
{MAP_CHAR_LEN(OLD_UNO_PAGE_FTRSHARED), ATTR_PAGE_SHARED, &::getBooleanCppuType(), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBOR), ATTR_BORDER, &::getCppuType((const table::BorderLine*)0), 0, TOP_BORDER | CONVERT_TWIPS },
{MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBDIS), ATTR_BORDER, &::getCppuType((const sal_Int32*)0), 0, TOP_BORDER_DISTANCE | CONVERT_TWIPS },
{MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKTRAN),ATTR_BACKGROUND, &::getBooleanCppuType(), 0, MID_GRAPHIC_TRANSPARENT },
{0,0,0,0,0,0}
};
static SfxItemPropertyMap aFooterStyleMap( aFooterStyleMap_Impl );
return &aFooterStyleMap;
}
//------------------------------------------------------------------------
// Index-Access auf die Style-Typen: 0 = Cell, 1 = Page
#define SC_STYLE_FAMILY_COUNT 2
#define SC_FAMILYNAME_CELL "CellStyles"
#define SC_FAMILYNAME_PAGE "PageStyles"
static sal_uInt16 aStyleFamilyTypes[SC_STYLE_FAMILY_COUNT] = { SFX_STYLE_FAMILY_PARA, SFX_STYLE_FAMILY_PAGE };
//------------------------------------------------------------------------
//! diese Funktionen in einen allgemeinen Header verschieben
inline long TwipsToHMM(long nTwips) { return (nTwips * 127 + 36) / 72; }
inline long HMMToTwips(long nHMM) { return (nHMM * 72 + 63) / 127; }
//------------------------------------------------------------------------
#define SCSTYLE_SERVICE "com.sun.star.style.Style"
#define SCCELLSTYLE_SERVICE "com.sun.star.style.CellStyle"
#define SCPAGESTYLE_SERVICE "com.sun.star.style.PageStyle"
SC_SIMPLE_SERVICE_INFO( ScStyleFamiliesObj, "ScStyleFamiliesObj", "com.sun.star.style.StyleFamilies" )
SC_SIMPLE_SERVICE_INFO( ScStyleFamilyObj, "ScStyleFamilyObj", "com.sun.star.style.StyleFamily" )
//------------------------------------------------------------------------
#define SC_PAPERBIN_DEFAULTNAME "[From printer settings]"
//------------------------------------------------------------------------
// conversion programmatic <-> display (visible) name
// currently, the core always has the visible names
// the api is required to use programmatic names for default styles
// these programmatic names must never change!
#define SC_STYLE_PROG_STANDARD "Default"
#define SC_STYLE_PROG_RESULT "Result"
#define SC_STYLE_PROG_RESULT1 "Result2"
#define SC_STYLE_PROG_HEADLINE "Heading"
#define SC_STYLE_PROG_HEADLINE1 "Heading1"
#define SC_STYLE_PROG_REPORT "Report"
struct ScDisplayNameMap
{
String aDispName;
String aProgName;
};
const ScDisplayNameMap* lcl_GetStyleNameMap( sal_uInt16 nType )
{
if ( nType == SFX_STYLE_FAMILY_PARA )
{
static sal_Bool bCellMapFilled = sal_False;
static ScDisplayNameMap aCellMap[6];
if ( !bCellMapFilled )
{
aCellMap[0].aDispName = ScGlobal::GetRscString( STR_STYLENAME_STANDARD );
aCellMap[0].aProgName = String::CreateFromAscii( SC_STYLE_PROG_STANDARD );
aCellMap[1].aDispName = ScGlobal::GetRscString( STR_STYLENAME_RESULT );
aCellMap[1].aProgName = String::CreateFromAscii( SC_STYLE_PROG_RESULT );
aCellMap[2].aDispName = ScGlobal::GetRscString( STR_STYLENAME_RESULT1 );
aCellMap[2].aProgName = String::CreateFromAscii( SC_STYLE_PROG_RESULT1 );
aCellMap[3].aDispName = ScGlobal::GetRscString( STR_STYLENAME_HEADLINE );
aCellMap[3].aProgName = String::CreateFromAscii( SC_STYLE_PROG_HEADLINE );
aCellMap[4].aDispName = ScGlobal::GetRscString( STR_STYLENAME_HEADLINE1 );
aCellMap[4].aProgName = String::CreateFromAscii( SC_STYLE_PROG_HEADLINE1 );
// last entry remains empty
bCellMapFilled = sal_True;
}
return aCellMap;
}
else if ( nType == SFX_STYLE_FAMILY_PAGE )
{
static sal_Bool bPageMapFilled = sal_False;
static ScDisplayNameMap aPageMap[3];
if ( !bPageMapFilled )
{
aPageMap[0].aDispName = ScGlobal::GetRscString( STR_STYLENAME_STANDARD );
aPageMap[0].aProgName = String::CreateFromAscii( SC_STYLE_PROG_STANDARD );
aPageMap[1].aDispName = ScGlobal::GetRscString( STR_STYLENAME_REPORT );
aPageMap[1].aProgName = String::CreateFromAscii( SC_STYLE_PROG_REPORT );
// last entry remains empty
bPageMapFilled = sal_True;
}
return aPageMap;
}
DBG_ERROR("invalid family");
return NULL;
}
// programmatic name suffix for display names that match other programmatic names
// is " (user)" including a space
#define SC_SUFFIX_USER " (user)"
#define SC_SUFFIX_USER_LEN 7
sal_Bool lcl_EndsWithUser( const String& rString )
{
const sal_Unicode *pChar = rString.GetBuffer();
xub_StrLen nLen = rString.Len();
return nLen >= SC_SUFFIX_USER_LEN &&
pChar[nLen-7] == ' ' &&
pChar[nLen-6] == '(' &&
pChar[nLen-5] == 'u' &&
pChar[nLen-4] == 's' &&
pChar[nLen-3] == 'e' &&
pChar[nLen-2] == 'r' &&
pChar[nLen-1] == ')';
}
// static
String ScStyleNameConversion::DisplayToProgrammaticName( const String& rDispName, sal_uInt16 nType )
{
sal_Bool bDisplayIsProgrammatic = sal_False;
const ScDisplayNameMap* pNames = lcl_GetStyleNameMap( nType );
if (pNames)
{
do
{
if (pNames->aDispName == rDispName)
return pNames->aProgName;
else if (pNames->aProgName == rDispName)
bDisplayIsProgrammatic = sal_True; // display name matches any programmatic name
}
while( (++pNames)->aDispName.Len() );
}
if ( bDisplayIsProgrammatic || lcl_EndsWithUser( rDispName ) )
{
// add the (user) suffix if the display name matches any style's programmatic name
// or if it already contains the suffix
String aRet(rDispName);
aRet.AppendAscii( RTL_CONSTASCII_STRINGPARAM( SC_SUFFIX_USER ) );
return aRet;
}
return rDispName;
}
// static
String ScStyleNameConversion::ProgrammaticToDisplayName( const String& rProgName, sal_uInt16 nType )
{
if ( lcl_EndsWithUser( rProgName ) )
{
// remove the (user) suffix, don't compare to map entries
return rProgName.Copy( 0, rProgName.Len() - SC_SUFFIX_USER_LEN );
}
const ScDisplayNameMap* pNames = lcl_GetStyleNameMap( nType );
if (pNames)
{
do
{
if (pNames->aProgName == rProgName)
return pNames->aDispName;
}
while( (++pNames)->aDispName.Len() );
}
return rProgName;
}
//------------------------------------------------------------------------
sal_Bool lcl_AnyTabProtected( ScDocument& rDoc )
{
SCTAB nTabCount = rDoc.GetTableCount();
for (SCTAB i=0; i<nTabCount; i++)
if (rDoc.IsTabProtected(i))
return sal_True;
return sal_False;
}
//------------------------------------------------------------------------
ScStyleFamiliesObj::ScStyleFamiliesObj(ScDocShell* pDocSh) :
pDocShell( pDocSh )
{
pDocShell->GetDocument()->AddUnoObject(*this);
}
ScStyleFamiliesObj::~ScStyleFamiliesObj()
{
if (pDocShell)
pDocShell->GetDocument()->RemoveUnoObject(*this);
}
void ScStyleFamiliesObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
{
// Referenz-Update interessiert hier nicht
if ( rHint.ISA( SfxSimpleHint ) &&
((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
{
pDocShell = NULL; // ungueltig geworden
}
}
// XStyleFamilies
ScStyleFamilyObj*ScStyleFamiliesObj::GetObjectByType_Impl(sal_uInt16 nType) const
{
if ( pDocShell )
{
if ( nType == SFX_STYLE_FAMILY_PARA )
return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PARA );
else if ( nType == SFX_STYLE_FAMILY_PAGE )
return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PAGE );
}
DBG_ERROR("getStyleFamilyByType: keine DocShell oder falscher Typ");
return NULL;
}
ScStyleFamilyObj* ScStyleFamiliesObj::GetObjectByIndex_Impl(sal_uInt32 nIndex) const
{
if ( nIndex < SC_STYLE_FAMILY_COUNT )
return GetObjectByType_Impl(aStyleFamilyTypes[nIndex]);
return NULL; // ungueltiger Index
}
ScStyleFamilyObj* ScStyleFamiliesObj::GetObjectByName_Impl(const rtl::OUString& aName) const
{
if ( pDocShell )
{
String aNameStr( aName );
if ( aNameStr.EqualsAscii( SC_FAMILYNAME_CELL ) )
return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PARA );
else if ( aNameStr.EqualsAscii( SC_FAMILYNAME_PAGE ) )
return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PAGE );
}
// no assertion - called directly from getByName
return NULL;
}
// container::XIndexAccess
sal_Int32 SAL_CALL ScStyleFamiliesObj::getCount() throw(uno::RuntimeException)
{
return SC_STYLE_FAMILY_COUNT;
}
uno::Any SAL_CALL ScStyleFamiliesObj::getByIndex( sal_Int32 nIndex )
throw(lang::IndexOutOfBoundsException,
lang::WrappedTargetException, uno::RuntimeException)
{
ScUnoGuard aGuard;
uno::Reference< container::XNameContainer > xFamily(GetObjectByIndex_Impl(nIndex));
if (xFamily.is())
return uno::makeAny(xFamily);
else
throw lang::IndexOutOfBoundsException();
// return uno::Any();
}
uno::Type SAL_CALL ScStyleFamiliesObj::getElementType() throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
return ::getCppuType((const uno::Reference< container::XNameContainer >*)0); // muss zu getByIndex passen
}
sal_Bool SAL_CALL ScStyleFamiliesObj::hasElements() throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
return ( getCount() != 0 );
}
// container::XNameAccess
uno::Any SAL_CALL ScStyleFamiliesObj::getByName( const rtl::OUString& aName )
throw(container::NoSuchElementException,
lang::WrappedTargetException, uno::RuntimeException)
{
ScUnoGuard aGuard;
uno::Reference< container::XNameContainer > xFamily(GetObjectByName_Impl(aName));
if (xFamily.is())
return uno::makeAny(xFamily);
else
throw container::NoSuchElementException();
// return uno::Any();
}
uno::Sequence<rtl::OUString> SAL_CALL ScStyleFamiliesObj::getElementNames()
throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
uno::Sequence<rtl::OUString> aNames(SC_STYLE_FAMILY_COUNT);
rtl::OUString* pNames = aNames.getArray();
pNames[0] = rtl::OUString::createFromAscii( SC_FAMILYNAME_CELL );
pNames[1] = rtl::OUString::createFromAscii( SC_FAMILYNAME_PAGE );
return aNames;
}
sal_Bool SAL_CALL ScStyleFamiliesObj::hasByName( const rtl::OUString& aName )
throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
String aNameStr( aName );
return ( aNameStr.EqualsAscii( SC_FAMILYNAME_CELL ) || aNameStr.EqualsAscii( SC_FAMILYNAME_PAGE ) );
}
// style::XStyleLoader
void SAL_CALL ScStyleFamiliesObj::loadStylesFromURL( const rtl::OUString& aURL,
const uno::Sequence<beans::PropertyValue>& aOptions )
throw(io::IOException, uno::RuntimeException)
{
//! use aOptions (like Writer)
//! set flag to disable filter option dialogs when importing
String aFilter; // empty - detect
String aFiltOpt;
ScDocumentLoader aLoader( aURL, aFilter, aFiltOpt );
ScDocShell* pSource = aLoader.GetDocShell();
if ( pSource && pDocShell )
{
// collect options
sal_Bool bLoadReplace = sal_True; // defaults
sal_Bool bLoadCellStyles = sal_True;
sal_Bool bLoadPageStyles = sal_True;
const beans::PropertyValue* pPropArray = aOptions.getConstArray();
long nPropCount = aOptions.getLength();
for (long i = 0; i < nPropCount; i++)
{
const beans::PropertyValue& rProp = pPropArray[i];
String aPropName(rProp.Name);
if (aPropName.EqualsAscii( SC_UNONAME_OVERWSTL ))
bLoadReplace = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
else if (aPropName.EqualsAscii( SC_UNONAME_LOADCELL ))
bLoadCellStyles = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
else if (aPropName.EqualsAscii( SC_UNONAME_LOADPAGE ))
bLoadPageStyles = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
}
pDocShell->LoadStylesArgs( *pSource, bLoadReplace, bLoadCellStyles, bLoadPageStyles );
pDocShell->SetDocumentModified(); // paint is inside LoadStyles
}
}
uno::Sequence<beans::PropertyValue> SAL_CALL ScStyleFamiliesObj::getStyleLoaderOptions()
throw(uno::RuntimeException)
{
// return defaults for options (?)
uno::Sequence<beans::PropertyValue> aSequence(3);
beans::PropertyValue* pArray = aSequence.getArray();
pArray[0].Name = rtl::OUString::createFromAscii( SC_UNONAME_OVERWSTL );
ScUnoHelpFunctions::SetBoolInAny( pArray[0].Value, sal_True );
pArray[1].Name = rtl::OUString::createFromAscii( SC_UNONAME_LOADCELL );
ScUnoHelpFunctions::SetBoolInAny( pArray[1].Value, sal_True );
pArray[2].Name = rtl::OUString::createFromAscii( SC_UNONAME_LOADPAGE );
ScUnoHelpFunctions::SetBoolInAny( pArray[2].Value, sal_True );
return aSequence;
}
//------------------------------------------------------------------------
ScStyleFamilyObj::ScStyleFamilyObj(ScDocShell* pDocSh, SfxStyleFamily eFam) :
pDocShell( pDocSh ),
eFamily( eFam )
{
pDocShell->GetDocument()->AddUnoObject(*this);
}
ScStyleFamilyObj::~ScStyleFamilyObj()
{
if (pDocShell)
pDocShell->GetDocument()->RemoveUnoObject(*this);
}
void ScStyleFamilyObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
{
// Referenz-Update interessiert hier nicht
if ( rHint.ISA( SfxSimpleHint ) &&
((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
{
pDocShell = NULL; // ungueltig geworden
}
}
// XStyleFamily
ScStyleObj* ScStyleFamilyObj::GetObjectByIndex_Impl(sal_uInt32 nIndex)
{
if ( pDocShell )
{
ScDocument* pDoc = pDocShell->GetDocument();
ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
SfxStyleSheetIterator aIter( pStylePool, eFamily );
if ( nIndex < aIter.Count() )
{
SfxStyleSheetBase* pStyle = aIter[(sal_uInt16)nIndex];
if ( pStyle )
{
return new ScStyleObj( pDocShell, eFamily, String (pStyle->GetName()) );
}
}
}
return NULL;
}
ScStyleObj* ScStyleFamilyObj::GetObjectByName_Impl(const rtl::OUString& aName)
{
if ( pDocShell )
{
String aString(aName);
ScDocument* pDoc = pDocShell->GetDocument();
ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
if ( pStylePool->Find( aString, eFamily ) )
return new ScStyleObj( pDocShell, eFamily, aString );
}
return NULL;
}
void SAL_CALL ScStyleFamilyObj::insertByName( const rtl::OUString& aName, const uno::Any& aElement )
throw(lang::IllegalArgumentException, container::ElementExistException,
lang::WrappedTargetException, uno::RuntimeException)
{
ScUnoGuard aGuard;
sal_Bool bDone = sal_False;
// Reflection muss nicht uno::XInterface sein, kann auch irgendein Interface sein...
uno::Reference< uno::XInterface > xInterface(aElement, uno::UNO_QUERY);
if ( xInterface.is() )
{
ScStyleObj* pStyleObj = ScStyleObj::getImplementation( xInterface );
if ( pStyleObj && pStyleObj->GetFamily() == eFamily &&
!pStyleObj->IsInserted() ) // noch nicht eingefuegt?
{
String aNameStr(ScStyleNameConversion::ProgrammaticToDisplayName( aName, sal::static_int_cast<sal_uInt16>(eFamily) ));
ScDocument* pDoc = pDocShell->GetDocument();
ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
//! DocFunc-Funktion??
//! Undo ?????????????
if ( !pStylePool->Find( aNameStr, eFamily ) ) // noch nicht vorhanden
{
(void)pStylePool->Make( aNameStr, eFamily, SFXSTYLEBIT_USERDEF );
if ( eFamily == SFX_STYLE_FAMILY_PARA && !pDoc->IsImportingXML() )
pDoc->GetPool()->CellStyleCreated( aNameStr );
pStyleObj->InitDoc( pDocShell, aNameStr ); // Objekt kann benutzt werden
pDocShell->SetDocumentModified(); // verwendet wird der neue Style noch nicht
bDone = sal_True;
}
else
throw container::ElementExistException();
}
}
if (!bDone)
{
// other errors are handled above
throw lang::IllegalArgumentException();
}
}
void SAL_CALL ScStyleFamilyObj::replaceByName( const rtl::OUString& aName, const uno::Any& aElement )
throw(lang::IllegalArgumentException, container::NoSuchElementException,
lang::WrappedTargetException, uno::RuntimeException)
{
ScUnoGuard aGuard;
//! zusammenfassen?
removeByName( aName );
insertByName( aName, aElement );
}
void SAL_CALL ScStyleFamilyObj::removeByName( const rtl::OUString& aName )
throw(container::NoSuchElementException,
lang::WrappedTargetException, uno::RuntimeException)
{
ScUnoGuard aGuard;
sal_Bool bFound = sal_False;
if ( pDocShell )
{
String aString(ScStyleNameConversion::ProgrammaticToDisplayName( aName, sal::static_int_cast<sal_uInt16>(eFamily) ));
ScDocument* pDoc = pDocShell->GetDocument();
ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
//! DocFunc-Funktion??
//! Undo ?????????????
SfxStyleSheetBase* pStyle = pStylePool->Find( aString, eFamily );
if (pStyle)
{
bFound = sal_True;
if ( eFamily == SFX_STYLE_FAMILY_PARA )
{
// wie ScViewFunc::RemoveStyleSheetInUse
VirtualDevice aVDev;
Point aLogic = aVDev.LogicToPixel( Point(1000,1000), MAP_TWIP );
double nPPTX = aLogic.X() / 1000.0;
double nPPTY = aLogic.Y() / 1000.0;
Fraction aZoom(1,1);
pDoc->StyleSheetChanged( pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom );
pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT );
pDocShell->SetDocumentModified();
pStylePool->Remove( pStyle );
//! InvalidateAttribs(); // Bindings-Invalidate
}
else
{
if ( pDoc->RemovePageStyleInUse( aString ) )
pDocShell->PageStyleModified( ScGlobal::GetRscString(STR_STYLENAME_STANDARD), sal_True );
pStylePool->Remove( pStyle );
SfxBindings* pBindings = pDocShell->GetViewBindings();
if (pBindings)
pBindings->Invalidate( SID_STYLE_FAMILY4 );
pDocShell->SetDocumentModified();
}
}
}
if (!bFound)
throw container::NoSuchElementException();
}
// container::XIndexAccess
sal_Int32 SAL_CALL ScStyleFamilyObj::getCount() throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
if ( pDocShell )
{
ScDocument* pDoc = pDocShell->GetDocument();
ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
SfxStyleSheetIterator aIter( pStylePool, eFamily );
return aIter.Count();
}
return 0;
}
uno::Any SAL_CALL ScStyleFamilyObj::getByIndex( sal_Int32 nIndex )
throw(lang::IndexOutOfBoundsException,
lang::WrappedTargetException, uno::RuntimeException)
{
ScUnoGuard aGuard;
uno::Reference< style::XStyle > xObj(GetObjectByIndex_Impl(nIndex));
if (xObj.is())
return uno::makeAny(xObj);
else
throw lang::IndexOutOfBoundsException();
// return uno::Any();
}
uno::Type SAL_CALL ScStyleFamilyObj::getElementType() throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
return ::getCppuType((const uno::Reference< style::XStyle >*)0); // muss zu getByIndex passen
}
sal_Bool SAL_CALL ScStyleFamilyObj::hasElements() throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
return ( getCount() != 0 );
}
// container::XNameAccess
uno::Any SAL_CALL ScStyleFamilyObj::getByName( const rtl::OUString& aName )
throw(container::NoSuchElementException,
lang::WrappedTargetException, uno::RuntimeException)
{
ScUnoGuard aGuard;
uno::Reference< style::XStyle > xObj(
GetObjectByName_Impl( ScStyleNameConversion::ProgrammaticToDisplayName( aName, sal::static_int_cast<sal_uInt16>(eFamily) ) ));
if (xObj.is())
return uno::makeAny(xObj);
else
throw container::NoSuchElementException();
// return uno::Any();
}
uno::Sequence<rtl::OUString> SAL_CALL ScStyleFamilyObj::getElementNames()
throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
if ( pDocShell )
{
ScDocument* pDoc = pDocShell->GetDocument();
ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
SfxStyleSheetIterator aIter( pStylePool, eFamily );
sal_uInt16 nCount = aIter.Count();
String aName;
uno::Sequence<rtl::OUString> aSeq(nCount);
rtl::OUString* pAry = aSeq.getArray();
SfxStyleSheetBase* pStyle = aIter.First();
sal_uInt16 nPos = 0;
while (pStyle)
{
DBG_ASSERT( nPos<nCount, "Anzahl durcheinandergekommen" );
if (nPos<nCount)
pAry[nPos++] = ScStyleNameConversion::DisplayToProgrammaticName(
pStyle->GetName(), sal::static_int_cast<sal_uInt16>(eFamily) );
pStyle = aIter.Next();
}
return aSeq;
}
return uno::Sequence<rtl::OUString>();
}
sal_Bool SAL_CALL ScStyleFamilyObj::hasByName( const rtl::OUString& aName )
throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
if ( pDocShell )
{
String aString(ScStyleNameConversion::ProgrammaticToDisplayName( aName, sal::static_int_cast<sal_uInt16>(eFamily) ));
ScDocument* pDoc = pDocShell->GetDocument();
ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
if ( pStylePool->Find( aString, eFamily ) )
return sal_True;
}
return sal_False;
}
// XPropertySet
uno::Reference< beans::XPropertySetInfo > SAL_CALL ScStyleFamilyObj::getPropertySetInfo( ) throw (uno::RuntimeException)
{
OSL_ENSURE( 0, "###unexpected!" );
return uno::Reference< beans::XPropertySetInfo >();
}
void SAL_CALL ScStyleFamilyObj::setPropertyValue( const ::rtl::OUString&, const uno::Any& ) throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
{
OSL_ENSURE( 0, "###unexpected!" );
}
uno::Any SAL_CALL ScStyleFamilyObj::getPropertyValue( const ::rtl::OUString& sPropertyName ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
{
uno::Any aRet;
if ( sPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("DisplayName") ) )
{
ScUnoGuard aGuard;
sal_uInt32 nResId = 0;
switch ( eFamily )
{
case SFX_STYLE_FAMILY_PARA:
nResId = STR_STYLE_FAMILY_CELL; break;
case SFX_STYLE_FAMILY_PAGE:
nResId = STR_STYLE_FAMILY_PAGE; break;
default:
OSL_ENSURE( 0, "ScStyleFamilyObj::getPropertyValue(): invalid family" );
}
if ( nResId > 0 )
{
::rtl::OUString sDisplayName( ScGlobal::GetRscString( static_cast< sal_uInt16 >( nResId ) ) );
aRet = uno::makeAny( sDisplayName );
}
}
else
{
throw beans::UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("unknown property: ") ) + sPropertyName, static_cast<OWeakObject *>(this) );
}
return aRet;
}
void SAL_CALL ScStyleFamilyObj::addPropertyChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XPropertyChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
{
OSL_ENSURE( 0, "###unexpected!" );
}
void SAL_CALL ScStyleFamilyObj::removePropertyChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XPropertyChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
{
OSL_ENSURE( 0, "###unexpected!" );
}
void SAL_CALL ScStyleFamilyObj::addVetoableChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XVetoableChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
{
OSL_ENSURE( 0, "###unexpected!" );
}
void SAL_CALL ScStyleFamilyObj::removeVetoableChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XVetoableChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
{
OSL_ENSURE( 0, "###unexpected!" );
}
//------------------------------------------------------------------------
// Default-ctor wird fuer die Reflection gebraucht
//UNUSED2008-05 ScStyleObj::ScStyleObj() :
//UNUSED2008-05 aPropSet( lcl_GetCellStyleMap() ),
//UNUSED2008-05 pDocShell( NULL ),
//UNUSED2008-05 eFamily( SFX_STYLE_FAMILY_PARA )
//UNUSED2008-05 {
//UNUSED2008-05 }
ScStyleObj::ScStyleObj(ScDocShell* pDocSh, SfxStyleFamily eFam, const String& rName) :
pPropSet( (eFam == SFX_STYLE_FAMILY_PARA) ? lcl_GetCellStyleSet() : lcl_GetPageStyleSet() ),
pDocShell( pDocSh ),
eFamily( eFam ),
aStyleName( rName )
{
// pDocShell ist Null, wenn per ServiceProvider erzeugt
if (pDocShell)
pDocShell->GetDocument()->AddUnoObject(*this);
}
void ScStyleObj::InitDoc( ScDocShell* pNewDocSh, const String& rNewName )
{
if ( pNewDocSh && !pDocShell )
{
aStyleName = rNewName;
pDocShell = pNewDocSh;
pDocShell->GetDocument()->AddUnoObject(*this);
}
}
ScStyleObj::~ScStyleObj()
{
if (pDocShell)
pDocShell->GetDocument()->RemoveUnoObject(*this);
}
// XUnoTunnel
sal_Int64 SAL_CALL ScStyleObj::getSomething(
const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException)
{
if ( rId.getLength() == 16 &&
0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
rId.getConstArray(), 16 ) )
{
return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this));
}
return 0;
}
// static
const uno::Sequence<sal_Int8>& ScStyleObj::getUnoTunnelId()
{
static uno::Sequence<sal_Int8> * pSeq = 0;
if( !pSeq )
{
osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() );
if( !pSeq )
{
static uno::Sequence< sal_Int8 > aSeq( 16 );
rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
pSeq = &aSeq;
}
}
return *pSeq;
}
// static
ScStyleObj* ScStyleObj::getImplementation(
const uno::Reference<uno::XInterface> xObj )
{
ScStyleObj* pRet = NULL;
uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY );
if (xUT.is())
pRet = reinterpret_cast<ScStyleObj*>(sal::static_int_cast<sal_IntPtr>(xUT->getSomething(getUnoTunnelId())));
return pRet;
}
void ScStyleObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
{
// Referenz-Update interessiert hier nicht
if ( rHint.ISA( SfxSimpleHint ) &&
((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
{
pDocShell = NULL; // ungueltig geworden
}
}
SfxStyleSheetBase* ScStyleObj::GetStyle_Impl()
{
if ( pDocShell )
{
ScDocument* pDoc = pDocShell->GetDocument();
ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
return pStylePool->Find( aStyleName, eFamily );
}
return NULL;
}
// style::XStyle
sal_Bool SAL_CALL ScStyleObj::isUserDefined() throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
SfxStyleSheetBase* pStyle = GetStyle_Impl();
if (pStyle)
return pStyle->IsUserDefined();
return sal_False;
}
sal_Bool SAL_CALL ScStyleObj::isInUse() throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
SfxStyleSheetBase* pStyle = GetStyle_Impl();
if (pStyle)
return pStyle->IsUsed();
return sal_False;
}
rtl::OUString SAL_CALL ScStyleObj::getParentStyle() throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
SfxStyleSheetBase* pStyle = GetStyle_Impl();
if (pStyle)
return ScStyleNameConversion::DisplayToProgrammaticName( pStyle->GetParent(), sal::static_int_cast<sal_uInt16>(eFamily) );
return rtl::OUString();
}
void SAL_CALL ScStyleObj::setParentStyle( const rtl::OUString& rParentStyle )
throw(container::NoSuchElementException, uno::RuntimeException)
{
ScUnoGuard aGuard;
SfxStyleSheetBase* pStyle = GetStyle_Impl();
if (pStyle)
{
// #70909# cell styles cannot be modified if any sheet is protected
if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) )
return; //! exception?
//! DocFunc-Funktion??
//! Undo ?????????????
String aString(ScStyleNameConversion::ProgrammaticToDisplayName( rParentStyle, sal::static_int_cast<sal_uInt16>(eFamily) ));
sal_Bool bOk = pStyle->SetParent( aString );
if (bOk)
{
// wie bei setPropertyValue
ScDocument* pDoc = pDocShell->GetDocument();
if ( eFamily == SFX_STYLE_FAMILY_PARA )
{
// Zeilenhoehen anpassen...
VirtualDevice aVDev;
Point aLogic = aVDev.LogicToPixel( Point(1000,1000), MAP_TWIP );
double nPPTX = aLogic.X() / 1000.0;
double nPPTY = aLogic.Y() / 1000.0;
Fraction aZoom(1,1);
pDoc->StyleSheetChanged( pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom );
pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT );
pDocShell->SetDocumentModified();
}
else
{
//! ModifyStyleSheet am Dokument (alte Werte merken)
pDocShell->PageStyleModified( aStyleName, sal_True );
}
}
}
}
// container::XNamed
rtl::OUString SAL_CALL ScStyleObj::getName() throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
SfxStyleSheetBase* pStyle = GetStyle_Impl();
if (pStyle)
return ScStyleNameConversion::DisplayToProgrammaticName( pStyle->GetName(), sal::static_int_cast<sal_uInt16>(eFamily) );
return rtl::OUString();
}
void SAL_CALL ScStyleObj::setName( const rtl::OUString& aNewName )
throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
SfxStyleSheetBase* pStyle = GetStyle_Impl();
if (pStyle)
{
// #71225# cell styles cannot be renamed if any sheet is protected
if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) )
return; //! exception?
//! DocFunc-Funktion??
//! Undo ?????????????
String aString(aNewName);
sal_Bool bOk = pStyle->SetName( aString );
if (bOk)
{
aStyleName = aString; //! notify other objects for this style?
ScDocument* pDoc = pDocShell->GetDocument();
if ( eFamily == SFX_STYLE_FAMILY_PARA && !pDoc->IsImportingXML() )
pDoc->GetPool()->CellStyleCreated( aString );
// Zellvorlagen = 2, Seitenvorlagen = 4
sal_uInt16 nId = ( eFamily == SFX_STYLE_FAMILY_PARA ) ?
SID_STYLE_FAMILY2 : SID_STYLE_FAMILY4;
SfxBindings* pBindings = pDocShell->GetViewBindings();
if (pBindings)
{
pBindings->Invalidate( nId );
pBindings->Invalidate( SID_STYLE_APPLY );
}
}
}
}
// static
uno::Reference<container::XIndexReplace> ScStyleObj::CreateEmptyNumberingRules()
{
SvxNumRule aRule( 0, 0, sal_True ); // nothing supported
return SvxCreateNumRule( &aRule );
}
// beans::XPropertyState
const SfxItemSet* ScStyleObj::GetStyleItemSet_Impl( const ::rtl::OUString& rPropName,
const SfxItemPropertySimpleEntry*& rpResultEntry )
{
//! OUString as argument?
SfxStyleSheetBase* pStyle = GetStyle_Impl();
if (pStyle)
{
const SfxItemPropertySimpleEntry* pEntry = NULL;
if ( eFamily == SFX_STYLE_FAMILY_PAGE )
{
pEntry = lcl_GetHeaderStyleMap()->getByName( rPropName );
if ( pEntry ) // only item-wids in header/footer map
{
rpResultEntry = pEntry;
return &((const SvxSetItem&)pStyle->GetItemSet().Get(ATTR_PAGE_HEADERSET)).GetItemSet();
}
pEntry = lcl_GetFooterStyleMap()->getByName( rPropName );
if ( pEntry ) // only item-wids in header/footer map
{
rpResultEntry = pEntry;
return &((const SvxSetItem&)pStyle->GetItemSet().Get(ATTR_PAGE_FOOTERSET)).GetItemSet();
}
}
pEntry = pPropSet->getPropertyMap()->getByName( rPropName );
if ( pEntry )
{
rpResultEntry = pEntry;
return &pStyle->GetItemSet();
}
}
rpResultEntry = NULL;
return NULL;
}
beans::PropertyState SAL_CALL ScStyleObj::getPropertyState( const rtl::OUString& aPropertyName )
throw(beans::UnknownPropertyException, uno::RuntimeException)
{
ScUnoGuard aGuard;
beans::PropertyState eRet = beans::PropertyState_DIRECT_VALUE;
const SfxItemPropertySimpleEntry* pResultEntry = NULL;
const SfxItemSet* pItemSet = GetStyleItemSet_Impl( aPropertyName, pResultEntry );
if ( pItemSet && pResultEntry )
{
sal_uInt16 nWhich = pResultEntry->nWID;
if ( nWhich == SC_WID_UNO_TBLBORD )
{
nWhich = ATTR_BORDER;
}
if ( IsScItemWid( nWhich ) )
{
SfxItemState eState = pItemSet->GetItemState( nWhich, sal_False );
// // if no rotate value is set, look at orientation
// //! also for a fixed value of 0 (in case orientation is ambiguous)?
// if ( nWhich == ATTR_ROTATE_VALUE && eState == SFX_ITEM_DEFAULT )
// eState = pItemSet->GetItemState( ATTR_ORIENTATION, sal_False );
if ( eState == SFX_ITEM_SET )
eRet = beans::PropertyState_DIRECT_VALUE;
else if ( eState == SFX_ITEM_DEFAULT )
eRet = beans::PropertyState_DEFAULT_VALUE;
else if ( eState == SFX_ITEM_DONTCARE )
eRet = beans::PropertyState_AMBIGUOUS_VALUE; // kann eigentlich nicht sein...
else
{
DBG_ERROR("unbekannter ItemState");
}
}
}
return eRet;
}
uno::Sequence<beans::PropertyState> SAL_CALL ScStyleObj::getPropertyStates(
const uno::Sequence<rtl::OUString>& aPropertyNames )
throw(beans::UnknownPropertyException, uno::RuntimeException)
{
// duemmliche Default-Implementierung: alles einzeln per getPropertyState holen
//! sollte optimiert werden!
ScUnoGuard aGuard;
const rtl::OUString* pNames = aPropertyNames.getConstArray();
uno::Sequence<beans::PropertyState> aRet(aPropertyNames.getLength());
beans::PropertyState* pStates = aRet.getArray();
for(sal_Int32 i = 0; i < aPropertyNames.getLength(); i++)
pStates[i] = getPropertyState(pNames[i]);
return aRet;
}
void SAL_CALL ScStyleObj::setPropertyToDefault( const rtl::OUString& aPropertyName )
throw(beans::UnknownPropertyException, uno::RuntimeException)
{
ScUnoGuard aGuard;
const SfxItemPropertyMap* pMap = pPropSet->getPropertyMap();
const SfxItemPropertySimpleEntry* pEntry = pMap->getByName( aPropertyName );
if ( !pEntry )
throw beans::UnknownPropertyException();
SetOnePropertyValue( aPropertyName, pEntry, NULL );
}
uno::Any SAL_CALL ScStyleObj::getPropertyDefault( const rtl::OUString& aPropertyName )
throw(beans::UnknownPropertyException, lang::WrappedTargetException,
uno::RuntimeException)
{
ScUnoGuard aGuard;
uno::Any aAny;
const SfxItemPropertySimpleEntry* pResultEntry = NULL;
const SfxItemSet* pStyleSet = GetStyleItemSet_Impl( aPropertyName, pResultEntry );
if ( pStyleSet && pResultEntry )
{
sal_uInt16 nWhich = pResultEntry->nWID;
if ( IsScItemWid( nWhich ) )
{
// Default ist Default vom ItemPool, nicht vom Standard-Style,
// damit es zu setPropertyToDefault passt
SfxItemSet aEmptySet( *pStyleSet->GetPool(), pStyleSet->GetRanges() );
// #65253# Default-Items mit falscher Slot-ID funktionieren im SfxItemPropertySet3 nicht
//! Slot-IDs aendern...
if ( aEmptySet.GetPool()->GetSlotId(nWhich) == nWhich &&
aEmptySet.GetItemState(nWhich, sal_False) == SFX_ITEM_DEFAULT )
{
aEmptySet.Put( aEmptySet.Get( nWhich ) );
}
const SfxItemSet* pItemSet = &aEmptySet;
switch ( nWhich ) // fuer Item-Spezial-Behandlungen
{
case ATTR_VALUE_FORMAT:
// default has no language set
aAny <<= sal_Int32( ((const SfxUInt32Item&)pItemSet->Get(nWhich)).GetValue() );
break;
case ATTR_INDENT:
aAny <<= sal_Int16( TwipsToHMM(((const SfxUInt16Item&)
pItemSet->Get(nWhich)).GetValue()) );
break;
case ATTR_PAGE_SCALE:
case ATTR_PAGE_SCALETOPAGES:
case ATTR_PAGE_FIRSTPAGENO:
aAny <<= sal_Int16( ((const SfxUInt16Item&)pItemSet->Get(nWhich)).GetValue() );
break;
case ATTR_PAGE_CHARTS:
case ATTR_PAGE_OBJECTS:
case ATTR_PAGE_DRAWINGS:
//! sal_Bool-MID fuer ScViewObjectModeItem definieren?
aAny <<= sal_Bool( ((const ScViewObjectModeItem&)pItemSet->Get(nWhich)).
GetValue() == VOBJ_MODE_SHOW );
break;
case ATTR_PAGE_SCALETO:
{
const ScPageScaleToItem aItem((const ScPageScaleToItem&)pItemSet->Get(nWhich));
if (aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SC_UNO_PAGE_SCALETOX )))
aAny = uno::makeAny(static_cast<sal_Int16>(aItem.GetWidth()));
else
aAny = uno::makeAny(static_cast<sal_Int16>(aItem.GetHeight()));
}
break;
default:
pPropSet->getPropertyValue( *pResultEntry, *pItemSet, aAny );
}
}
else if ( IsScUnoWid( nWhich ) )
{
SfxItemSet aEmptySet( *pStyleSet->GetPool(), pStyleSet->GetRanges() );
const SfxItemSet* pItemSet = &aEmptySet;
switch ( nWhich )
{
case SC_WID_UNO_TBLBORD:
{
const SfxPoolItem* pItem = &pItemSet->Get( ATTR_BORDER );
if ( pItem )
{
SvxBoxItem aOuter( *( static_cast<const SvxBoxItem*>( pItem ) ) );
SvxBoxInfoItem aInner( ATTR_BORDER_INNER );
table::TableBorder aBorder;
ScHelperFunctions::FillTableBorder( aBorder, aOuter, aInner );
aBorder.IsHorizontalLineValid = sal_False;
aBorder.IsVerticalLineValid = sal_False;
aBorder.IsDistanceValid = sal_False;
aAny <<= aBorder;
}
}
break;
}
}
}
return aAny;
}
// XMultiPropertySet
void SAL_CALL ScStyleObj::setPropertyValues( const uno::Sequence< rtl::OUString >& aPropertyNames,
const uno::Sequence< uno::Any >& aValues )
throw (beans::PropertyVetoException, lang::IllegalArgumentException,
lang::WrappedTargetException, uno::RuntimeException)
{
ScUnoGuard aGuard;
sal_Int32 nCount = aPropertyNames.getLength();
if ( aValues.getLength() != nCount )
throw lang::IllegalArgumentException();
if ( nCount )
{
const rtl::OUString* pNames = aPropertyNames.getConstArray();
const uno::Any* pValues = aValues.getConstArray();
const SfxItemPropertyMap* pPropertyMap = pPropSet->getPropertyMap();
for (sal_Int32 i = 0; i < nCount; i++)
{
const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( pNames[i] );
// enhance ODS load performance
SetOnePropertyValueWithoutUpdate( pNames[i], pEntry, &pValues[i] );
}
// enhance ODS load performance
StyleSheetChangedUpdate();
}
}
uno::Sequence<uno::Any> SAL_CALL ScStyleObj::getPropertyValues(
const uno::Sequence< rtl::OUString >& aPropertyNames )
throw (uno::RuntimeException)
{
ScUnoGuard aGuard;
//! optimize
sal_Int32 nCount = aPropertyNames.getLength();
uno::Sequence<uno::Any> aSequence( nCount );
if ( nCount )
{
uno::Any* pValues = aSequence.getArray();
for (sal_Int32 i=0; i<nCount; i++)
pValues[i] = getPropertyValue( aPropertyNames[i] );
}
return aSequence;
}
void SAL_CALL ScStyleObj::addPropertiesChangeListener( const uno::Sequence<rtl::OUString>& /* aPropertyNames */,
const uno::Reference<beans::XPropertiesChangeListener>& /* xListener */ )
throw (uno::RuntimeException)
{
// no bound properties
}
void SAL_CALL ScStyleObj::removePropertiesChangeListener(
const uno::Reference<beans::XPropertiesChangeListener>& /* xListener */ )
throw (uno::RuntimeException)
{
// no bound properties
}
void SAL_CALL ScStyleObj::firePropertiesChangeEvent( const uno::Sequence<rtl::OUString>& /* aPropertyNames */,
const uno::Reference<beans::XPropertiesChangeListener>& /* xListener */ )
throw (uno::RuntimeException)
{
// no bound properties
}
// XMultiPropertyStates
// getPropertyStates already defined for XPropertyState
void SAL_CALL ScStyleObj::setAllPropertiesToDefault() throw (uno::RuntimeException)
{
ScUnoGuard aGuard;
SfxStyleSheetBase* pStyle = GetStyle_Impl();
if ( pStyle )
{
// #70909# cell styles cannot be modified if any sheet is protected
if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) )
throw uno::RuntimeException();
SfxItemSet& rSet = pStyle->GetItemSet();
rSet.ClearItem(); // set all items to default
//! merge with SetOneProperty
ScDocument* pDoc = pDocShell->GetDocument();
if ( eFamily == SFX_STYLE_FAMILY_PARA )
{
// row heights
VirtualDevice aVDev;
Point aLogic = aVDev.LogicToPixel( Point(1000,1000), MAP_TWIP );
double nPPTX = aLogic.X() / 1000.0;
double nPPTY = aLogic.Y() / 1000.0;
Fraction aZoom(1,1);
pDoc->StyleSheetChanged( pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom );
pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT );
pDocShell->SetDocumentModified();
}
else
{
// #i22448# apply the default BoxInfoItem for page styles again
// (same content as in ScStyleSheet::GetItemSet, to control the dialog)
SvxBoxInfoItem aBoxInfoItem( ATTR_BORDER_INNER );
aBoxInfoItem.SetTable( sal_False );
aBoxInfoItem.SetDist( sal_True );
aBoxInfoItem.SetValid( VALID_DISTANCE, sal_True );
rSet.Put( aBoxInfoItem );
pDocShell->PageStyleModified( aStyleName, sal_True );
}
}
}
void SAL_CALL ScStyleObj::setPropertiesToDefault( const uno::Sequence<rtl::OUString>& aPropertyNames )
throw (beans::UnknownPropertyException, uno::RuntimeException)
{
ScUnoGuard aGuard;
sal_Int32 nCount = aPropertyNames.getLength();
if ( nCount )
{
const rtl::OUString* pNames = aPropertyNames.getConstArray();
const SfxItemPropertyMap* pPropertyMap = pPropSet->getPropertyMap();
for (sal_Int32 i = 0; i < nCount; i++)
{
const SfxItemPropertySimpleEntry* pEntry = pPropertyMap->getByName( pNames[i] );
SetOnePropertyValue( pNames[i], pEntry, NULL );
}
}
}
uno::Sequence<uno::Any> SAL_CALL ScStyleObj::getPropertyDefaults(
const uno::Sequence<rtl::OUString>& aPropertyNames )
throw (beans::UnknownPropertyException, lang::WrappedTargetException,
uno::RuntimeException)
{
ScUnoGuard aGuard;
//! optimize
sal_Int32 nCount = aPropertyNames.getLength();
uno::Sequence<uno::Any> aSequence( nCount );
if ( nCount )
{
uno::Any* pValues = aSequence.getArray();
for (sal_Int32 i=0; i<nCount; i++)
pValues[i] = getPropertyDefault( aPropertyNames[i] );
}
return aSequence;
}
// beans::XPropertySet
uno::Reference<beans::XPropertySetInfo> SAL_CALL ScStyleObj::getPropertySetInfo()
throw(uno::RuntimeException)
{
ScUnoGuard aGuard;
return pPropSet->getPropertySetInfo();
}
void SAL_CALL ScStyleObj::setPropertyValue(
const rtl::OUString& aPropertyName, const uno::Any& aValue )
throw(beans::UnknownPropertyException, beans::PropertyVetoException,
lang::IllegalArgumentException, lang::WrappedTargetException,
uno::RuntimeException)
{
ScUnoGuard aGuard;
const SfxItemPropertySimpleEntry* pEntry = pPropSet->getPropertyMap()->getByName( aPropertyName );
if ( !pEntry )
throw beans::UnknownPropertyException();
SetOnePropertyValue( aPropertyName, pEntry, &aValue );
}
void ScStyleObj::SetOnePropertyValue( const ::rtl::OUString& rPropertyName, const SfxItemPropertySimpleEntry* pEntry, const uno::Any* pValue )
throw(lang::IllegalArgumentException, uno::RuntimeException)
{
SetOnePropertyValueWithoutUpdate(rPropertyName, pEntry, pValue);
StyleSheetChangedUpdate();
}
void ScStyleObj::SetOnePropertyValueWithoutUpdate( const ::rtl::OUString& rPropertyName, const SfxItemPropertySimpleEntry* pEntry, const uno::Any* pValue )
throw(lang::IllegalArgumentException, uno::RuntimeException)
{
SfxStyleSheetBase* pStyle = GetStyle_Impl();
if ( pStyle && pEntry )
{
// #70909# cell styles cannot be modified if any sheet is protected
if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) )
throw uno::RuntimeException();
SfxItemSet& rSet = pStyle->GetItemSet(); // direkt im lebenden Style aendern...
sal_Bool bDone = sal_False;
if ( eFamily == SFX_STYLE_FAMILY_PAGE )
{
if(pEntry->nWID == SC_WID_UNO_HEADERSET)
{
const SfxItemPropertySimpleEntry* pHeaderEntry = lcl_GetHeaderStyleMap()->getByName( rPropertyName );
if ( pHeaderEntry ) // only item-wids in header/footer map
{
SvxSetItem aNewHeader( (const SvxSetItem&)rSet.Get(ATTR_PAGE_HEADERSET) );
if (pValue)
pPropSet->setPropertyValue( *pHeaderEntry, *pValue, aNewHeader.GetItemSet() );
else
aNewHeader.GetItemSet().ClearItem( pHeaderEntry->nWID );
rSet.Put( aNewHeader );
bDone = sal_True;
}
}
else if(pEntry->nWID == SC_WID_UNO_FOOTERSET)
{
const SfxItemPropertySimpleEntry* pFooterEntry = lcl_GetFooterStyleMap()->getByName( rPropertyName );
if ( pFooterEntry ) // only item-wids in header/footer map
{
SvxSetItem aNewFooter( (const SvxSetItem&)rSet.Get(ATTR_PAGE_FOOTERSET) );
if (pValue)
pPropSet->setPropertyValue( *pFooterEntry, *pValue, aNewFooter.GetItemSet() );
else
aNewFooter.GetItemSet().ClearItem( pFooterEntry->nWID );
rSet.Put( aNewFooter );
bDone = sal_True;
}
}
}
if (!bDone)
{
if ( pEntry )
{
if ( IsScItemWid( pEntry->nWID ) )
{
if (pValue)
{
switch ( pEntry->nWID ) // fuer Item-Spezial-Behandlungen
{
case ATTR_VALUE_FORMAT:
{
// #67847# language for number formats
SvNumberFormatter* pFormatter =
pDocShell->GetDocument()->GetFormatTable();
sal_uInt32 nOldFormat = ((const SfxUInt32Item&)
rSet.Get( ATTR_VALUE_FORMAT )).GetValue();
LanguageType eOldLang = ((const SvxLanguageItem&)
rSet.Get( ATTR_LANGUAGE_FORMAT )).GetLanguage();
nOldFormat = pFormatter->
GetFormatForLanguageIfBuiltIn( nOldFormat, eOldLang );
sal_uInt32 nNewFormat = 0;
*pValue >>= nNewFormat;
rSet.Put( SfxUInt32Item( ATTR_VALUE_FORMAT, nNewFormat ) );
const SvNumberformat* pNewEntry = pFormatter->GetEntry( nNewFormat );
LanguageType eNewLang =
pNewEntry ? pNewEntry->GetLanguage() : LANGUAGE_DONTKNOW;
if ( eNewLang != eOldLang && eNewLang != LANGUAGE_DONTKNOW )
rSet.Put( SvxLanguageItem( eNewLang, ATTR_LANGUAGE_FORMAT ) );
//! keep default state of number format if only language changed?
}
break;
case ATTR_INDENT:
{
sal_Int16 nVal = 0;
*pValue >>= nVal;
rSet.Put( SfxUInt16Item( pEntry->nWID, (sal_uInt16)HMMToTwips(nVal) ) );
}
break;
case ATTR_ROTATE_VALUE:
{
sal_Int32 nRotVal = 0;
if ( *pValue >>= nRotVal )
{
// stored value is always between 0 and 360 deg.
nRotVal %= 36000;
if ( nRotVal < 0 )
nRotVal += 36000;
rSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, nRotVal ) );
}
}
break;
case ATTR_STACKED:
{
table::CellOrientation eOrient;
if( *pValue >>= eOrient )
{
switch( eOrient )
{
case table::CellOrientation_STANDARD:
rSet.Put( SfxBoolItem( ATTR_STACKED, sal_False ) );
break;
case table::CellOrientation_TOPBOTTOM:
rSet.Put( SfxBoolItem( ATTR_STACKED, sal_False ) );
rSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, 27000 ) );
break;
case table::CellOrientation_BOTTOMTOP:
rSet.Put( SfxBoolItem( ATTR_STACKED, sal_False ) );
rSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, 9000 ) );
break;
case table::CellOrientation_STACKED:
rSet.Put( SfxBoolItem( ATTR_STACKED, sal_True ) );
break;
default:
{
// added to avoid warnings
}
}
}
}
break;
case ATTR_PAGE_SCALE:
case ATTR_PAGE_SCALETOPAGES:
{
rSet.ClearItem(ATTR_PAGE_SCALETOPAGES);
rSet.ClearItem(ATTR_PAGE_SCALE);
rSet.ClearItem(ATTR_PAGE_SCALETO);
sal_Int16 nVal = 0;
*pValue >>= nVal;
rSet.Put( SfxUInt16Item( pEntry->nWID, nVal ) );
}
break;
case ATTR_PAGE_FIRSTPAGENO:
{
sal_Int16 nVal = 0;
*pValue >>= nVal;
rSet.Put( SfxUInt16Item( ATTR_PAGE_FIRSTPAGENO, nVal ) );
}
break;
case ATTR_PAGE_CHARTS:
case ATTR_PAGE_OBJECTS:
case ATTR_PAGE_DRAWINGS:
{
sal_Bool bBool = sal_False;
*pValue >>= bBool;
//! sal_Bool-MID fuer ScViewObjectModeItem definieren?
rSet.Put( ScViewObjectModeItem( pEntry->nWID,
bBool ? VOBJ_MODE_SHOW : VOBJ_MODE_HIDE ) );
}
break;
case ATTR_PAGE_PAPERBIN:
{
sal_uInt8 nTray = PAPERBIN_PRINTER_SETTINGS;
sal_Bool bFound = sal_False;
rtl::OUString aName;
if ( *pValue >>= aName )
{
if ( aName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SC_PAPERBIN_DEFAULTNAME ) ) )
bFound = sal_True;
else
{
Printer* pPrinter = pDocShell->GetPrinter();
if (pPrinter)
{
String aNameStr = aName;
sal_uInt16 nCount = pPrinter->GetPaperBinCount();
for (sal_uInt16 i=0; i<nCount; i++)
if ( aNameStr == pPrinter->GetPaperBinName(i) )
{
nTray = (sal_uInt8) i;
bFound = sal_True;
break;
}
}
}
}
if ( bFound )
rSet.Put( SvxPaperBinItem( ATTR_PAGE_PAPERBIN, nTray ) );
else
throw lang::IllegalArgumentException();
}
break;
case ATTR_PAGE_SCALETO:
{
sal_Int16 nPages = 0;
if (*pValue >>= nPages)
{
ScPageScaleToItem aItem = ((const ScPageScaleToItem&)rSet.Get(ATTR_PAGE_SCALETO));
if ( rPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SC_UNO_PAGE_SCALETOX)))
aItem.SetWidth(static_cast<sal_uInt16>(nPages));
else
aItem.SetHeight(static_cast<sal_uInt16>(nPages));
rSet.Put( aItem );
rSet.ClearItem(ATTR_PAGE_SCALETOPAGES);
rSet.ClearItem(ATTR_PAGE_SCALE);
}
}
break;
default:
// #65253# Default-Items mit falscher Slot-ID
// funktionieren im SfxItemPropertySet3 nicht
//! Slot-IDs aendern...
if ( rSet.GetPool()->GetSlotId(pEntry->nWID) == pEntry->nWID &&
rSet.GetItemState(pEntry->nWID, sal_False) == SFX_ITEM_DEFAULT )
{
rSet.Put( rSet.Get(pEntry->nWID) );
}
pPropSet->setPropertyValue( *pEntry, *pValue, rSet );
}
}
else
{
rSet.ClearItem( pEntry->nWID );
// #67847# language for number formats
if ( pEntry->nWID == ATTR_VALUE_FORMAT )
rSet.ClearItem( ATTR_LANGUAGE_FORMAT );
//! for ATTR_ROTATE_VALUE, also reset ATTR_ORIENTATION?
}
}
else if ( IsScUnoWid( pEntry->nWID ) )
{
switch ( pEntry->nWID )
{
case SC_WID_UNO_TBLBORD:
{
if (pValue)
{
table::TableBorder aBorder;
if ( *pValue >>= aBorder )
{
SvxBoxItem aOuter( ATTR_BORDER );
SvxBoxInfoItem aInner( ATTR_BORDER_INNER );
ScHelperFunctions::FillBoxItems( aOuter, aInner, aBorder );
rSet.Put( aOuter );
}
}
else
{
rSet.ClearItem( ATTR_BORDER );
}
}
break;
}
}
}
}
if(SFX_STYLE_FAMILY_PARA != eFamily)
{
//! ModifyStyleSheet am Dokument (alte Werte merken)
pDocShell->PageStyleModified( aStyleName, sal_True );
}
}
}
bool ScStyleObj::StyleSheetChangedUpdate()
{
SfxStyleSheetBase* pStyle = GetStyle_Impl();
if(pStyle)
{
//! DocFunc-Funktion??
//! Undo ?????????????
if(SFX_STYLE_FAMILY_PARA == eFamily)
{
// adapt line heights
VirtualDevice aVDev;
const Point aLogic(aVDev.LogicToPixel(Point(1000,1000), MAP_TWIP));
const double nPPTX(aLogic.X() / 1000.0);
const double nPPTY(aLogic.Y() / 1000.0);
const Fraction aZoom(1,1);
ScDocument* pDoc = pDocShell->GetDocument();
pDoc->StyleSheetChanged(pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom);
pDocShell->PostPaint(0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT);
pDocShell->SetDocumentModified();
}
return true;
}
return false;
}
uno::Any SAL_CALL ScStyleObj::getPropertyValue( const rtl::OUString& aPropertyName )
throw(beans::UnknownPropertyException, lang::WrappedTargetException,
uno::RuntimeException)
{
ScUnoGuard aGuard;
uno::Any aAny;
if ( aPropertyName.equalsAscii( SC_UNONAME_DISPNAME ) ) // read-only
{
// core always has the display name
SfxStyleSheetBase* pStyle = GetStyle_Impl();
if (pStyle)
aAny <<= rtl::OUString( pStyle->GetName() );
}
else
{
const SfxItemPropertySimpleEntry* pResultEntry = NULL;
const SfxItemSet* pItemSet = GetStyleItemSet_Impl( aPropertyName, pResultEntry );
if ( pItemSet && pResultEntry )
{
sal_uInt16 nWhich = pResultEntry->nWID;
if ( IsScItemWid( nWhich ) )
{
switch ( nWhich ) // fuer Item-Spezial-Behandlungen
{
case ATTR_VALUE_FORMAT:
if ( pDocShell )
{
sal_uInt32 nOldFormat = ((const SfxUInt32Item&)
pItemSet->Get( ATTR_VALUE_FORMAT )).GetValue();
LanguageType eOldLang = ((const SvxLanguageItem&)
pItemSet->Get( ATTR_LANGUAGE_FORMAT )).GetLanguage();
nOldFormat = pDocShell->GetDocument()->GetFormatTable()->
GetFormatForLanguageIfBuiltIn( nOldFormat, eOldLang );
aAny <<= nOldFormat;
}
break;
case ATTR_INDENT:
aAny <<= sal_Int16( TwipsToHMM(((const SfxUInt16Item&)
pItemSet->Get(nWhich)).GetValue()) );
break;
case ATTR_STACKED:
{
sal_Int32 nRot = ((const SfxInt32Item&)pItemSet->Get(ATTR_ROTATE_VALUE)).GetValue();
sal_Bool bStacked = ((const SfxBoolItem&)pItemSet->Get(nWhich)).GetValue();
SvxOrientationItem( nRot, bStacked, 0 ).QueryValue( aAny );
}
break;
case ATTR_PAGE_SCALE:
case ATTR_PAGE_SCALETOPAGES:
case ATTR_PAGE_FIRSTPAGENO:
aAny <<= sal_Int16( ((const SfxUInt16Item&)pItemSet->Get(nWhich)).GetValue() );
break;
case ATTR_PAGE_CHARTS:
case ATTR_PAGE_OBJECTS:
case ATTR_PAGE_DRAWINGS:
//! sal_Bool-MID fuer ScViewObjectModeItem definieren?
aAny <<= sal_Bool( ((const ScViewObjectModeItem&)pItemSet->
Get(nWhich)).GetValue() == VOBJ_MODE_SHOW );
break;
case ATTR_PAGE_PAPERBIN:
{
// property PrinterPaperTray is the name of the tray
sal_uInt8 nValue = ((const SvxPaperBinItem&)pItemSet->Get(nWhich)).GetValue();
rtl::OUString aName;
if ( nValue == PAPERBIN_PRINTER_SETTINGS )
aName = rtl::OUString::createFromAscii( SC_PAPERBIN_DEFAULTNAME );
else
{
Printer* pPrinter = pDocShell->GetPrinter();
if (pPrinter)
aName = pPrinter->GetPaperBinName( nValue );
}
aAny <<= aName;
}
break;
case ATTR_PAGE_SCALETO:
{
ScPageScaleToItem aItem((const ScPageScaleToItem&)pItemSet->Get(ATTR_PAGE_SCALETO));
if (aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SC_UNO_PAGE_SCALETOX)))
aAny = uno::makeAny(static_cast<sal_Int16>(aItem.GetWidth()));
else
aAny = uno::makeAny(static_cast<sal_Int16>(aItem.GetHeight()));
}
break;
default:
// #65253# Default-Items mit falscher Slot-ID
// funktionieren im SfxItemPropertySet3 nicht
//! Slot-IDs aendern...
if ( pItemSet->GetPool()->GetSlotId(nWhich) == nWhich &&
pItemSet->GetItemState(nWhich, sal_False) == SFX_ITEM_DEFAULT )
{
SfxItemSet aNoEmptySet( *pItemSet );
aNoEmptySet.Put( aNoEmptySet.Get( nWhich ) );
pPropSet->getPropertyValue( *pResultEntry, aNoEmptySet, aAny );
}
else
pPropSet->getPropertyValue( *pResultEntry, *pItemSet, aAny );
}
}
else if ( IsScUnoWid( nWhich ) )
{
switch ( nWhich )
{
case SC_WID_UNO_TBLBORD:
{
const SfxPoolItem* pItem = &pItemSet->Get( ATTR_BORDER );
if ( pItem )
{
SvxBoxItem aOuter( *( static_cast<const SvxBoxItem*>( pItem ) ) );
SvxBoxInfoItem aInner( ATTR_BORDER_INNER );
table::TableBorder aBorder;
ScHelperFunctions::FillTableBorder( aBorder, aOuter, aInner );
aBorder.IsHorizontalLineValid = sal_False;
aBorder.IsVerticalLineValid = sal_False;
aBorder.IsDistanceValid = sal_False;
aAny <<= aBorder;
}
}
break;
}
}
}
}
return aAny;
}
SC_IMPL_DUMMY_PROPERTY_LISTENER( ScStyleObj )
// lang::XServiceInfo
rtl::OUString SAL_CALL ScStyleObj::getImplementationName() throw(uno::RuntimeException)
{
return rtl::OUString::createFromAscii( "ScStyleObj" );
}
sal_Bool SAL_CALL ScStyleObj::supportsService( const rtl::OUString& rServiceName )
throw(uno::RuntimeException)
{
sal_Bool bPage = ( eFamily == SFX_STYLE_FAMILY_PAGE );
return rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SCSTYLE_SERVICE ) )||
rServiceName.equalsAsciiL(
RTL_CONSTASCII_STRINGPARAM ( bPage ? SCPAGESTYLE_SERVICE : SCCELLSTYLE_SERVICE ));
}
uno::Sequence<rtl::OUString> SAL_CALL ScStyleObj::getSupportedServiceNames()
throw(uno::RuntimeException)
{
sal_Bool bPage = ( eFamily == SFX_STYLE_FAMILY_PAGE );
uno::Sequence<rtl::OUString> aRet(2);
rtl::OUString* pArray = aRet.getArray();
pArray[0] = rtl::OUString::createFromAscii( SCSTYLE_SERVICE );
pArray[1] = rtl::OUString::createFromAscii( bPage ? SCPAGESTYLE_SERVICE
: SCCELLSTYLE_SERVICE );
return aRet;
}
//------------------------------------------------------------------------