summaryrefslogtreecommitdiff
path: root/sw/source/ui/chrdlg/drpcps.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/chrdlg/drpcps.cxx')
-rw-r--r--sw/source/ui/chrdlg/drpcps.cxx857
1 files changed, 0 insertions, 857 deletions
diff --git a/sw/source/ui/chrdlg/drpcps.cxx b/sw/source/ui/chrdlg/drpcps.cxx
deleted file mode 100644
index 0cd310a5d6..0000000000
--- a/sw/source/ui/chrdlg/drpcps.cxx
+++ /dev/null
@@ -1,857 +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_sw.hxx"
-#ifdef SW_DLLIMPLEMENTATION
-#undef SW_DLLIMPLEMENTATION
-#endif
-
-#include <hintids.hxx>
-#define _SVSTDARR_STRINGSDTOR
-#define _SVSTDARR_STRINGSISORTDTOR
-#define _SVSTDARR_XUB_STRLEN
-#include <svl/svstdarr.hxx>
-
-#include "cmdid.h"
-#include "swmodule.hxx"
-#include "view.hxx"
-#include "wrtsh.hxx"
-#include "globals.hrc"
-
-#include <vcl/metric.hxx>
-#include <svl/stritem.hxx>
-#include <editeng/fontitem.hxx>
-#include <svx/htmlmode.hxx>
-#include <sfx2/objsh.hxx>
-#include <editeng/svxfont.hxx>
-#include <vcl/print.hxx>
-#include <sfx2/printer.hxx>
-#include <com/sun/star/i18n/ScriptType.hdl>
-#include <editeng/scripttypeitem.hxx>
-#include <com/sun/star/i18n/XBreakIterator.hpp>
-#include <comphelper/processfactory.hxx>
-
-#include "charatr.hxx"
-#include "viewopt.hxx"
-#include "drpcps.hxx"
-#include "paratr.hxx"
-#include "uitool.hxx"
-#include "charfmt.hxx"
-
-#include "chrdlg.hrc"
-#include "drpcps.hrc"
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::lang;
-//using namespace i18n; !using this namespace leads to mysterious conflicts with ScriptType::...!
-// so don't use this instead of the following defines!
-
-#define I18N ::com::sun::star::i18n
-#define I18N_SCRIPTTYPE ::com::sun::star::i18n::ScriptType
-
-// Globals ******************************************************************
-
-static sal_uInt16 aPageRg[] = {
- RES_PARATR_DROP, RES_PARATR_DROP,
- 0
-};
-
-class SwDropCapsPict : public Control
-{
- String maText;
- String maScriptText;
- Color maBackColor;
- Color maTextLineColor;
- sal_uInt8 mnLines;
- long mnTotLineH;
- long mnLineH;
- long mnTextH;
- sal_uInt16 mnDistance;
- sal_Int32 mnLeading;
- Printer* mpPrinter;
- sal_Bool mbDelPrinter;
- /// The _ScriptInfo structure holds information on where we change from one
- /// script to another.
- struct _ScriptInfo
- {
- sal_uLong textWidth; ///< Physical width of this segment.
- sal_uInt16 scriptType; ///< Script type (e.g. Latin, Asian, Complex)
- xub_StrLen changePos; ///< Character position where the script changes.
- _ScriptInfo(sal_uLong txtWidth, sal_uInt16 scrptType, xub_StrLen position)
- : textWidth(txtWidth), scriptType(scrptType), changePos(position) {}
- bool operator<(_ScriptInfo other) { return changePos < other.changePos; }
- };
- std::vector<_ScriptInfo> maScriptChanges;
- SvxFont maFont;
- SvxFont maCJKFont;
- SvxFont maCTLFont;
- Size maTextSize;
- Reference< I18N::XBreakIterator > xBreak;
-
- virtual void Paint(const Rectangle &rRect);
- void CheckScript( void );
- Size CalcTextSize( void );
- inline void InitPrinter( void );
- void _InitPrinter( void );
- void GetFontSettings( const SwDropCapsPage& _rPage, Font& _rFont, sal_uInt16 _nWhich );
- void GetFirstScriptSegment(xub_StrLen &start, xub_StrLen &end, sal_uInt16 &scriptType);
- bool GetNextScriptSegment(size_t &nIdx, xub_StrLen &start, xub_StrLen &end, sal_uInt16 &scriptType);
-public:
-
- SwDropCapsPict(Window *pParent, const ResId &rResId)
- : Control(pParent, rResId)
- , mnTotLineH(0)
- , mnLineH(0)
- , mnTextH(0)
- , mpPrinter( NULL )
- , mbDelPrinter( sal_False )
- {}
- ~SwDropCapsPict();
-
- void UpdatePaintSettings( void ); // also invalidates control!
-
- inline void SetText( const String& rT );
- inline void SetLines( sal_uInt8 nL );
- inline void SetDistance( sal_uInt16 nD );
- inline void SetValues( const String& rText, sal_uInt8 nLines, sal_uInt16 nDistance );
-
- void DrawPrev( const Point& rPt );
-};
-
-inline void SwDropCapsPict::SetText( const String& rT )
-{
- maText = rT;
- UpdatePaintSettings();
-}
-
-inline void SwDropCapsPict::SetLines( sal_uInt8 nL )
-{
- mnLines = nL;
- UpdatePaintSettings();
-}
-
-inline void SwDropCapsPict::SetDistance( sal_uInt16 nD )
-{
- mnDistance = nD;
- UpdatePaintSettings();
-}
-
-inline void SwDropCapsPict::SetValues( const String& rText, sal_uInt8 nLines, sal_uInt16 nDistance )
-{
- maText = rText;
- mnLines = nLines;
- mnDistance = nDistance;
-
- UpdatePaintSettings();
-}
-
-inline void SwDropCapsPict::InitPrinter( void )
-{
- if( !mpPrinter )
- _InitPrinter();
-}
-
-/****************************************************************************
- Create Default-String from character-count (A, AB, ABC, ...)
-****************************************************************************/
-
-
-String GetDefaultString(sal_uInt16 nChars)
-{
- String aStr;
- for (sal_uInt16 i = 0; i < nChars; i++)
- aStr += String((char) (i + 65));
- return aStr;
-}
-
-static void calcFontHeightAnyAscent( OutputDevice* _pWin, Font& _rFont, long& _nHeight, long& _nAscent )
-{
- if ( !_nHeight )
- {
- _pWin->SetFont( _rFont );
- FontMetric aMetric( _pWin->GetFontMetric() );
- _nHeight = aMetric.GetLineHeight();
- _nAscent = aMetric.GetAscent();
- }
-}
-
- SwDropCapsPict::~SwDropCapsPict()
-{
- if( mbDelPrinter )
- delete mpPrinter;
-}
-
-/// Get the details of the first script change.
-/// @param[out] start The character position of the start of the segment.
-/// @param[out] end The character position of the end of the segment.
-/// @param[out] scriptType The script type (Latin, Asian, Complex etc.)
-void SwDropCapsPict::GetFirstScriptSegment(xub_StrLen &start, xub_StrLen &end, sal_uInt16 &scriptType)
-{
- start = 0;
- if( maScriptChanges.empty() )
- {
- end = maText.Len();
- scriptType = I18N_SCRIPTTYPE::LATIN;
- }
- else
- {
- end = maScriptChanges[ 0 ].changePos;
- scriptType = maScriptChanges[ 0 ].scriptType;
- }
-}
-
-/// Get the details of the first script change.
-/// @param[in,out] nIdx Index of the current script change.
-/// @param[out] start The character position of the start of the segment.
-/// @param[in,out] end The character position of the end of the segment.
-/// @param[out] scriptType The script type (Latin, Asian, Complex etc.)
-/// @returns True if there was a next segment, false if not.
-bool SwDropCapsPict::GetNextScriptSegment(size_t &nIdx, xub_StrLen &start, xub_StrLen &end, sal_uInt16 &scriptType)
-{
- if (maScriptChanges.empty() || nIdx >= maScriptChanges.size() - 1 || end >= maText.Len())
- return false;
- start = maScriptChanges[nIdx++].changePos;
- end = maScriptChanges[ nIdx ].changePos;
- scriptType = maScriptChanges[ nIdx ].scriptType;
- return true;
-}
-
-#define LINES 10
-#define BORDER 2
-
-void SwDropCapsPict::GetFontSettings( const SwDropCapsPage& _rPage, Font& _rFont, sal_uInt16 _nWhich )
-{
- SfxItemSet aSet( _rPage.rSh.GetAttrPool(), _nWhich, _nWhich);
- _rPage.rSh.GetCurAttr(aSet);
- SvxFontItem aFmtFont((SvxFontItem &) aSet.Get(_nWhich));
-
- _rFont.SetFamily (aFmtFont.GetFamily());
- _rFont.SetName (aFmtFont.GetFamilyName());
- _rFont.SetPitch (aFmtFont.GetPitch());
- _rFont.SetCharSet(aFmtFont.GetCharSet());
-}
-
-void SwDropCapsPict::UpdatePaintSettings( void )
-{
- maBackColor = GetSettings().GetStyleSettings().GetWindowColor();
- maTextLineColor = Color( COL_LIGHTGRAY );
-
- // gray lines
- mnTotLineH = (GetOutputSizePixel().Height() - 2 * BORDER) / LINES;
- mnLineH = mnTotLineH - 2;
- mnLeading = GetFontMetric().GetIntLeading();
-
- Font aFont;
- {
- SwDropCapsPage* pPage = ( SwDropCapsPage* ) GetParent();
- if (!pPage->aTemplateBox.GetSelectEntryPos())
- {
- // query the Font at paragraph's beginning
- pPage->rSh.SttCrsrMove();
- pPage->rSh.Push();
- pPage->rSh.ClearMark();
- SwWhichPara pSwuifnParaCurr = GetfnParaCurr();
- SwPosPara pSwuifnParaStart = GetfnParaStart();
- pPage->rSh.MovePara(pSwuifnParaCurr,pSwuifnParaStart);
- // normal
- GetFontSettings( *pPage, aFont, RES_CHRATR_FONT );
-
- // CJK
- GetFontSettings( *pPage, maCJKFont, RES_CHRATR_CJK_FONT );
-
- // CTL
- GetFontSettings( *pPage, maCTLFont, RES_CHRATR_CTL_FONT );
-
- pPage->rSh.Pop(sal_False);
- pPage->rSh.EndCrsrMove();
- }
- else
- {
- // query Font at character template
- SwCharFmt *pFmt = pPage->rSh.GetCharStyle(
- pPage->aTemplateBox.GetSelectEntry(),
- SwWrtShell::GETSTYLE_CREATEANY );
- OSL_ENSURE(pFmt, "character style doesn't exist!");
- const SvxFontItem &rFmtFont = pFmt->GetFont();
-
- aFont.SetFamily (rFmtFont.GetFamily());
- aFont.SetName (rFmtFont.GetFamilyName());
- aFont.SetPitch (rFmtFont.GetPitch());
- aFont.SetCharSet(rFmtFont.GetCharSet());
- }
- }
-
- mnTextH = mnLines * mnTotLineH;
- aFont.SetSize(Size(0, mnTextH));
- maCJKFont.SetSize(Size(0, mnTextH));
- maCTLFont.SetSize(Size(0, mnTextH));
-
- aFont.SetTransparent(sal_True);
- maCJKFont.SetTransparent(sal_True);
- maCTLFont.SetTransparent(sal_True);
-
- aFont.SetColor( SwViewOption::GetFontColor() );
- maCJKFont.SetColor( SwViewOption::GetFontColor() );
- maCTLFont.SetColor( SwViewOption::GetFontColor() );
-
- aFont.SetFillColor(GetSettings().GetStyleSettings().GetWindowColor());
- maCJKFont.SetFillColor(GetSettings().GetStyleSettings().GetWindowColor());
- maCTLFont.SetFillColor(GetSettings().GetStyleSettings().GetWindowColor());
-
- maCJKFont.SetSize(Size(0, maCJKFont.GetSize().Height() + mnLeading));
- maCTLFont.SetSize(Size(0, maCTLFont.GetSize().Height() + mnLeading));
-
- SetFont(aFont);
- aFont.SetSize(Size(0, aFont.GetSize().Height() + mnLeading));
- SetFont(aFont);
- maFont = aFont;
-
- CheckScript();
-
- maTextSize = CalcTextSize();
-
- Invalidate();
-}
-
-/****************************************************************************
-Pict: Paint-Overload
-****************************************************************************/
-
-void SwDropCapsPict::Paint(const Rectangle &/*rRect*/)
-{
- if (!IsVisible())
- return;
-
- SetMapMode(MapMode(MAP_PIXEL));
- SetLineColor();
-
- SetFillColor( maBackColor );
-
- Size aOutputSizePixel( GetOutputSizePixel() );
-
- DrawRect(Rectangle(Point(0, 0), aOutputSizePixel ));
- SetClipRegion(Region(Rectangle(
- Point(BORDER, BORDER),
- Size (aOutputSizePixel.Width () - 2 * BORDER,
- aOutputSizePixel.Height() - 2 * BORDER))));
-
- OSL_ENSURE(mnLineH > 0, "We cannot make it that small");
- long nY0 = (aOutputSizePixel.Height() - (LINES * mnTotLineH)) / 2;
- SetFillColor( maTextLineColor );
- for (sal_uInt16 i = 0; i < LINES; ++i)
- DrawRect(Rectangle(Point(BORDER, nY0 + i * mnTotLineH), Size(aOutputSizePixel.Width() - 2 * BORDER, mnLineH)));
-
- // Text background with gap (240 twips ~ 1 line height)
- sal_uLong lDistance = mnDistance;
- sal_uInt16 nDistW = (sal_uInt16) (sal_uLong) (((lDistance * 100) / 240) * mnTotLineH) / 100;
- SetFillColor( maBackColor );
- if(((SwDropCapsPage*)GetParent())->aDropCapsBox.IsChecked())
- {
- Size aTextSize( maTextSize );
- aTextSize.Width() += nDistW;
- DrawRect( Rectangle( Point( BORDER, nY0 ), aTextSize ) );
-
- // draw Text
- DrawPrev( Point( BORDER, nY0 - mnLeading ) );
- }
-
- SetClipRegion();
-}
-
-void SwDropCapsPict::DrawPrev( const Point& rPt )
-{
- Point aPt(rPt);
- InitPrinter();
-
- Font aOldFont = mpPrinter->GetFont();
- sal_uInt16 nScript;
- size_t nIdx = 0;
- xub_StrLen nStart;
- xub_StrLen nEnd;
- GetFirstScriptSegment(nStart, nEnd, nScript);
- do
- {
- SvxFont& rFnt = (nScript==I18N_SCRIPTTYPE::ASIAN) ? maCJKFont : ((nScript==I18N_SCRIPTTYPE::COMPLEX) ? maCTLFont : maFont);
- mpPrinter->SetFont( rFnt );
-
- rFnt.DrawPrev( this, mpPrinter, aPt, maText, nStart, nEnd - nStart );
-
- aPt.X() += maScriptChanges[ nIdx ].textWidth;
- if ( !GetNextScriptSegment(nIdx, nStart, nEnd, nScript) )
- break;
- }
- while( sal_True );
- mpPrinter->SetFont( aOldFont );
-}
-
-void SwDropCapsPict::CheckScript( void )
-{
- if( maScriptText == maText )
- return;
-
- maScriptText = maText;
- maScriptChanges.clear();
- if( !xBreak.is() )
- {
- Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory();
- xBreak = Reference< I18N::XBreakIterator >(xMSF->createInstance(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.i18n.BreakIterator")) ),UNO_QUERY);
- }
- if( xBreak.is() )
- {
- sal_uInt16 nScript = xBreak->getScriptType( maText, 0 );
- sal_uInt16 nChg = 0;
- if( I18N_SCRIPTTYPE::WEAK == nScript )
- {
- nChg = (xub_StrLen)xBreak->endOfScript( maText, nChg, nScript );
- if( nChg < maText.Len() )
- nScript = xBreak->getScriptType( maText, nChg );
- else
- nScript = I18N_SCRIPTTYPE::LATIN;
- }
-
- do
- {
- nChg = (xub_StrLen)xBreak->endOfScript( maText, nChg, nScript );
- maScriptChanges.push_back( _ScriptInfo(0, nScript, nChg) );
-
- if( nChg < maText.Len() )
- nScript = xBreak->getScriptType( maText, nChg );
- else
- break;
- } while( sal_True );
- }
-}
-
-Size SwDropCapsPict::CalcTextSize( void )
-{
- InitPrinter();
-
- sal_uInt16 nScript;
- size_t nIdx = 0;
- xub_StrLen nStart;
- xub_StrLen nEnd;
- GetFirstScriptSegment(nStart, nEnd, nScript);
- long nTxtWidth = 0;
- long nCJKHeight = 0;
- long nCTLHeight = 0;
- long nHeight = 0;
- long nAscent = 0;
- long nCJKAscent = 0;
- long nCTLAscent = 0;
- do
- {
- SvxFont& rFnt = ( nScript == I18N_SCRIPTTYPE::ASIAN )? maCJKFont :
- ( ( nScript == I18N_SCRIPTTYPE::COMPLEX )? maCTLFont : maFont );
- sal_uLong nWidth = rFnt.GetTxtSize( mpPrinter, maText, nStart, nEnd-nStart ).Width();
-
- if( nIdx < maScriptChanges.size() )
- maScriptChanges[ nIdx ].textWidth = nWidth;
- nTxtWidth += nWidth;
- switch(nScript)
- {
- case I18N_SCRIPTTYPE::ASIAN:
- calcFontHeightAnyAscent( this, maCJKFont, nCJKHeight, nCJKAscent );
- break;
- case I18N_SCRIPTTYPE::COMPLEX:
- calcFontHeightAnyAscent( this, maCTLFont, nCTLHeight, nCTLAscent );
- break;
- default:
- calcFontHeightAnyAscent( this, maFont, nHeight, nAscent );
- }
-
- if ( !GetNextScriptSegment(nIdx, nStart, nEnd, nScript) )
- break;
- }
- while( sal_True );
- nHeight -= nAscent;
- nCJKHeight -= nCJKAscent;
- nCTLHeight -= nCTLAscent;
- if( nHeight < nCJKHeight )
- nHeight = nCJKHeight;
- if( nAscent < nCJKAscent )
- nAscent = nCJKAscent;
- if( nHeight < nCTLHeight )
- nHeight = nCTLHeight;
- if( nAscent < nCTLAscent )
- nAscent = nCTLAscent;
- nHeight += nAscent;
-
- Size aTxtSize( nTxtWidth, nHeight );
- return aTxtSize;
-}
-
-void SwDropCapsPict::_InitPrinter()
-{
- SfxViewShell* pSh = SfxViewShell::Current();
-
- if ( pSh )
- mpPrinter = pSh->GetPrinter();
-
- if ( !mpPrinter )
- {
- mpPrinter = new Printer;
- mbDelPrinter = sal_True;
- }
-}
-
-SwDropCapsDlg::SwDropCapsDlg(Window *pParent, const SfxItemSet &rSet ) :
-
- SfxSingleTabDialog(pParent, rSet, 0)
-
-{
- SwDropCapsPage* pNewPage = (SwDropCapsPage*) SwDropCapsPage::Create(this, rSet);
- pNewPage->SetFormat(sal_False);
- SetTabPage(pNewPage);
-}
-
- SwDropCapsDlg::~SwDropCapsDlg()
-{
-}
-
-SwDropCapsPage::SwDropCapsPage(Window *pParent, const SfxItemSet &rSet) :
-
- SfxTabPage(pParent, SW_RES(TP_DROPCAPS), rSet),
-
- aSettingsFL (this, SW_RES(FL_SETTINGS)),
- aDropCapsBox (this, SW_RES(CB_SWITCH )),
- aWholeWordCB (this, SW_RES(CB_WORD )),
- aSwitchText (this, SW_RES(FT_DROPCAPS )),
- aDropCapsField(this, SW_RES(FLD_DROPCAPS)),
- aLinesText (this, SW_RES(TXT_LINES )),
- aLinesField (this, SW_RES(FLD_LINES )),
- aDistanceText (this, SW_RES(TXT_DISTANCE)),
- aDistanceField(this, SW_RES(FLD_DISTANCE)),
-
- aContentFL (this, SW_RES(FL_CONTENT )),
- aTextText (this, SW_RES(TXT_TEXT )),
- aTextEdit (this, SW_RES(EDT_TEXT )),
- aTemplateText (this, SW_RES(TXT_TEMPLATE)),
- aTemplateBox (this, SW_RES(BOX_TEMPLATE)),
-
- pPict (new SwDropCapsPict(this, SW_RES(CNT_PICT))),
-
- bModified(sal_False),
- bFormat(sal_True),
- rSh(::GetActiveView()->GetWrtShell())
-{
- FreeResource();
- SetExchangeSupport();
-
- sal_uInt16 nHtmlMode = ::GetHtmlMode((const SwDocShell*)SfxObjectShell::Current());
- bHtmlMode = nHtmlMode & HTMLMODE_ON ? sal_True : sal_False;
-
- // In the template dialog the text is not influenceable
- aTextText.Enable( !bFormat );
- aTextEdit.Enable( !bFormat );
-
- // Metrics
- SetMetric( aDistanceField, GetDfltMetric(bHtmlMode) );
-
- pPict->SetBorderStyle( WINDOW_BORDER_MONO );
-
- // Install handler
- Link aLk = LINK(this, SwDropCapsPage, ModifyHdl);
- aDropCapsField.SetModifyHdl( aLk );
- aLinesField .SetModifyHdl( aLk );
- aDistanceField.SetModifyHdl( aLk );
- aTextEdit .SetModifyHdl( aLk );
- aDropCapsBox .SetClickHdl (LINK(this, SwDropCapsPage, ClickHdl ));
- aTemplateBox .SetSelectHdl(LINK(this, SwDropCapsPage, SelectHdl));
- aWholeWordCB .SetClickHdl (LINK(this, SwDropCapsPage, WholeWordHdl ));
-}
-
- SwDropCapsPage::~SwDropCapsPage()
-{
- delete pPict;
-}
-
-int SwDropCapsPage::DeactivatePage(SfxItemSet * _pSet)
-{
- if ( _pSet )
- FillSet( *_pSet );
-
- return LEAVE_PAGE;
-}
-
-/****************************************************************************
-Page: Factory
-****************************************************************************/
-
-SfxTabPage* SwDropCapsPage::Create(Window *pParent,
- const SfxItemSet &rSet)
-{
- return new SwDropCapsPage(pParent, rSet);
-}
-
-/****************************************************************************
-Page: FillItemSet-Overload
-****************************************************************************/
-
-sal_Bool SwDropCapsPage::FillItemSet(SfxItemSet &rSet)
-{
- if(bModified)
- FillSet(rSet);
- return bModified;
-}
-
-/****************************************************************************
-Page: Reset-Overload
-****************************************************************************/
-
-void SwDropCapsPage::Reset(const SfxItemSet &rSet)
-{
- // Characters, lines, gap and text
- SwFmtDrop aFmtDrop((SwFmtDrop &) rSet.Get(RES_PARATR_DROP));
- if (aFmtDrop.GetLines() > 1)
- {
- aDropCapsField.SetValue(aFmtDrop.GetChars());
- aLinesField .SetValue(aFmtDrop.GetLines());
- aDistanceField.SetValue(aDistanceField.Normalize(aFmtDrop.GetDistance()), FUNIT_TWIP);
- aWholeWordCB .Check (aFmtDrop.GetWholeWord());
- }
- else
- {
- aDropCapsField.SetValue(1);
- aLinesField .SetValue(3);
- aDistanceField.SetValue(0);
- }
-
- ::FillCharStyleListBox(aTemplateBox, rSh.GetView().GetDocShell(), sal_True);
-
- aTemplateBox.InsertEntry(SW_RESSTR(SW_STR_NONE), 0);
-
- // Reset format
- aTemplateBox.SelectEntryPos(0);
- if (aFmtDrop.GetCharFmt())
- aTemplateBox.SelectEntry(aFmtDrop.GetCharFmt()->GetName());
-
- // Enable controls
- aDropCapsBox.Check(aFmtDrop.GetLines() > 1);
- const sal_uInt16 nVal = sal_uInt16(aDropCapsField.GetValue());
- if (bFormat)
- aTextEdit.SetText(GetDefaultString(nVal));
- else
- {
- aTextEdit.SetText(rSh.GetDropTxt(nVal));
- aTextEdit.Enable();
- aTextText.Enable();
- }
-
- // Preview
- pPict->SetValues( aTextEdit.GetText(),
- sal_uInt8( aLinesField.GetValue() ),
- sal_uInt16( aDistanceField.Denormalize( aDistanceField.GetValue( FUNIT_TWIP ) ) ) );
-
- ClickHdl(&aDropCapsBox);
- bModified = sal_False;
-}
-
-/****************************************************************************
-Page: CheckBox's Click-Handler
-****************************************************************************/
-
-
-IMPL_LINK( SwDropCapsPage, ClickHdl, Button *, EMPTYARG )
-{
- sal_Bool bChecked = aDropCapsBox.IsChecked();
-
- aWholeWordCB .Enable( bChecked && !bHtmlMode );
-
- aSwitchText.Enable( bChecked && !aWholeWordCB.IsChecked() );
- aDropCapsField.Enable( bChecked && !aWholeWordCB.IsChecked() );
- aLinesText .Enable( bChecked );
- aLinesField .Enable( bChecked );
- aDistanceText.Enable( bChecked );
- aDistanceField.Enable( bChecked );
- aTemplateText .Enable( bChecked );
- aTemplateBox .Enable( bChecked );
- aTextEdit .Enable( bChecked && !bFormat );
- aTextText .Enable( bChecked && !bFormat );
-
- if ( bChecked )
- {
- ModifyHdl(&aDropCapsField);
- aDropCapsField.GrabFocus();
- }
- else
- pPict->SetText(aEmptyStr);
-
- bModified = sal_True;
-
- return 0;
-}
-
-/****************************************************************************
-Page: CheckBox's Click-Handler
-****************************************************************************/
-
-
-IMPL_LINK( SwDropCapsPage, WholeWordHdl, CheckBox *, EMPTYARG )
-{
- aDropCapsField.Enable( !aWholeWordCB.IsChecked() );
-
- ModifyHdl(&aDropCapsField);
-
- bModified = sal_True;
-
- return 0;
-}
-
-/****************************************************************************
-Page: SpinFields' Modify-Handler
-****************************************************************************/
-
-
-IMPL_LINK( SwDropCapsPage, ModifyHdl, Edit *, pEdit )
-{
- String sPreview;
-
- // set text if applicable
- if (pEdit == &aDropCapsField)
- {
- sal_uInt16 nVal;
- sal_Bool bSetText = sal_False;
-
- if (!aWholeWordCB.IsChecked())
- nVal = (sal_uInt16)aDropCapsField.GetValue();
- else
- nVal = 0;
-
- if (bFormat || !rSh.GetDropTxt(1).Len())
- sPreview = GetDefaultString(nVal);
- else
- {
- bSetText = sal_True;
- sPreview = rSh.GetDropTxt(nVal);
- }
-
- String sEdit(aTextEdit.GetText());
-
- if (sEdit.Len() && sPreview.CompareTo(sEdit, sEdit.Len()) != COMPARE_EQUAL)
- {
- sPreview = sEdit.Copy(0, sPreview.Len());
- bSetText = sal_False;
- }
-
- if (bSetText)
- aTextEdit.SetText(sPreview);
- }
- else if (pEdit == &aTextEdit) // set quantity if applicable
- {
- sal_uInt16 nTmp = aTextEdit.GetText().Len();
- aDropCapsField.SetValue(Max((sal_uInt16)1, nTmp));
-
- sPreview = aTextEdit.GetText().Copy(0, nTmp);
- }
-
- // adjust image
- if (pEdit == &aDropCapsField || pEdit == &aTextEdit)
- pPict->SetText (sPreview);
- else if (pEdit == &aLinesField)
- pPict->SetLines((sal_uInt8)aLinesField.GetValue());
- else
- pPict->SetDistance((sal_uInt16)aDistanceField.Denormalize(aDistanceField.GetValue(FUNIT_TWIP)));
-
- bModified = sal_True;
-
- return 0;
-}
-
-/****************************************************************************
-Page: Template-Box' Select-Handler.
-*****************************************************************************/
-
-
-IMPL_LINK_INLINE_START( SwDropCapsPage, SelectHdl, ListBox *, EMPTYARG )
-{
- pPict->UpdatePaintSettings();
- bModified = sal_True;
- return 0;
-}
-IMPL_LINK_INLINE_END( SwDropCapsPage, SelectHdl, ListBox *, EMPTYARG )
-
-sal_uInt16* SwDropCapsPage::GetRanges()
-{
- return aPageRg;
-}
-
-void SwDropCapsPage::FillSet( SfxItemSet &rSet )
-{
- if(bModified)
- {
- SwFmtDrop aFmt;
-
- sal_Bool bOn = aDropCapsBox.IsChecked();
- if(bOn)
- {
- // quantity, lines, gap
- aFmt.GetChars() = (sal_uInt8) aDropCapsField.GetValue();
- aFmt.GetLines() = (sal_uInt8) aLinesField.GetValue();
- aFmt.GetDistance() = (sal_uInt16) aDistanceField.Denormalize(aDistanceField.GetValue(FUNIT_TWIP));
- aFmt.GetWholeWord() = aWholeWordCB.IsChecked();
-
- // template
- if (aTemplateBox.GetSelectEntryPos())
- aFmt.SetCharFmt(rSh.GetCharStyle(aTemplateBox.GetSelectEntry()));
- }
- else
- {
- aFmt.GetChars() = 1;
- aFmt.GetLines() = 1;
- aFmt.GetDistance() = 0;
- }
-
- // set attributes
- const SfxPoolItem* pOldItem;
- if(0 == (pOldItem = GetOldItem( rSet, FN_FORMAT_DROPCAPS )) ||
- aFmt != *pOldItem )
- rSet.Put(aFmt);
-
- // hard text formatting
- // Bug 24974: in designer/template catalog this doesn't make sense!!
- if( !bFormat && aDropCapsBox.IsChecked() )
- {
- String sText(aTextEdit.GetText());
-
- if (!aWholeWordCB.IsChecked())
- sText.Erase( static_cast< xub_StrLen >(aDropCapsField.GetValue()));
-
- SfxStringItem aStr(FN_PARAM_1, sText);
- rSet.Put( aStr );
- }
- }
-}
-
-
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */