xref: /trunk/main/sc/source/ui/unoobj/styleuno.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sc.hxx"
30 
31 
32 
33 #include "scitems.hxx"
34 #include <editeng/memberids.hrc>
35 #include <svx/algitem.hxx>
36 #include <editeng/boxitem.hxx>
37 #include <editeng/langitem.hxx>
38 #include <editeng/numitem.hxx>
39 #include <svx/pageitem.hxx>
40 #include <editeng/pbinitem.hxx>
41 #include <svx/unomid.hxx>
42 #include <editeng/unonrule.hxx>
43 #include <sfx2/bindings.hxx>
44 #include <sfx2/printer.hxx>
45 #include <vcl/virdev.hxx>
46 #include <svl/itempool.hxx>
47 #include <svl/itemset.hxx>
48 #include <svl/intitem.hxx>
49 #include <svl/zformat.hxx>
50 #include <rtl/uuid.h>
51 
52 #include <com/sun/star/table/BorderLine.hpp>
53 #include <com/sun/star/table/CellVertJustify.hpp>
54 #include <com/sun/star/table/TableBorder.hpp>
55 #include <com/sun/star/table/ShadowFormat.hpp>
56 #include <com/sun/star/table/CellHoriJustify.hpp>
57 #include <com/sun/star/table/CellOrientation.hpp>
58 #include <com/sun/star/style/PageStyleLayout.hpp>
59 #include <com/sun/star/style/GraphicLocation.hpp>
60 #include <com/sun/star/sheet/XHeaderFooterContent.hpp>
61 #include <com/sun/star/util/CellProtection.hpp>
62 #include <com/sun/star/awt/FontSlant.hpp>
63 #include <com/sun/star/awt/Size.hpp>
64 #include <com/sun/star/lang/Locale.hpp>
65 #include <com/sun/star/beans/PropertyAttribute.hpp>
66 
67 #include "styleuno.hxx"
68 #include "docsh.hxx"
69 #include "attrib.hxx"
70 #include "stlpool.hxx"
71 #include "docpool.hxx"
72 #include "unoguard.hxx"
73 #include "miscuno.hxx"
74 #include "convuno.hxx"
75 #include "tablink.hxx"
76 #include "unonames.hxx"
77 #include "unowids.hxx"
78 #include "globstr.hrc"
79 #include "cellsuno.hxx"
80 
81 using namespace ::com::sun::star;
82 
83 //------------------------------------------------------------------------
84 
85 const SfxItemPropertySet* lcl_GetCellStyleSet()
86 {
87     static SfxItemPropertyMapEntry aCellStyleMap_Impl[] =
88     {
89         {MAP_CHAR_LEN(SC_UNONAME_ASIANVERT),ATTR_VERTICAL_ASIAN,&getBooleanCppuType(),                  0, 0 },
90         {MAP_CHAR_LEN(SC_UNONAME_BOTTBORDER),ATTR_BORDER,       &::getCppuType((const table::BorderLine*)0),        0, BOTTOM_BORDER | CONVERT_TWIPS },
91         {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND,    &::getCppuType((const sal_Int32*)0),            0, MID_BACK_COLOR },
92         {MAP_CHAR_LEN(SC_UNONAME_CELLPRO),  ATTR_PROTECTION,    &::getCppuType((const util::CellProtection*)0), 0, 0 },
93         {MAP_CHAR_LEN(SC_UNONAME_CCOLOR),   ATTR_FONT_COLOR,    &::getCppuType((const sal_Int32*)0),            0, 0 },
94         {MAP_CHAR_LEN(SC_UNONAME_COUTL),    ATTR_FONT_CONTOUR,  &::getBooleanCppuType(),            0, 0 },
95         {MAP_CHAR_LEN(SC_UNONAME_CCROSS),   ATTR_FONT_CROSSEDOUT,&::getBooleanCppuType(),           0, MID_CROSSED_OUT },
96         {MAP_CHAR_LEN(SC_UNONAME_CEMPHAS),  ATTR_FONT_EMPHASISMARK,&getCppuType((sal_Int16*)0),         0, MID_EMPHASIS },
97         {MAP_CHAR_LEN(SC_UNONAME_CFONT),    ATTR_FONT,          &::getCppuType((const sal_Int16*)0),            0, MID_FONT_FAMILY },
98         {MAP_CHAR_LEN(SC_UNONAME_CFCHARS),  ATTR_FONT,          &getCppuType((sal_Int16*)0),            0, MID_FONT_CHAR_SET },
99         {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS),  ATTR_CJK_FONT,      &getCppuType((sal_Int16*)0),            0, MID_FONT_CHAR_SET },
100         {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS),  ATTR_CTL_FONT,      &getCppuType((sal_Int16*)0),            0, MID_FONT_CHAR_SET },
101         {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL),  ATTR_FONT,          &getCppuType((sal_Int16*)0),            0, MID_FONT_FAMILY },
102         {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL),  ATTR_CJK_FONT,      &getCppuType((sal_Int16*)0),            0, MID_FONT_FAMILY },
103         {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL),  ATTR_CTL_FONT,      &getCppuType((sal_Int16*)0),            0, MID_FONT_FAMILY },
104         {MAP_CHAR_LEN(SC_UNONAME_CFNAME),   ATTR_FONT,          &getCppuType((rtl::OUString*)0),        0, MID_FONT_FAMILY_NAME },
105         {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME),   ATTR_CJK_FONT,      &getCppuType((rtl::OUString*)0),        0, MID_FONT_FAMILY_NAME },
106         {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME),   ATTR_CTL_FONT,      &getCppuType((rtl::OUString*)0),        0, MID_FONT_FAMILY_NAME },
107         {MAP_CHAR_LEN(SC_UNONAME_CFPITCH),  ATTR_FONT,          &getCppuType((sal_Int16*)0),            0, MID_FONT_PITCH },
108         {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH),  ATTR_CJK_FONT,      &getCppuType((sal_Int16*)0),            0, MID_FONT_PITCH },
109         {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH),  ATTR_CTL_FONT,      &getCppuType((sal_Int16*)0),            0, MID_FONT_PITCH },
110         {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE),  ATTR_FONT,          &getCppuType((rtl::OUString*)0),        0, MID_FONT_STYLE_NAME },
111         {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE),  ATTR_CJK_FONT,      &getCppuType((rtl::OUString*)0),        0, MID_FONT_STYLE_NAME },
112         {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE),  ATTR_CTL_FONT,      &getCppuType((rtl::OUString*)0),        0, MID_FONT_STYLE_NAME },
113         {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT),  ATTR_FONT_HEIGHT,   &::getCppuType((const float*)0),            0, MID_FONTHEIGHT | CONVERT_TWIPS },
114         {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT),  ATTR_CJK_FONT_HEIGHT,&::getCppuType((const float*)0),           0, MID_FONTHEIGHT | CONVERT_TWIPS },
115         {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT),  ATTR_CTL_FONT_HEIGHT,&::getCppuType((const float*)0),           0, MID_FONTHEIGHT | CONVERT_TWIPS },
116         {MAP_CHAR_LEN(SC_UNONAME_CLOCAL),   ATTR_FONT_LANGUAGE, &::getCppuType((const lang::Locale*)0),         0, MID_LANG_LOCALE },
117         {MAP_CHAR_LEN(SC_UNO_CJK_CLOCAL),   ATTR_CJK_FONT_LANGUAGE,&::getCppuType((const lang::Locale*)0),          0, MID_LANG_LOCALE },
118         {MAP_CHAR_LEN(SC_UNO_CTL_CLOCAL),   ATTR_CTL_FONT_LANGUAGE,&::getCppuType((const lang::Locale*)0),          0, MID_LANG_LOCALE },
119         {MAP_CHAR_LEN(SC_UNONAME_COVER),    ATTR_FONT_OVERLINE, &::getCppuType((const sal_Int16*)0),    0, MID_TL_STYLE },
120         {MAP_CHAR_LEN(SC_UNONAME_COVRLCOL), ATTR_FONT_OVERLINE, &getCppuType((sal_Int32*)0),            0, MID_TL_COLOR },
121         {MAP_CHAR_LEN(SC_UNONAME_COVRLHAS), ATTR_FONT_OVERLINE, &getBooleanCppuType(),                  0, MID_TL_HASCOLOR },
122         {MAP_CHAR_LEN(SC_UNONAME_CPOST),    ATTR_FONT_POSTURE,  &::getCppuType((const awt::FontSlant*)0),       0, MID_POSTURE },
123         {MAP_CHAR_LEN(SC_UNO_CJK_CPOST),    ATTR_CJK_FONT_POSTURE,&::getCppuType((const awt::FontSlant*)0),     0, MID_POSTURE },
124         {MAP_CHAR_LEN(SC_UNO_CTL_CPOST),    ATTR_CTL_FONT_POSTURE,&::getCppuType((const awt::FontSlant*)0),     0, MID_POSTURE },
125         {MAP_CHAR_LEN(SC_UNONAME_CRELIEF),  ATTR_FONT_RELIEF,   &getCppuType((sal_Int16*)0),            0, MID_RELIEF },
126         {MAP_CHAR_LEN(SC_UNONAME_CSHADD),   ATTR_FONT_SHADOWED, &::getBooleanCppuType(),            0, 0 },
127         {MAP_CHAR_LEN(SC_UNONAME_CSTRIKE),  ATTR_FONT_CROSSEDOUT,&getCppuType((sal_Int16*)0),           0, MID_CROSS_OUT },
128         {MAP_CHAR_LEN(SC_UNONAME_CUNDER),   ATTR_FONT_UNDERLINE,&::getCppuType((const sal_Int16*)0),    0, MID_TL_STYLE },
129         {MAP_CHAR_LEN(SC_UNONAME_CUNDLCOL), ATTR_FONT_UNDERLINE,&getCppuType((sal_Int32*)0),            0, MID_TL_COLOR },
130         {MAP_CHAR_LEN(SC_UNONAME_CUNDLHAS), ATTR_FONT_UNDERLINE,&getBooleanCppuType(),                  0, MID_TL_HASCOLOR },
131         {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT),  ATTR_FONT_WEIGHT,   &::getCppuType((const float*)0),            0, MID_WEIGHT },
132         {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT),  ATTR_CJK_FONT_WEIGHT,&::getCppuType((const float*)0),           0, MID_WEIGHT },
133         {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT),  ATTR_CTL_FONT_WEIGHT,&::getCppuType((const float*)0),           0, MID_WEIGHT },
134         {MAP_CHAR_LEN(SC_UNONAME_CWORDMOD), ATTR_FONT_WORDLINE, &getBooleanCppuType(),                  0, 0 },
135         {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_BLTR), ATTR_BORDER_BLTR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
136         {MAP_CHAR_LEN(SC_UNONAME_DIAGONAL_TLBR), ATTR_BORDER_TLBR, &::getCppuType((const table::BorderLine*)0), 0, 0 | CONVERT_TWIPS },
137         {MAP_CHAR_LEN(SC_UNONAME_DISPNAME), SC_WID_UNO_DISPNAME,&::getCppuType((rtl::OUString*)0),  beans::PropertyAttribute::READONLY, 0 },
138         {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY,   &::getCppuType((const table::CellHoriJustify*)0),   0, MID_HORJUST_HORJUST },
139         {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND,    &::getBooleanCppuType(),            0, MID_GRAPHIC_TRANSPARENT },
140         {MAP_CHAR_LEN(SC_UNONAME_WRAP),     ATTR_LINEBREAK,     &::getBooleanCppuType(),            0, 0 },
141         {MAP_CHAR_LEN(SC_UNONAME_LEFTBORDER),ATTR_BORDER,       &::getCppuType((const table::BorderLine*)0),        0, LEFT_BORDER | CONVERT_TWIPS },
142         {MAP_CHAR_LEN(SC_UNONAME_NUMFMT),   ATTR_VALUE_FORMAT,  &::getCppuType((const sal_Int32*)0),            0, 0 },
143 //      {MAP_CHAR_LEN(SC_UNONAME_NUMRULES), SC_WID_UNO_NUMRULES,&getCppuType((const uno::Reference<container::XIndexReplace>*)0), 0, 0 },
144         {MAP_CHAR_LEN(SC_UNONAME_CELLORI),  ATTR_STACKED,       &::getCppuType((const table::CellOrientation*)0),   0, 0 },
145         {MAP_CHAR_LEN(SC_UNONAME_PADJUST),  ATTR_HOR_JUSTIFY,   &::getCppuType((const sal_Int16*)0),    0, MID_HORJUST_ADJUST },
146         {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN,        &::getCppuType((const sal_Int32*)0),            0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS },
147         {MAP_CHAR_LEN(SC_UNONAME_PINDENT),  ATTR_INDENT,        &::getCppuType((const sal_Int16*)0),            0, 0 }, //! CONVERT_TWIPS
148         {MAP_CHAR_LEN(SC_UNONAME_PISCHDIST),ATTR_SCRIPTSPACE,   &::getBooleanCppuType(),                    0, 0 },
149         {MAP_CHAR_LEN(SC_UNONAME_PISFORBID),ATTR_FORBIDDEN_RULES,&::getBooleanCppuType(),                   0, 0 },
150         {MAP_CHAR_LEN(SC_UNONAME_PISHANG),  ATTR_HANGPUNCTUATION,&::getBooleanCppuType(),                   0, 0 },
151         {MAP_CHAR_LEN(SC_UNONAME_PISHYPHEN),ATTR_HYPHENATE,     &getBooleanCppuType(),                  0, 0 },
152         {MAP_CHAR_LEN(SC_UNONAME_PLASTADJ), ATTR_HOR_JUSTIFY,   &::getCppuType((const sal_Int16*)0),    0, MID_HORJUST_ADJUST },
153         {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN,        &::getCppuType((const sal_Int32*)0),            0, MID_MARGIN_L_MARGIN  | CONVERT_TWIPS },
154         {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN,        &::getCppuType((const sal_Int32*)0),            0, MID_MARGIN_R_MARGIN  | CONVERT_TWIPS },
155         {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN,        &::getCppuType((const sal_Int32*)0),            0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS },
156         {MAP_CHAR_LEN(SC_UNONAME_RIGHTBORDER),ATTR_BORDER,      &::getCppuType((const table::BorderLine*)0),        0, RIGHT_BORDER | CONVERT_TWIPS },
157         {MAP_CHAR_LEN(SC_UNONAME_ROTANG),   ATTR_ROTATE_VALUE,  &::getCppuType((const sal_Int32*)0),            0, 0 },
158         {MAP_CHAR_LEN(SC_UNONAME_ROTREF),   ATTR_ROTATE_MODE,   &::getCppuType((const table::CellVertJustify*)0),   0, 0 },
159         {MAP_CHAR_LEN(SC_UNONAME_SHADOW),   ATTR_SHADOW,        &::getCppuType((const table::ShadowFormat*)0),  0, 0 | CONVERT_TWIPS },
160         {MAP_CHAR_LEN(SC_UNONAME_SHRINK_TO_FIT), ATTR_SHRINKTOFIT, &getBooleanCppuType(),               0, 0 },
161         {MAP_CHAR_LEN(SC_UNONAME_TBLBORD),  SC_WID_UNO_TBLBORD, &::getCppuType((const table::TableBorder*)0),       0, 0 | CONVERT_TWIPS },
162         {MAP_CHAR_LEN(SC_UNONAME_TOPBORDER),ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, TOP_BORDER | CONVERT_TWIPS },
163         {MAP_CHAR_LEN(SC_UNONAME_USERDEF),  ATTR_USERDEF,       &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 },
164         {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY,   &::getCppuType((const table::CellVertJustify*)0),   0, 0 },
165         {MAP_CHAR_LEN(SC_UNONAME_WRITING),  ATTR_WRITINGDIR,    &getCppuType((sal_Int16*)0),            0, 0 },
166         {0,0,0,0,0,0}
167     };
168     static SfxItemPropertySet aCellStyleSet_Impl( aCellStyleMap_Impl );
169     return &aCellStyleSet_Impl;
170 }
171 
172 //  Map mit allen Seitenattributen, incl. Kopf-/Fusszeilenattribute
173 
174 const SfxItemPropertySet * lcl_GetPageStyleSet()
175 {
176     static SfxItemPropertyMapEntry aPageStyleMap_Impl[] =
177     {
178         {MAP_CHAR_LEN(SC_UNO_PAGE_BACKCOLOR),   ATTR_BACKGROUND,    &::getCppuType((const sal_Int32*)0),            0, MID_BACK_COLOR },
179         {MAP_CHAR_LEN(SC_UNO_PAGE_GRAPHICFILT), ATTR_BACKGROUND,    &::getCppuType((const ::rtl::OUString*)0),          0, MID_GRAPHIC_FILTER },
180         {MAP_CHAR_LEN(SC_UNO_PAGE_GRAPHICLOC),  ATTR_BACKGROUND,    &::getCppuType((const style::GraphicLocation*)0),   0, MID_GRAPHIC_POSITION },
181         {MAP_CHAR_LEN(SC_UNO_PAGE_GRAPHICURL),  ATTR_BACKGROUND,    &::getCppuType((const ::rtl::OUString*)0),          0, MID_GRAPHIC_URL },
182         {MAP_CHAR_LEN(SC_UNO_PAGE_BACKTRANS),   ATTR_BACKGROUND,    &::getBooleanCppuType(),            0, MID_GRAPHIC_TRANSPARENT },
183         {MAP_CHAR_LEN(OLD_UNO_PAGE_BACKCOLOR),  ATTR_BACKGROUND,    &::getCppuType((const sal_Int32*)0),            0, MID_BACK_COLOR },
184         {MAP_CHAR_LEN(SC_UNO_PAGE_BORDERDIST),  ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, BORDER_DISTANCE | CONVERT_TWIPS },
185         {MAP_CHAR_LEN(SC_UNO_PAGE_BOTTBORDER),  ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, BOTTOM_BORDER | CONVERT_TWIPS },
186         {MAP_CHAR_LEN(SC_UNO_PAGE_BOTTBRDDIST), ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, BOTTOM_BORDER_DISTANCE | CONVERT_TWIPS },
187         {MAP_CHAR_LEN(SC_UNO_PAGE_BOTTMARGIN),  ATTR_ULSPACE,       &::getCppuType((const sal_Int32*)0),            0, MID_LO_MARGIN | CONVERT_TWIPS },
188         {MAP_CHAR_LEN(SC_UNO_PAGE_CENTERHOR),   ATTR_PAGE_HORCENTER,&::getBooleanCppuType(),            0, 0 },
189         {MAP_CHAR_LEN(SC_UNO_PAGE_CENTERVER),   ATTR_PAGE_VERCENTER,&::getBooleanCppuType(),            0, 0 },
190         {MAP_CHAR_LEN(SC_UNONAME_DISPNAME),     SC_WID_UNO_DISPNAME,&::getCppuType((rtl::OUString*)0),  beans::PropertyAttribute::READONLY, 0 },
191         {MAP_CHAR_LEN(SC_UNO_PAGE_FIRSTPAGE),   ATTR_PAGE_FIRSTPAGENO,&::getCppuType((const sal_Int16*)0),      0, 0 },
192 //
193         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKCOL),  SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
194         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFFILT),  SC_WID_UNO_FOOTERSET,&::getCppuType((const ::rtl::OUString*)0),     0, 0 },
195         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFLOC),   SC_WID_UNO_FOOTERSET,&::getCppuType((const style::GraphicLocation*)0), 0, 0 },
196         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFURL),   SC_WID_UNO_FOOTERSET,&::getCppuType((const ::rtl::OUString*)0),     0, 0 },
197         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKTRAN), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(),                       0, 0 },
198         {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKCOL), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
199         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBODYDIST), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
200         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBRDDIST),  SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
201         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBOR),  SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0),   0, 0 },
202         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBDIS), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
203         {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRDYNAMIC), SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(),                       0, 0 },
204         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRHEIGHT),   SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
205         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRDYNAMIC),  SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(),                       0, 0 },
206         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRON),       SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(),                       0, 0 },
207         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHARED),   SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(),                       0, 0 },
208         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBOR),  SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0),   0, 0 },
209         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBDIS), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
210         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTMAR),  SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
211         {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRON),      SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(),                       0, 0 },
212         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBOR), SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0),   0, 0 },
213         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBDIS),SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
214         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTMAR), SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
215         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHADOW),   SC_WID_UNO_FOOTERSET,&::getCppuType((const table::ShadowFormat*)0), 0, 0 },
216         {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRSHARED),  SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(),                       0, 0 },
217         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBOR),   SC_WID_UNO_FOOTERSET,&::getCppuType((const table::BorderLine*)0),   0, 0 },
218         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBDIS),  SC_WID_UNO_FOOTERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
219 //
220         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKCOL),  SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
221         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFFILT),  SC_WID_UNO_HEADERSET,&::getCppuType((const ::rtl::OUString*)0),     0, 0 },
222         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFLOC),   SC_WID_UNO_HEADERSET,&::getCppuType((const style::GraphicLocation*)0), 0, 0 },
223         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFURL),   SC_WID_UNO_HEADERSET,&::getCppuType((const ::rtl::OUString*)0),     0, 0 },
224         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKTRAN), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(),                       0, 0 },
225         {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKCOL), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
226         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBODYDIST), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
227         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBRDDIST),  SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
228         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBOR),  SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0),   0, 0 },
229         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBDIS), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
230         {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRDYNAMIC), SC_WID_UNO_HEADERSET,&::getBooleanCppuType(),                       0, 0 },
231         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRHEIGHT),   SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
232         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRDYNAMIC),  SC_WID_UNO_HEADERSET,&::getBooleanCppuType(),                       0, 0 },
233         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRON),       SC_WID_UNO_HEADERSET,&::getBooleanCppuType(),                       0, 0 },
234         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHARED),   SC_WID_UNO_HEADERSET,&::getBooleanCppuType(),                       0, 0 },
235         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBOR),  SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0),   0, 0 },
236         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBDIS), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
237         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTMAR),  SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
238         {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRON),      SC_WID_UNO_HEADERSET,&::getBooleanCppuType(),                       0, 0 },
239         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBOR), SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0),   0, 0 },
240         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBDIS),SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
241         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTMAR), SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
242         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHADOW),   SC_WID_UNO_HEADERSET,&::getCppuType((const table::ShadowFormat*)0), 0, 0 },
243         {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRSHARED),  SC_WID_UNO_HEADERSET,&::getBooleanCppuType(),                       0, 0 },
244         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBOR),   SC_WID_UNO_HEADERSET,&::getCppuType((const table::BorderLine*)0),   0, 0 },
245         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBDIS),  SC_WID_UNO_HEADERSET,&::getCppuType((const sal_Int32*)0),           0, 0 },
246 //
247         {MAP_CHAR_LEN(SC_UNO_PAGE_HEIGHT),      ATTR_PAGE_SIZE,     &::getCppuType((const sal_Int32*)0),            0, MID_SIZE_HEIGHT | CONVERT_TWIPS },
248         {MAP_CHAR_LEN(OLD_UNO_PAGE_BACKTRANS),  ATTR_BACKGROUND,    &::getBooleanCppuType(),            0, MID_GRAPHIC_TRANSPARENT },
249         {MAP_CHAR_LEN(SC_UNO_PAGE_LANDSCAPE),   ATTR_PAGE,          &::getBooleanCppuType(),            0, MID_PAGE_ORIENTATION },
250         {MAP_CHAR_LEN(SC_UNO_PAGE_LEFTBORDER),  ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, LEFT_BORDER | CONVERT_TWIPS },
251         {MAP_CHAR_LEN(SC_UNO_PAGE_LEFTBRDDIST), ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, LEFT_BORDER_DISTANCE | CONVERT_TWIPS },
252         {MAP_CHAR_LEN(SC_UNO_PAGE_LEFTMARGIN),  ATTR_LRSPACE,       &::getCppuType((const sal_Int32*)0),            0, MID_L_MARGIN | CONVERT_TWIPS },
253         {MAP_CHAR_LEN(SC_UNO_PAGE_LEFTFTRCONT), ATTR_PAGE_FOOTERLEFT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 },
254         {MAP_CHAR_LEN(SC_UNO_PAGE_LEFTHDRCONT), ATTR_PAGE_HEADERLEFT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 },
255         {MAP_CHAR_LEN(SC_UNO_PAGE_NUMBERTYPE),  ATTR_PAGE,          &::getCppuType((const sal_Int16*)0),            0, MID_PAGE_NUMTYPE },
256         {MAP_CHAR_LEN(SC_UNO_PAGE_SCALEVAL),    ATTR_PAGE_SCALE,    &::getCppuType((const sal_Int16*)0),            0, 0 },
257         {MAP_CHAR_LEN(SC_UNO_PAGE_SYTLELAYOUT), ATTR_PAGE,          &::getCppuType((const style::PageStyleLayout*)0),   0, MID_PAGE_LAYOUT },
258         {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTANNOT),  ATTR_PAGE_NOTES,    &::getBooleanCppuType(),            0, 0 },
259         {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTCHARTS), ATTR_PAGE_CHARTS,   &::getBooleanCppuType(),            0, 0 },
260         {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTDOWN),   ATTR_PAGE_TOPDOWN,  &::getBooleanCppuType(),            0, 0 },
261         {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTDRAW),   ATTR_PAGE_DRAWINGS, &::getBooleanCppuType(),            0, 0 },
262         {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTFORMUL), ATTR_PAGE_FORMULAS, &::getBooleanCppuType(),            0, 0 },
263         {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTGRID),   ATTR_PAGE_GRID,     &::getBooleanCppuType(),            0, 0 },
264         {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTHEADER), ATTR_PAGE_HEADERS,  &::getBooleanCppuType(),            0, 0 },
265         {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTOBJS),   ATTR_PAGE_OBJECTS,  &::getBooleanCppuType(),            0, 0 },
266         {MAP_CHAR_LEN(SC_UNO_PAGE_PRINTZERO),   ATTR_PAGE_NULLVALS, &::getBooleanCppuType(),            0, 0 },
267         {MAP_CHAR_LEN(SC_UNO_PAGE_PAPERTRAY),   ATTR_PAGE_PAPERBIN, &::getCppuType((const ::rtl::OUString*)0),      0, 0 },
268         {MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTBORDER), ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, RIGHT_BORDER | CONVERT_TWIPS },
269         {MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTBRDDIST),ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, RIGHT_BORDER_DISTANCE | CONVERT_TWIPS },
270         {MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTMARGIN), ATTR_LRSPACE,       &::getCppuType((const sal_Int32*)0),            0, MID_R_MARGIN | CONVERT_TWIPS },
271         {MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTFTRCON), ATTR_PAGE_FOOTERRIGHT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 },
272         {MAP_CHAR_LEN(SC_UNO_PAGE_RIGHTHDRCON), ATTR_PAGE_HEADERRIGHT,&::getCppuType((const uno::Reference< sheet::XHeaderFooterContent >*)0), 0, 0 },
273         {MAP_CHAR_LEN(SC_UNO_PAGE_SCALETOPAG),  ATTR_PAGE_SCALETOPAGES,&::getCppuType((const sal_Int16*)0),     0, 0 },
274         {MAP_CHAR_LEN(SC_UNO_PAGE_SCALETOX),    ATTR_PAGE_SCALETO,  &::getCppuType((const sal_Int16*)0),        0, 0 },
275         {MAP_CHAR_LEN(SC_UNO_PAGE_SCALETOY),    ATTR_PAGE_SCALETO,  &::getCppuType((const sal_Int16*)0),        0, 0 },
276         {MAP_CHAR_LEN(SC_UNO_PAGE_SHADOWFORM),  ATTR_SHADOW,        &::getCppuType((const table::ShadowFormat*)0),  0, 0 | CONVERT_TWIPS },
277         {MAP_CHAR_LEN(SC_UNO_PAGE_SIZE),        ATTR_PAGE_SIZE,     &::getCppuType((const awt::Size*)0),            0, MID_SIZE_SIZE | CONVERT_TWIPS },
278         {MAP_CHAR_LEN(SC_UNO_PAGE_TOPBORDER),   ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, TOP_BORDER | CONVERT_TWIPS },
279         {MAP_CHAR_LEN(SC_UNO_PAGE_TOPBRDDIST),  ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, TOP_BORDER_DISTANCE | CONVERT_TWIPS },
280         {MAP_CHAR_LEN(SC_UNO_PAGE_TOPMARGIN),   ATTR_ULSPACE,       &::getCppuType((const sal_Int32*)0),            0, MID_UP_MARGIN | CONVERT_TWIPS },
281         {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKTRAN),SC_WID_UNO_FOOTERSET,&::getBooleanCppuType(),                       0, 0 },
282         {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKTRAN),SC_WID_UNO_HEADERSET,&::getBooleanCppuType(),                       0, 0 },
283         {MAP_CHAR_LEN(SC_UNONAME_USERDEF),      ATTR_USERDEF,       &getCppuType((uno::Reference<container::XNameContainer>*)0), 0, 0 },
284         {MAP_CHAR_LEN(SC_UNO_PAGE_WIDTH),       ATTR_PAGE_SIZE,     &::getCppuType((const sal_Int32*)0),            0, MID_SIZE_WIDTH | CONVERT_TWIPS },
285         {MAP_CHAR_LEN(SC_UNONAME_WRITING),      ATTR_WRITINGDIR,    &getCppuType((sal_Int16*)0),            0, 0 },
286         {0,0,0,0,0,0}
287     };
288     static SfxItemPropertySet aPageStyleSet_Impl( aPageStyleMap_Impl );
289     return &aPageStyleSet_Impl;
290 }
291 
292 //  Map mit Inhalten des Header-Item-Sets
293 
294 const SfxItemPropertyMap* lcl_GetHeaderStyleMap()
295 {
296     static SfxItemPropertyMapEntry aHeaderStyleMap_Impl[] =
297     {
298         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKCOL),  ATTR_BACKGROUND,    &::getCppuType((const sal_Int32*)0),            0, MID_BACK_COLOR },
299         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFFILT),  ATTR_BACKGROUND,    &::getCppuType((const ::rtl::OUString*)0),          0, MID_GRAPHIC_FILTER },
300         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFLOC),   ATTR_BACKGROUND,    &::getCppuType((const style::GraphicLocation*)0),   0, MID_GRAPHIC_POSITION },
301         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRGRFURL),   ATTR_BACKGROUND,    &::getCppuType((const ::rtl::OUString*)0),          0, MID_GRAPHIC_URL },
302         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBACKTRAN), ATTR_BACKGROUND,    &::getBooleanCppuType(),            0, MID_GRAPHIC_TRANSPARENT },
303         {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKCOL), ATTR_BACKGROUND,    &::getCppuType((const sal_Int32*)0),            0, MID_BACK_COLOR },
304         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBODYDIST), ATTR_ULSPACE,       &::getCppuType((const sal_Int32*)0),            0, MID_LO_MARGIN | CONVERT_TWIPS },
305         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBRDDIST),  ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, BORDER_DISTANCE | CONVERT_TWIPS },
306         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBOR),  ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, BOTTOM_BORDER | CONVERT_TWIPS },
307         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRBOTTBDIS), ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, BOTTOM_BORDER_DISTANCE | CONVERT_TWIPS },
308         {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRDYNAMIC), ATTR_PAGE_DYNAMIC,  &::getBooleanCppuType(),            0, 0 },
309         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRHEIGHT),   ATTR_PAGE_SIZE,     &::getCppuType((const sal_Int32*)0),            0, MID_SIZE_HEIGHT | CONVERT_TWIPS },
310         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRDYNAMIC),  ATTR_PAGE_DYNAMIC,  &::getBooleanCppuType(),            0, 0 },
311         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRON),       ATTR_PAGE_ON,       &::getBooleanCppuType(),            0, 0 },
312         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHARED),   ATTR_PAGE_SHARED,   &::getBooleanCppuType(),            0, 0 },
313         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBOR),  ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, LEFT_BORDER | CONVERT_TWIPS },
314         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTBDIS), ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, LEFT_BORDER_DISTANCE | CONVERT_TWIPS },
315         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRLEFTMAR),  ATTR_LRSPACE,       &::getCppuType((const sal_Int32*)0),            0, MID_L_MARGIN | CONVERT_TWIPS },
316         {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRON),      ATTR_PAGE_ON,       &::getBooleanCppuType(),            0, 0 },
317         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBOR), ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, RIGHT_BORDER | CONVERT_TWIPS },
318         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTBDIS),ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, RIGHT_BORDER_DISTANCE | CONVERT_TWIPS },
319         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRRIGHTMAR), ATTR_LRSPACE,       &::getCppuType((const sal_Int32*)0),            0, MID_R_MARGIN | CONVERT_TWIPS },
320         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRSHADOW),   ATTR_SHADOW,        &::getCppuType((const table::ShadowFormat*)0),  0, 0 | CONVERT_TWIPS },
321         {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRSHARED),  ATTR_PAGE_SHARED,   &::getBooleanCppuType(),            0, 0 },
322         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBOR),   ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, TOP_BORDER | CONVERT_TWIPS },
323         {MAP_CHAR_LEN(SC_UNO_PAGE_HDRTOPBDIS),  ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, TOP_BORDER_DISTANCE | CONVERT_TWIPS },
324         {MAP_CHAR_LEN(OLD_UNO_PAGE_HDRBACKTRAN),ATTR_BACKGROUND,    &::getBooleanCppuType(),            0, MID_GRAPHIC_TRANSPARENT },
325         {0,0,0,0,0,0}
326     };
327     static SfxItemPropertyMap aHeaderStyleMap( aHeaderStyleMap_Impl );
328     return &aHeaderStyleMap;
329 }
330 
331 //  Map mit Inhalten des Footer-Item-Sets
332 
333 const SfxItemPropertyMap* lcl_GetFooterStyleMap()
334 {
335     static SfxItemPropertyMapEntry aFooterStyleMap_Impl[] =
336     {
337         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKCOL),  ATTR_BACKGROUND,    &::getCppuType((const sal_Int32*)0),            0, MID_BACK_COLOR },
338         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFFILT),  ATTR_BACKGROUND,    &::getCppuType((const ::rtl::OUString*)0),          0, MID_GRAPHIC_FILTER },
339         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFLOC),   ATTR_BACKGROUND,    &::getCppuType((const style::GraphicLocation*)0),   0, MID_GRAPHIC_POSITION },
340         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRGRFURL),   ATTR_BACKGROUND,    &::getCppuType((const ::rtl::OUString*)0),          0, MID_GRAPHIC_URL },
341         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBACKTRAN), ATTR_BACKGROUND,    &::getBooleanCppuType(),            0, MID_GRAPHIC_TRANSPARENT },
342         {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKCOL), ATTR_BACKGROUND,    &::getCppuType((const sal_Int32*)0),            0, MID_BACK_COLOR },
343         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBODYDIST), ATTR_ULSPACE,       &::getCppuType((const sal_Int32*)0),            0, MID_UP_MARGIN | CONVERT_TWIPS },
344         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBRDDIST),  ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, BORDER_DISTANCE | CONVERT_TWIPS },
345         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBOR),  ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, BOTTOM_BORDER | CONVERT_TWIPS },
346         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRBOTTBDIS), ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, BOTTOM_BORDER_DISTANCE | CONVERT_TWIPS },
347         {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRDYNAMIC), ATTR_PAGE_DYNAMIC,  &::getBooleanCppuType(),            0, 0 },
348         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRHEIGHT),   ATTR_PAGE_SIZE,     &::getCppuType((const sal_Int32*)0),            0, MID_SIZE_HEIGHT | CONVERT_TWIPS },
349         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRDYNAMIC),  ATTR_PAGE_DYNAMIC,  &::getBooleanCppuType(),            0, 0 },
350         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRON),       ATTR_PAGE_ON,       &::getBooleanCppuType(),            0, 0 },
351         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHARED),   ATTR_PAGE_SHARED,   &::getBooleanCppuType(),            0, 0 },
352         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBOR),  ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, LEFT_BORDER | CONVERT_TWIPS },
353         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTBDIS), ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, LEFT_BORDER_DISTANCE | CONVERT_TWIPS },
354         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRLEFTMAR),  ATTR_LRSPACE,       &::getCppuType((const sal_Int32*)0),            0, MID_L_MARGIN | CONVERT_TWIPS },
355         {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRON),      ATTR_PAGE_ON,       &::getBooleanCppuType(),            0, 0 },
356         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBOR), ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, RIGHT_BORDER | CONVERT_TWIPS },
357         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTBDIS),ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, RIGHT_BORDER_DISTANCE | CONVERT_TWIPS },
358         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRRIGHTMAR), ATTR_LRSPACE,       &::getCppuType((const sal_Int32*)0),            0, MID_R_MARGIN | CONVERT_TWIPS },
359         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRSHADOW),   ATTR_SHADOW,        &::getCppuType((const table::ShadowFormat*)0),  0, 0 | CONVERT_TWIPS },
360         {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRSHARED),  ATTR_PAGE_SHARED,   &::getBooleanCppuType(),            0, 0 },
361         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBOR),   ATTR_BORDER,        &::getCppuType((const table::BorderLine*)0),        0, TOP_BORDER | CONVERT_TWIPS },
362         {MAP_CHAR_LEN(SC_UNO_PAGE_FTRTOPBDIS),  ATTR_BORDER,        &::getCppuType((const sal_Int32*)0),    0, TOP_BORDER_DISTANCE | CONVERT_TWIPS },
363         {MAP_CHAR_LEN(OLD_UNO_PAGE_FTRBACKTRAN),ATTR_BACKGROUND,    &::getBooleanCppuType(),            0, MID_GRAPHIC_TRANSPARENT },
364         {0,0,0,0,0,0}
365     };
366     static SfxItemPropertyMap aFooterStyleMap( aFooterStyleMap_Impl );
367     return &aFooterStyleMap;
368 }
369 
370 
371 //------------------------------------------------------------------------
372 
373 //  Index-Access auf die Style-Typen: 0 = Cell, 1 = Page
374 
375 #define SC_STYLE_FAMILY_COUNT 2
376 
377 #define SC_FAMILYNAME_CELL  "CellStyles"
378 #define SC_FAMILYNAME_PAGE  "PageStyles"
379 
380 static sal_uInt16 aStyleFamilyTypes[SC_STYLE_FAMILY_COUNT] = { SFX_STYLE_FAMILY_PARA, SFX_STYLE_FAMILY_PAGE };
381 
382 //------------------------------------------------------------------------
383 
384 //! diese Funktionen in einen allgemeinen Header verschieben
385 inline long TwipsToHMM(long nTwips) { return (nTwips * 127 + 36) / 72; }
386 inline long HMMToTwips(long nHMM)   { return (nHMM * 72 + 63) / 127; }
387 
388 //------------------------------------------------------------------------
389 
390 #define SCSTYLE_SERVICE         "com.sun.star.style.Style"
391 #define SCCELLSTYLE_SERVICE     "com.sun.star.style.CellStyle"
392 #define SCPAGESTYLE_SERVICE     "com.sun.star.style.PageStyle"
393 
394 SC_SIMPLE_SERVICE_INFO( ScStyleFamiliesObj, "ScStyleFamiliesObj", "com.sun.star.style.StyleFamilies" )
395 SC_SIMPLE_SERVICE_INFO( ScStyleFamilyObj, "ScStyleFamilyObj", "com.sun.star.style.StyleFamily" )
396 
397 //------------------------------------------------------------------------
398 
399 #define SC_PAPERBIN_DEFAULTNAME     "[From printer settings]"
400 
401 //------------------------------------------------------------------------
402 
403 //  conversion programmatic <-> display (visible) name
404 //  currently, the core always has the visible names
405 //  the api is required to use programmatic names for default styles
406 //  these programmatic names must never change!
407 
408 #define SC_STYLE_PROG_STANDARD      "Default"
409 #define SC_STYLE_PROG_RESULT        "Result"
410 #define SC_STYLE_PROG_RESULT1       "Result2"
411 #define SC_STYLE_PROG_HEADLINE      "Heading"
412 #define SC_STYLE_PROG_HEADLINE1     "Heading1"
413 #define SC_STYLE_PROG_REPORT        "Report"
414 
415 struct ScDisplayNameMap
416 {
417     String  aDispName;
418     String  aProgName;
419 };
420 
421 const ScDisplayNameMap* lcl_GetStyleNameMap( sal_uInt16 nType )
422 {
423     if ( nType == SFX_STYLE_FAMILY_PARA )
424     {
425         static sal_Bool bCellMapFilled = sal_False;
426         static ScDisplayNameMap aCellMap[6];
427         if ( !bCellMapFilled )
428         {
429             aCellMap[0].aDispName = ScGlobal::GetRscString( STR_STYLENAME_STANDARD );
430             aCellMap[0].aProgName = String::CreateFromAscii( SC_STYLE_PROG_STANDARD );
431 
432             aCellMap[1].aDispName = ScGlobal::GetRscString( STR_STYLENAME_RESULT );
433             aCellMap[1].aProgName = String::CreateFromAscii( SC_STYLE_PROG_RESULT );
434 
435             aCellMap[2].aDispName = ScGlobal::GetRscString( STR_STYLENAME_RESULT1 );
436             aCellMap[2].aProgName = String::CreateFromAscii( SC_STYLE_PROG_RESULT1 );
437 
438             aCellMap[3].aDispName = ScGlobal::GetRscString( STR_STYLENAME_HEADLINE );
439             aCellMap[3].aProgName = String::CreateFromAscii( SC_STYLE_PROG_HEADLINE );
440 
441             aCellMap[4].aDispName = ScGlobal::GetRscString( STR_STYLENAME_HEADLINE1 );
442             aCellMap[4].aProgName = String::CreateFromAscii( SC_STYLE_PROG_HEADLINE1 );
443 
444             //  last entry remains empty
445 
446             bCellMapFilled = sal_True;
447         }
448         return aCellMap;
449     }
450     else if ( nType == SFX_STYLE_FAMILY_PAGE )
451     {
452         static sal_Bool bPageMapFilled = sal_False;
453         static ScDisplayNameMap aPageMap[3];
454         if ( !bPageMapFilled )
455         {
456             aPageMap[0].aDispName = ScGlobal::GetRscString( STR_STYLENAME_STANDARD );
457             aPageMap[0].aProgName = String::CreateFromAscii( SC_STYLE_PROG_STANDARD );
458 
459             aPageMap[1].aDispName = ScGlobal::GetRscString( STR_STYLENAME_REPORT );
460             aPageMap[1].aProgName = String::CreateFromAscii( SC_STYLE_PROG_REPORT );
461 
462             //  last entry remains empty
463 
464             bPageMapFilled = sal_True;
465         }
466         return aPageMap;
467     }
468     DBG_ERROR("invalid family");
469     return NULL;
470 }
471 
472 //  programmatic name suffix for display names that match other programmatic names
473 //  is " (user)" including a space
474 
475 #define SC_SUFFIX_USER      " (user)"
476 #define SC_SUFFIX_USER_LEN  7
477 
478 sal_Bool lcl_EndsWithUser( const String& rString )
479 {
480     const sal_Unicode *pChar = rString.GetBuffer();
481     xub_StrLen nLen = rString.Len();
482     return nLen >= SC_SUFFIX_USER_LEN &&
483            pChar[nLen-7] == ' ' &&
484            pChar[nLen-6] == '(' &&
485            pChar[nLen-5] == 'u' &&
486            pChar[nLen-4] == 's' &&
487            pChar[nLen-3] == 'e' &&
488            pChar[nLen-2] == 'r' &&
489            pChar[nLen-1] == ')';
490 }
491 
492 // static
493 String ScStyleNameConversion::DisplayToProgrammaticName( const String& rDispName, sal_uInt16 nType )
494 {
495     sal_Bool bDisplayIsProgrammatic = sal_False;
496 
497     const ScDisplayNameMap* pNames = lcl_GetStyleNameMap( nType );
498     if (pNames)
499     {
500         do
501         {
502             if (pNames->aDispName == rDispName)
503                 return pNames->aProgName;
504             else if (pNames->aProgName == rDispName)
505                 bDisplayIsProgrammatic = sal_True;          // display name matches any programmatic name
506         }
507         while( (++pNames)->aDispName.Len() );
508     }
509 
510     if ( bDisplayIsProgrammatic || lcl_EndsWithUser( rDispName ) )
511     {
512         //  add the (user) suffix if the display name matches any style's programmatic name
513         //  or if it already contains the suffix
514 
515         String aRet(rDispName);
516         aRet.AppendAscii( RTL_CONSTASCII_STRINGPARAM( SC_SUFFIX_USER ) );
517         return aRet;
518     }
519 
520     return rDispName;
521 }
522 
523 // static
524 String ScStyleNameConversion::ProgrammaticToDisplayName( const String& rProgName, sal_uInt16 nType )
525 {
526     if ( lcl_EndsWithUser( rProgName ) )
527     {
528         //  remove the (user) suffix, don't compare to map entries
529         return rProgName.Copy( 0, rProgName.Len() - SC_SUFFIX_USER_LEN );
530     }
531 
532     const ScDisplayNameMap* pNames = lcl_GetStyleNameMap( nType );
533     if (pNames)
534     {
535         do
536         {
537             if (pNames->aProgName == rProgName)
538                 return pNames->aDispName;
539         }
540         while( (++pNames)->aDispName.Len() );
541     }
542     return rProgName;
543 }
544 
545 //------------------------------------------------------------------------
546 
547 sal_Bool lcl_AnyTabProtected( ScDocument& rDoc )
548 {
549     SCTAB nTabCount = rDoc.GetTableCount();
550     for (SCTAB i=0; i<nTabCount; i++)
551         if (rDoc.IsTabProtected(i))
552             return sal_True;
553     return sal_False;
554 }
555 
556 //------------------------------------------------------------------------
557 
558 ScStyleFamiliesObj::ScStyleFamiliesObj(ScDocShell* pDocSh) :
559     pDocShell( pDocSh )
560 {
561     pDocShell->GetDocument()->AddUnoObject(*this);
562 }
563 
564 ScStyleFamiliesObj::~ScStyleFamiliesObj()
565 {
566     if (pDocShell)
567         pDocShell->GetDocument()->RemoveUnoObject(*this);
568 }
569 
570 void ScStyleFamiliesObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
571 {
572     //  Referenz-Update interessiert hier nicht
573 
574     if ( rHint.ISA( SfxSimpleHint ) &&
575             ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
576     {
577         pDocShell = NULL;       // ungueltig geworden
578     }
579 }
580 
581 // XStyleFamilies
582 
583 ScStyleFamilyObj*ScStyleFamiliesObj::GetObjectByType_Impl(sal_uInt16 nType) const
584 {
585     if ( pDocShell )
586     {
587         if ( nType == SFX_STYLE_FAMILY_PARA )
588             return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PARA );
589         else if ( nType == SFX_STYLE_FAMILY_PAGE )
590             return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PAGE );
591     }
592     DBG_ERROR("getStyleFamilyByType: keine DocShell oder falscher Typ");
593     return NULL;
594 }
595 
596 ScStyleFamilyObj* ScStyleFamiliesObj::GetObjectByIndex_Impl(sal_uInt32 nIndex) const
597 {
598     if ( nIndex < SC_STYLE_FAMILY_COUNT )
599         return GetObjectByType_Impl(aStyleFamilyTypes[nIndex]);
600 
601     return NULL;    // ungueltiger Index
602 }
603 
604 ScStyleFamilyObj* ScStyleFamiliesObj::GetObjectByName_Impl(const rtl::OUString& aName) const
605 {
606     if ( pDocShell )
607     {
608         String aNameStr( aName );
609         if ( aNameStr.EqualsAscii( SC_FAMILYNAME_CELL ) )
610             return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PARA );
611         else if ( aNameStr.EqualsAscii( SC_FAMILYNAME_PAGE ) )
612             return new ScStyleFamilyObj( pDocShell, SFX_STYLE_FAMILY_PAGE );
613     }
614     // no assertion - called directly from getByName
615     return NULL;
616 }
617 
618 // container::XIndexAccess
619 
620 sal_Int32 SAL_CALL ScStyleFamiliesObj::getCount() throw(uno::RuntimeException)
621 {
622     return SC_STYLE_FAMILY_COUNT;
623 }
624 
625 uno::Any SAL_CALL ScStyleFamiliesObj::getByIndex( sal_Int32 nIndex )
626                             throw(lang::IndexOutOfBoundsException,
627                                     lang::WrappedTargetException, uno::RuntimeException)
628 {
629     ScUnoGuard aGuard;
630     uno::Reference< container::XNameContainer >  xFamily(GetObjectByIndex_Impl(nIndex));
631     if (xFamily.is())
632         return uno::makeAny(xFamily);
633     else
634         throw lang::IndexOutOfBoundsException();
635 //    return uno::Any();
636 }
637 
638 uno::Type SAL_CALL ScStyleFamiliesObj::getElementType() throw(uno::RuntimeException)
639 {
640     ScUnoGuard aGuard;
641     return ::getCppuType((const uno::Reference< container::XNameContainer >*)0);    // muss zu getByIndex passen
642 }
643 
644 sal_Bool SAL_CALL ScStyleFamiliesObj::hasElements() throw(uno::RuntimeException)
645 {
646     ScUnoGuard aGuard;
647     return ( getCount() != 0 );
648 }
649 
650 // container::XNameAccess
651 
652 uno::Any SAL_CALL ScStyleFamiliesObj::getByName( const rtl::OUString& aName )
653                     throw(container::NoSuchElementException,
654                         lang::WrappedTargetException, uno::RuntimeException)
655 {
656     ScUnoGuard aGuard;
657     uno::Reference< container::XNameContainer >  xFamily(GetObjectByName_Impl(aName));
658     if (xFamily.is())
659         return uno::makeAny(xFamily);
660     else
661         throw container::NoSuchElementException();
662 //    return uno::Any();
663 }
664 
665 uno::Sequence<rtl::OUString> SAL_CALL ScStyleFamiliesObj::getElementNames()
666                                                 throw(uno::RuntimeException)
667 {
668     ScUnoGuard aGuard;
669     uno::Sequence<rtl::OUString> aNames(SC_STYLE_FAMILY_COUNT);
670     rtl::OUString* pNames = aNames.getArray();
671     pNames[0] = rtl::OUString::createFromAscii( SC_FAMILYNAME_CELL );
672     pNames[1] = rtl::OUString::createFromAscii( SC_FAMILYNAME_PAGE );
673     return aNames;
674 }
675 
676 sal_Bool SAL_CALL ScStyleFamiliesObj::hasByName( const rtl::OUString& aName )
677                                         throw(uno::RuntimeException)
678 {
679     ScUnoGuard aGuard;
680     String aNameStr( aName );
681     return ( aNameStr.EqualsAscii( SC_FAMILYNAME_CELL ) || aNameStr.EqualsAscii( SC_FAMILYNAME_PAGE ) );
682 }
683 
684 // style::XStyleLoader
685 
686 void SAL_CALL ScStyleFamiliesObj::loadStylesFromURL( const rtl::OUString& aURL,
687                         const uno::Sequence<beans::PropertyValue>& aOptions )
688                                 throw(io::IOException, uno::RuntimeException)
689 {
690     //! use aOptions (like Writer)
691     //! set flag to disable filter option dialogs when importing
692 
693     String aFilter;     // empty - detect
694     String aFiltOpt;
695     ScDocumentLoader aLoader( aURL, aFilter, aFiltOpt );
696 
697     ScDocShell* pSource = aLoader.GetDocShell();
698     if ( pSource && pDocShell )
699     {
700         //  collect options
701 
702         sal_Bool bLoadReplace = sal_True;           // defaults
703         sal_Bool bLoadCellStyles = sal_True;
704         sal_Bool bLoadPageStyles = sal_True;
705 
706         const beans::PropertyValue* pPropArray = aOptions.getConstArray();
707         long nPropCount = aOptions.getLength();
708         for (long i = 0; i < nPropCount; i++)
709         {
710             const beans::PropertyValue& rProp = pPropArray[i];
711             String aPropName(rProp.Name);
712 
713             if (aPropName.EqualsAscii( SC_UNONAME_OVERWSTL ))
714                 bLoadReplace = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
715             else if (aPropName.EqualsAscii( SC_UNONAME_LOADCELL ))
716                 bLoadCellStyles = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
717             else if (aPropName.EqualsAscii( SC_UNONAME_LOADPAGE ))
718                 bLoadPageStyles = ScUnoHelpFunctions::GetBoolFromAny( rProp.Value );
719         }
720 
721         pDocShell->LoadStylesArgs( *pSource, bLoadReplace, bLoadCellStyles, bLoadPageStyles );
722         pDocShell->SetDocumentModified();   // paint is inside LoadStyles
723     }
724 }
725 
726 uno::Sequence<beans::PropertyValue> SAL_CALL ScStyleFamiliesObj::getStyleLoaderOptions()
727                                                 throw(uno::RuntimeException)
728 {
729     //  return defaults for options (?)
730 
731     uno::Sequence<beans::PropertyValue> aSequence(3);
732     beans::PropertyValue* pArray = aSequence.getArray();
733 
734     pArray[0].Name = rtl::OUString::createFromAscii( SC_UNONAME_OVERWSTL );
735     ScUnoHelpFunctions::SetBoolInAny( pArray[0].Value, sal_True );
736 
737     pArray[1].Name = rtl::OUString::createFromAscii( SC_UNONAME_LOADCELL );
738     ScUnoHelpFunctions::SetBoolInAny( pArray[1].Value, sal_True );
739 
740     pArray[2].Name = rtl::OUString::createFromAscii( SC_UNONAME_LOADPAGE );
741     ScUnoHelpFunctions::SetBoolInAny( pArray[2].Value, sal_True );
742 
743     return aSequence;
744 }
745 
746 //------------------------------------------------------------------------
747 
748 ScStyleFamilyObj::ScStyleFamilyObj(ScDocShell* pDocSh, SfxStyleFamily eFam) :
749     pDocShell( pDocSh ),
750     eFamily( eFam )
751 {
752     pDocShell->GetDocument()->AddUnoObject(*this);
753 }
754 
755 ScStyleFamilyObj::~ScStyleFamilyObj()
756 {
757     if (pDocShell)
758         pDocShell->GetDocument()->RemoveUnoObject(*this);
759 }
760 
761 void ScStyleFamilyObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
762 {
763     //  Referenz-Update interessiert hier nicht
764 
765     if ( rHint.ISA( SfxSimpleHint ) &&
766             ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
767     {
768         pDocShell = NULL;       // ungueltig geworden
769     }
770 }
771 
772 // XStyleFamily
773 
774 ScStyleObj* ScStyleFamilyObj::GetObjectByIndex_Impl(sal_uInt32 nIndex)
775 {
776     if ( pDocShell )
777     {
778         ScDocument* pDoc = pDocShell->GetDocument();
779         ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
780 
781         SfxStyleSheetIterator aIter( pStylePool, eFamily );
782         if ( nIndex < aIter.Count() )
783         {
784             SfxStyleSheetBase* pStyle = aIter[(sal_uInt16)nIndex];
785             if ( pStyle )
786             {
787                 return new ScStyleObj( pDocShell, eFamily, String (pStyle->GetName()) );
788             }
789         }
790     }
791     return NULL;
792 }
793 
794 ScStyleObj* ScStyleFamilyObj::GetObjectByName_Impl(const rtl::OUString& aName)
795 {
796     if ( pDocShell )
797     {
798         String aString(aName);
799 
800         ScDocument* pDoc = pDocShell->GetDocument();
801         ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
802         if ( pStylePool->Find( aString, eFamily ) )
803             return new ScStyleObj( pDocShell, eFamily, aString );
804     }
805     return NULL;
806 }
807 
808 void SAL_CALL ScStyleFamilyObj::insertByName( const rtl::OUString& aName, const uno::Any& aElement )
809                             throw(lang::IllegalArgumentException, container::ElementExistException,
810                                     lang::WrappedTargetException, uno::RuntimeException)
811 {
812     ScUnoGuard aGuard;
813     sal_Bool bDone = sal_False;
814     //  Reflection muss nicht uno::XInterface sein, kann auch irgendein Interface sein...
815     uno::Reference< uno::XInterface > xInterface(aElement, uno::UNO_QUERY);
816     if ( xInterface.is() )
817     {
818         ScStyleObj* pStyleObj = ScStyleObj::getImplementation( xInterface );
819         if ( pStyleObj && pStyleObj->GetFamily() == eFamily &&
820                 !pStyleObj->IsInserted() )  // noch nicht eingefuegt?
821         {
822             String aNameStr(ScStyleNameConversion::ProgrammaticToDisplayName( aName, sal::static_int_cast<sal_uInt16>(eFamily) ));
823 
824             ScDocument* pDoc = pDocShell->GetDocument();
825             ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
826 
827             //! DocFunc-Funktion??
828             //! Undo ?????????????
829 
830             if ( !pStylePool->Find( aNameStr, eFamily ) )   // noch nicht vorhanden
831             {
832                 (void)pStylePool->Make( aNameStr, eFamily, SFXSTYLEBIT_USERDEF );
833 
834                 if ( eFamily == SFX_STYLE_FAMILY_PARA && !pDoc->IsImportingXML() )
835                     pDoc->GetPool()->CellStyleCreated( aNameStr );
836 
837                 pStyleObj->InitDoc( pDocShell, aNameStr );  // Objekt kann benutzt werden
838 
839                 pDocShell->SetDocumentModified();   // verwendet wird der neue Style noch nicht
840                 bDone = sal_True;
841             }
842             else
843                 throw container::ElementExistException();
844         }
845     }
846 
847     if (!bDone)
848     {
849         //  other errors are handled above
850         throw lang::IllegalArgumentException();
851     }
852 }
853 
854 void SAL_CALL ScStyleFamilyObj::replaceByName( const rtl::OUString& aName, const uno::Any& aElement )
855                             throw(lang::IllegalArgumentException, container::NoSuchElementException,
856                                     lang::WrappedTargetException, uno::RuntimeException)
857 {
858     ScUnoGuard aGuard;
859     //! zusammenfassen?
860     removeByName( aName );
861     insertByName( aName, aElement );
862 }
863 
864 void SAL_CALL ScStyleFamilyObj::removeByName( const rtl::OUString& aName )
865                                 throw(container::NoSuchElementException,
866                                     lang::WrappedTargetException, uno::RuntimeException)
867 {
868     ScUnoGuard aGuard;
869     sal_Bool bFound = sal_False;
870     if ( pDocShell )
871     {
872         String aString(ScStyleNameConversion::ProgrammaticToDisplayName( aName, sal::static_int_cast<sal_uInt16>(eFamily) ));
873 
874         ScDocument* pDoc = pDocShell->GetDocument();
875         ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
876 
877         //! DocFunc-Funktion??
878         //! Undo ?????????????
879 
880         SfxStyleSheetBase* pStyle = pStylePool->Find( aString, eFamily );
881         if (pStyle)
882         {
883             bFound = sal_True;
884             if ( eFamily == SFX_STYLE_FAMILY_PARA )
885             {
886                 // wie ScViewFunc::RemoveStyleSheetInUse
887                 VirtualDevice aVDev;
888                 Point aLogic = aVDev.LogicToPixel( Point(1000,1000), MAP_TWIP );
889                 double nPPTX = aLogic.X() / 1000.0;
890                 double nPPTY = aLogic.Y() / 1000.0;
891                 Fraction aZoom(1,1);
892                 pDoc->StyleSheetChanged( pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom );
893                 pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT );
894                 pDocShell->SetDocumentModified();
895 
896                 pStylePool->Remove( pStyle );
897 
898                 //! InvalidateAttribs();        // Bindings-Invalidate
899             }
900             else
901             {
902                 if ( pDoc->RemovePageStyleInUse( aString ) )
903                     pDocShell->PageStyleModified( ScGlobal::GetRscString(STR_STYLENAME_STANDARD), sal_True );
904 
905                 pStylePool->Remove( pStyle );
906 
907                 SfxBindings* pBindings = pDocShell->GetViewBindings();
908                 if (pBindings)
909                     pBindings->Invalidate( SID_STYLE_FAMILY4 );
910                 pDocShell->SetDocumentModified();
911             }
912         }
913     }
914 
915     if (!bFound)
916         throw container::NoSuchElementException();
917 }
918 
919 // container::XIndexAccess
920 
921 sal_Int32 SAL_CALL ScStyleFamilyObj::getCount() throw(uno::RuntimeException)
922 {
923     ScUnoGuard aGuard;
924     if ( pDocShell )
925     {
926         ScDocument* pDoc = pDocShell->GetDocument();
927         ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
928 
929         SfxStyleSheetIterator aIter( pStylePool, eFamily );
930         return aIter.Count();
931     }
932     return 0;
933 }
934 
935 uno::Any SAL_CALL ScStyleFamilyObj::getByIndex( sal_Int32 nIndex )
936                             throw(lang::IndexOutOfBoundsException,
937                                     lang::WrappedTargetException, uno::RuntimeException)
938 {
939     ScUnoGuard aGuard;
940     uno::Reference< style::XStyle >  xObj(GetObjectByIndex_Impl(nIndex));
941     if (xObj.is())
942         return uno::makeAny(xObj);
943     else
944         throw lang::IndexOutOfBoundsException();
945 //    return uno::Any();
946 }
947 
948 uno::Type SAL_CALL ScStyleFamilyObj::getElementType() throw(uno::RuntimeException)
949 {
950     ScUnoGuard aGuard;
951     return ::getCppuType((const uno::Reference< style::XStyle >*)0);    // muss zu getByIndex passen
952 }
953 
954 sal_Bool SAL_CALL ScStyleFamilyObj::hasElements() throw(uno::RuntimeException)
955 {
956     ScUnoGuard aGuard;
957     return ( getCount() != 0 );
958 }
959 
960 // container::XNameAccess
961 
962 uno::Any SAL_CALL ScStyleFamilyObj::getByName( const rtl::OUString& aName )
963             throw(container::NoSuchElementException,
964                     lang::WrappedTargetException, uno::RuntimeException)
965 {
966     ScUnoGuard aGuard;
967     uno::Reference< style::XStyle > xObj(
968         GetObjectByName_Impl( ScStyleNameConversion::ProgrammaticToDisplayName( aName, sal::static_int_cast<sal_uInt16>(eFamily) ) ));
969     if (xObj.is())
970         return uno::makeAny(xObj);
971     else
972         throw container::NoSuchElementException();
973 //    return uno::Any();
974 }
975 
976 uno::Sequence<rtl::OUString> SAL_CALL ScStyleFamilyObj::getElementNames()
977                                                 throw(uno::RuntimeException)
978 {
979     ScUnoGuard aGuard;
980     if ( pDocShell )
981     {
982         ScDocument* pDoc = pDocShell->GetDocument();
983         ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
984 
985         SfxStyleSheetIterator aIter( pStylePool, eFamily );
986         sal_uInt16 nCount = aIter.Count();
987 
988         String aName;
989         uno::Sequence<rtl::OUString> aSeq(nCount);
990         rtl::OUString* pAry = aSeq.getArray();
991         SfxStyleSheetBase* pStyle = aIter.First();
992         sal_uInt16 nPos = 0;
993         while (pStyle)
994         {
995             DBG_ASSERT( nPos<nCount, "Anzahl durcheinandergekommen" );
996             if (nPos<nCount)
997                 pAry[nPos++] = ScStyleNameConversion::DisplayToProgrammaticName(
998                                     pStyle->GetName(), sal::static_int_cast<sal_uInt16>(eFamily) );
999             pStyle = aIter.Next();
1000         }
1001         return aSeq;
1002     }
1003     return uno::Sequence<rtl::OUString>();
1004 }
1005 
1006 sal_Bool SAL_CALL ScStyleFamilyObj::hasByName( const rtl::OUString& aName )
1007                                         throw(uno::RuntimeException)
1008 {
1009     ScUnoGuard aGuard;
1010     if ( pDocShell )
1011     {
1012         String aString(ScStyleNameConversion::ProgrammaticToDisplayName( aName, sal::static_int_cast<sal_uInt16>(eFamily) ));
1013 
1014         ScDocument* pDoc = pDocShell->GetDocument();
1015         ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
1016         if ( pStylePool->Find( aString, eFamily ) )
1017             return sal_True;
1018     }
1019     return sal_False;
1020 }
1021 
1022 // XPropertySet
1023 
1024 uno::Reference< beans::XPropertySetInfo > SAL_CALL ScStyleFamilyObj::getPropertySetInfo(  ) throw (uno::RuntimeException)
1025 {
1026     OSL_ENSURE( 0, "###unexpected!" );
1027     return uno::Reference< beans::XPropertySetInfo >();
1028 }
1029 
1030 void SAL_CALL ScStyleFamilyObj::setPropertyValue( const ::rtl::OUString&, const uno::Any& ) throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
1031 {
1032     OSL_ENSURE( 0, "###unexpected!" );
1033 }
1034 
1035 uno::Any SAL_CALL ScStyleFamilyObj::getPropertyValue( const ::rtl::OUString& sPropertyName ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
1036 {
1037     uno::Any aRet;
1038 
1039     if ( sPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("DisplayName") ) )
1040     {
1041         ScUnoGuard aGuard;
1042         sal_uInt32 nResId = 0;
1043         switch ( eFamily )
1044         {
1045             case SFX_STYLE_FAMILY_PARA:
1046                 nResId = STR_STYLE_FAMILY_CELL; break;
1047             case SFX_STYLE_FAMILY_PAGE:
1048                 nResId = STR_STYLE_FAMILY_PAGE; break;
1049             default:
1050                 OSL_ENSURE( 0, "ScStyleFamilyObj::getPropertyValue(): invalid family" );
1051         }
1052         if ( nResId > 0 )
1053         {
1054             ::rtl::OUString sDisplayName( ScGlobal::GetRscString( static_cast< sal_uInt16 >( nResId ) ) );
1055             aRet = uno::makeAny( sDisplayName );
1056         }
1057     }
1058     else
1059     {
1060         throw beans::UnknownPropertyException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("unknown property: ") ) + sPropertyName, static_cast<OWeakObject *>(this) );
1061     }
1062 
1063     return aRet;
1064 }
1065 
1066 void SAL_CALL ScStyleFamilyObj::addPropertyChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XPropertyChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
1067 {
1068     OSL_ENSURE( 0, "###unexpected!" );
1069 }
1070 
1071 void SAL_CALL ScStyleFamilyObj::removePropertyChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XPropertyChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
1072 {
1073     OSL_ENSURE( 0, "###unexpected!" );
1074 }
1075 
1076 void SAL_CALL ScStyleFamilyObj::addVetoableChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XVetoableChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
1077 {
1078     OSL_ENSURE( 0, "###unexpected!" );
1079 }
1080 
1081 void SAL_CALL ScStyleFamilyObj::removeVetoableChangeListener( const ::rtl::OUString&, const uno::Reference< beans::XVetoableChangeListener >& ) throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
1082 {
1083     OSL_ENSURE( 0, "###unexpected!" );
1084 }
1085 
1086 //------------------------------------------------------------------------
1087 
1088 //  Default-ctor wird fuer die Reflection gebraucht
1089 
1090 //UNUSED2008-05  ScStyleObj::ScStyleObj() :
1091 //UNUSED2008-05  aPropSet( lcl_GetCellStyleMap() ),
1092 //UNUSED2008-05  pDocShell( NULL ),
1093 //UNUSED2008-05  eFamily( SFX_STYLE_FAMILY_PARA )
1094 //UNUSED2008-05  {
1095 //UNUSED2008-05  }
1096 
1097 ScStyleObj::ScStyleObj(ScDocShell* pDocSh, SfxStyleFamily eFam, const String& rName) :
1098     pPropSet( (eFam == SFX_STYLE_FAMILY_PARA) ? lcl_GetCellStyleSet() : lcl_GetPageStyleSet() ),
1099     pDocShell( pDocSh ),
1100     eFamily( eFam ),
1101     aStyleName( rName )
1102 {
1103     //  pDocShell ist Null, wenn per ServiceProvider erzeugt
1104 
1105     if (pDocShell)
1106         pDocShell->GetDocument()->AddUnoObject(*this);
1107 }
1108 
1109 void ScStyleObj::InitDoc( ScDocShell* pNewDocSh, const String& rNewName )
1110 {
1111     if ( pNewDocSh && !pDocShell )
1112     {
1113         aStyleName = rNewName;
1114         pDocShell = pNewDocSh;
1115         pDocShell->GetDocument()->AddUnoObject(*this);
1116     }
1117 }
1118 
1119 ScStyleObj::~ScStyleObj()
1120 {
1121     if (pDocShell)
1122         pDocShell->GetDocument()->RemoveUnoObject(*this);
1123 }
1124 
1125 // XUnoTunnel
1126 
1127 sal_Int64 SAL_CALL ScStyleObj::getSomething(
1128                 const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException)
1129 {
1130     if ( rId.getLength() == 16 &&
1131           0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
1132                                     rId.getConstArray(), 16 ) )
1133     {
1134         return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this));
1135     }
1136     return 0;
1137 }
1138 
1139 // static
1140 const uno::Sequence<sal_Int8>& ScStyleObj::getUnoTunnelId()
1141 {
1142     static uno::Sequence<sal_Int8> * pSeq = 0;
1143     if( !pSeq )
1144     {
1145         osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() );
1146         if( !pSeq )
1147         {
1148             static uno::Sequence< sal_Int8 > aSeq( 16 );
1149             rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
1150             pSeq = &aSeq;
1151         }
1152     }
1153     return *pSeq;
1154 }
1155 
1156 // static
1157 ScStyleObj* ScStyleObj::getImplementation(
1158                         const uno::Reference<uno::XInterface> xObj )
1159 {
1160     ScStyleObj* pRet = NULL;
1161     uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY );
1162     if (xUT.is())
1163         pRet = reinterpret_cast<ScStyleObj*>(sal::static_int_cast<sal_IntPtr>(xUT->getSomething(getUnoTunnelId())));
1164     return pRet;
1165 }
1166 
1167 void ScStyleObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
1168 {
1169     //  Referenz-Update interessiert hier nicht
1170 
1171     if ( rHint.ISA( SfxSimpleHint ) &&
1172             ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
1173     {
1174         pDocShell = NULL;       // ungueltig geworden
1175     }
1176 }
1177 
1178 SfxStyleSheetBase* ScStyleObj::GetStyle_Impl()
1179 {
1180     if ( pDocShell )
1181     {
1182         ScDocument* pDoc = pDocShell->GetDocument();
1183         ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
1184         return pStylePool->Find( aStyleName, eFamily );
1185     }
1186     return NULL;
1187 }
1188 
1189 // style::XStyle
1190 
1191 sal_Bool SAL_CALL ScStyleObj::isUserDefined() throw(uno::RuntimeException)
1192 {
1193     ScUnoGuard aGuard;
1194     SfxStyleSheetBase* pStyle = GetStyle_Impl();
1195     if (pStyle)
1196         return pStyle->IsUserDefined();
1197     return sal_False;
1198 }
1199 
1200 sal_Bool SAL_CALL ScStyleObj::isInUse() throw(uno::RuntimeException)
1201 {
1202     ScUnoGuard aGuard;
1203     SfxStyleSheetBase* pStyle = GetStyle_Impl();
1204     if (pStyle)
1205         return pStyle->IsUsed();
1206     return sal_False;
1207 }
1208 
1209 rtl::OUString SAL_CALL ScStyleObj::getParentStyle() throw(uno::RuntimeException)
1210 {
1211     ScUnoGuard aGuard;
1212     SfxStyleSheetBase* pStyle = GetStyle_Impl();
1213     if (pStyle)
1214         return ScStyleNameConversion::DisplayToProgrammaticName( pStyle->GetParent(), sal::static_int_cast<sal_uInt16>(eFamily) );
1215     return rtl::OUString();
1216 }
1217 
1218 void SAL_CALL ScStyleObj::setParentStyle( const rtl::OUString& rParentStyle )
1219                 throw(container::NoSuchElementException, uno::RuntimeException)
1220 {
1221     ScUnoGuard aGuard;
1222     SfxStyleSheetBase* pStyle = GetStyle_Impl();
1223     if (pStyle)
1224     {
1225         //  #70909# cell styles cannot be modified if any sheet is protected
1226         if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) )
1227             return;         //! exception?
1228 
1229         //! DocFunc-Funktion??
1230         //! Undo ?????????????
1231 
1232         String aString(ScStyleNameConversion::ProgrammaticToDisplayName( rParentStyle, sal::static_int_cast<sal_uInt16>(eFamily) ));
1233         sal_Bool bOk = pStyle->SetParent( aString );
1234         if (bOk)
1235         {
1236             //  wie bei setPropertyValue
1237 
1238             ScDocument* pDoc = pDocShell->GetDocument();
1239             if ( eFamily == SFX_STYLE_FAMILY_PARA )
1240             {
1241                 //  Zeilenhoehen anpassen...
1242 
1243                 VirtualDevice aVDev;
1244                 Point aLogic = aVDev.LogicToPixel( Point(1000,1000), MAP_TWIP );
1245                 double nPPTX = aLogic.X() / 1000.0;
1246                 double nPPTY = aLogic.Y() / 1000.0;
1247                 Fraction aZoom(1,1);
1248                 pDoc->StyleSheetChanged( pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom );
1249 
1250                 pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT );
1251                 pDocShell->SetDocumentModified();
1252             }
1253             else
1254             {
1255                 //! ModifyStyleSheet am Dokument (alte Werte merken)
1256 
1257                 pDocShell->PageStyleModified( aStyleName, sal_True );
1258             }
1259         }
1260     }
1261 }
1262 
1263 // container::XNamed
1264 
1265 rtl::OUString SAL_CALL ScStyleObj::getName() throw(uno::RuntimeException)
1266 {
1267     ScUnoGuard aGuard;
1268     SfxStyleSheetBase* pStyle = GetStyle_Impl();
1269     if (pStyle)
1270         return ScStyleNameConversion::DisplayToProgrammaticName( pStyle->GetName(), sal::static_int_cast<sal_uInt16>(eFamily) );
1271     return rtl::OUString();
1272 }
1273 
1274 void SAL_CALL ScStyleObj::setName( const rtl::OUString& aNewName )
1275                                                 throw(uno::RuntimeException)
1276 {
1277     ScUnoGuard aGuard;
1278     SfxStyleSheetBase* pStyle = GetStyle_Impl();
1279     if (pStyle)
1280     {
1281         //  #71225# cell styles cannot be renamed if any sheet is protected
1282         if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) )
1283             return;         //! exception?
1284 
1285         //! DocFunc-Funktion??
1286         //! Undo ?????????????
1287 
1288         String aString(aNewName);
1289         sal_Bool bOk = pStyle->SetName( aString );
1290         if (bOk)
1291         {
1292             aStyleName = aString;       //! notify other objects for this style?
1293 
1294             ScDocument* pDoc = pDocShell->GetDocument();
1295             if ( eFamily == SFX_STYLE_FAMILY_PARA && !pDoc->IsImportingXML() )
1296                 pDoc->GetPool()->CellStyleCreated( aString );
1297 
1298             //  Zellvorlagen = 2, Seitenvorlagen = 4
1299             sal_uInt16 nId = ( eFamily == SFX_STYLE_FAMILY_PARA ) ?
1300                             SID_STYLE_FAMILY2 : SID_STYLE_FAMILY4;
1301             SfxBindings* pBindings = pDocShell->GetViewBindings();
1302             if (pBindings)
1303             {
1304                 pBindings->Invalidate( nId );
1305                 pBindings->Invalidate( SID_STYLE_APPLY );
1306             }
1307         }
1308     }
1309 }
1310 
1311 // static
1312 uno::Reference<container::XIndexReplace> ScStyleObj::CreateEmptyNumberingRules()
1313 {
1314     SvxNumRule aRule( 0, 0, sal_True );         // nothing supported
1315     return SvxCreateNumRule( &aRule );
1316 }
1317 
1318 // beans::XPropertyState
1319 
1320 const SfxItemSet* ScStyleObj::GetStyleItemSet_Impl( const ::rtl::OUString& rPropName,
1321                                         const SfxItemPropertySimpleEntry*& rpResultEntry )
1322 {
1323     //! OUString as argument?
1324 
1325     SfxStyleSheetBase* pStyle = GetStyle_Impl();
1326     if (pStyle)
1327     {
1328         const SfxItemPropertySimpleEntry* pEntry = NULL;
1329         if ( eFamily == SFX_STYLE_FAMILY_PAGE )
1330         {
1331             pEntry = lcl_GetHeaderStyleMap()->getByName( rPropName );
1332             if ( pEntry )     // only item-wids in header/footer map
1333             {
1334                 rpResultEntry = pEntry;
1335                 return &((const SvxSetItem&)pStyle->GetItemSet().Get(ATTR_PAGE_HEADERSET)).GetItemSet();
1336             }
1337             pEntry = lcl_GetFooterStyleMap()->getByName( rPropName );
1338             if ( pEntry )      // only item-wids in header/footer map
1339             {
1340                 rpResultEntry = pEntry;
1341                 return &((const SvxSetItem&)pStyle->GetItemSet().Get(ATTR_PAGE_FOOTERSET)).GetItemSet();
1342             }
1343         }
1344         pEntry = pPropSet->getPropertyMap()->getByName( rPropName );
1345         if ( pEntry )
1346         {
1347             rpResultEntry = pEntry;
1348             return &pStyle->GetItemSet();
1349         }
1350     }
1351 
1352     rpResultEntry = NULL;
1353     return NULL;
1354 }
1355 
1356 beans::PropertyState SAL_CALL ScStyleObj::getPropertyState( const rtl::OUString& aPropertyName )
1357                                 throw(beans::UnknownPropertyException, uno::RuntimeException)
1358 {
1359     ScUnoGuard aGuard;
1360     beans::PropertyState eRet = beans::PropertyState_DIRECT_VALUE;
1361 
1362     const SfxItemPropertySimpleEntry* pResultEntry = NULL;
1363     const SfxItemSet* pItemSet = GetStyleItemSet_Impl( aPropertyName, pResultEntry );
1364 
1365     if ( pItemSet && pResultEntry )
1366     {
1367         sal_uInt16 nWhich = pResultEntry->nWID;
1368         if ( nWhich == SC_WID_UNO_TBLBORD )
1369         {
1370             nWhich = ATTR_BORDER;
1371         }
1372         if ( IsScItemWid( nWhich ) )
1373         {
1374             SfxItemState eState = pItemSet->GetItemState( nWhich, sal_False );
1375 
1376 //           //  if no rotate value is set, look at orientation
1377 //           //! also for a fixed value of 0 (in case orientation is ambiguous)?
1378 //           if ( nWhich == ATTR_ROTATE_VALUE && eState == SFX_ITEM_DEFAULT )
1379 //               eState = pItemSet->GetItemState( ATTR_ORIENTATION, sal_False );
1380 
1381             if ( eState == SFX_ITEM_SET )
1382                 eRet = beans::PropertyState_DIRECT_VALUE;
1383             else if ( eState == SFX_ITEM_DEFAULT )
1384                 eRet = beans::PropertyState_DEFAULT_VALUE;
1385             else if ( eState == SFX_ITEM_DONTCARE )
1386                 eRet = beans::PropertyState_AMBIGUOUS_VALUE;    // kann eigentlich nicht sein...
1387             else
1388             {
1389                 DBG_ERROR("unbekannter ItemState");
1390             }
1391         }
1392     }
1393     return eRet;
1394 }
1395 
1396 uno::Sequence<beans::PropertyState> SAL_CALL ScStyleObj::getPropertyStates(
1397                             const uno::Sequence<rtl::OUString>& aPropertyNames )
1398                     throw(beans::UnknownPropertyException, uno::RuntimeException)
1399 {
1400     //  duemmliche Default-Implementierung: alles einzeln per getPropertyState holen
1401     //! sollte optimiert werden!
1402 
1403     ScUnoGuard aGuard;
1404     const rtl::OUString* pNames = aPropertyNames.getConstArray();
1405     uno::Sequence<beans::PropertyState> aRet(aPropertyNames.getLength());
1406     beans::PropertyState* pStates = aRet.getArray();
1407     for(sal_Int32 i = 0; i < aPropertyNames.getLength(); i++)
1408         pStates[i] = getPropertyState(pNames[i]);
1409     return aRet;
1410 }
1411 
1412 void SAL_CALL ScStyleObj::setPropertyToDefault( const rtl::OUString& aPropertyName )
1413                             throw(beans::UnknownPropertyException, uno::RuntimeException)
1414 {
1415     ScUnoGuard aGuard;
1416 
1417     const SfxItemPropertyMap* pMap = pPropSet->getPropertyMap();
1418     const SfxItemPropertySimpleEntry* pEntry = pMap->getByName( aPropertyName );
1419     if ( !pEntry )
1420         throw beans::UnknownPropertyException();
1421 
1422     SetOnePropertyValue( aPropertyName, pEntry, NULL );
1423 }
1424 
1425 uno::Any SAL_CALL ScStyleObj::getPropertyDefault( const rtl::OUString& aPropertyName )
1426                             throw(beans::UnknownPropertyException, lang::WrappedTargetException,
1427                                     uno::RuntimeException)
1428 {
1429     ScUnoGuard aGuard;
1430     uno::Any aAny;
1431 
1432     const SfxItemPropertySimpleEntry* pResultEntry = NULL;
1433     const SfxItemSet* pStyleSet = GetStyleItemSet_Impl( aPropertyName, pResultEntry );
1434 
1435     if ( pStyleSet && pResultEntry )
1436     {
1437         sal_uInt16 nWhich = pResultEntry->nWID;
1438 
1439         if ( IsScItemWid( nWhich ) )
1440         {
1441             //  Default ist Default vom ItemPool, nicht vom Standard-Style,
1442             //  damit es zu setPropertyToDefault passt
1443             SfxItemSet aEmptySet( *pStyleSet->GetPool(), pStyleSet->GetRanges() );
1444             //  #65253# Default-Items mit falscher Slot-ID funktionieren im SfxItemPropertySet3 nicht
1445             //! Slot-IDs aendern...
1446             if ( aEmptySet.GetPool()->GetSlotId(nWhich) == nWhich &&
1447                  aEmptySet.GetItemState(nWhich, sal_False) == SFX_ITEM_DEFAULT )
1448             {
1449                 aEmptySet.Put( aEmptySet.Get( nWhich ) );
1450             }
1451             const SfxItemSet* pItemSet = &aEmptySet;
1452 
1453             switch ( nWhich )       // fuer Item-Spezial-Behandlungen
1454             {
1455                 case ATTR_VALUE_FORMAT:
1456                     //  default has no language set
1457                     aAny <<= sal_Int32( ((const SfxUInt32Item&)pItemSet->Get(nWhich)).GetValue() );
1458                     break;
1459                 case ATTR_INDENT:
1460                     aAny <<= sal_Int16( TwipsToHMM(((const SfxUInt16Item&)
1461                                     pItemSet->Get(nWhich)).GetValue()) );
1462                     break;
1463                 case ATTR_PAGE_SCALE:
1464                 case ATTR_PAGE_SCALETOPAGES:
1465                 case ATTR_PAGE_FIRSTPAGENO:
1466                     aAny <<= sal_Int16( ((const SfxUInt16Item&)pItemSet->Get(nWhich)).GetValue() );
1467                     break;
1468                 case ATTR_PAGE_CHARTS:
1469                 case ATTR_PAGE_OBJECTS:
1470                 case ATTR_PAGE_DRAWINGS:
1471                     //! sal_Bool-MID fuer ScViewObjectModeItem definieren?
1472                     aAny <<= sal_Bool( ((const ScViewObjectModeItem&)pItemSet->Get(nWhich)).
1473                                     GetValue() == VOBJ_MODE_SHOW );
1474                     break;
1475                 case ATTR_PAGE_SCALETO:
1476                     {
1477                         const ScPageScaleToItem aItem((const ScPageScaleToItem&)pItemSet->Get(nWhich));
1478                         if (aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SC_UNO_PAGE_SCALETOX )))
1479                             aAny = uno::makeAny(static_cast<sal_Int16>(aItem.GetWidth()));
1480                         else
1481                             aAny = uno::makeAny(static_cast<sal_Int16>(aItem.GetHeight()));
1482                     }
1483                     break;
1484                 default:
1485                     pPropSet->getPropertyValue( *pResultEntry, *pItemSet, aAny );
1486             }
1487         }
1488         else if ( IsScUnoWid( nWhich ) )
1489         {
1490             SfxItemSet aEmptySet( *pStyleSet->GetPool(), pStyleSet->GetRanges() );
1491             const SfxItemSet* pItemSet = &aEmptySet;
1492             switch ( nWhich )
1493             {
1494                 case SC_WID_UNO_TBLBORD:
1495                     {
1496                         const SfxPoolItem* pItem = &pItemSet->Get( ATTR_BORDER );
1497                         if ( pItem )
1498                         {
1499                             SvxBoxItem aOuter( *( static_cast<const SvxBoxItem*>( pItem ) ) );
1500                             SvxBoxInfoItem aInner( ATTR_BORDER_INNER );
1501                             table::TableBorder aBorder;
1502                             ScHelperFunctions::FillTableBorder( aBorder, aOuter, aInner );
1503                             aBorder.IsHorizontalLineValid = sal_False;
1504                             aBorder.IsVerticalLineValid = sal_False;
1505                             aBorder.IsDistanceValid = sal_False;
1506                             aAny <<= aBorder;
1507                         }
1508                     }
1509                     break;
1510             }
1511         }
1512     }
1513     return aAny;
1514 }
1515 
1516 // XMultiPropertySet
1517 
1518 void SAL_CALL ScStyleObj::setPropertyValues( const uno::Sequence< rtl::OUString >& aPropertyNames,
1519                                                 const uno::Sequence< uno::Any >& aValues )
1520                                 throw (beans::PropertyVetoException, lang::IllegalArgumentException,
1521                                         lang::WrappedTargetException, uno::RuntimeException)
1522 {
1523     ScUnoGuard aGuard;
1524 
1525     sal_Int32 nCount = aPropertyNames.getLength();
1526     if ( aValues.getLength() != nCount )
1527         throw lang::IllegalArgumentException();
1528 
1529     if ( nCount )
1530     {
1531         const rtl::OUString* pNames = aPropertyNames.getConstArray();
1532         const uno::Any* pValues = aValues.getConstArray();
1533 
1534         const SfxItemPropertyMap* pPropertyMap = pPropSet->getPropertyMap();
1535         for (sal_Int32 i = 0; i < nCount; i++)
1536         {
1537             const SfxItemPropertySimpleEntry*  pEntry = pPropertyMap->getByName( pNames[i] );
1538             SetOnePropertyValue( pNames[i], pEntry, &pValues[i] );
1539         }
1540     }
1541 }
1542 
1543 uno::Sequence<uno::Any> SAL_CALL ScStyleObj::getPropertyValues(
1544                                     const uno::Sequence< rtl::OUString >& aPropertyNames )
1545                                 throw (uno::RuntimeException)
1546 {
1547     ScUnoGuard aGuard;
1548 
1549     //! optimize
1550 
1551     sal_Int32 nCount = aPropertyNames.getLength();
1552     uno::Sequence<uno::Any> aSequence( nCount );
1553     if ( nCount )
1554     {
1555         uno::Any* pValues = aSequence.getArray();
1556         for (sal_Int32 i=0; i<nCount; i++)
1557             pValues[i] = getPropertyValue( aPropertyNames[i] );
1558     }
1559     return aSequence;
1560 }
1561 
1562 void SAL_CALL ScStyleObj::addPropertiesChangeListener( const uno::Sequence<rtl::OUString>& /* aPropertyNames */,
1563                                     const uno::Reference<beans::XPropertiesChangeListener>& /* xListener */ )
1564                                 throw (uno::RuntimeException)
1565 {
1566     // no bound properties
1567 }
1568 
1569 void SAL_CALL ScStyleObj::removePropertiesChangeListener(
1570                                     const uno::Reference<beans::XPropertiesChangeListener>& /* xListener */ )
1571                                 throw (uno::RuntimeException)
1572 {
1573     // no bound properties
1574 }
1575 
1576 void SAL_CALL ScStyleObj::firePropertiesChangeEvent( const uno::Sequence<rtl::OUString>& /* aPropertyNames */,
1577                                     const uno::Reference<beans::XPropertiesChangeListener>& /* xListener */ )
1578                                 throw (uno::RuntimeException)
1579 {
1580     // no bound properties
1581 }
1582 
1583 // XMultiPropertyStates
1584 // getPropertyStates already defined for XPropertyState
1585 
1586 void SAL_CALL ScStyleObj::setAllPropertiesToDefault() throw (uno::RuntimeException)
1587 {
1588     ScUnoGuard aGuard;
1589 
1590     SfxStyleSheetBase* pStyle = GetStyle_Impl();
1591     if ( pStyle )
1592     {
1593         //  #70909# cell styles cannot be modified if any sheet is protected
1594         if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) )
1595             throw uno::RuntimeException();
1596 
1597         SfxItemSet& rSet = pStyle->GetItemSet();
1598         rSet.ClearItem();                               // set all items to default
1599 
1600         //! merge with SetOneProperty
1601 
1602         ScDocument* pDoc = pDocShell->GetDocument();
1603         if ( eFamily == SFX_STYLE_FAMILY_PARA )
1604         {
1605             //  row heights
1606 
1607             VirtualDevice aVDev;
1608             Point aLogic = aVDev.LogicToPixel( Point(1000,1000), MAP_TWIP );
1609             double nPPTX = aLogic.X() / 1000.0;
1610             double nPPTY = aLogic.Y() / 1000.0;
1611             Fraction aZoom(1,1);
1612             pDoc->StyleSheetChanged( pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom );
1613 
1614             pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT );
1615             pDocShell->SetDocumentModified();
1616         }
1617         else
1618         {
1619             // #i22448# apply the default BoxInfoItem for page styles again
1620             // (same content as in ScStyleSheet::GetItemSet, to control the dialog)
1621             SvxBoxInfoItem aBoxInfoItem( ATTR_BORDER_INNER );
1622             aBoxInfoItem.SetTable( sal_False );
1623             aBoxInfoItem.SetDist( sal_True );
1624             aBoxInfoItem.SetValid( VALID_DISTANCE, sal_True );
1625             rSet.Put( aBoxInfoItem );
1626 
1627             pDocShell->PageStyleModified( aStyleName, sal_True );
1628         }
1629     }
1630 }
1631 
1632 void SAL_CALL ScStyleObj::setPropertiesToDefault( const uno::Sequence<rtl::OUString>& aPropertyNames )
1633                                 throw (beans::UnknownPropertyException, uno::RuntimeException)
1634 {
1635     ScUnoGuard aGuard;
1636 
1637     sal_Int32 nCount = aPropertyNames.getLength();
1638     if ( nCount )
1639     {
1640         const rtl::OUString* pNames = aPropertyNames.getConstArray();
1641 
1642         const SfxItemPropertyMap* pPropertyMap = pPropSet->getPropertyMap();
1643         for (sal_Int32 i = 0; i < nCount; i++)
1644         {
1645             const SfxItemPropertySimpleEntry*  pEntry = pPropertyMap->getByName( pNames[i] );
1646             SetOnePropertyValue( pNames[i], pEntry, NULL );
1647         }
1648     }
1649 }
1650 
1651 uno::Sequence<uno::Any> SAL_CALL ScStyleObj::getPropertyDefaults(
1652                                 const uno::Sequence<rtl::OUString>& aPropertyNames )
1653                         throw (beans::UnknownPropertyException, lang::WrappedTargetException,
1654                                 uno::RuntimeException)
1655 {
1656     ScUnoGuard aGuard;
1657 
1658     //! optimize
1659 
1660     sal_Int32 nCount = aPropertyNames.getLength();
1661     uno::Sequence<uno::Any> aSequence( nCount );
1662     if ( nCount )
1663     {
1664         uno::Any* pValues = aSequence.getArray();
1665         for (sal_Int32 i=0; i<nCount; i++)
1666             pValues[i] = getPropertyDefault( aPropertyNames[i] );
1667     }
1668     return aSequence;
1669 }
1670 
1671 // beans::XPropertySet
1672 
1673 uno::Reference<beans::XPropertySetInfo> SAL_CALL ScStyleObj::getPropertySetInfo()
1674                                                         throw(uno::RuntimeException)
1675 {
1676     ScUnoGuard aGuard;
1677     return pPropSet->getPropertySetInfo();
1678 }
1679 
1680 void SAL_CALL ScStyleObj::setPropertyValue(
1681                         const rtl::OUString& aPropertyName, const uno::Any& aValue )
1682                 throw(beans::UnknownPropertyException, beans::PropertyVetoException,
1683                         lang::IllegalArgumentException, lang::WrappedTargetException,
1684                         uno::RuntimeException)
1685 {
1686     ScUnoGuard aGuard;
1687 
1688     const SfxItemPropertySimpleEntry*  pEntry = pPropSet->getPropertyMap()->getByName( aPropertyName );
1689     if ( !pEntry )
1690         throw beans::UnknownPropertyException();
1691 
1692     SetOnePropertyValue( aPropertyName, pEntry, &aValue );
1693 }
1694 
1695 void ScStyleObj::SetOnePropertyValue( const ::rtl::OUString& rPropertyName, const SfxItemPropertySimpleEntry* pEntry, const uno::Any* pValue )
1696                                 throw(lang::IllegalArgumentException, uno::RuntimeException)
1697 {
1698     SfxStyleSheetBase* pStyle = GetStyle_Impl();
1699     if ( pStyle && pEntry )
1700     {
1701         //  #70909# cell styles cannot be modified if any sheet is protected
1702         if ( eFamily == SFX_STYLE_FAMILY_PARA && lcl_AnyTabProtected( *pDocShell->GetDocument() ) )
1703             throw uno::RuntimeException();
1704 
1705         SfxItemSet& rSet = pStyle->GetItemSet();    // direkt im lebenden Style aendern...
1706         sal_Bool bDone = sal_False;
1707         if ( eFamily == SFX_STYLE_FAMILY_PAGE )
1708         {
1709             if(pEntry->nWID == SC_WID_UNO_HEADERSET)
1710             {
1711                 const SfxItemPropertySimpleEntry* pHeaderEntry = lcl_GetHeaderStyleMap()->getByName( rPropertyName );
1712                 if ( pHeaderEntry ) // only item-wids in header/footer map
1713                 {
1714                     SvxSetItem aNewHeader( (const SvxSetItem&)rSet.Get(ATTR_PAGE_HEADERSET) );
1715                     if (pValue)
1716                         pPropSet->setPropertyValue( *pHeaderEntry, *pValue, aNewHeader.GetItemSet() );
1717                     else
1718                         aNewHeader.GetItemSet().ClearItem( pHeaderEntry->nWID );
1719                     rSet.Put( aNewHeader );
1720                     bDone = sal_True;
1721                 }
1722             }
1723             else if(pEntry->nWID == SC_WID_UNO_FOOTERSET)
1724             {
1725                 const SfxItemPropertySimpleEntry* pFooterEntry = lcl_GetFooterStyleMap()->getByName( rPropertyName );
1726                 if ( pFooterEntry ) // only item-wids in header/footer map
1727                 {
1728                     SvxSetItem aNewFooter( (const SvxSetItem&)rSet.Get(ATTR_PAGE_FOOTERSET) );
1729                     if (pValue)
1730                         pPropSet->setPropertyValue( *pFooterEntry, *pValue, aNewFooter.GetItemSet() );
1731                     else
1732                         aNewFooter.GetItemSet().ClearItem( pFooterEntry->nWID );
1733                     rSet.Put( aNewFooter );
1734                     bDone = sal_True;
1735                 }
1736             }
1737         }
1738         if (!bDone)
1739         {
1740             if ( pEntry )
1741             {
1742                 if ( IsScItemWid( pEntry->nWID ) )
1743                 {
1744                     if (pValue)
1745                     {
1746                         switch ( pEntry->nWID )     // fuer Item-Spezial-Behandlungen
1747                         {
1748                             case ATTR_VALUE_FORMAT:
1749                                 {
1750                                     // #67847# language for number formats
1751                                     SvNumberFormatter* pFormatter =
1752                                             pDocShell->GetDocument()->GetFormatTable();
1753                                     sal_uInt32 nOldFormat = ((const SfxUInt32Item&)
1754                                             rSet.Get( ATTR_VALUE_FORMAT )).GetValue();
1755                                     LanguageType eOldLang = ((const SvxLanguageItem&)
1756                                             rSet.Get( ATTR_LANGUAGE_FORMAT )).GetLanguage();
1757                                     nOldFormat = pFormatter->
1758                                             GetFormatForLanguageIfBuiltIn( nOldFormat, eOldLang );
1759 
1760                                     sal_uInt32 nNewFormat = 0;
1761                                     *pValue >>= nNewFormat;
1762                                     rSet.Put( SfxUInt32Item( ATTR_VALUE_FORMAT, nNewFormat ) );
1763 
1764                                     const SvNumberformat* pNewEntry = pFormatter->GetEntry( nNewFormat );
1765                                     LanguageType eNewLang =
1766                                         pNewEntry ? pNewEntry->GetLanguage() : LANGUAGE_DONTKNOW;
1767                                     if ( eNewLang != eOldLang && eNewLang != LANGUAGE_DONTKNOW )
1768                                         rSet.Put( SvxLanguageItem( eNewLang, ATTR_LANGUAGE_FORMAT ) );
1769 
1770                                     //! keep default state of number format if only language changed?
1771                                 }
1772                                 break;
1773                             case ATTR_INDENT:
1774                                 {
1775                                     sal_Int16 nVal = 0;
1776                                     *pValue >>= nVal;
1777                                     rSet.Put( SfxUInt16Item( pEntry->nWID, (sal_uInt16)HMMToTwips(nVal) ) );
1778                                 }
1779                                 break;
1780                             case ATTR_ROTATE_VALUE:
1781                                 {
1782                                     sal_Int32 nRotVal = 0;
1783                                     if ( *pValue >>= nRotVal )
1784                                     {
1785                                         //  stored value is always between 0 and 360 deg.
1786                                         nRotVal %= 36000;
1787                                         if ( nRotVal < 0 )
1788                                             nRotVal += 36000;
1789                                         rSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, nRotVal ) );
1790                                     }
1791                                 }
1792                                 break;
1793                             case ATTR_STACKED:
1794                                 {
1795                                     table::CellOrientation eOrient;
1796                                     if( *pValue >>= eOrient )
1797                                     {
1798                                         switch( eOrient )
1799                                         {
1800                                             case table::CellOrientation_STANDARD:
1801                                                 rSet.Put( SfxBoolItem( ATTR_STACKED, sal_False ) );
1802                                             break;
1803                                             case table::CellOrientation_TOPBOTTOM:
1804                                                 rSet.Put( SfxBoolItem( ATTR_STACKED, sal_False ) );
1805                                                 rSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, 27000 ) );
1806                                             break;
1807                                             case table::CellOrientation_BOTTOMTOP:
1808                                                 rSet.Put( SfxBoolItem( ATTR_STACKED, sal_False ) );
1809                                                 rSet.Put( SfxInt32Item( ATTR_ROTATE_VALUE, 9000 ) );
1810                                             break;
1811                                             case table::CellOrientation_STACKED:
1812                                                 rSet.Put( SfxBoolItem( ATTR_STACKED, sal_True ) );
1813                                             break;
1814                                             default:
1815                                             {
1816                                                 // added to avoid warnings
1817                                             }
1818                                         }
1819                                     }
1820                                 }
1821                                 break;
1822                             case ATTR_PAGE_SCALE:
1823                             case ATTR_PAGE_SCALETOPAGES:
1824                                 {
1825                                     rSet.ClearItem(ATTR_PAGE_SCALETOPAGES);
1826                                     rSet.ClearItem(ATTR_PAGE_SCALE);
1827                                     rSet.ClearItem(ATTR_PAGE_SCALETO);
1828                                     sal_Int16 nVal = 0;
1829                                     *pValue >>= nVal;
1830                                     rSet.Put( SfxUInt16Item( pEntry->nWID, nVal ) );
1831                                 }
1832                                 break;
1833                             case ATTR_PAGE_FIRSTPAGENO:
1834                                 {
1835                                     sal_Int16 nVal = 0;
1836                                     *pValue >>= nVal;
1837                                     rSet.Put( SfxUInt16Item( ATTR_PAGE_FIRSTPAGENO, nVal ) );
1838                                 }
1839                                 break;
1840                             case ATTR_PAGE_CHARTS:
1841                             case ATTR_PAGE_OBJECTS:
1842                             case ATTR_PAGE_DRAWINGS:
1843                                 {
1844                                     sal_Bool bBool = sal_False;
1845                                     *pValue >>= bBool;
1846                                     //! sal_Bool-MID fuer ScViewObjectModeItem definieren?
1847                                     rSet.Put( ScViewObjectModeItem( pEntry->nWID,
1848                                         bBool ? VOBJ_MODE_SHOW : VOBJ_MODE_HIDE ) );
1849                                 }
1850                                 break;
1851                             case ATTR_PAGE_PAPERBIN:
1852                                 {
1853                                     sal_uInt8 nTray = PAPERBIN_PRINTER_SETTINGS;
1854                                     sal_Bool bFound = sal_False;
1855 
1856                                     rtl::OUString aName;
1857                                     if ( *pValue >>= aName )
1858                                     {
1859                                         if ( aName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SC_PAPERBIN_DEFAULTNAME ) ) )
1860                                             bFound = sal_True;
1861                                         else
1862                                         {
1863                                             Printer* pPrinter = pDocShell->GetPrinter();
1864                                             if (pPrinter)
1865                                             {
1866                                                 String aNameStr = aName;
1867                                                 sal_uInt16 nCount = pPrinter->GetPaperBinCount();
1868                                                 for (sal_uInt16 i=0; i<nCount; i++)
1869                                                     if ( aNameStr == pPrinter->GetPaperBinName(i) )
1870                                                     {
1871                                                         nTray = (sal_uInt8) i;
1872                                                         bFound = sal_True;
1873                                                         break;
1874                                                     }
1875                                             }
1876                                         }
1877                                     }
1878                                     if ( bFound )
1879                                         rSet.Put( SvxPaperBinItem( ATTR_PAGE_PAPERBIN, nTray ) );
1880                                     else
1881                                         throw lang::IllegalArgumentException();
1882                                 }
1883                                 break;
1884                             case ATTR_PAGE_SCALETO:
1885                                 {
1886                                     sal_Int16 nPages = 0;
1887                                     if (*pValue >>= nPages)
1888                                     {
1889                                         ScPageScaleToItem aItem = ((const ScPageScaleToItem&)rSet.Get(ATTR_PAGE_SCALETO));
1890                                         if ( rPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SC_UNO_PAGE_SCALETOX)))
1891                                             aItem.SetWidth(static_cast<sal_uInt16>(nPages));
1892                                         else
1893                                             aItem.SetHeight(static_cast<sal_uInt16>(nPages));
1894                                         rSet.Put( aItem );
1895                                         rSet.ClearItem(ATTR_PAGE_SCALETOPAGES);
1896                                         rSet.ClearItem(ATTR_PAGE_SCALE);
1897                                     }
1898                                 }
1899                                 break;
1900                             default:
1901                                 //  #65253# Default-Items mit falscher Slot-ID
1902                                 //  funktionieren im SfxItemPropertySet3 nicht
1903                                 //! Slot-IDs aendern...
1904                                 if ( rSet.GetPool()->GetSlotId(pEntry->nWID) == pEntry->nWID &&
1905                                      rSet.GetItemState(pEntry->nWID, sal_False) == SFX_ITEM_DEFAULT )
1906                                 {
1907                                     rSet.Put( rSet.Get(pEntry->nWID) );
1908                                 }
1909                                 pPropSet->setPropertyValue( *pEntry, *pValue, rSet );
1910                         }
1911                     }
1912                     else
1913                     {
1914                         rSet.ClearItem( pEntry->nWID );
1915                         // #67847# language for number formats
1916                         if ( pEntry->nWID == ATTR_VALUE_FORMAT )
1917                             rSet.ClearItem( ATTR_LANGUAGE_FORMAT );
1918 
1919                         //! for ATTR_ROTATE_VALUE, also reset ATTR_ORIENTATION?
1920                     }
1921                 }
1922                 else if ( IsScUnoWid( pEntry->nWID ) )
1923                 {
1924                     switch ( pEntry->nWID )
1925                     {
1926                         case SC_WID_UNO_TBLBORD:
1927                             {
1928                                 if (pValue)
1929                                 {
1930                                     table::TableBorder aBorder;
1931                                     if ( *pValue >>= aBorder )
1932                                     {
1933                                         SvxBoxItem aOuter( ATTR_BORDER );
1934                                         SvxBoxInfoItem aInner( ATTR_BORDER_INNER );
1935                                         ScHelperFunctions::FillBoxItems( aOuter, aInner, aBorder );
1936                                         rSet.Put( aOuter );
1937                                     }
1938                                 }
1939                                 else
1940                                 {
1941                                     rSet.ClearItem( ATTR_BORDER );
1942                                 }
1943                             }
1944                             break;
1945                     }
1946                 }
1947             }
1948         }
1949 
1950         //! DocFunc-Funktion??
1951         //! Undo ?????????????
1952 
1953         ScDocument* pDoc = pDocShell->GetDocument();
1954         if ( eFamily == SFX_STYLE_FAMILY_PARA )
1955         {
1956             //  Zeilenhoehen anpassen...
1957 
1958             VirtualDevice aVDev;
1959             Point aLogic = aVDev.LogicToPixel( Point(1000,1000), MAP_TWIP );
1960             double nPPTX = aLogic.X() / 1000.0;
1961             double nPPTY = aLogic.Y() / 1000.0;
1962             Fraction aZoom(1,1);
1963             pDoc->StyleSheetChanged( pStyle, sal_False, &aVDev, nPPTX, nPPTY, aZoom, aZoom );
1964 
1965             pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_LEFT );
1966             pDocShell->SetDocumentModified();
1967         }
1968         else
1969         {
1970             //! ModifyStyleSheet am Dokument (alte Werte merken)
1971 
1972             pDocShell->PageStyleModified( aStyleName, sal_True );
1973         }
1974     }
1975 }
1976 
1977 uno::Any SAL_CALL ScStyleObj::getPropertyValue( const rtl::OUString& aPropertyName )
1978                 throw(beans::UnknownPropertyException, lang::WrappedTargetException,
1979                         uno::RuntimeException)
1980 {
1981     ScUnoGuard aGuard;
1982     uno::Any aAny;
1983 
1984     if ( aPropertyName.equalsAscii( SC_UNONAME_DISPNAME ) )      // read-only
1985     {
1986         //  core always has the display name
1987         SfxStyleSheetBase* pStyle = GetStyle_Impl();
1988         if (pStyle)
1989             aAny <<= rtl::OUString( pStyle->GetName() );
1990     }
1991     else
1992     {
1993         const SfxItemPropertySimpleEntry* pResultEntry = NULL;
1994         const SfxItemSet* pItemSet = GetStyleItemSet_Impl( aPropertyName, pResultEntry );
1995 
1996         if ( pItemSet && pResultEntry )
1997         {
1998             sal_uInt16 nWhich = pResultEntry->nWID;
1999 
2000             if ( IsScItemWid( nWhich ) )
2001             {
2002                 switch ( nWhich )       // fuer Item-Spezial-Behandlungen
2003                 {
2004                     case ATTR_VALUE_FORMAT:
2005                         if ( pDocShell )
2006                         {
2007                             sal_uInt32 nOldFormat = ((const SfxUInt32Item&)
2008                                     pItemSet->Get( ATTR_VALUE_FORMAT )).GetValue();
2009                             LanguageType eOldLang = ((const SvxLanguageItem&)
2010                                     pItemSet->Get( ATTR_LANGUAGE_FORMAT )).GetLanguage();
2011                             nOldFormat = pDocShell->GetDocument()->GetFormatTable()->
2012                                     GetFormatForLanguageIfBuiltIn( nOldFormat, eOldLang );
2013                             aAny <<= nOldFormat;
2014                         }
2015                         break;
2016                     case ATTR_INDENT:
2017                         aAny <<= sal_Int16( TwipsToHMM(((const SfxUInt16Item&)
2018                                         pItemSet->Get(nWhich)).GetValue()) );
2019                         break;
2020                     case ATTR_STACKED:
2021                         {
2022                             sal_Int32 nRot = ((const SfxInt32Item&)pItemSet->Get(ATTR_ROTATE_VALUE)).GetValue();
2023                             sal_Bool bStacked = ((const SfxBoolItem&)pItemSet->Get(nWhich)).GetValue();
2024                             SvxOrientationItem( nRot, bStacked, 0 ).QueryValue( aAny );
2025                         }
2026                         break;
2027                     case ATTR_PAGE_SCALE:
2028                     case ATTR_PAGE_SCALETOPAGES:
2029                     case ATTR_PAGE_FIRSTPAGENO:
2030                         aAny <<= sal_Int16( ((const SfxUInt16Item&)pItemSet->Get(nWhich)).GetValue() );
2031                         break;
2032                     case ATTR_PAGE_CHARTS:
2033                     case ATTR_PAGE_OBJECTS:
2034                     case ATTR_PAGE_DRAWINGS:
2035                         //! sal_Bool-MID fuer ScViewObjectModeItem definieren?
2036                         aAny <<= sal_Bool( ((const ScViewObjectModeItem&)pItemSet->
2037                                         Get(nWhich)).GetValue() == VOBJ_MODE_SHOW );
2038                         break;
2039                     case ATTR_PAGE_PAPERBIN:
2040                         {
2041                             // property PrinterPaperTray is the name of the tray
2042 
2043                             sal_uInt8 nValue = ((const SvxPaperBinItem&)pItemSet->Get(nWhich)).GetValue();
2044                             rtl::OUString aName;
2045                             if ( nValue == PAPERBIN_PRINTER_SETTINGS )
2046                                 aName = rtl::OUString::createFromAscii( SC_PAPERBIN_DEFAULTNAME );
2047                             else
2048                             {
2049                                 Printer* pPrinter = pDocShell->GetPrinter();
2050                                 if (pPrinter)
2051                                     aName = pPrinter->GetPaperBinName( nValue );
2052                             }
2053                             aAny <<= aName;
2054                         }
2055                         break;
2056                     case ATTR_PAGE_SCALETO:
2057                         {
2058                             ScPageScaleToItem aItem((const ScPageScaleToItem&)pItemSet->Get(ATTR_PAGE_SCALETO));
2059                             if (aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SC_UNO_PAGE_SCALETOX)))
2060                                 aAny = uno::makeAny(static_cast<sal_Int16>(aItem.GetWidth()));
2061                             else
2062                                 aAny = uno::makeAny(static_cast<sal_Int16>(aItem.GetHeight()));
2063                         }
2064                         break;
2065                     default:
2066                         //  #65253# Default-Items mit falscher Slot-ID
2067                         //  funktionieren im SfxItemPropertySet3 nicht
2068                         //! Slot-IDs aendern...
2069                         if ( pItemSet->GetPool()->GetSlotId(nWhich) == nWhich &&
2070                              pItemSet->GetItemState(nWhich, sal_False) == SFX_ITEM_DEFAULT )
2071                         {
2072                             SfxItemSet aNoEmptySet( *pItemSet );
2073                             aNoEmptySet.Put( aNoEmptySet.Get( nWhich ) );
2074                             pPropSet->getPropertyValue( *pResultEntry, aNoEmptySet, aAny );
2075                         }
2076                         else
2077                             pPropSet->getPropertyValue( *pResultEntry, *pItemSet, aAny );
2078                 }
2079             }
2080             else if ( IsScUnoWid( nWhich ) )
2081             {
2082                 switch ( nWhich )
2083                 {
2084                     case SC_WID_UNO_TBLBORD:
2085                         {
2086                             const SfxPoolItem* pItem = &pItemSet->Get( ATTR_BORDER );
2087                             if ( pItem )
2088                             {
2089                                 SvxBoxItem aOuter( *( static_cast<const SvxBoxItem*>( pItem ) ) );
2090                                 SvxBoxInfoItem aInner( ATTR_BORDER_INNER );
2091                                 table::TableBorder aBorder;
2092                                 ScHelperFunctions::FillTableBorder( aBorder, aOuter, aInner );
2093                                 aBorder.IsHorizontalLineValid = sal_False;
2094                                 aBorder.IsVerticalLineValid = sal_False;
2095                                 aBorder.IsDistanceValid = sal_False;
2096                                 aAny <<= aBorder;
2097                             }
2098                         }
2099                         break;
2100                 }
2101             }
2102         }
2103     }
2104 
2105     return aAny;
2106 }
2107 
2108 SC_IMPL_DUMMY_PROPERTY_LISTENER( ScStyleObj )
2109 
2110 // lang::XServiceInfo
2111 
2112 rtl::OUString SAL_CALL ScStyleObj::getImplementationName() throw(uno::RuntimeException)
2113 {
2114     return rtl::OUString::createFromAscii( "ScStyleObj" );
2115 }
2116 
2117 sal_Bool SAL_CALL ScStyleObj::supportsService( const rtl::OUString& rServiceName )
2118                                                     throw(uno::RuntimeException)
2119 {
2120     sal_Bool bPage = ( eFamily == SFX_STYLE_FAMILY_PAGE );
2121     return rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SCSTYLE_SERVICE ) )||
2122            rServiceName.equalsAsciiL(
2123             RTL_CONSTASCII_STRINGPARAM ( bPage ? SCPAGESTYLE_SERVICE : SCCELLSTYLE_SERVICE ));
2124 }
2125 
2126 uno::Sequence<rtl::OUString> SAL_CALL ScStyleObj::getSupportedServiceNames()
2127                                                     throw(uno::RuntimeException)
2128 {
2129     sal_Bool bPage = ( eFamily == SFX_STYLE_FAMILY_PAGE );
2130     uno::Sequence<rtl::OUString> aRet(2);
2131     rtl::OUString* pArray = aRet.getArray();
2132     pArray[0] = rtl::OUString::createFromAscii( SCSTYLE_SERVICE );
2133     pArray[1] = rtl::OUString::createFromAscii( bPage ? SCPAGESTYLE_SERVICE
2134                                                       : SCCELLSTYLE_SERVICE );
2135     return aRet;
2136 }
2137 
2138 //------------------------------------------------------------------------
2139 
2140 
2141