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