diff options
Diffstat (limited to 'sc/source/ui/miscdlgs/autofmt.cxx')
-rw-r--r-- | sc/source/ui/miscdlgs/autofmt.cxx | 566 |
1 files changed, 0 insertions, 566 deletions
diff --git a/sc/source/ui/miscdlgs/autofmt.cxx b/sc/source/ui/miscdlgs/autofmt.cxx deleted file mode 100644 index 8ece90ab4..000000000 --- a/sc/source/ui/miscdlgs/autofmt.cxx +++ /dev/null @@ -1,566 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sc.hxx" - - - -//------------------------------------------------------------------ - -#include "scitems.hxx" -#include <svx/algitem.hxx> -#include <editeng/boxitem.hxx> -#include <editeng/brshitem.hxx> -#include <editeng/cntritem.hxx> -#include <editeng/colritem.hxx> -#include <editeng/crsditem.hxx> -#include <editeng/fontitem.hxx> -#include <editeng/postitem.hxx> -#include <editeng/shdditem.hxx> -#include <editeng/udlnitem.hxx> -#include <editeng/wghtitem.hxx> -#include <vcl/svapp.hxx> -#include <svl/zforlist.hxx> -#include <vcl/msgbox.hxx> -#include <sfx2/viewfrm.hxx> -#include <comphelper/processfactory.hxx> - -#include "sc.hrc" -#include "scmod.hxx" -#include "attrib.hxx" -#include "zforauto.hxx" -#include "scitems.hxx" -#include "global.hxx" -#include "globstr.hrc" -#include "autoform.hxx" -#include "miscdlgs.hrc" -#include "autofmt.hxx" -#include "scresid.hxx" -#include "document.hxx" -#include "docsh.hxx" -#include "tabvwsh.hxx" - -#define FRAME_OFFSET 4 - - -//======================================================================== -// ScAutoFmtPreview - -ScAutoFmtPreview::ScAutoFmtPreview( Window* pParent, const ResId& rRes, ScDocument* pDoc ) : - Window ( pParent, rRes ), - pCurData ( NULL ), - aVD ( *this ), - aScriptedText ( aVD ), - xBreakIter ( pDoc->GetBreakIterator() ), - bFitWidth ( false ), - mbRTL ( false ), - aPrvSize ( GetSizePixel().Width() - 6, GetSizePixel().Height() - 30 ), - mnLabelColWidth ( (aPrvSize.Width() - 4) / 4 - 12 ), - mnDataColWidth1 ( (aPrvSize.Width() - 4 - 2 * mnLabelColWidth) / 3 ), - mnDataColWidth2 ( (aPrvSize.Width() - 4 - 2 * mnLabelColWidth) / 4 ), - mnRowHeight ( (aPrvSize.Height() - 4) / 5 ), - aStrJan ( ScResId( STR_JAN ) ), - aStrFeb ( ScResId( STR_FEB ) ), - aStrMar ( ScResId( STR_MAR ) ), - aStrNorth ( ScResId( STR_NORTH ) ), - aStrMid ( ScResId( STR_MID ) ), - aStrSouth ( ScResId( STR_SOUTH ) ), - aStrSum ( ScResId( STR_SUM ) ), - pNumFmt ( new SvNumberFormatter( ::comphelper::getProcessServiceFactory(), ScGlobal::eLnge ) ) -{ - Init(); -} - -//------------------------------------------------------------------------ - -ScAutoFmtPreview::~ScAutoFmtPreview() -{ - delete pNumFmt; -} - -//------------------------------------------------------------------------ - -void lcl_SetFontProperties( - Font& rFont, - const SvxFontItem& rFontItem, - const SvxWeightItem& rWeightItem, - const SvxPostureItem& rPostureItem ) -{ - rFont.SetFamily ( rFontItem.GetFamily() ); - rFont.SetName ( rFontItem.GetFamilyName() ); - rFont.SetStyleName ( rFontItem.GetStyleName() ); - rFont.SetCharSet ( rFontItem.GetCharSet() ); - rFont.SetPitch ( rFontItem.GetPitch() ); - rFont.SetWeight ( (FontWeight)rWeightItem.GetValue() ); - rFont.SetItalic ( (FontItalic)rPostureItem.GetValue() ); -} - -void ScAutoFmtPreview::MakeFonts( sal_uInt16 nIndex, Font& rFont, Font& rCJKFont, Font& rCTLFont ) -{ - if ( pCurData ) - { - rFont = rCJKFont = rCTLFont = GetFont(); - Size aFontSize( rFont.GetSize().Width(), 10 ); - - const SvxFontItem* pFontItem = (const SvxFontItem*) pCurData->GetItem( nIndex, ATTR_FONT ); - const SvxWeightItem* pWeightItem = (const SvxWeightItem*) pCurData->GetItem( nIndex, ATTR_FONT_WEIGHT ); - const SvxPostureItem* pPostureItem = (const SvxPostureItem*) pCurData->GetItem( nIndex, ATTR_FONT_POSTURE ); - const SvxFontItem* pCJKFontItem = (const SvxFontItem*) pCurData->GetItem( nIndex, ATTR_CJK_FONT ); - const SvxWeightItem* pCJKWeightItem = (const SvxWeightItem*) pCurData->GetItem( nIndex, ATTR_CJK_FONT_WEIGHT ); - const SvxPostureItem* pCJKPostureItem = (const SvxPostureItem*) pCurData->GetItem( nIndex, ATTR_CJK_FONT_POSTURE ); - const SvxFontItem* pCTLFontItem = (const SvxFontItem*) pCurData->GetItem( nIndex, ATTR_CTL_FONT ); - const SvxWeightItem* pCTLWeightItem = (const SvxWeightItem*) pCurData->GetItem( nIndex, ATTR_CTL_FONT_WEIGHT ); - const SvxPostureItem* pCTLPostureItem = (const SvxPostureItem*) pCurData->GetItem( nIndex, ATTR_CTL_FONT_POSTURE ); - const SvxUnderlineItem* pUnderlineItem = (const SvxUnderlineItem*) pCurData->GetItem( nIndex, ATTR_FONT_UNDERLINE ); - const SvxOverlineItem* pOverlineItem = (const SvxOverlineItem*) pCurData->GetItem( nIndex, ATTR_FONT_OVERLINE ); - const SvxCrossedOutItem* pCrossedOutItem = (const SvxCrossedOutItem*)pCurData->GetItem( nIndex, ATTR_FONT_CROSSEDOUT ); - const SvxContourItem* pContourItem = (const SvxContourItem*) pCurData->GetItem( nIndex, ATTR_FONT_CONTOUR ); - const SvxShadowedItem* pShadowedItem = (const SvxShadowedItem*) pCurData->GetItem( nIndex, ATTR_FONT_SHADOWED ); - const SvxColorItem* pColorItem = (const SvxColorItem*) pCurData->GetItem( nIndex, ATTR_FONT_COLOR ); - - lcl_SetFontProperties( rFont, *pFontItem, *pWeightItem, *pPostureItem ); - lcl_SetFontProperties( rCJKFont, *pCJKFontItem, *pCJKWeightItem, *pCJKPostureItem ); - lcl_SetFontProperties( rCTLFont, *pCTLFontItem, *pCTLWeightItem, *pCTLPostureItem ); - - Color aColor( pColorItem->GetValue() ); - if( aColor.GetColor() == COL_TRANSPARENT ) - aColor = GetSettings().GetStyleSettings().GetWindowTextColor(); - -#define SETONALLFONTS( MethodName, Value ) \ -rFont.MethodName( Value ); rCJKFont.MethodName( Value ); rCTLFont.MethodName( Value ); - - SETONALLFONTS( SetUnderline, (FontUnderline)pUnderlineItem->GetValue() ) - SETONALLFONTS( SetOverline, (FontUnderline)pOverlineItem->GetValue() ) - SETONALLFONTS( SetStrikeout, (FontStrikeout)pCrossedOutItem->GetValue() ) - SETONALLFONTS( SetOutline, pContourItem->GetValue() ) - SETONALLFONTS( SetShadow, pShadowedItem->GetValue() ) - SETONALLFONTS( SetColor, aColor ) - SETONALLFONTS( SetSize, aFontSize ) - SETONALLFONTS( SetTransparent, sal_True ) - -#undef SETONALLFONTS - } -} - -//------------------------------------------------------------------------ - -sal_uInt16 ScAutoFmtPreview::GetFormatIndex( size_t nCol, size_t nRow ) const -{ - static const sal_uInt16 pnFmtMap[] = - { - 0, 1, 2, 1, 3, - 4, 5, 6, 5, 7, - 8, 9, 10, 9, 11, - 4, 5, 6, 5, 7, - 12, 13, 14, 13, 15 - }; - return pnFmtMap[ maArray.GetCellIndex( nCol, nRow, mbRTL ) ]; -} - -const SvxBoxItem& ScAutoFmtPreview::GetBoxItem( size_t nCol, size_t nRow ) const -{ - OSL_ENSURE( pCurData, "ScAutoFmtPreview::GetBoxItem - no format data found" ); - return *static_cast< const SvxBoxItem* >( pCurData->GetItem( GetFormatIndex( nCol, nRow ), ATTR_BORDER ) ); -} - -const SvxLineItem& ScAutoFmtPreview::GetDiagItem( size_t nCol, size_t nRow, bool bTLBR ) const -{ - OSL_ENSURE( pCurData, "ScAutoFmtPreview::GetDiagItem - no format data found" ); - return *static_cast< const SvxLineItem* >( pCurData->GetItem( GetFormatIndex( nCol, nRow ), bTLBR ? ATTR_BORDER_TLBR : ATTR_BORDER_BLTR ) ); -} - -//------------------------------------------------------------------------ - -void ScAutoFmtPreview::DrawString( size_t nCol, size_t nRow ) -{ - if ( pCurData ) - { - //------------------------ - // Ausgabe des Zelltextes: - //------------------------ - - String cellString; - sal_Bool bNumFormat = pCurData->GetIncludeValueFormat(); - sal_uLong nNum; - double nVal; - Color* pDummy = NULL; - sal_uInt16 nIndex = static_cast< sal_uInt16 >( maArray.GetCellIndex( nCol, nRow, mbRTL ) ); - - switch( nIndex ) - { - case 1: cellString = aStrJan; break; - case 2: cellString = aStrFeb; break; - case 3: cellString = aStrMar; break; - case 5: cellString = aStrNorth; break; - case 10: cellString = aStrMid; break; - case 15: cellString = aStrSouth; break; - case 4: - case 20: cellString = aStrSum; break; - - case 6: - case 8: - case 16: - case 18: nVal = nIndex; - nNum = 5; - goto mknum; - case 17: - case 7: nVal = nIndex; - nNum = 6; - goto mknum; - case 11: - case 12: - case 13: nVal = nIndex; - nNum = 12 == nIndex ? 10 : 9; - goto mknum; - - case 9: nVal = 21; nNum = 7; goto mknum; - case 14: nVal = 36; nNum = 11; goto mknum; - case 19: nVal = 51; nNum = 7; goto mknum; - case 21: nVal = 33; nNum = 13; goto mknum; - case 22: nVal = 36; nNum = 14; goto mknum; - case 23: nVal = 39; nNum = 13; goto mknum; - case 24: nVal = 108; nNum = 15; - mknum: - if( bNumFormat ) - { - ScNumFormatAbbrev& rNumFormat = (ScNumFormatAbbrev&)pCurData->GetNumFormat( (sal_uInt16) nNum ); - nNum = rNumFormat.GetFormatIndex( *pNumFmt ); - } - else - nNum = 0; - pNumFmt->GetOutputString( nVal, nNum, cellString, &pDummy ); - break; - } - - if ( cellString.Len() > 0 ) - { - Size aStrSize; - sal_uInt16 nFmtIndex = GetFormatIndex( nCol, nRow ); - Rectangle cellRect = maArray.GetCellRect( nCol, nRow ); - Point aPos = cellRect.TopLeft(); - sal_uInt16 nRightX = 0; - sal_Bool bJustify = pCurData->GetIncludeJustify(); - SvxHorJustifyItem aHorJustifyItem( SVX_HOR_JUSTIFY_STANDARD, ATTR_HOR_JUSTIFY ); - SvxCellHorJustify eJustification; - - //------------- - // Ausrichtung: - //------------- - eJustification = mbRTL ? SVX_HOR_JUSTIFY_RIGHT : bJustify ? - (SvxCellHorJustify)(((const SvxHorJustifyItem*)pCurData->GetItem( nFmtIndex, ATTR_HOR_JUSTIFY ))->GetValue()) : - SVX_HOR_JUSTIFY_STANDARD; - - if ( pCurData->GetIncludeFont() ) - { - Font aFont, aCJKFont, aCTLFont; - Size theMaxStrSize; - - MakeFonts( nFmtIndex, aFont, aCJKFont, aCTLFont ); - - theMaxStrSize = cellRect.GetSize(); - theMaxStrSize.Width() -= FRAME_OFFSET; - theMaxStrSize.Height() -= FRAME_OFFSET; - - aScriptedText.SetFonts( &aFont, &aCJKFont, &aCTLFont ); - aScriptedText.SetText( cellString, xBreakIter ); - aStrSize = aScriptedText.GetTextSize(); - - if ( theMaxStrSize.Height() < aStrSize.Height() ) - { - // wenn der String in diesem Font nicht - // in die Zelle passt, wird wieder der - // Standard-Font genommen: - aScriptedText.SetDefaultFont(); - aStrSize = aScriptedText.GetTextSize(); - } - while ( ( theMaxStrSize.Width() <= aStrSize.Width() ) - && ( cellString.Len() > 1 ) ) - { - if( eJustification == SVX_HOR_JUSTIFY_RIGHT ) - cellString.Erase( 0, 1 ); - else - cellString.Erase( cellString.Len() - 1 ); - - aScriptedText.SetText( cellString, xBreakIter ); - aStrSize = aScriptedText.GetTextSize(); - } - } - else - { - aScriptedText.SetDefaultFont(); - aScriptedText.SetText( cellString, xBreakIter ); - aStrSize = aScriptedText.GetTextSize(); - } - - nRightX = (sal_uInt16)( cellRect.GetWidth() - - aStrSize.Width() - - FRAME_OFFSET ); - - //----------------------------- - // vertikal (immer zentrieren): - //----------------------------- - aPos.Y() += (mnRowHeight - (sal_uInt16)aStrSize.Height()) / 2; - - //----------- - // horizontal - //----------- - if ( eJustification != SVX_HOR_JUSTIFY_STANDARD ) - { - sal_uInt16 nHorPos = (sal_uInt16) - ((cellRect.GetWidth()-aStrSize.Width())/2); - - switch ( eJustification ) - { - case SVX_HOR_JUSTIFY_LEFT: - aPos.X() += FRAME_OFFSET; - break; - case SVX_HOR_JUSTIFY_RIGHT: - aPos.X() += nRightX; - break; - case SVX_HOR_JUSTIFY_BLOCK: - case SVX_HOR_JUSTIFY_REPEAT: - case SVX_HOR_JUSTIFY_CENTER: - aPos.X() += nHorPos; - break; - case SVX_HOR_JUSTIFY_STANDARD: - default: - // Standard wird hier nicht behandelt - break; - } - } - else - { - //--------------------- - // Standardausrichtung: - //--------------------- - if ( (nCol == 0) || (nRow == 0) ) - { - // Text-Label links oder Summe linksbuendig - aPos.X() += FRAME_OFFSET; - } - else - { - // Zahlen/Datum rechtsbuendig - aPos.X() += nRightX; - } - } - - //------------------------------- - aScriptedText.DrawText( aPos ); - //------------------------------- - } - } -} - -#undef FRAME_OFFSET - -//------------------------------------------------------------------------ - -void ScAutoFmtPreview::DrawStrings() -{ - for( size_t nRow = 0; nRow < 5; ++nRow ) - for( size_t nCol = 0; nCol < 5; ++nCol ) - DrawString( nCol, nRow ); -} - -//------------------------------------------------------------------------ - -void ScAutoFmtPreview::DrawBackground() -{ - if( pCurData ) - { - for( size_t nRow = 0; nRow < 5; ++nRow ) - { - for( size_t nCol = 0; nCol < 5; ++nCol ) - { - const SvxBrushItem* pItem = static_cast< const SvxBrushItem* >( - pCurData->GetItem( GetFormatIndex( nCol, nRow ), ATTR_BACKGROUND ) ); - - aVD.Push( PUSH_LINECOLOR | PUSH_FILLCOLOR ); - aVD.SetLineColor(); - aVD.SetFillColor( pItem->GetColor() ); - aVD.DrawRect( maArray.GetCellRect( nCol, nRow ) ); - aVD.Pop(); - } - } - } -} - -//------------------------------------------------------------------------ - -void ScAutoFmtPreview::PaintCells() -{ - if ( pCurData ) - { - // 1) background - if ( pCurData->GetIncludeBackground() ) - DrawBackground(); - - // 2) values - DrawStrings(); - - // 3) border - if ( pCurData->GetIncludeFrame() ) - maArray.DrawArray( aVD ); - } -} - -//------------------------------------------------------------------------ - -void ScAutoFmtPreview::Init() -{ - SetBorderStyle( WINDOW_BORDER_MONO ); - maArray.Initialize( 5, 5 ); - maArray.SetUseDiagDoubleClipping( false ); - CalcCellArray( false ); - CalcLineMap(); - - TypeId aType(TYPE(ScDocShell)); - ScDocShell* pDocShell = (ScDocShell*)SfxObjectShell::GetFirst(&aType); - SfxViewFrame* pFrame = SfxViewFrame::GetFirst( pDocShell ); - SfxViewShell* p = pFrame->GetViewShell(); - ScTabViewShell* pViewSh = dynamic_cast< ScTabViewShell* >( p ); - ScViewData* pViewData = pViewSh->GetViewData(); - SCTAB nCurrentTab = pViewData->GetTabNo(); - ScDocument* pDoc = pViewData->GetDocument(); - mbRTL = pDoc->IsLayoutRTL( nCurrentTab ); -} - -//------------------------------------------------------------------------ - -void ScAutoFmtPreview::CalcCellArray( sal_Bool bFitWidthP ) -{ - maArray.SetXOffset( 2 ); - maArray.SetAllColWidths( bFitWidthP ? mnDataColWidth2 : mnDataColWidth1 ); - maArray.SetColWidth( 0, mnLabelColWidth ); - maArray.SetColWidth( 4, mnLabelColWidth ); - - maArray.SetYOffset( 2 ); - maArray.SetAllRowHeights( mnRowHeight ); - - aPrvSize.Width() = maArray.GetWidth() + 4; - aPrvSize.Height() = maArray.GetHeight() + 4; -} - -//------------------------------------------------------------------------ - -inline void lclSetStyleFromBorder( svx::frame::Style& rStyle, const ::editeng::SvxBorderLine* pBorder ) -{ - rStyle.Set( pBorder, 1.0 / TWIPS_PER_POINT, 5 ); -} - -void ScAutoFmtPreview::CalcLineMap() -{ - if ( pCurData ) - { - for( size_t nRow = 0; nRow < 5; ++nRow ) - { - for( size_t nCol = 0; nCol < 5; ++nCol ) - { - svx::frame::Style aStyle; - - const SvxBoxItem& rItem = GetBoxItem( nCol, nRow ); - lclSetStyleFromBorder( aStyle, rItem.GetLeft() ); - maArray.SetCellStyleLeft( nCol, nRow, aStyle ); - lclSetStyleFromBorder( aStyle, rItem.GetRight() ); - maArray.SetCellStyleRight( nCol, nRow, aStyle ); - lclSetStyleFromBorder( aStyle, rItem.GetTop() ); - maArray.SetCellStyleTop( nCol, nRow, aStyle ); - lclSetStyleFromBorder( aStyle, rItem.GetBottom() ); - maArray.SetCellStyleBottom( nCol, nRow, aStyle ); - - lclSetStyleFromBorder( aStyle, GetDiagItem( nCol, nRow, true ).GetLine() ); - maArray.SetCellStyleTLBR( nCol, nRow, aStyle ); - lclSetStyleFromBorder( aStyle, GetDiagItem( nCol, nRow, false ).GetLine() ); - maArray.SetCellStyleBLTR( nCol, nRow, aStyle ); - } - } - } -} - -//------------------------------------------------------------------------ - -void ScAutoFmtPreview::NotifyChange( ScAutoFormatData* pNewData ) -{ - if ( pNewData != pCurData ) - { - pCurData = pNewData; - bFitWidth = pNewData->GetIncludeWidthHeight(); - CalcCellArray( bFitWidth ); - CalcLineMap(); - } - else if ( bFitWidth != pNewData->GetIncludeWidthHeight() ) - { - bFitWidth = !bFitWidth; - CalcCellArray( bFitWidth ); - } - - DoPaint( Rectangle( Point(0,0), GetSizePixel() ) ); -} - -//------------------------------------------------------------------------ - -void ScAutoFmtPreview::DoPaint( const Rectangle& /* rRect */ ) -{ - sal_uInt32 nOldDrawMode = aVD.GetDrawMode(); - - Size aWndSize( GetSizePixel() ); - Font aFont( aVD.GetFont() ); - Color aBackCol( GetSettings().GetStyleSettings().GetWindowColor() ); - Point aTmpPoint; - Rectangle aRect( aTmpPoint, aWndSize ); - - aFont.SetTransparent( sal_True ); - aVD.SetFont( aFont ); - aVD.SetLineColor(); - aVD.SetFillColor( aBackCol ); - aVD.SetOutputSize( aWndSize ); - aVD.DrawRect( aRect ); - - PaintCells(); - SetLineColor(); - SetFillColor( aBackCol ); - DrawRect( aRect ); - - Point aPos( (aWndSize.Width() - aPrvSize.Width()) / 2, (aWndSize.Height() - aPrvSize.Height()) / 2 ); - if (Application::GetSettings().GetLayoutRTL()) - aPos.X() = -aPos.X(); - DrawOutDev( aPos, aWndSize, Point(), aWndSize, aVD ); - - aVD.SetDrawMode( nOldDrawMode ); -} - -//------------------------------------------------------------------------ - -void ScAutoFmtPreview::Paint( const Rectangle& rRect ) -{ - DoPaint( rRect ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |