blob: 7d9ef517b2d702d0fca9c217747fedf32ccd51a7 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sc.hxx"
#include <sal/config.h>
#include <stdio.h>
#include <sfx2/docfile.hxx>
#include "qproform.hxx"
#include "qpro.hxx"
#include "qprostyle.hxx"
#include <tools/color.hxx>
#include <scitems.hxx>
#include <svx/algitem.hxx>
#include <editeng/udlnitem.hxx>
#include <editeng/wghtitem.hxx>
#include <editeng/postitem.hxx>
#include <editeng/crsditem.hxx>
#include <editeng/fhgtitem.hxx>
#include <editeng/fontitem.hxx>
#include <map>
#include "global.hxx"
#include "scerrors.hxx"
#include "docpool.hxx"
#include "patattr.hxx"
#include "filter.hxx"
#include "document.hxx"
#include "cell.hxx"
ScQProStyle::ScQProStyle()
{
rtl_fillMemory (maAlign, sizeof (maAlign), 0);
rtl_fillMemory (maFont, sizeof (maFont), 0);
rtl_fillMemory (maFontRecord, sizeof (maFontRecord), 0);
rtl_fillMemory (maFontHeight, sizeof (maFontHeight), 0);
}
void ScQProStyle::SetFormat( ScDocument *pDoc, sal_uInt8 nCol, sal_uInt16 nRow, SCTAB nTab, sal_uInt16 nStyle )
{
if (nStyle >= maxsize)
return;
ScPatternAttr aPattern(pDoc->GetPool());
SfxItemSet& rItemSet = aPattern.GetItemSet();
sal_uInt8 nTmp = maAlign[ nStyle ];
sal_uInt8 nHor = ( nTmp & 0x07 );
sal_uInt8 nVer = ( nTmp & 0x18 );
sal_uInt8 nOrient = ( nTmp & 0x60 );
// Horizontal Alignment
SvxCellHorJustify eJustify = SVX_HOR_JUSTIFY_STANDARD;
switch( nHor )
{
case 0x00:
eJustify = SVX_HOR_JUSTIFY_STANDARD;
break;
case 0x01:
eJustify = SVX_HOR_JUSTIFY_LEFT;
break;
case 0x02:
eJustify = SVX_HOR_JUSTIFY_CENTER;
break;
case 0x03:
eJustify = SVX_HOR_JUSTIFY_RIGHT;
break;
case 0x04:
eJustify = SVX_HOR_JUSTIFY_BLOCK;
break;
}
rItemSet.Put( SvxHorJustifyItem( eJustify, ATTR_HOR_JUSTIFY ) );
// Vertical Alignment
SvxCellVerJustify eVerJustify = SVX_VER_JUSTIFY_STANDARD;
switch( nVer )
{
case 0x00:
eVerJustify = SVX_VER_JUSTIFY_BOTTOM;
break;
case 0x08:
eVerJustify = SVX_VER_JUSTIFY_CENTER;
break;
case 0x10:
eVerJustify = SVX_VER_JUSTIFY_TOP;
break;
}
rItemSet.Put(SvxVerJustifyItem( eVerJustify, ATTR_VER_JUSTIFY ) );
// Orientation
SvxCellOrientation eOrient = SVX_ORIENTATION_STANDARD;
switch( nOrient )
{
case 0x20:
eOrient = SVX_ORIENTATION_TOPBOTTOM;
break;
}
rItemSet.Put( SvxOrientationItem( eOrient, 0) );
// Wrap cell contents
if( nTmp & 0x80 )
{
SfxBoolItem aWrapItem( ATTR_LINEBREAK );
aWrapItem.SetValue( sal_True );
rItemSet.Put( aWrapItem );
}
// Font Attributes
sal_uInt16 nTmpFnt = maFontRecord[ maFont[ nStyle ] ];
sal_Bool bIsBold, bIsItalic, bIsUnderLine, bIsStrikeThrough;
bIsBold = ( nTmpFnt & 0x0001 ) != 0;
bIsItalic = ( nTmpFnt & 0x0002 ) != 0;
bIsUnderLine = ( nTmpFnt & 0x0004 ) != 0;
bIsStrikeThrough = (nTmpFnt & 0x0020 ) != 0;
if( bIsBold )
rItemSet.Put( SvxWeightItem( WEIGHT_BOLD,ATTR_FONT_WEIGHT) );
if( bIsItalic )
rItemSet.Put( SvxPostureItem( ITALIC_NORMAL, ATTR_FONT_POSTURE ) );
if( bIsUnderLine )
rItemSet.Put( SvxUnderlineItem( UNDERLINE_SINGLE, ATTR_FONT_UNDERLINE ) );
if (maFontHeight[ maFont [ nStyle ] ])
rItemSet.Put( SvxFontHeightItem( (sal_uLong) (20 * maFontHeight[ maFont[ nStyle ] ] ), 100, ATTR_FONT_HEIGHT ) );
String fntName = maFontType[ maFont[ nStyle ] ];
rItemSet.Put( SvxFontItem( FAMILY_SYSTEM, fntName, EMPTY_STRING, PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW, ATTR_FONT ) );
pDoc->ApplyPattern( nCol, nRow, nTab, aPattern );
}