xref: /aoo4110/main/sc/source/ui/unoobj/afmtuno.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sc.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include "scitems.hxx"
30*b1cdbd2cSJim Jagielski #include <editeng/memberids.hrc>
31*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
32*b1cdbd2cSJim Jagielski #include <tools/shl.hxx>
33*b1cdbd2cSJim Jagielski #include <svl/poolitem.hxx>
34*b1cdbd2cSJim Jagielski #include <svx/unomid.hxx>
35*b1cdbd2cSJim Jagielski #include "unowids.hxx"
36*b1cdbd2cSJim Jagielski #include <rtl/uuid.h>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/table/BorderLine.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/table/CellVertJustify.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/table/ShadowLocation.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/table/TableBorder.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/table/ShadowFormat.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/table/CellRangeAddress.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/table/CellContentType.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/table/TableOrientation.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/table/CellHoriJustify.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/util/SortField.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/util/SortFieldType.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/table/CellOrientation.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/table/CellAddress.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/SimpleFontMetric.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontWeight.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontSlant.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/CharSet.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontDescriptor.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontWidth.hpp>
56*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XFont.hpp>
57*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontType.hpp>
58*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontUnderline.hpp>
59*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontStrikeout.hpp>
60*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontFamily.hpp>
61*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/FontPitch.hpp>
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski #include "afmtuno.hxx"
64*b1cdbd2cSJim Jagielski #include "miscuno.hxx"
65*b1cdbd2cSJim Jagielski #include "autoform.hxx"
66*b1cdbd2cSJim Jagielski #include "unoguard.hxx"
67*b1cdbd2cSJim Jagielski #include "scdll.hxx"
68*b1cdbd2cSJim Jagielski #include "unonames.hxx"
69*b1cdbd2cSJim Jagielski #include "cellsuno.hxx"
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski //	ein AutoFormat hat immer 16 Eintraege
76*b1cdbd2cSJim Jagielski #define SC_AF_FIELD_COUNT 16
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski //	AutoFormat-Map nur fuer PropertySetInfo, ohne Which-IDs
81*b1cdbd2cSJim Jagielski 
lcl_GetAutoFormatMap()82*b1cdbd2cSJim Jagielski const SfxItemPropertyMapEntry* lcl_GetAutoFormatMap()
83*b1cdbd2cSJim Jagielski {
84*b1cdbd2cSJim Jagielski     static SfxItemPropertyMapEntry aAutoFormatMap_Impl[] =
85*b1cdbd2cSJim Jagielski 	{
86*b1cdbd2cSJim Jagielski 		{MAP_CHAR_LEN(SC_UNONAME_INCBACK),	0,	&::getBooleanCppuType(),	0, 0 },
87*b1cdbd2cSJim Jagielski 		{MAP_CHAR_LEN(SC_UNONAME_INCBORD),	0,	&::getBooleanCppuType(),	0, 0 },
88*b1cdbd2cSJim Jagielski 		{MAP_CHAR_LEN(SC_UNONAME_INCFONT),	0,	&::getBooleanCppuType(),	0, 0 },
89*b1cdbd2cSJim Jagielski 		{MAP_CHAR_LEN(SC_UNONAME_INCJUST),	0,	&::getBooleanCppuType(),	0, 0 },
90*b1cdbd2cSJim Jagielski 		{MAP_CHAR_LEN(SC_UNONAME_INCNUM),	0,	&::getBooleanCppuType(),	0, 0 },
91*b1cdbd2cSJim Jagielski 		{MAP_CHAR_LEN(SC_UNONAME_INCWIDTH),	0,	&::getBooleanCppuType(),	0, 0 },
92*b1cdbd2cSJim Jagielski         {0,0,0,0,0,0}
93*b1cdbd2cSJim Jagielski 	};
94*b1cdbd2cSJim Jagielski 	return aAutoFormatMap_Impl;
95*b1cdbd2cSJim Jagielski }
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski //!	Zahlformat (String/Language) ??? (in XNumberFormat nur ReadOnly)
98*b1cdbd2cSJim Jagielski //! table::TableBorder ??!?
99*b1cdbd2cSJim Jagielski 
lcl_GetAutoFieldMap()100*b1cdbd2cSJim Jagielski const SfxItemPropertyMapEntry* lcl_GetAutoFieldMap()
101*b1cdbd2cSJim Jagielski {
102*b1cdbd2cSJim Jagielski     static SfxItemPropertyMapEntry aAutoFieldMap_Impl[] =
103*b1cdbd2cSJim Jagielski 	{
104*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CELLBACK), ATTR_BACKGROUND,        &::getCppuType((const sal_Int32*)0),        0, MID_BACK_COLOR },
105*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CCOLOR),   ATTR_FONT_COLOR,        &::getCppuType((const sal_Int32*)0),        0, 0 },
106*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_COUTL),    ATTR_FONT_CONTOUR,      &::getBooleanCppuType(),                    0, 0 },
107*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CCROSS),   ATTR_FONT_CROSSEDOUT,   &::getBooleanCppuType(),                    0, MID_CROSSED_OUT },
108*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CFONT),    ATTR_FONT,              &::getCppuType((const sal_Int16*)0),        0, MID_FONT_FAMILY },
109*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CFCHARS),  ATTR_FONT,              &::getCppuType((sal_Int16*)0),              0, MID_FONT_CHAR_SET },
110*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CJK_CFCHARS),  ATTR_CJK_FONT,          &::getCppuType((sal_Int16*)0),              0, MID_FONT_CHAR_SET },
111*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CTL_CFCHARS),  ATTR_CTL_FONT,          &::getCppuType((sal_Int16*)0),              0, MID_FONT_CHAR_SET },
112*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CFFAMIL),  ATTR_FONT,              &::getCppuType((sal_Int16*)0),              0, MID_FONT_FAMILY },
113*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CJK_CFFAMIL),  ATTR_CJK_FONT,          &::getCppuType((sal_Int16*)0),              0, MID_FONT_FAMILY },
114*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CTL_CFFAMIL),  ATTR_CTL_FONT,          &::getCppuType((sal_Int16*)0),              0, MID_FONT_FAMILY },
115*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CFNAME),   ATTR_FONT,              &::getCppuType((rtl::OUString*)0),          0, MID_FONT_FAMILY_NAME },
116*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CJK_CFNAME),   ATTR_CJK_FONT,          &::getCppuType((rtl::OUString*)0),          0, MID_FONT_FAMILY_NAME },
117*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CTL_CFNAME),   ATTR_CTL_FONT,          &::getCppuType((rtl::OUString*)0),          0, MID_FONT_FAMILY_NAME },
118*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CFPITCH),  ATTR_FONT,              &::getCppuType((sal_Int16*)0),              0, MID_FONT_PITCH },
119*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CJK_CFPITCH),  ATTR_CJK_FONT,          &::getCppuType((sal_Int16*)0),              0, MID_FONT_PITCH },
120*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CTL_CFPITCH),  ATTR_CTL_FONT,          &::getCppuType((sal_Int16*)0),              0, MID_FONT_PITCH },
121*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CFSTYLE),  ATTR_FONT,              &::getCppuType((rtl::OUString*)0),          0, MID_FONT_STYLE_NAME },
122*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CJK_CFSTYLE),  ATTR_CJK_FONT,          &::getCppuType((rtl::OUString*)0),          0, MID_FONT_STYLE_NAME },
123*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CTL_CFSTYLE),  ATTR_CTL_FONT,          &::getCppuType((rtl::OUString*)0),          0, MID_FONT_STYLE_NAME },
124*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CHEIGHT),  ATTR_FONT_HEIGHT,       &::getCppuType((float*)0),                  0, MID_FONTHEIGHT | CONVERT_TWIPS },
125*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CJK_CHEIGHT),  ATTR_CJK_FONT_HEIGHT,   &::getCppuType((float*)0),                  0, MID_FONTHEIGHT | CONVERT_TWIPS },
126*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CTL_CHEIGHT),  ATTR_CTL_FONT_HEIGHT,   &::getCppuType((float*)0),                  0, MID_FONTHEIGHT | CONVERT_TWIPS },
127*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_COVER),    ATTR_FONT_OVERLINE,     &::getCppuType((const sal_Int16*)0),        0, MID_TL_STYLE },
128*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CPOST),    ATTR_FONT_POSTURE,      &::getCppuType((awt::FontSlant*)0),         0, MID_POSTURE },
129*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CJK_CPOST),    ATTR_CJK_FONT_POSTURE,  &::getCppuType((awt::FontSlant*)0),         0, MID_POSTURE },
130*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CTL_CPOST),    ATTR_CTL_FONT_POSTURE,  &::getCppuType((awt::FontSlant*)0),         0, MID_POSTURE },
131*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CSHADD),   ATTR_FONT_SHADOWED,     &::getBooleanCppuType(),                    0, 0 },
132*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_TBLBORD),  SC_WID_UNO_TBLBORD,     &::getCppuType((table::TableBorder*)0),     0, 0 | CONVERT_TWIPS },
133*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CUNDER),   ATTR_FONT_UNDERLINE,    &::getCppuType((const sal_Int16*)0),        0, MID_TL_STYLE },
134*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CWEIGHT),  ATTR_FONT_WEIGHT,       &::getCppuType((float*)0),                  0, MID_WEIGHT },
135*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CJK_CWEIGHT),  ATTR_CJK_FONT_WEIGHT,   &::getCppuType((float*)0),                  0, MID_WEIGHT },
136*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNO_CTL_CWEIGHT),  ATTR_CTL_FONT_WEIGHT,   &::getCppuType((float*)0),                  0, MID_WEIGHT },
137*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY,       &::getCppuType((const table::CellHoriJustify*)0),   0, 0 },
138*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND,        &::getBooleanCppuType(),                    0, MID_GRAPHIC_TRANSPARENT },
139*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_WRAP),     ATTR_LINEBREAK,         &::getBooleanCppuType(),                    0, 0 },
140*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CELLORI),  ATTR_STACKED,           &::getCppuType((const table::CellOrientation*)0),   0, 0 },
141*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_PBMARGIN), ATTR_MARGIN,            &::getCppuType((const sal_Int32*)0),        0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS },
142*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_PLMARGIN), ATTR_MARGIN,            &::getCppuType((const sal_Int32*)0),        0, MID_MARGIN_L_MARGIN  | CONVERT_TWIPS },
143*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_PRMARGIN), ATTR_MARGIN,            &::getCppuType((const sal_Int32*)0),        0, MID_MARGIN_R_MARGIN  | CONVERT_TWIPS },
144*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_PTMARGIN), ATTR_MARGIN,            &::getCppuType((const sal_Int32*)0),        0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS },
145*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_ROTANG),   ATTR_ROTATE_VALUE,      &::getCppuType((const sal_Int32*)0),        0, 0 },
146*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_ROTREF),   ATTR_ROTATE_MODE,       &::getCppuType((const table::CellVertJustify*)0),   0, 0 },
147*b1cdbd2cSJim Jagielski         {MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY,       &::getCppuType((const table::CellVertJustify*)0),   0, 0 },
148*b1cdbd2cSJim Jagielski         {0,0,0,0,0,0}
149*b1cdbd2cSJim Jagielski 	};
150*b1cdbd2cSJim Jagielski 	return aAutoFieldMap_Impl;
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski #define SCAUTOFORMATSOBJ_SERVICE	"com.sun.star.sheet.TableAutoFormats"
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski SC_SIMPLE_SERVICE_INFO( ScAutoFormatFieldObj, "ScAutoFormatFieldObj", "com.sun.star.sheet.TableAutoFormatField" )
158*b1cdbd2cSJim Jagielski SC_SIMPLE_SERVICE_INFO( ScAutoFormatObj, "ScAutoFormatObj", "com.sun.star.sheet.TableAutoFormat" )
159*b1cdbd2cSJim Jagielski SC_SIMPLE_SERVICE_INFO( ScAutoFormatsObj, "ScAutoFormatsObj", SCAUTOFORMATSOBJ_SERVICE )
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
162*b1cdbd2cSJim Jagielski 
lcl_FindAutoFormatIndex(const ScAutoFormat & rFormats,const String & rName,sal_uInt16 & rOutIndex)163*b1cdbd2cSJim Jagielski sal_Bool lcl_FindAutoFormatIndex( const ScAutoFormat& rFormats, const String& rName, sal_uInt16& rOutIndex )
164*b1cdbd2cSJim Jagielski {
165*b1cdbd2cSJim Jagielski 	String aEntryName;
166*b1cdbd2cSJim Jagielski 	sal_uInt16 nCount = rFormats.GetCount();
167*b1cdbd2cSJim Jagielski 	for( sal_uInt16 nPos=0; nPos<nCount; nPos++ )
168*b1cdbd2cSJim Jagielski 	{
169*b1cdbd2cSJim Jagielski 		ScAutoFormatData* pEntry = rFormats[nPos];
170*b1cdbd2cSJim Jagielski 		pEntry->GetName( aEntryName );
171*b1cdbd2cSJim Jagielski 		if ( aEntryName == rName )
172*b1cdbd2cSJim Jagielski 		{
173*b1cdbd2cSJim Jagielski 			rOutIndex = nPos;
174*b1cdbd2cSJim Jagielski 			return sal_True;
175*b1cdbd2cSJim Jagielski 		}
176*b1cdbd2cSJim Jagielski 	}
177*b1cdbd2cSJim Jagielski 	return sal_False;		// is nich
178*b1cdbd2cSJim Jagielski }
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
181*b1cdbd2cSJim Jagielski 
ScAutoFormatsObj()182*b1cdbd2cSJim Jagielski ScAutoFormatsObj::ScAutoFormatsObj()
183*b1cdbd2cSJim Jagielski {
184*b1cdbd2cSJim Jagielski 	//!	Dieses Objekt darf es nur einmal geben, und es muss an den Auto-Format-Daten
185*b1cdbd2cSJim Jagielski 	//!	bekannt sein, damit Aenderungen gebroadcasted werden koennen
186*b1cdbd2cSJim Jagielski }
187*b1cdbd2cSJim Jagielski 
~ScAutoFormatsObj()188*b1cdbd2cSJim Jagielski ScAutoFormatsObj::~ScAutoFormatsObj()
189*b1cdbd2cSJim Jagielski {
190*b1cdbd2cSJim Jagielski }
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski // stuff for exService_...
193*b1cdbd2cSJim Jagielski 
ScAutoFormatsObj_CreateInstance(const uno::Reference<lang::XMultiServiceFactory> &)194*b1cdbd2cSJim Jagielski uno::Reference<uno::XInterface>	SAL_CALL ScAutoFormatsObj_CreateInstance(
195*b1cdbd2cSJim Jagielski 						const uno::Reference<lang::XMultiServiceFactory>& )
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
198*b1cdbd2cSJim Jagielski 	ScDLL::Init();
199*b1cdbd2cSJim Jagielski 	static uno::Reference< uno::XInterface > xInst((::cppu::OWeakObject*) new ScAutoFormatsObj);
200*b1cdbd2cSJim Jagielski 	return xInst;
201*b1cdbd2cSJim Jagielski }
202*b1cdbd2cSJim Jagielski 
getImplementationName_Static()203*b1cdbd2cSJim Jagielski rtl::OUString ScAutoFormatsObj::getImplementationName_Static()
204*b1cdbd2cSJim Jagielski {
205*b1cdbd2cSJim Jagielski 	return rtl::OUString::createFromAscii( "stardiv.StarCalc.ScAutoFormatsObj" );
206*b1cdbd2cSJim Jagielski }
207*b1cdbd2cSJim Jagielski 
getSupportedServiceNames_Static()208*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> ScAutoFormatsObj::getSupportedServiceNames_Static()
209*b1cdbd2cSJim Jagielski {
210*b1cdbd2cSJim Jagielski 	uno::Sequence<rtl::OUString> aRet(1);
211*b1cdbd2cSJim Jagielski 	rtl::OUString* pArray = aRet.getArray();
212*b1cdbd2cSJim Jagielski 	pArray[0] = rtl::OUString::createFromAscii( SCAUTOFORMATSOBJ_SERVICE );
213*b1cdbd2cSJim Jagielski 	return aRet;
214*b1cdbd2cSJim Jagielski }
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski // XTableAutoFormats
217*b1cdbd2cSJim Jagielski 
GetObjectByIndex_Impl(sal_uInt16 nIndex)218*b1cdbd2cSJim Jagielski ScAutoFormatObj* ScAutoFormatsObj::GetObjectByIndex_Impl(sal_uInt16 nIndex)
219*b1cdbd2cSJim Jagielski {
220*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
221*b1cdbd2cSJim Jagielski 	if (pFormats && nIndex < pFormats->GetCount())
222*b1cdbd2cSJim Jagielski 		return new ScAutoFormatObj(nIndex);
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski 	return NULL;	// falscher Index
225*b1cdbd2cSJim Jagielski }
226*b1cdbd2cSJim Jagielski 
GetObjectByName_Impl(const rtl::OUString & aName)227*b1cdbd2cSJim Jagielski ScAutoFormatObj* ScAutoFormatsObj::GetObjectByName_Impl(const rtl::OUString& aName)
228*b1cdbd2cSJim Jagielski {
229*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
230*b1cdbd2cSJim Jagielski 	if (pFormats)
231*b1cdbd2cSJim Jagielski 	{
232*b1cdbd2cSJim Jagielski 		String aString(aName);
233*b1cdbd2cSJim Jagielski 		sal_uInt16 nIndex;
234*b1cdbd2cSJim Jagielski 		if (lcl_FindAutoFormatIndex( *pFormats, aString, nIndex ))
235*b1cdbd2cSJim Jagielski 			return GetObjectByIndex_Impl(nIndex);
236*b1cdbd2cSJim Jagielski 	}
237*b1cdbd2cSJim Jagielski 	return NULL;
238*b1cdbd2cSJim Jagielski }
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski // container::XNameContainer
241*b1cdbd2cSJim Jagielski 
insertByName(const rtl::OUString & aName,const uno::Any & aElement)242*b1cdbd2cSJim Jagielski void SAL_CALL ScAutoFormatsObj::insertByName( const rtl::OUString& aName, const uno::Any& aElement )
243*b1cdbd2cSJim Jagielski 							throw(lang::IllegalArgumentException, container::ElementExistException,
244*b1cdbd2cSJim Jagielski 									lang::WrappedTargetException, uno::RuntimeException)
245*b1cdbd2cSJim Jagielski {
246*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
247*b1cdbd2cSJim Jagielski 	sal_Bool bDone = sal_False;
248*b1cdbd2cSJim Jagielski 	//	Reflection muss nicht uno::XInterface sein, kann auch irgendein Interface sein...
249*b1cdbd2cSJim Jagielski     uno::Reference< uno::XInterface > xInterface(aElement, uno::UNO_QUERY);
250*b1cdbd2cSJim Jagielski 	if ( xInterface.is() )
251*b1cdbd2cSJim Jagielski 	{
252*b1cdbd2cSJim Jagielski 		ScAutoFormatObj* pFormatObj = ScAutoFormatObj::getImplementation( xInterface );
253*b1cdbd2cSJim Jagielski 		if ( pFormatObj && !pFormatObj->IsInserted() )	// noch nicht eingefuegt?
254*b1cdbd2cSJim Jagielski 		{
255*b1cdbd2cSJim Jagielski 			String aNameStr(aName);
256*b1cdbd2cSJim Jagielski 			ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski 			sal_uInt16 nDummy;
259*b1cdbd2cSJim Jagielski 			if (pFormats && !lcl_FindAutoFormatIndex( *pFormats, aNameStr, nDummy ))
260*b1cdbd2cSJim Jagielski 			{
261*b1cdbd2cSJim Jagielski 				ScAutoFormatData* pNew = new ScAutoFormatData();
262*b1cdbd2cSJim Jagielski 				pNew->SetName( aNameStr );
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski 				if (pFormats->Insert( pNew ))
265*b1cdbd2cSJim Jagielski 				{
266*b1cdbd2cSJim Jagielski 					//!	Notify fuer andere Objekte
267*b1cdbd2cSJim Jagielski 					pFormats->Save();	// sofort speichern
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski 					sal_uInt16 nNewIndex;
270*b1cdbd2cSJim Jagielski 					if (lcl_FindAutoFormatIndex( *pFormats, aNameStr, nNewIndex ))
271*b1cdbd2cSJim Jagielski 					{
272*b1cdbd2cSJim Jagielski 						pFormatObj->InitFormat( nNewIndex );	// kann jetzt benutzt werden
273*b1cdbd2cSJim Jagielski 						bDone = sal_True;
274*b1cdbd2cSJim Jagielski 					}
275*b1cdbd2cSJim Jagielski 				}
276*b1cdbd2cSJim Jagielski 				else
277*b1cdbd2cSJim Jagielski 				{
278*b1cdbd2cSJim Jagielski 					delete pNew;
279*b1cdbd2cSJim Jagielski 					DBG_ERROR("AutoFormat konnte nicht eingefuegt werden");
280*b1cdbd2cSJim Jagielski 					throw uno::RuntimeException();
281*b1cdbd2cSJim Jagielski 				}
282*b1cdbd2cSJim Jagielski 			}
283*b1cdbd2cSJim Jagielski 			else
284*b1cdbd2cSJim Jagielski 			{
285*b1cdbd2cSJim Jagielski 				throw container::ElementExistException();
286*b1cdbd2cSJim Jagielski 			}
287*b1cdbd2cSJim Jagielski 		}
288*b1cdbd2cSJim Jagielski 	}
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski 	if (!bDone)
291*b1cdbd2cSJim Jagielski 	{
292*b1cdbd2cSJim Jagielski 		//	other errors are handled above
293*b1cdbd2cSJim Jagielski 		throw lang::IllegalArgumentException();
294*b1cdbd2cSJim Jagielski 	}
295*b1cdbd2cSJim Jagielski }
296*b1cdbd2cSJim Jagielski 
replaceByName(const rtl::OUString & aName,const uno::Any & aElement)297*b1cdbd2cSJim Jagielski void SAL_CALL ScAutoFormatsObj::replaceByName( const rtl::OUString& aName, const uno::Any& aElement )
298*b1cdbd2cSJim Jagielski 							throw(lang::IllegalArgumentException, container::NoSuchElementException,
299*b1cdbd2cSJim Jagielski 									lang::WrappedTargetException, uno::RuntimeException)
300*b1cdbd2cSJim Jagielski {
301*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
302*b1cdbd2cSJim Jagielski 	//!	zusammenfassen?
303*b1cdbd2cSJim Jagielski 	removeByName( aName );
304*b1cdbd2cSJim Jagielski 	insertByName( aName, aElement );
305*b1cdbd2cSJim Jagielski }
306*b1cdbd2cSJim Jagielski 
removeByName(const rtl::OUString & aName)307*b1cdbd2cSJim Jagielski void SAL_CALL ScAutoFormatsObj::removeByName( const rtl::OUString& aName )
308*b1cdbd2cSJim Jagielski 								throw(container::NoSuchElementException,
309*b1cdbd2cSJim Jagielski 									lang::WrappedTargetException, uno::RuntimeException)
310*b1cdbd2cSJim Jagielski {
311*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
312*b1cdbd2cSJim Jagielski 	String aNameStr(aName);
313*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski 	sal_uInt16 nIndex;
316*b1cdbd2cSJim Jagielski 	if (pFormats && lcl_FindAutoFormatIndex( *pFormats, aNameStr, nIndex ))
317*b1cdbd2cSJim Jagielski 	{
318*b1cdbd2cSJim Jagielski 		pFormats->AtFree( nIndex );
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski 		//!	Notify fuer andere Objekte
321*b1cdbd2cSJim Jagielski 		pFormats->Save();	// sofort speichern
322*b1cdbd2cSJim Jagielski 	}
323*b1cdbd2cSJim Jagielski 	else
324*b1cdbd2cSJim Jagielski 	{
325*b1cdbd2cSJim Jagielski 		throw container::NoSuchElementException();
326*b1cdbd2cSJim Jagielski 	}
327*b1cdbd2cSJim Jagielski }
328*b1cdbd2cSJim Jagielski 
329*b1cdbd2cSJim Jagielski // container::XEnumerationAccess
330*b1cdbd2cSJim Jagielski 
createEnumeration()331*b1cdbd2cSJim Jagielski uno::Reference<container::XEnumeration> SAL_CALL ScAutoFormatsObj::createEnumeration()
332*b1cdbd2cSJim Jagielski 													throw(uno::RuntimeException)
333*b1cdbd2cSJim Jagielski {
334*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
335*b1cdbd2cSJim Jagielski     return new ScIndexEnumeration(this, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.TableAutoFormatEnumeration")));
336*b1cdbd2cSJim Jagielski }
337*b1cdbd2cSJim Jagielski 
338*b1cdbd2cSJim Jagielski // container::XIndexAccess
339*b1cdbd2cSJim Jagielski 
getCount()340*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScAutoFormatsObj::getCount() throw(uno::RuntimeException)
341*b1cdbd2cSJim Jagielski {
342*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
343*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
344*b1cdbd2cSJim Jagielski 	if (pFormats)
345*b1cdbd2cSJim Jagielski 		return pFormats->GetCount();
346*b1cdbd2cSJim Jagielski 
347*b1cdbd2cSJim Jagielski 	return 0;
348*b1cdbd2cSJim Jagielski }
349*b1cdbd2cSJim Jagielski 
getByIndex(sal_Int32 nIndex)350*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScAutoFormatsObj::getByIndex( sal_Int32 nIndex )
351*b1cdbd2cSJim Jagielski 							throw(lang::IndexOutOfBoundsException,
352*b1cdbd2cSJim Jagielski 									lang::WrappedTargetException, uno::RuntimeException)
353*b1cdbd2cSJim Jagielski {
354*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
355*b1cdbd2cSJim Jagielski 	uno::Reference< container::XNamed >  xFormat(GetObjectByIndex_Impl((sal_uInt16)nIndex));
356*b1cdbd2cSJim Jagielski 	if (!xFormat.is())
357*b1cdbd2cSJim Jagielski 		throw lang::IndexOutOfBoundsException();
358*b1cdbd2cSJim Jagielski     return uno::makeAny(xFormat);
359*b1cdbd2cSJim Jagielski }
360*b1cdbd2cSJim Jagielski 
getElementType()361*b1cdbd2cSJim Jagielski uno::Type SAL_CALL ScAutoFormatsObj::getElementType() throw(uno::RuntimeException)
362*b1cdbd2cSJim Jagielski {
363*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
364*b1cdbd2cSJim Jagielski 	return ::getCppuType((const uno::Reference< container::XNamed >*)0);	// muss zu getByIndex passen
365*b1cdbd2cSJim Jagielski }
366*b1cdbd2cSJim Jagielski 
hasElements()367*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScAutoFormatsObj::hasElements() throw(uno::RuntimeException)
368*b1cdbd2cSJim Jagielski {
369*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
370*b1cdbd2cSJim Jagielski 	return ( getCount() != 0 );
371*b1cdbd2cSJim Jagielski }
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski // container::XNameAccess
374*b1cdbd2cSJim Jagielski 
getByName(const rtl::OUString & aName)375*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScAutoFormatsObj::getByName( const rtl::OUString& aName )
376*b1cdbd2cSJim Jagielski 			throw(container::NoSuchElementException,
377*b1cdbd2cSJim Jagielski 					lang::WrappedTargetException, uno::RuntimeException)
378*b1cdbd2cSJim Jagielski {
379*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
380*b1cdbd2cSJim Jagielski 	uno::Reference< container::XNamed >  xFormat(GetObjectByName_Impl(aName));
381*b1cdbd2cSJim Jagielski 	if (!xFormat.is())
382*b1cdbd2cSJim Jagielski 		throw container::NoSuchElementException();
383*b1cdbd2cSJim Jagielski     return uno::makeAny(xFormat);
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski 
getElementNames()386*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> SAL_CALL ScAutoFormatsObj::getElementNames()
387*b1cdbd2cSJim Jagielski 												throw(uno::RuntimeException)
388*b1cdbd2cSJim Jagielski {
389*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
390*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
391*b1cdbd2cSJim Jagielski 	if (pFormats)
392*b1cdbd2cSJim Jagielski 	{
393*b1cdbd2cSJim Jagielski 		String aName;
394*b1cdbd2cSJim Jagielski 		sal_uInt16 nCount = pFormats->GetCount();
395*b1cdbd2cSJim Jagielski 		uno::Sequence<rtl::OUString> aSeq(nCount);
396*b1cdbd2cSJim Jagielski 		rtl::OUString* pAry = aSeq.getArray();
397*b1cdbd2cSJim Jagielski 		for (sal_uInt16 i=0; i<nCount; i++)
398*b1cdbd2cSJim Jagielski 		{
399*b1cdbd2cSJim Jagielski 			(*pFormats)[i]->GetName(aName);
400*b1cdbd2cSJim Jagielski 			pAry[i] = aName;
401*b1cdbd2cSJim Jagielski 		}
402*b1cdbd2cSJim Jagielski 		return aSeq;
403*b1cdbd2cSJim Jagielski 	}
404*b1cdbd2cSJim Jagielski 	return uno::Sequence<rtl::OUString>(0);
405*b1cdbd2cSJim Jagielski }
406*b1cdbd2cSJim Jagielski 
hasByName(const rtl::OUString & aName)407*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScAutoFormatsObj::hasByName( const rtl::OUString& aName )
408*b1cdbd2cSJim Jagielski 										throw(uno::RuntimeException)
409*b1cdbd2cSJim Jagielski {
410*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
411*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
412*b1cdbd2cSJim Jagielski 	if (pFormats)
413*b1cdbd2cSJim Jagielski 	{
414*b1cdbd2cSJim Jagielski 		String aString(aName);
415*b1cdbd2cSJim Jagielski 		sal_uInt16 nDummy;
416*b1cdbd2cSJim Jagielski 		return lcl_FindAutoFormatIndex( *pFormats, aString, nDummy );
417*b1cdbd2cSJim Jagielski 	}
418*b1cdbd2cSJim Jagielski 	return sal_False;
419*b1cdbd2cSJim Jagielski }
420*b1cdbd2cSJim Jagielski 
421*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
422*b1cdbd2cSJim Jagielski 
ScAutoFormatObj(sal_uInt16 nIndex)423*b1cdbd2cSJim Jagielski ScAutoFormatObj::ScAutoFormatObj(sal_uInt16 nIndex) :
424*b1cdbd2cSJim Jagielski 	aPropSet( lcl_GetAutoFormatMap() ),
425*b1cdbd2cSJim Jagielski 	nFormatIndex( nIndex )
426*b1cdbd2cSJim Jagielski {
427*b1cdbd2cSJim Jagielski 	//!	Listening !!!
428*b1cdbd2cSJim Jagielski }
429*b1cdbd2cSJim Jagielski 
~ScAutoFormatObj()430*b1cdbd2cSJim Jagielski ScAutoFormatObj::~ScAutoFormatObj()
431*b1cdbd2cSJim Jagielski {
432*b1cdbd2cSJim Jagielski 	//	Wenn ein AutoFormat-Objekt losgelassen wird, werden eventuelle Aenderungen
433*b1cdbd2cSJim Jagielski 	//	gespeichert, damit sie z.B. im Writer sichtbar sind
434*b1cdbd2cSJim Jagielski 
435*b1cdbd2cSJim Jagielski 	if (IsInserted())
436*b1cdbd2cSJim Jagielski 	{
437*b1cdbd2cSJim Jagielski 		ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
438*b1cdbd2cSJim Jagielski 		if ( pFormats && pFormats->IsSaveLater() )
439*b1cdbd2cSJim Jagielski 			pFormats->Save();
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski 		// Save() setzt SaveLater Flag zurueck
442*b1cdbd2cSJim Jagielski 	}
443*b1cdbd2cSJim Jagielski }
444*b1cdbd2cSJim Jagielski 
InitFormat(sal_uInt16 nNewIndex)445*b1cdbd2cSJim Jagielski void ScAutoFormatObj::InitFormat( sal_uInt16 nNewIndex )
446*b1cdbd2cSJim Jagielski {
447*b1cdbd2cSJim Jagielski 	DBG_ASSERT( nFormatIndex == SC_AFMTOBJ_INVALID, "ScAutoFormatObj::InitFormat mehrfach" );
448*b1cdbd2cSJim Jagielski 	nFormatIndex = nNewIndex;
449*b1cdbd2cSJim Jagielski 	//!	Listening !!!
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski 
452*b1cdbd2cSJim Jagielski // XUnoTunnel
453*b1cdbd2cSJim Jagielski 
getSomething(const uno::Sequence<sal_Int8> & rId)454*b1cdbd2cSJim Jagielski sal_Int64 SAL_CALL ScAutoFormatObj::getSomething(
455*b1cdbd2cSJim Jagielski 				const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException)
456*b1cdbd2cSJim Jagielski {
457*b1cdbd2cSJim Jagielski 	if ( rId.getLength() == 16 &&
458*b1cdbd2cSJim Jagielski           0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
459*b1cdbd2cSJim Jagielski 									rId.getConstArray(), 16 ) )
460*b1cdbd2cSJim Jagielski 	{
461*b1cdbd2cSJim Jagielski         return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this));
462*b1cdbd2cSJim Jagielski 	}
463*b1cdbd2cSJim Jagielski 	return 0;
464*b1cdbd2cSJim Jagielski }
465*b1cdbd2cSJim Jagielski 
466*b1cdbd2cSJim Jagielski // static
getUnoTunnelId()467*b1cdbd2cSJim Jagielski const uno::Sequence<sal_Int8>& ScAutoFormatObj::getUnoTunnelId()
468*b1cdbd2cSJim Jagielski {
469*b1cdbd2cSJim Jagielski 	static uno::Sequence<sal_Int8> * pSeq = 0;
470*b1cdbd2cSJim Jagielski 	if( !pSeq )
471*b1cdbd2cSJim Jagielski 	{
472*b1cdbd2cSJim Jagielski 		osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() );
473*b1cdbd2cSJim Jagielski 		if( !pSeq )
474*b1cdbd2cSJim Jagielski 		{
475*b1cdbd2cSJim Jagielski 			static uno::Sequence< sal_Int8 > aSeq( 16 );
476*b1cdbd2cSJim Jagielski 			rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
477*b1cdbd2cSJim Jagielski 			pSeq = &aSeq;
478*b1cdbd2cSJim Jagielski 		}
479*b1cdbd2cSJim Jagielski 	}
480*b1cdbd2cSJim Jagielski 	return *pSeq;
481*b1cdbd2cSJim Jagielski }
482*b1cdbd2cSJim Jagielski 
483*b1cdbd2cSJim Jagielski // static
getImplementation(const uno::Reference<uno::XInterface> xObj)484*b1cdbd2cSJim Jagielski ScAutoFormatObj* ScAutoFormatObj::getImplementation(
485*b1cdbd2cSJim Jagielski 						const uno::Reference<uno::XInterface> xObj )
486*b1cdbd2cSJim Jagielski {
487*b1cdbd2cSJim Jagielski 	ScAutoFormatObj* pRet = NULL;
488*b1cdbd2cSJim Jagielski 	uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY );
489*b1cdbd2cSJim Jagielski 	if (xUT.is())
490*b1cdbd2cSJim Jagielski         pRet = reinterpret_cast<ScAutoFormatObj*>(sal::static_int_cast<sal_IntPtr>(xUT->getSomething(getUnoTunnelId())));
491*b1cdbd2cSJim Jagielski 	return pRet;
492*b1cdbd2cSJim Jagielski }
493*b1cdbd2cSJim Jagielski 
Notify(SfxBroadcaster &,const SfxHint &)494*b1cdbd2cSJim Jagielski void ScAutoFormatObj::Notify( SfxBroadcaster& /* rBC */, const SfxHint& /* rHint */ )
495*b1cdbd2cSJim Jagielski {
496*b1cdbd2cSJim Jagielski 	//	spaeter...
497*b1cdbd2cSJim Jagielski }
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski // XTableAutoFormat
500*b1cdbd2cSJim Jagielski 
GetObjectByIndex_Impl(sal_uInt16 nIndex)501*b1cdbd2cSJim Jagielski ScAutoFormatFieldObj* ScAutoFormatObj::GetObjectByIndex_Impl(sal_uInt16 nIndex)
502*b1cdbd2cSJim Jagielski {
503*b1cdbd2cSJim Jagielski 	if ( IsInserted() && nIndex < SC_AF_FIELD_COUNT )
504*b1cdbd2cSJim Jagielski 		return new ScAutoFormatFieldObj( nFormatIndex, nIndex );
505*b1cdbd2cSJim Jagielski 
506*b1cdbd2cSJim Jagielski 	return NULL;
507*b1cdbd2cSJim Jagielski }
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski // container::XEnumerationAccess
510*b1cdbd2cSJim Jagielski 
createEnumeration()511*b1cdbd2cSJim Jagielski uno::Reference<container::XEnumeration> SAL_CALL ScAutoFormatObj::createEnumeration()
512*b1cdbd2cSJim Jagielski 													throw(uno::RuntimeException)
513*b1cdbd2cSJim Jagielski {
514*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
515*b1cdbd2cSJim Jagielski 	return new ScIndexEnumeration(this, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sheet.TableAutoFormatEnumeration")));
516*b1cdbd2cSJim Jagielski }
517*b1cdbd2cSJim Jagielski 
518*b1cdbd2cSJim Jagielski // container::XIndexAccess
519*b1cdbd2cSJim Jagielski 
getCount()520*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL ScAutoFormatObj::getCount() throw(uno::RuntimeException)
521*b1cdbd2cSJim Jagielski {
522*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
523*b1cdbd2cSJim Jagielski 	if (IsInserted())
524*b1cdbd2cSJim Jagielski 		return SC_AF_FIELD_COUNT;	// immer 16 Elemente
525*b1cdbd2cSJim Jagielski 	else
526*b1cdbd2cSJim Jagielski 		return 0;
527*b1cdbd2cSJim Jagielski }
528*b1cdbd2cSJim Jagielski 
getByIndex(sal_Int32 nIndex)529*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScAutoFormatObj::getByIndex( sal_Int32 nIndex )
530*b1cdbd2cSJim Jagielski 							throw(lang::IndexOutOfBoundsException,
531*b1cdbd2cSJim Jagielski 									lang::WrappedTargetException, uno::RuntimeException)
532*b1cdbd2cSJim Jagielski {
533*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
534*b1cdbd2cSJim Jagielski 
535*b1cdbd2cSJim Jagielski 	if ( nIndex < 0 || nIndex >= getCount() )
536*b1cdbd2cSJim Jagielski 		throw lang::IndexOutOfBoundsException();
537*b1cdbd2cSJim Jagielski 
538*b1cdbd2cSJim Jagielski 	if (IsInserted())
539*b1cdbd2cSJim Jagielski         return uno::makeAny(uno::Reference< beans::XPropertySet >(GetObjectByIndex_Impl((sal_uInt16)nIndex)));
540*b1cdbd2cSJim Jagielski     return uno::Any();
541*b1cdbd2cSJim Jagielski }
542*b1cdbd2cSJim Jagielski 
getElementType()543*b1cdbd2cSJim Jagielski uno::Type SAL_CALL ScAutoFormatObj::getElementType() throw(uno::RuntimeException)
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
546*b1cdbd2cSJim Jagielski 	return ::getCppuType((const uno::Reference< beans::XPropertySet >*)0);	// muss zu getByIndex passen
547*b1cdbd2cSJim Jagielski }
548*b1cdbd2cSJim Jagielski 
hasElements()549*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL ScAutoFormatObj::hasElements() throw(uno::RuntimeException)
550*b1cdbd2cSJim Jagielski {
551*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
552*b1cdbd2cSJim Jagielski 	return ( getCount() != 0 );
553*b1cdbd2cSJim Jagielski }
554*b1cdbd2cSJim Jagielski 
555*b1cdbd2cSJim Jagielski // container::XNamed
556*b1cdbd2cSJim Jagielski 
getName()557*b1cdbd2cSJim Jagielski rtl::OUString SAL_CALL ScAutoFormatObj::getName() throw(uno::RuntimeException)
558*b1cdbd2cSJim Jagielski {
559*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
560*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
561*b1cdbd2cSJim Jagielski 	if (pFormats && IsInserted() && nFormatIndex < pFormats->GetCount())
562*b1cdbd2cSJim Jagielski 	{
563*b1cdbd2cSJim Jagielski 		String aName;
564*b1cdbd2cSJim Jagielski 		(*pFormats)[nFormatIndex]->GetName(aName);
565*b1cdbd2cSJim Jagielski 		return aName;
566*b1cdbd2cSJim Jagielski 	}
567*b1cdbd2cSJim Jagielski 	return rtl::OUString();
568*b1cdbd2cSJim Jagielski }
569*b1cdbd2cSJim Jagielski 
setName(const rtl::OUString & aNewName)570*b1cdbd2cSJim Jagielski void SAL_CALL ScAutoFormatObj::setName( const rtl::OUString& aNewName )
571*b1cdbd2cSJim Jagielski 												throw(uno::RuntimeException)
572*b1cdbd2cSJim Jagielski {
573*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
574*b1cdbd2cSJim Jagielski 	String aNewString(aNewName);
575*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
576*b1cdbd2cSJim Jagielski 
577*b1cdbd2cSJim Jagielski 	sal_uInt16 nDummy;
578*b1cdbd2cSJim Jagielski 	if (pFormats && IsInserted() && nFormatIndex < pFormats->GetCount() &&
579*b1cdbd2cSJim Jagielski 			!lcl_FindAutoFormatIndex( *pFormats, aNewString, nDummy ))
580*b1cdbd2cSJim Jagielski 	{
581*b1cdbd2cSJim Jagielski 		ScAutoFormatData* pData = (*pFormats)[nFormatIndex];
582*b1cdbd2cSJim Jagielski 		DBG_ASSERT(pData,"AutoFormat Daten nicht da");
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski 		ScAutoFormatData* pNew = new ScAutoFormatData(*pData);
585*b1cdbd2cSJim Jagielski 		pNew->SetName( aNewString );
586*b1cdbd2cSJim Jagielski 
587*b1cdbd2cSJim Jagielski 		pFormats->AtFree( nFormatIndex );
588*b1cdbd2cSJim Jagielski 		if (pFormats->Insert( pNew ))
589*b1cdbd2cSJim Jagielski 		{
590*b1cdbd2cSJim Jagielski 			nFormatIndex = pFormats->IndexOf( pNew );	// ist evtl. anders einsortiert...
591*b1cdbd2cSJim Jagielski 
592*b1cdbd2cSJim Jagielski 			//!	Notify fuer andere Objekte
593*b1cdbd2cSJim Jagielski 			pFormats->SetSaveLater(sal_True);
594*b1cdbd2cSJim Jagielski 		}
595*b1cdbd2cSJim Jagielski 		else
596*b1cdbd2cSJim Jagielski 		{
597*b1cdbd2cSJim Jagielski 			delete pNew;
598*b1cdbd2cSJim Jagielski 			DBG_ERROR("AutoFormat konnte nicht eingefuegt werden");
599*b1cdbd2cSJim Jagielski 			nFormatIndex = 0;		//! alter Index ist ungueltig
600*b1cdbd2cSJim Jagielski 		}
601*b1cdbd2cSJim Jagielski 	}
602*b1cdbd2cSJim Jagielski 	else
603*b1cdbd2cSJim Jagielski 	{
604*b1cdbd2cSJim Jagielski 		//	not inserted or name exists
605*b1cdbd2cSJim Jagielski 		throw uno::RuntimeException();
606*b1cdbd2cSJim Jagielski 	}
607*b1cdbd2cSJim Jagielski }
608*b1cdbd2cSJim Jagielski 
609*b1cdbd2cSJim Jagielski // beans::XPropertySet
610*b1cdbd2cSJim Jagielski 
getPropertySetInfo()611*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySetInfo> SAL_CALL ScAutoFormatObj::getPropertySetInfo()
612*b1cdbd2cSJim Jagielski 														throw(uno::RuntimeException)
613*b1cdbd2cSJim Jagielski {
614*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
615*b1cdbd2cSJim Jagielski 	static uno::Reference< beans::XPropertySetInfo > aRef(new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ));
616*b1cdbd2cSJim Jagielski 	return aRef;
617*b1cdbd2cSJim Jagielski }
618*b1cdbd2cSJim Jagielski 
setPropertyValue(const rtl::OUString & aPropertyName,const uno::Any & aValue)619*b1cdbd2cSJim Jagielski void SAL_CALL ScAutoFormatObj::setPropertyValue(
620*b1cdbd2cSJim Jagielski 						const rtl::OUString& aPropertyName, const uno::Any& aValue )
621*b1cdbd2cSJim Jagielski 				throw(beans::UnknownPropertyException, beans::PropertyVetoException,
622*b1cdbd2cSJim Jagielski 						lang::IllegalArgumentException, lang::WrappedTargetException,
623*b1cdbd2cSJim Jagielski 						uno::RuntimeException)
624*b1cdbd2cSJim Jagielski {
625*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
626*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
627*b1cdbd2cSJim Jagielski 	if (pFormats && IsInserted() && nFormatIndex < pFormats->GetCount())
628*b1cdbd2cSJim Jagielski 	{
629*b1cdbd2cSJim Jagielski 		ScAutoFormatData* pData = (*pFormats)[nFormatIndex];
630*b1cdbd2cSJim Jagielski 		DBG_ASSERT(pData,"AutoFormat Daten nicht da");
631*b1cdbd2cSJim Jagielski 
632*b1cdbd2cSJim Jagielski 		String aPropString(aPropertyName);
633*b1cdbd2cSJim Jagielski 		sal_Bool bBool = sal_Bool();
634*b1cdbd2cSJim Jagielski 		if (aPropString.EqualsAscii( SC_UNONAME_INCBACK ) && (aValue >>= bBool))
635*b1cdbd2cSJim Jagielski 			pData->SetIncludeBackground( bBool );
636*b1cdbd2cSJim Jagielski 		else if (aPropString.EqualsAscii( SC_UNONAME_INCBORD ) && (aValue >>= bBool))
637*b1cdbd2cSJim Jagielski 			pData->SetIncludeFrame( bBool );
638*b1cdbd2cSJim Jagielski 		else if (aPropString.EqualsAscii( SC_UNONAME_INCFONT ) && (aValue >>= bBool))
639*b1cdbd2cSJim Jagielski 			pData->SetIncludeFont( bBool );
640*b1cdbd2cSJim Jagielski 		else if (aPropString.EqualsAscii( SC_UNONAME_INCJUST ) && (aValue >>= bBool))
641*b1cdbd2cSJim Jagielski 			pData->SetIncludeJustify( bBool );
642*b1cdbd2cSJim Jagielski 		else if (aPropString.EqualsAscii( SC_UNONAME_INCNUM ) && (aValue >>= bBool))
643*b1cdbd2cSJim Jagielski 			pData->SetIncludeValueFormat( bBool );
644*b1cdbd2cSJim Jagielski 		else if (aPropString.EqualsAscii( SC_UNONAME_INCWIDTH ) && (aValue >>= bBool))
645*b1cdbd2cSJim Jagielski 			pData->SetIncludeWidthHeight( bBool );
646*b1cdbd2cSJim Jagielski 
647*b1cdbd2cSJim Jagielski 		// else Fehler
648*b1cdbd2cSJim Jagielski 
649*b1cdbd2cSJim Jagielski 		//!	Notify fuer andere Objekte
650*b1cdbd2cSJim Jagielski 		pFormats->SetSaveLater(sal_True);
651*b1cdbd2cSJim Jagielski 	}
652*b1cdbd2cSJim Jagielski }
653*b1cdbd2cSJim Jagielski 
getPropertyValue(const rtl::OUString & aPropertyName)654*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScAutoFormatObj::getPropertyValue( const rtl::OUString& aPropertyName )
655*b1cdbd2cSJim Jagielski 				throw(beans::UnknownPropertyException, lang::WrappedTargetException,
656*b1cdbd2cSJim Jagielski 						uno::RuntimeException)
657*b1cdbd2cSJim Jagielski {
658*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
659*b1cdbd2cSJim Jagielski 	uno::Any aAny;
660*b1cdbd2cSJim Jagielski 
661*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
662*b1cdbd2cSJim Jagielski 	if (pFormats && IsInserted() && nFormatIndex < pFormats->GetCount())
663*b1cdbd2cSJim Jagielski 	{
664*b1cdbd2cSJim Jagielski 		ScAutoFormatData* pData = (*pFormats)[nFormatIndex];
665*b1cdbd2cSJim Jagielski 		DBG_ASSERT(pData,"AutoFormat Daten nicht da");
666*b1cdbd2cSJim Jagielski 
667*b1cdbd2cSJim Jagielski 		sal_Bool bValue;
668*b1cdbd2cSJim Jagielski 		sal_Bool bError = sal_False;
669*b1cdbd2cSJim Jagielski 
670*b1cdbd2cSJim Jagielski 		String aPropString(aPropertyName);
671*b1cdbd2cSJim Jagielski 		if (aPropString.EqualsAscii( SC_UNONAME_INCBACK ))
672*b1cdbd2cSJim Jagielski 			bValue = pData->GetIncludeBackground();
673*b1cdbd2cSJim Jagielski 		else if (aPropString.EqualsAscii( SC_UNONAME_INCBORD ))
674*b1cdbd2cSJim Jagielski 			bValue = pData->GetIncludeFrame();
675*b1cdbd2cSJim Jagielski 		else if (aPropString.EqualsAscii( SC_UNONAME_INCFONT ))
676*b1cdbd2cSJim Jagielski 			bValue = pData->GetIncludeFont();
677*b1cdbd2cSJim Jagielski 		else if (aPropString.EqualsAscii( SC_UNONAME_INCJUST ))
678*b1cdbd2cSJim Jagielski 			bValue = pData->GetIncludeJustify();
679*b1cdbd2cSJim Jagielski 		else if (aPropString.EqualsAscii( SC_UNONAME_INCNUM ))
680*b1cdbd2cSJim Jagielski 			bValue = pData->GetIncludeValueFormat();
681*b1cdbd2cSJim Jagielski 		else if (aPropString.EqualsAscii( SC_UNONAME_INCWIDTH ))
682*b1cdbd2cSJim Jagielski 			bValue = pData->GetIncludeWidthHeight();
683*b1cdbd2cSJim Jagielski 		else
684*b1cdbd2cSJim Jagielski 			bError = sal_True;		// unbekannte Property
685*b1cdbd2cSJim Jagielski 
686*b1cdbd2cSJim Jagielski 		if (!bError)
687*b1cdbd2cSJim Jagielski 			aAny <<= bValue;
688*b1cdbd2cSJim Jagielski 	}
689*b1cdbd2cSJim Jagielski 
690*b1cdbd2cSJim Jagielski 	return aAny;
691*b1cdbd2cSJim Jagielski }
692*b1cdbd2cSJim Jagielski 
SC_IMPL_DUMMY_PROPERTY_LISTENER(ScAutoFormatObj)693*b1cdbd2cSJim Jagielski SC_IMPL_DUMMY_PROPERTY_LISTENER( ScAutoFormatObj )
694*b1cdbd2cSJim Jagielski 
695*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
696*b1cdbd2cSJim Jagielski 
697*b1cdbd2cSJim Jagielski ScAutoFormatFieldObj::ScAutoFormatFieldObj(sal_uInt16 nFormat, sal_uInt16 nField) :
698*b1cdbd2cSJim Jagielski 	aPropSet( lcl_GetAutoFieldMap() ),
699*b1cdbd2cSJim Jagielski 	nFormatIndex( nFormat ),
700*b1cdbd2cSJim Jagielski 	nFieldIndex( nField )
701*b1cdbd2cSJim Jagielski {
702*b1cdbd2cSJim Jagielski 	//!	Listening !!!
703*b1cdbd2cSJim Jagielski }
704*b1cdbd2cSJim Jagielski 
~ScAutoFormatFieldObj()705*b1cdbd2cSJim Jagielski ScAutoFormatFieldObj::~ScAutoFormatFieldObj()
706*b1cdbd2cSJim Jagielski {
707*b1cdbd2cSJim Jagielski }
708*b1cdbd2cSJim Jagielski 
Notify(SfxBroadcaster &,const SfxHint &)709*b1cdbd2cSJim Jagielski void ScAutoFormatFieldObj::Notify( SfxBroadcaster& /* rBC */, const SfxHint& /* rHint */ )
710*b1cdbd2cSJim Jagielski {
711*b1cdbd2cSJim Jagielski 	//	spaeter...
712*b1cdbd2cSJim Jagielski }
713*b1cdbd2cSJim Jagielski 
714*b1cdbd2cSJim Jagielski // beans::XPropertySet
715*b1cdbd2cSJim Jagielski 
getPropertySetInfo()716*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySetInfo> SAL_CALL ScAutoFormatFieldObj::getPropertySetInfo()
717*b1cdbd2cSJim Jagielski 														throw(uno::RuntimeException)
718*b1cdbd2cSJim Jagielski {
719*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
720*b1cdbd2cSJim Jagielski 	static uno::Reference< beans::XPropertySetInfo > aRef(new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ));
721*b1cdbd2cSJim Jagielski 	return aRef;
722*b1cdbd2cSJim Jagielski }
723*b1cdbd2cSJim Jagielski 
setPropertyValue(const rtl::OUString & aPropertyName,const uno::Any & aValue)724*b1cdbd2cSJim Jagielski void SAL_CALL ScAutoFormatFieldObj::setPropertyValue(
725*b1cdbd2cSJim Jagielski 						const rtl::OUString& aPropertyName, const uno::Any& aValue )
726*b1cdbd2cSJim Jagielski 				throw(beans::UnknownPropertyException, beans::PropertyVetoException,
727*b1cdbd2cSJim Jagielski 						lang::IllegalArgumentException, lang::WrappedTargetException,
728*b1cdbd2cSJim Jagielski 						uno::RuntimeException)
729*b1cdbd2cSJim Jagielski {
730*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
731*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
732*b1cdbd2cSJim Jagielski     const SfxItemPropertySimpleEntry* pEntry =
733*b1cdbd2cSJim Jagielski             aPropSet.getPropertyMap()->getByName( aPropertyName );
734*b1cdbd2cSJim Jagielski 
735*b1cdbd2cSJim Jagielski     if ( pEntry && pEntry->nWID && pFormats && nFormatIndex < pFormats->GetCount() )
736*b1cdbd2cSJim Jagielski 	{
737*b1cdbd2cSJim Jagielski 		ScAutoFormatData* pData = (*pFormats)[nFormatIndex];
738*b1cdbd2cSJim Jagielski 
739*b1cdbd2cSJim Jagielski         if ( IsScItemWid( pEntry->nWID ) )
740*b1cdbd2cSJim Jagielski         {
741*b1cdbd2cSJim Jagielski             if( const SfxPoolItem* pItem = pData->GetItem( nFieldIndex, pEntry->nWID ) )
742*b1cdbd2cSJim Jagielski 		    {
743*b1cdbd2cSJim Jagielski                 sal_Bool bDone = sal_False;
744*b1cdbd2cSJim Jagielski 
745*b1cdbd2cSJim Jagielski                 switch( pEntry->nWID )
746*b1cdbd2cSJim Jagielski                 {
747*b1cdbd2cSJim Jagielski                     case ATTR_STACKED:
748*b1cdbd2cSJim Jagielski                     {
749*b1cdbd2cSJim Jagielski                         table::CellOrientation eOrient;
750*b1cdbd2cSJim Jagielski                         if( aValue >>= eOrient )
751*b1cdbd2cSJim Jagielski                         {
752*b1cdbd2cSJim Jagielski                             switch( eOrient )
753*b1cdbd2cSJim Jagielski                             {
754*b1cdbd2cSJim Jagielski                                 case table::CellOrientation_STANDARD:
755*b1cdbd2cSJim Jagielski                                     pData->PutItem( nFieldIndex, SfxBoolItem( ATTR_STACKED, sal_False ) );
756*b1cdbd2cSJim Jagielski                                 break;
757*b1cdbd2cSJim Jagielski                                 case table::CellOrientation_TOPBOTTOM:
758*b1cdbd2cSJim Jagielski                                     pData->PutItem( nFieldIndex, SfxBoolItem( ATTR_STACKED, sal_False ) );
759*b1cdbd2cSJim Jagielski                                     pData->PutItem( nFieldIndex, SfxInt32Item( ATTR_ROTATE_VALUE, 27000 ) );
760*b1cdbd2cSJim Jagielski                                 break;
761*b1cdbd2cSJim Jagielski                                 case table::CellOrientation_BOTTOMTOP:
762*b1cdbd2cSJim Jagielski                                     pData->PutItem( nFieldIndex, SfxBoolItem( ATTR_STACKED, sal_False ) );
763*b1cdbd2cSJim Jagielski                                     pData->PutItem( nFieldIndex, SfxInt32Item( ATTR_ROTATE_VALUE, 9000 ) );
764*b1cdbd2cSJim Jagielski                                 break;
765*b1cdbd2cSJim Jagielski                                 case table::CellOrientation_STACKED:
766*b1cdbd2cSJim Jagielski                                     pData->PutItem( nFieldIndex, SfxBoolItem( ATTR_STACKED, sal_True ) );
767*b1cdbd2cSJim Jagielski                                 break;
768*b1cdbd2cSJim Jagielski                                 default:
769*b1cdbd2cSJim Jagielski                                 {
770*b1cdbd2cSJim Jagielski                                     // added to avoid warnings
771*b1cdbd2cSJim Jagielski                                 }
772*b1cdbd2cSJim Jagielski                             }
773*b1cdbd2cSJim Jagielski                             bDone = sal_True;
774*b1cdbd2cSJim Jagielski                         }
775*b1cdbd2cSJim Jagielski                     }
776*b1cdbd2cSJim Jagielski                     break;
777*b1cdbd2cSJim Jagielski                     default:
778*b1cdbd2cSJim Jagielski                         SfxPoolItem* pNewItem = pItem->Clone();
779*b1cdbd2cSJim Jagielski                         bDone = pNewItem->PutValue( aValue, pEntry->nMemberId );
780*b1cdbd2cSJim Jagielski                         if (bDone)
781*b1cdbd2cSJim Jagielski                             pData->PutItem( nFieldIndex, *pNewItem );
782*b1cdbd2cSJim Jagielski                         delete pNewItem;
783*b1cdbd2cSJim Jagielski                 }
784*b1cdbd2cSJim Jagielski 
785*b1cdbd2cSJim Jagielski                 if (bDone)
786*b1cdbd2cSJim Jagielski                     //! Notify fuer andere Objekte?
787*b1cdbd2cSJim Jagielski                     pFormats->SetSaveLater(sal_True);
788*b1cdbd2cSJim Jagielski 		    }
789*b1cdbd2cSJim Jagielski         }
790*b1cdbd2cSJim Jagielski         else
791*b1cdbd2cSJim Jagielski         {
792*b1cdbd2cSJim Jagielski             switch (pEntry->nWID)
793*b1cdbd2cSJim Jagielski             {
794*b1cdbd2cSJim Jagielski 				case SC_WID_UNO_TBLBORD:
795*b1cdbd2cSJim Jagielski 					{
796*b1cdbd2cSJim Jagielski 						table::TableBorder aBorder;
797*b1cdbd2cSJim Jagielski 						if ( aValue >>= aBorder )	// empty = nothing to do
798*b1cdbd2cSJim Jagielski 						{
799*b1cdbd2cSJim Jagielski 							SvxBoxItem aOuter(ATTR_BORDER);
800*b1cdbd2cSJim Jagielski 							SvxBoxInfoItem aInner(ATTR_BORDER_INNER);
801*b1cdbd2cSJim Jagielski                             ScHelperFunctions::FillBoxItems( aOuter, aInner, aBorder );
802*b1cdbd2cSJim Jagielski 				            pData->PutItem( nFieldIndex, aOuter );
803*b1cdbd2cSJim Jagielski 
804*b1cdbd2cSJim Jagielski 				            //!	Notify fuer andere Objekte?
805*b1cdbd2cSJim Jagielski 				            pFormats->SetSaveLater(sal_True);
806*b1cdbd2cSJim Jagielski 						}
807*b1cdbd2cSJim Jagielski 					}
808*b1cdbd2cSJim Jagielski 					break;
809*b1cdbd2cSJim Jagielski             }
810*b1cdbd2cSJim Jagielski         }
811*b1cdbd2cSJim Jagielski 	}
812*b1cdbd2cSJim Jagielski }
813*b1cdbd2cSJim Jagielski 
getPropertyValue(const rtl::OUString & aPropertyName)814*b1cdbd2cSJim Jagielski uno::Any SAL_CALL ScAutoFormatFieldObj::getPropertyValue( const rtl::OUString& aPropertyName )
815*b1cdbd2cSJim Jagielski 				throw(beans::UnknownPropertyException, lang::WrappedTargetException,
816*b1cdbd2cSJim Jagielski 						uno::RuntimeException)
817*b1cdbd2cSJim Jagielski {
818*b1cdbd2cSJim Jagielski 	ScUnoGuard aGuard;
819*b1cdbd2cSJim Jagielski 	uno::Any aVal;
820*b1cdbd2cSJim Jagielski 
821*b1cdbd2cSJim Jagielski 	ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
822*b1cdbd2cSJim Jagielski     const SfxItemPropertySimpleEntry* pEntry =
823*b1cdbd2cSJim Jagielski             aPropSet.getPropertyMap()->getByName( aPropertyName );
824*b1cdbd2cSJim Jagielski 
825*b1cdbd2cSJim Jagielski     if ( pEntry && pEntry->nWID && pFormats && nFormatIndex < pFormats->GetCount() )
826*b1cdbd2cSJim Jagielski 	{
827*b1cdbd2cSJim Jagielski 		const ScAutoFormatData* pData = (*pFormats)[nFormatIndex];
828*b1cdbd2cSJim Jagielski 
829*b1cdbd2cSJim Jagielski         if ( IsScItemWid( pEntry->nWID ) )
830*b1cdbd2cSJim Jagielski         {
831*b1cdbd2cSJim Jagielski             if( const SfxPoolItem* pItem = pData->GetItem( nFieldIndex, pEntry->nWID ) )
832*b1cdbd2cSJim Jagielski             {
833*b1cdbd2cSJim Jagielski                 switch( pEntry->nWID )
834*b1cdbd2cSJim Jagielski                 {
835*b1cdbd2cSJim Jagielski                     case ATTR_STACKED:
836*b1cdbd2cSJim Jagielski                     {
837*b1cdbd2cSJim Jagielski                         const SfxInt32Item* pRotItem = (const SfxInt32Item*)pData->GetItem( nFieldIndex, ATTR_ROTATE_VALUE );
838*b1cdbd2cSJim Jagielski                         sal_Int32 nRot = pRotItem ? pRotItem->GetValue() : 0;
839*b1cdbd2cSJim Jagielski                         sal_Bool bStacked = ((const SfxBoolItem*)pItem)->GetValue();
840*b1cdbd2cSJim Jagielski                         SvxOrientationItem( nRot, bStacked, 0 ).QueryValue( aVal );
841*b1cdbd2cSJim Jagielski                     }
842*b1cdbd2cSJim Jagielski                     break;
843*b1cdbd2cSJim Jagielski                     default:
844*b1cdbd2cSJim Jagielski                         pItem->QueryValue( aVal, pEntry->nMemberId );
845*b1cdbd2cSJim Jagielski                 }
846*b1cdbd2cSJim Jagielski             }
847*b1cdbd2cSJim Jagielski         }
848*b1cdbd2cSJim Jagielski         else
849*b1cdbd2cSJim Jagielski         {
850*b1cdbd2cSJim Jagielski             switch (pEntry->nWID)
851*b1cdbd2cSJim Jagielski             {
852*b1cdbd2cSJim Jagielski 				case SC_WID_UNO_TBLBORD:
853*b1cdbd2cSJim Jagielski 					{
854*b1cdbd2cSJim Jagielski                         const SfxPoolItem* pItem = pData->GetItem(nFieldIndex, ATTR_BORDER);
855*b1cdbd2cSJim Jagielski                         if (pItem)
856*b1cdbd2cSJim Jagielski                         {
857*b1cdbd2cSJim Jagielski 						    SvxBoxItem aOuter(*(static_cast<const SvxBoxItem*>(pItem)));
858*b1cdbd2cSJim Jagielski 						    SvxBoxInfoItem aInner(ATTR_BORDER_INNER);
859*b1cdbd2cSJim Jagielski 
860*b1cdbd2cSJim Jagielski 						    table::TableBorder aBorder;
861*b1cdbd2cSJim Jagielski 						    ScHelperFunctions::FillTableBorder( aBorder, aOuter, aInner );
862*b1cdbd2cSJim Jagielski 						    aVal <<= aBorder;
863*b1cdbd2cSJim Jagielski                         }
864*b1cdbd2cSJim Jagielski     				}
865*b1cdbd2cSJim Jagielski 					break;
866*b1cdbd2cSJim Jagielski             }
867*b1cdbd2cSJim Jagielski         }
868*b1cdbd2cSJim Jagielski 	}
869*b1cdbd2cSJim Jagielski 
870*b1cdbd2cSJim Jagielski 	return aVal;
871*b1cdbd2cSJim Jagielski }
872*b1cdbd2cSJim Jagielski 
873*b1cdbd2cSJim Jagielski SC_IMPL_DUMMY_PROPERTY_LISTENER( ScAutoFormatFieldObj )
874*b1cdbd2cSJim Jagielski 
875*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
876*b1cdbd2cSJim Jagielski 
877*b1cdbd2cSJim Jagielski 
878*b1cdbd2cSJim Jagielski 
879