summaryrefslogtreecommitdiff
path: root/cui/source/tabpages/chardlg.cxx
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2012-01-28 20:52:45 +0100
committerMichael Stahl <mstahl@redhat.com>2012-01-28 20:52:45 +0100
commit2e626373db2412ac22e8c5c27a60d11cd29e875b (patch)
tree9e9f67205cd5b72f1031721273e1534a3a1e5b0f /cui/source/tabpages/chardlg.cxx
parentf7ee7bbd5174b084f018c2ec94d8c70c98ee04da (diff)
replace obsolete "master" branch with README that points at new repoHEADmaster-deletedmaster
Diffstat (limited to 'cui/source/tabpages/chardlg.cxx')
-rw-r--r--cui/source/tabpages/chardlg.cxx3754
1 files changed, 0 insertions, 3754 deletions
diff --git a/cui/source/tabpages/chardlg.cxx b/cui/source/tabpages/chardlg.cxx
deleted file mode 100644
index daf8b6d6d..000000000
--- a/cui/source/tabpages/chardlg.cxx
+++ /dev/null
@@ -1,3754 +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.
- *
- ************************************************************************/
-
-// include ---------------------------------------------------------------
-#include <editeng/unolingu.hxx>
-#include <vcl/svapp.hxx>
-#include <unotools/pathoptions.hxx>
-#include <svtools/ctrltool.hxx>
-#include <svl/sfontitm.hxx>
-#include <sfx2/printer.hxx>
-#include <sfx2/objsh.hxx>
-#include <sfx2/viewsh.hxx>
-#include <sfx2/bindings.hxx>
-#include <sfx2/viewfrm.hxx>
-#include <vcl/msgbox.hxx>
-#include <svx/dialmgr.hxx>
-#include <svx/dialogs.hrc>
-#include <svtools/unitconv.hxx>
-
-#define _SVX_CHARDLG_CXX
-#include <svl/languageoptions.hxx>
-
-#include "chardlg.hrc"
-
-#include <svx/xtable.hxx> // XColorTable
-#include "chardlg.hxx"
-#include "editeng/fontitem.hxx"
-#include <editeng/postitem.hxx>
-#include <editeng/udlnitem.hxx>
-#include <editeng/crsditem.hxx>
-#include <editeng/cntritem.hxx>
-#include <editeng/langitem.hxx>
-#include <editeng/wghtitem.hxx>
-#include <editeng/fhgtitem.hxx>
-#include <editeng/shdditem.hxx>
-#include <editeng/escpitem.hxx>
-#include <editeng/prszitem.hxx>
-#include <editeng/wrlmitem.hxx>
-#include <editeng/cmapitem.hxx>
-#include <editeng/kernitem.hxx>
-#include <editeng/blnkitem.hxx>
-#include "editeng/flstitem.hxx"
-#include <editeng/akrnitem.hxx>
-#include <editeng/brshitem.hxx>
-#include <editeng/colritem.hxx>
-#include "svx/drawitem.hxx"
-#include "svx/dlgutil.hxx"
-#include <dialmgr.hxx>
-#include "svx/htmlmode.hxx"
-#include "cuicharmap.hxx"
-#include "chardlg.h"
-#include <editeng/emphitem.hxx>
-#include <editeng/charreliefitem.hxx>
-#include <editeng/twolinesitem.hxx>
-#include <editeng/charhiddenitem.hxx>
-#include <svl/stritem.hxx>
-#include <editeng/charscaleitem.hxx>
-#include <editeng/charrotateitem.hxx>
-#include <svx/svxdlg.hxx>
-#include <cuires.hrc>
-#include <svl/intitem.hxx>
-#include <sfx2/request.hxx>
-#include "svx/flagsdef.hxx"
-
-using namespace ::com::sun::star;
-
-// define ----------------------------------------------------------------
-
-#define ISITEMSET rSet.GetItemState(nWhich)>=SFX_ITEM_DEFAULT
-
-#define CLEARTITEM rSet.InvalidateItem(nWhich)
-
-#define LW_NORMAL 0
-#define LW_GESPERRT 1
-#define LW_SCHMAL 2
-
-// static ----------------------------------------------------------------
-
-static sal_uInt16 pNameRanges[] =
-{
- SID_ATTR_CHAR_FONT,
- SID_ATTR_CHAR_WEIGHT,
- SID_ATTR_CHAR_FONTHEIGHT,
- SID_ATTR_CHAR_FONTHEIGHT,
- SID_ATTR_CHAR_COLOR,
- SID_ATTR_CHAR_COLOR,
- SID_ATTR_CHAR_LANGUAGE,
- SID_ATTR_CHAR_LANGUAGE,
- SID_ATTR_CHAR_CJK_FONT,
- SID_ATTR_CHAR_CJK_WEIGHT,
- SID_ATTR_CHAR_CTL_FONT,
- SID_ATTR_CHAR_CTL_WEIGHT,
- 0
-};
-
-static sal_uInt16 pEffectsRanges[] =
-{
- SID_ATTR_CHAR_SHADOWED,
- SID_ATTR_CHAR_UNDERLINE,
- SID_ATTR_CHAR_COLOR,
- SID_ATTR_CHAR_COLOR,
- SID_ATTR_CHAR_CASEMAP,
- SID_ATTR_CHAR_CASEMAP,
- SID_ATTR_FLASH,
- SID_ATTR_FLASH,
- SID_ATTR_CHAR_EMPHASISMARK,
- SID_ATTR_CHAR_EMPHASISMARK,
- SID_ATTR_CHAR_RELIEF,
- SID_ATTR_CHAR_RELIEF,
- SID_ATTR_CHAR_HIDDEN,
- SID_ATTR_CHAR_HIDDEN,
- SID_ATTR_CHAR_OVERLINE,
- SID_ATTR_CHAR_OVERLINE,
- 0
-};
-
-static sal_uInt16 pPositionRanges[] =
-{
- SID_ATTR_CHAR_KERNING,
- SID_ATTR_CHAR_KERNING,
- SID_ATTR_CHAR_ESCAPEMENT,
- SID_ATTR_CHAR_ESCAPEMENT,
- SID_ATTR_CHAR_AUTOKERN,
- SID_ATTR_CHAR_AUTOKERN,
- SID_ATTR_CHAR_ROTATED,
- SID_ATTR_CHAR_SCALEWIDTH,
- SID_ATTR_CHAR_WIDTH_FIT_TO_LINE,
- SID_ATTR_CHAR_WIDTH_FIT_TO_LINE,
- 0
-};
-
-static sal_uInt16 pTwoLinesRanges[] =
-{
- SID_ATTR_CHAR_TWO_LINES,
- SID_ATTR_CHAR_TWO_LINES,
- 0
-};
-
-// C-Funktion ------------------------------------------------------------
-
-inline sal_Bool StateToAttr( TriState aState )
-{
- return ( STATE_CHECK == aState );
-}
-
-// class SvxCharBasePage -------------------------------------------------
-
-inline SvxFont& SvxCharBasePage::GetPreviewFont()
-{
- return m_aPreviewWin.GetFont();
-}
-
-// -----------------------------------------------------------------------
-
-inline SvxFont& SvxCharBasePage::GetPreviewCJKFont()
-{
- return m_aPreviewWin.GetCJKFont();
-}
-// -----------------------------------------------------------------------
-
-inline SvxFont& SvxCharBasePage::GetPreviewCTLFont()
-{
- return m_aPreviewWin.GetCTLFont();
-}
-
-// -----------------------------------------------------------------------
-
-SvxCharBasePage::SvxCharBasePage( Window* pParent, const ResId& rResId, const SfxItemSet& rItemset,
- sal_uInt16 nResIdPrewievWin, sal_uInt16 nResIdFontTypeFT ):
- SfxTabPage( pParent, rResId, rItemset ),
- m_aPreviewWin( this, ResId( nResIdPrewievWin, *rResId.GetResMgr() ) ),
- m_aFontTypeFT( this, ResId( nResIdFontTypeFT, *rResId.GetResMgr() ) ),
- m_bPreviewBackgroundToCharacter( sal_False )
-{
-}
-
-// -----------------------------------------------------------------------
-
-SvxCharBasePage::~SvxCharBasePage()
-{
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharBasePage::ActivatePage( const SfxItemSet& rSet )
-{
- m_aPreviewWin.SetFromItemSet( rSet, m_bPreviewBackgroundToCharacter );
-}
-
-
-// -----------------------------------------------------------------------
-
-void SvxCharBasePage::SetPrevFontWidthScale( const SfxItemSet& rSet )
-{
- sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_SCALEWIDTH );
- if( ISITEMSET )
- {
- const SvxCharScaleWidthItem &rItem = ( SvxCharScaleWidthItem& ) rSet.Get( nWhich );
- m_aPreviewWin.SetFontWidthScale( rItem.GetValue() );
- }
-}
-
-// -----------------------------------------------------------------------
-namespace
-{
- // -----------------------------------------------------------------------
- void setPrevFontEscapement(SvxFont& _rFont,sal_uInt8 nProp, sal_uInt8 nEscProp, short nEsc )
- {
- _rFont.SetPropr( nProp );
- _rFont.SetProprRel( nEscProp );
- _rFont.SetEscapement( nEsc );
- }
- // -----------------------------------------------------------------------
- // -----------------------------------------------------------------------
-}
-// -----------------------------------------------------------------------
-
-void SvxCharBasePage::SetPrevFontEscapement( sal_uInt8 nProp, sal_uInt8 nEscProp, short nEsc )
-{
- setPrevFontEscapement(GetPreviewFont(),nProp,nEscProp,nEsc);
- setPrevFontEscapement(GetPreviewCJKFont(),nProp,nEscProp,nEsc);
- setPrevFontEscapement(GetPreviewCTLFont(),nProp,nEscProp,nEsc);
- m_aPreviewWin.Invalidate();
-}
-
-// SvxCharNamePage_Impl --------------------------------------------------
-
-struct SvxCharNamePage_Impl
-{
- Timer m_aUpdateTimer;
- String m_aNoStyleText;
- String m_aTransparentText;
- const FontList* m_pFontList;
- sal_uInt16 m_nExtraEntryPos;
- sal_Bool m_bMustDelete;
- sal_Bool m_bInSearchMode;
-
- SvxCharNamePage_Impl() :
-
- m_pFontList ( NULL ),
- m_nExtraEntryPos( LISTBOX_ENTRY_NOTFOUND ),
- m_bMustDelete ( sal_False ),
- m_bInSearchMode ( sal_False )
-
- {
- m_aUpdateTimer.SetTimeout( 350 );
- }
-
- ~SvxCharNamePage_Impl()
- {
- if ( m_bMustDelete )
- delete m_pFontList;
- }
-};
-
-// class SvxCharNamePage -------------------------------------------------
-
-SvxCharNamePage::SvxCharNamePage( Window* pParent, const SfxItemSet& rInSet ) :
-
- SvxCharBasePage( pParent, CUI_RES( RID_SVXPAGE_CHAR_NAME ), rInSet, WIN_CHAR_PREVIEW, FT_CHAR_FONTTYPE ),
- m_pImpl ( new SvxCharNamePage_Impl )
-{
- m_pImpl->m_aNoStyleText = String( CUI_RES( STR_CHARNAME_NOSTYLE ) );
- m_pImpl->m_aTransparentText = String( CUI_RES( STR_CHARNAME_TRANSPARENT ) );
-
- SvtLanguageOptions aLanguageOptions;
- sal_Bool bCJK = ( aLanguageOptions.IsCJKFontEnabled() || aLanguageOptions.IsCTLFontEnabled() );
-
- m_pWestLine = new FixedLine( this, CUI_RES( FL_WEST ) );
- m_pWestFontNameFT = new FixedText( this, CUI_RES( bCJK ? FT_WEST_NAME : FT_WEST_NAME_NOCJK ) );
- m_pWestFontNameLB = new FontNameBox( this, CUI_RES( bCJK ? LB_WEST_NAME : LB_WEST_NAME_NOCJK ) );
- m_pWestFontStyleFT = new FixedText( this, CUI_RES( bCJK ? FT_WEST_STYLE : FT_WEST_STYLE_NOCJK ) );
- m_pWestFontStyleLB = new FontStyleBox( this, CUI_RES( bCJK ? LB_WEST_STYLE : LB_WEST_STYLE_NOCJK ) );
- m_pWestFontSizeFT = new FixedText( this, CUI_RES( bCJK ? FT_WEST_SIZE : FT_WEST_SIZE_NOCJK ) );
- m_pWestFontSizeLB = new FontSizeBox( this, CUI_RES( bCJK ? LB_WEST_SIZE : LB_WEST_SIZE_NOCJK ) );
-
- if( !bCJK )
- {
- m_pColorFL = new FixedLine( this, CUI_RES( FL_COLOR2 ) );
- m_pColorFT = new FixedText( this, CUI_RES( FT_COLOR2 ) );
- m_pColorLB = new ColorListBox( this, CUI_RES( LB_COLOR2 ) );
- }
-
- m_pWestFontLanguageFT = new FixedText( this, CUI_RES( bCJK ? FT_WEST_LANG : FT_WEST_LANG_NOCJK ) );
- m_pWestFontLanguageLB = new SvxLanguageBox( this, CUI_RES( bCJK ? LB_WEST_LANG : LB_WEST_LANG_NOCJK ) );
-
- m_pEastLine = new FixedLine( this, CUI_RES( FL_EAST ) );
- m_pEastFontNameFT = new FixedText( this, CUI_RES( FT_EAST_NAME ) );
- m_pEastFontNameLB = new FontNameBox( this, CUI_RES( LB_EAST_NAME ) );
- m_pEastFontStyleFT = new FixedText( this, CUI_RES( FT_EAST_STYLE ) );
- m_pEastFontStyleLB = new FontStyleBox( this, CUI_RES( LB_EAST_STYLE ) );
- m_pEastFontSizeFT = new FixedText( this, CUI_RES( FT_EAST_SIZE ) );
- m_pEastFontSizeLB = new FontSizeBox( this, CUI_RES( LB_EAST_SIZE ) );
- m_pEastFontLanguageFT = new FixedText( this, CUI_RES( FT_EAST_LANG ) );
- m_pEastFontLanguageLB = new SvxLanguageBox( this, CUI_RES( LB_EAST_LANG ) );
-
- m_pCTLLine = new FixedLine( this, CUI_RES( FL_CTL ) );
- m_pCTLFontNameFT = new FixedText( this, CUI_RES( FT_CTL_NAME ) );
- m_pCTLFontNameLB = new FontNameBox( this, CUI_RES( LB_CTL_NAME ) );
- m_pCTLFontStyleFT = new FixedText( this, CUI_RES( FT_CTL_STYLE ) );
- m_pCTLFontStyleLB = new FontStyleBox( this, CUI_RES( LB_CTL_STYLE ) );
- m_pCTLFontSizeFT = new FixedText( this, CUI_RES( FT_CTL_SIZE ) );
- m_pCTLFontSizeLB = new FontSizeBox( this, CUI_RES( LB_CTL_SIZE ) );
- m_pCTLFontLanguageFT = new FixedText( this, CUI_RES( FT_CTL_LANG ) );
- m_pCTLFontLanguageLB = new SvxLanguageBox( this, CUI_RES( LB_CTL_LANG ) );
-
- if( bCJK )
- {
- m_pColorFL = new FixedLine( this, CUI_RES( FL_COLOR2 ) );
- m_pColorFT = new FixedText( this, CUI_RES( FT_COLOR2 ) );
- m_pColorLB = new ColorListBox( this, CUI_RES( LB_COLOR2 ) );
- }
-
- //In MacOSX the standard dialogs name font-name, font-style as
- //Family, Typeface
- //In GNOME the standard dialogs name font-name, font-style as
- //Family, Style
- //In Windows the standard dialogs name font-name, font-style as
- //Font, Style
-#ifdef WNT
- String sFontFamilyString(CUI_RES(STR_CHARNAME_FONT));
-#else
- String sFontFamilyString(CUI_RES(STR_CHARNAME_FAMILY));
-#endif
- m_pWestFontNameFT->SetText(sFontFamilyString);
- m_pEastFontNameFT->SetText(sFontFamilyString);
- m_pCTLFontNameFT->SetText(sFontFamilyString);
-
-#ifdef MACOSX
- String sFontStyleString(CUI_RES(STR_CHARNAME_TYPEFACE));
-#else
- String sFontStyleString(CUI_RES(STR_CHARNAME_STYLE));
-#endif
- m_pWestFontStyleFT->SetText(sFontStyleString);
- m_pEastFontStyleFT->SetText(sFontStyleString);
- m_pCTLFontStyleFT->SetText(sFontStyleString);
-
- m_pWestLine ->Show( bCJK );
- m_pColorFL ->Show( bCJK );
-
- bCJK = aLanguageOptions.IsCJKFontEnabled();
- m_pEastLine ->Show( bCJK );
- m_pEastFontNameFT ->Show( bCJK );
- m_pEastFontNameLB ->Show( bCJK );
- m_pEastFontStyleFT ->Show( bCJK );
- m_pEastFontStyleLB ->Show( bCJK );
- m_pEastFontSizeFT ->Show( bCJK );
- m_pEastFontSizeLB ->Show( bCJK );
- m_pEastFontLanguageFT ->Show( bCJK );
- m_pEastFontLanguageLB ->Show( bCJK );
-
- sal_Bool bShowCTL = aLanguageOptions.IsCTLFontEnabled();
- if ( bShowCTL && !bCJK )
- {
- // move CTL controls to the places of the CJK controls, if these controls aren't visible
- m_pCTLLine ->SetPosPixel( m_pEastLine->GetPosPixel() );
- m_pCTLFontNameFT ->SetPosPixel( m_pEastFontNameFT->GetPosPixel() );
- m_pCTLFontNameLB ->SetPosPixel( m_pEastFontNameLB->GetPosPixel() );
- m_pCTLFontStyleFT ->SetPosPixel( m_pEastFontStyleFT->GetPosPixel() );
- m_pCTLFontStyleLB ->SetPosPixel( m_pEastFontStyleLB->GetPosPixel() );
- m_pCTLFontSizeFT ->SetPosPixel( m_pEastFontSizeFT->GetPosPixel() );
- m_pCTLFontSizeLB ->SetPosPixel( m_pEastFontSizeLB->GetPosPixel() );
- m_pCTLFontLanguageFT ->SetPosPixel( m_pEastFontLanguageFT->GetPosPixel() );
- m_pCTLFontLanguageLB ->SetPosPixel( m_pEastFontLanguageLB->GetPosPixel() );
- }
- m_pCTLLine ->Show( bShowCTL );
- m_pCTLFontNameFT ->Show( bShowCTL );
- m_pCTLFontNameLB ->Show( bShowCTL );
- m_pCTLFontStyleFT ->Show( bShowCTL );
- m_pCTLFontStyleLB ->Show( bShowCTL );
- m_pCTLFontSizeFT ->Show( bShowCTL );
- m_pCTLFontSizeLB ->Show( bShowCTL );
- m_pCTLFontLanguageFT ->Show( bShowCTL );
- m_pCTLFontLanguageLB ->Show( bShowCTL );
-
- FreeResource();
-
- m_pWestFontLanguageLB->SetLanguageList( LANG_LIST_WESTERN, sal_True, sal_False, sal_True );
- m_pEastFontLanguageLB->SetLanguageList( LANG_LIST_CJK, sal_True, sal_False, sal_True );
- m_pCTLFontLanguageLB->SetLanguageList( LANG_LIST_CTL, sal_True, sal_False, sal_True );
-
- Initialize();
-}
-
-// -----------------------------------------------------------------------
-
-SvxCharNamePage::~SvxCharNamePage()
-{
- delete m_pImpl;
-
- delete m_pWestLine;
- delete m_pWestFontNameFT;
- delete m_pWestFontNameLB;
- delete m_pWestFontStyleFT;
- delete m_pWestFontStyleLB;
- delete m_pWestFontSizeFT;
- delete m_pWestFontSizeLB;
- delete m_pWestFontLanguageFT;
- delete m_pWestFontLanguageLB;
-
- delete m_pEastLine;
- delete m_pEastFontNameFT;
- delete m_pEastFontNameLB;
- delete m_pEastFontStyleFT;
- delete m_pEastFontStyleLB;
- delete m_pEastFontSizeFT;
- delete m_pEastFontSizeLB;
- delete m_pEastFontLanguageFT;
- delete m_pEastFontLanguageLB;
-
- delete m_pCTLLine;
- delete m_pCTLFontNameFT;
- delete m_pCTLFontNameLB;
- delete m_pCTLFontStyleFT;
- delete m_pCTLFontStyleLB;
- delete m_pCTLFontSizeFT;
- delete m_pCTLFontSizeLB;
- delete m_pCTLFontLanguageFT;
- delete m_pCTLFontLanguageLB;
-
- delete m_pColorFL;
- delete m_pColorFT;
- delete m_pColorLB;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharNamePage::Initialize()
-{
- // to handle the changes of the other pages
- SetExchangeSupport();
-
- // fill the color box
- SfxObjectShell* pDocSh = SfxObjectShell::Current();
- //DBG_ASSERT( pDocSh, "DocShell not found!" );
- XColorTable* pColorTable = NULL;
- bool bKillTable = false;
- const SfxPoolItem* pItem = NULL;
-
- if ( pDocSh )
- {
- pItem = pDocSh->GetItem( SID_COLOR_TABLE );
- if ( pItem != NULL )
- pColorTable = ( (SvxColorTableItem*)pItem )->GetColorTable();
- }
-
- if ( !pColorTable )
- {
- pColorTable = new XColorTable( SvtPathOptions().GetPalettePath() );
- bKillTable = true;
- }
-
- m_pColorLB->SetUpdateMode( sal_False );
-
- {
- SfxPoolItem* pDummy;
- SfxViewFrame* pFrame = SfxViewFrame::GetFirst( pDocSh );
- if( !pFrame || SFX_ITEM_DEFAULT > pFrame->GetBindings().QueryState(
- SID_ATTR_AUTO_COLOR_INVALID, pDummy ))
- m_pColorLB->InsertEntry( Color( COL_AUTO ),
- SVX_RESSTR( RID_SVXSTR_AUTOMATIC ));
- }
- for ( long i = 0; i < pColorTable->Count(); i++ )
- {
- XColorEntry* pEntry = pColorTable->GetColor(i);
- m_pColorLB->InsertEntry( pEntry->GetColor(), pEntry->GetName() );
- }
-
- m_pColorLB->SetUpdateMode( sal_True );
-
- if ( bKillTable )
- delete pColorTable;
-
- m_pColorLB->SetSelectHdl( LINK( this, SvxCharNamePage, ColorBoxSelectHdl_Impl ) );
-
- Link aLink = LINK( this, SvxCharNamePage, FontModifyHdl_Impl );
- m_pWestFontNameLB->SetModifyHdl( aLink );
- m_pWestFontStyleLB->SetModifyHdl( aLink );
- m_pWestFontSizeLB->SetModifyHdl( aLink );
- m_pEastFontNameLB->SetModifyHdl( aLink );
- m_pEastFontStyleLB->SetModifyHdl( aLink );
- m_pEastFontSizeLB->SetModifyHdl( aLink );
- m_pCTLFontNameLB->SetModifyHdl( aLink );
- m_pCTLFontStyleLB->SetModifyHdl( aLink );
- m_pCTLFontSizeLB->SetModifyHdl( aLink );
-
- m_pImpl->m_aUpdateTimer.SetTimeoutHdl( LINK( this, SvxCharNamePage, UpdateHdl_Impl ) );
-
- m_pColorFL->Hide();
- m_pColorFT->Hide();
- m_pColorLB->Hide();
-}
-
-// -----------------------------------------------------------------------
-
-const FontList* SvxCharNamePage::GetFontList() const
-{
- if ( !m_pImpl->m_pFontList )
- {
- SfxObjectShell* pDocSh = SfxObjectShell::Current();
- const SfxPoolItem* pItem;
-
- /* #110771# SvxFontListItem::GetFontList can return NULL */
- if ( pDocSh )
- {
- pItem = pDocSh->GetItem( SID_ATTR_CHAR_FONTLIST );
- if ( pItem != NULL )
- {
- DBG_ASSERT(NULL != ( (SvxFontListItem*)pItem )->GetFontList(),
- "Where is the font list?");
- m_pImpl->m_pFontList = static_cast<const SvxFontListItem*>(pItem )->GetFontList()->Clone();
- m_pImpl->m_bMustDelete = sal_True;
- }
- }
- if(!m_pImpl->m_pFontList)
- {
- m_pImpl->m_pFontList =
- new FontList( Application::GetDefaultDevice() );
- m_pImpl->m_bMustDelete = sal_True;
- }
- }
-
- return m_pImpl->m_pFontList;
-}
-
-// -----------------------------------------------------------------------------
-namespace
-{
- FontInfo calcFontInfo( SvxFont& _rFont,
- SvxCharNamePage* _pPage,
- const FontNameBox* _pFontNameLB,
- const FontStyleBox* _pFontStyleLB,
- const FontSizeBox* _pFontSizeLB,
- const FontList* _pFontList,
- sal_uInt16 _nFontWhich,
- sal_uInt16 _nFontHeightWhich)
- {
- Size aSize = _rFont.GetSize();
- aSize.Width() = 0;
- FontInfo aFontInfo;
- String sFontName(_pFontNameLB->GetText());
- sal_Bool bFontAvailable = _pFontList->IsAvailable( sFontName );
- if(bFontAvailable || _pFontNameLB->GetSavedValue() != sFontName)
- aFontInfo = _pFontList->Get( sFontName, _pFontStyleLB->GetText() );
- else
- {
- //get the font from itemset
- SfxItemState eState = _pPage->GetItemSet().GetItemState( _nFontWhich );
- if ( eState >= SFX_ITEM_DEFAULT )
- {
- const SvxFontItem* pFontItem = (const SvxFontItem*)&( _pPage->GetItemSet().Get( _nFontWhich ) );
- aFontInfo.SetName(pFontItem->GetFamilyName());
- aFontInfo.SetStyleName(pFontItem->GetStyleName());
- aFontInfo.SetFamily(pFontItem->GetFamily());
- aFontInfo.SetPitch(pFontItem->GetPitch());
- aFontInfo.SetCharSet(pFontItem->GetCharSet());
- }
- }
- if ( _pFontSizeLB->IsRelative() )
- {
- DBG_ASSERT( _pPage->GetItemSet().GetParent(), "No parent set" );
- const SvxFontHeightItem& rOldItem = (SvxFontHeightItem&)_pPage->GetItemSet().GetParent()->Get( _nFontHeightWhich );
-
- // alter Wert, skaliert
- long nHeight;
- if ( _pFontSizeLB->IsPtRelative() )
- nHeight = rOldItem.GetHeight() + PointToTwips( static_cast<long>(_pFontSizeLB->GetValue() / 10) );
- else
- nHeight = static_cast<long>(rOldItem.GetHeight() * _pFontSizeLB->GetValue() / 100);
-
- // Umrechnung in twips fuer das Beispiel-Window
- aSize.Height() =
- ItemToControl( nHeight, _pPage->GetItemSet().GetPool()->GetMetric( _nFontHeightWhich ), SFX_FUNIT_TWIP );
- }
- else if ( _pFontSizeLB->GetText().Len() )
- aSize.Height() = PointToTwips( static_cast<long>(_pFontSizeLB->GetValue() / 10) );
- else
- aSize.Height() = 200; // default 10pt
- aFontInfo.SetSize( aSize );
-
- _rFont.SetFamily( aFontInfo.GetFamily() );
- _rFont.SetName( aFontInfo.GetName() );
- _rFont.SetStyleName( aFontInfo.GetStyleName() );
- _rFont.SetPitch( aFontInfo.GetPitch() );
- _rFont.SetCharSet( aFontInfo.GetCharSet() );
- _rFont.SetWeight( aFontInfo.GetWeight() );
- _rFont.SetItalic( aFontInfo.GetItalic() );
- _rFont.SetSize( aFontInfo.GetSize() );
-
- return aFontInfo;
- }
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharNamePage::UpdatePreview_Impl()
-{
- SvxFont& rFont = GetPreviewFont();
- SvxFont& rCJKFont = GetPreviewCJKFont();
- SvxFont& rCTLFont = GetPreviewCTLFont();
- // Size
- Size aSize = rFont.GetSize();
- aSize.Width() = 0;
- Size aCJKSize = rCJKFont.GetSize();
- aCJKSize.Width() = 0;
- Size aCTLSize = rCTLFont.GetSize();
- aCTLSize.Width() = 0;
- // Font
- const FontList* pFontList = GetFontList();
- FontInfo aFontInfo =
- calcFontInfo(rFont,this,m_pWestFontNameLB,m_pWestFontStyleLB,m_pWestFontSizeLB,pFontList,GetWhich( SID_ATTR_CHAR_FONT ),GetWhich( SID_ATTR_CHAR_FONTHEIGHT ));
-
- calcFontInfo(rCJKFont,this,m_pEastFontNameLB,m_pEastFontStyleLB,m_pEastFontSizeLB,pFontList,GetWhich( SID_ATTR_CHAR_CJK_FONT ),GetWhich( SID_ATTR_CHAR_CJK_FONTHEIGHT ));
-
- calcFontInfo(rCTLFont,this,m_pCTLFontNameLB,m_pCTLFontStyleLB,m_pCTLFontSizeLB,pFontList,GetWhich( SID_ATTR_CHAR_CTL_FONT ),GetWhich( SID_ATTR_CHAR_CTL_FONTHEIGHT ));
-
- m_aPreviewWin.Invalidate();
- m_aFontTypeFT.SetText( pFontList->GetFontMapText( aFontInfo ) );
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharNamePage::FillStyleBox_Impl( const FontNameBox* pNameBox )
-{
- const FontList* pFontList = GetFontList();
- DBG_ASSERT( pFontList, "no fontlist" );
-
- FontStyleBox* pStyleBox = NULL;
-
- if ( m_pWestFontNameLB == pNameBox )
- pStyleBox = m_pWestFontStyleLB;
- else if ( m_pEastFontNameLB == pNameBox )
- pStyleBox = m_pEastFontStyleLB;
- else if ( m_pCTLFontNameLB == pNameBox )
- pStyleBox = m_pCTLFontStyleLB;
- else
- {
- DBG_ERRORFILE( "invalid font name box" );
- return;
- }
-
- pStyleBox->Fill( pNameBox->GetText(), pFontList );
-
- if ( m_pImpl->m_bInSearchMode )
- {
- // Bei der Suche zus"atzliche Eintr"age:
- // "Nicht Fett" und "Nicht Kursiv"
- String aEntry = m_pImpl->m_aNoStyleText;
- const sal_Char sS[] = "%1";
- aEntry.SearchAndReplaceAscii( sS, pFontList->GetBoldStr() );
- m_pImpl->m_nExtraEntryPos = pStyleBox->InsertEntry( aEntry );
- aEntry = m_pImpl->m_aNoStyleText;
- aEntry.SearchAndReplaceAscii( sS, pFontList->GetItalicStr() );
- pStyleBox->InsertEntry( aEntry );
- }
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharNamePage::FillSizeBox_Impl( const FontNameBox* pNameBox )
-{
- const FontList* pFontList = GetFontList();
- DBG_ASSERT( pFontList, "no fontlist" );
-
- FontStyleBox* pStyleBox = NULL;
- FontSizeBox* pSizeBox = NULL;
-
- if ( m_pWestFontNameLB == pNameBox )
- {
- pStyleBox = m_pWestFontStyleLB;
- pSizeBox = m_pWestFontSizeLB;
- }
- else if ( m_pEastFontNameLB == pNameBox )
- {
- pStyleBox = m_pEastFontStyleLB;
- pSizeBox = m_pEastFontSizeLB;
- }
- else if ( m_pCTLFontNameLB == pNameBox )
- {
- pStyleBox = m_pCTLFontStyleLB;
- pSizeBox = m_pCTLFontSizeLB;
- }
- else
- {
- DBG_ERRORFILE( "invalid font name box" );
- return;
- }
-
- FontInfo _aFontInfo( pFontList->Get( pNameBox->GetText(), pStyleBox->GetText() ) );
- pSizeBox->Fill( &_aFontInfo, pFontList );
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharNamePage::Reset_Impl( const SfxItemSet& rSet, LanguageGroup eLangGrp )
-{
- FontNameBox* pNameBox = NULL;
- FixedText* pStyleLabel = NULL;
- FontStyleBox* pStyleBox = NULL;
- FixedText* pSizeLabel = NULL;
- FontSizeBox* pSizeBox = NULL;
- FixedText* pLangFT = NULL;
- SvxLanguageBox* pLangBox = NULL;
- sal_uInt16 nWhich = 0;
-
- switch ( eLangGrp )
- {
- case Western :
- pNameBox = m_pWestFontNameLB;
- pStyleLabel = m_pWestFontStyleFT;
- pStyleBox = m_pWestFontStyleLB;
- pSizeLabel = m_pWestFontSizeFT;
- pSizeBox = m_pWestFontSizeLB;
- pLangFT = m_pWestFontLanguageFT;
- pLangBox = m_pWestFontLanguageLB;
- nWhich = GetWhich( SID_ATTR_CHAR_FONT );
- break;
-
- case Asian :
- pNameBox = m_pEastFontNameLB;
- pStyleLabel = m_pEastFontStyleFT;
- pStyleBox = m_pEastFontStyleLB;
- pSizeLabel = m_pEastFontSizeFT;
- pSizeBox = m_pEastFontSizeLB;
- pLangFT = m_pEastFontLanguageFT;
- pLangBox = m_pEastFontLanguageLB;
- nWhich = GetWhich( SID_ATTR_CHAR_CJK_FONT );
- break;
-
- case Ctl :
- pNameBox = m_pCTLFontNameLB;
- pStyleLabel = m_pCTLFontStyleFT;
- pStyleBox = m_pCTLFontStyleLB;
- pSizeLabel = m_pCTLFontSizeFT;
- pSizeBox = m_pCTLFontSizeLB;
- pLangFT = m_pCTLFontLanguageFT;
- pLangBox = m_pCTLFontLanguageLB;
- nWhich = GetWhich( SID_ATTR_CHAR_CTL_FONT );
- break;
- }
-
- // die FontListBox fuellen
- const FontList* pFontList = GetFontList();
- pNameBox->Fill( pFontList );
-
- // Font ermitteln
- const SvxFontItem* pFontItem = NULL;
- SfxItemState eState = rSet.GetItemState( nWhich );
-
- if ( eState >= SFX_ITEM_DEFAULT )
- {
- pFontItem = (const SvxFontItem*)&( rSet.Get( nWhich ) );
- pNameBox->SetText( pFontItem->GetFamilyName() );
- }
- else
- {
- pNameBox->SetText( String() );
- }
-
- FillStyleBox_Impl( pNameBox );
-
- bool bStyle = false;
- bool bStyleAvailable = true;
- FontItalic eItalic = ITALIC_NONE;
- FontWeight eWeight = WEIGHT_NORMAL;
- switch ( eLangGrp )
- {
- case Western : nWhich = GetWhich( SID_ATTR_CHAR_POSTURE ); break;
- case Asian : nWhich = GetWhich( SID_ATTR_CHAR_CJK_POSTURE ); break;
- case Ctl : nWhich = GetWhich( SID_ATTR_CHAR_CTL_POSTURE ); break;
- }
- eState = rSet.GetItemState( nWhich );
-
- if ( eState >= SFX_ITEM_DEFAULT )
- {
- const SvxPostureItem& rItem = (SvxPostureItem&)rSet.Get( nWhich );
- eItalic = (FontItalic)rItem.GetValue();
- bStyle = true;
- }
- bStyleAvailable = bStyleAvailable && (eState >= SFX_ITEM_DONTCARE);
-
- switch ( eLangGrp )
- {
- case Western : nWhich = GetWhich( SID_ATTR_CHAR_WEIGHT ); break;
- case Asian : nWhich = GetWhich( SID_ATTR_CHAR_CJK_WEIGHT ); break;
- case Ctl : nWhich = GetWhich( SID_ATTR_CHAR_CTL_WEIGHT ); break;
- }
- eState = rSet.GetItemState( nWhich );
-
- if ( eState >= SFX_ITEM_DEFAULT )
- {
- SvxWeightItem& rItem = (SvxWeightItem&)rSet.Get( nWhich );
- eWeight = (FontWeight)rItem.GetValue();
- }
- else
- bStyle = false;
- bStyleAvailable = bStyleAvailable && (eState >= SFX_ITEM_DONTCARE);
-
- // Aktuell eingestellter Font
- if ( bStyle && pFontItem )
- {
- FontInfo aInfo = pFontList->Get( pFontItem->GetFamilyName(), eWeight, eItalic );
- pStyleBox->SetText( pFontList->GetStyleName( aInfo ) );
- }
- else if ( !m_pImpl->m_bInSearchMode || !bStyle )
- {
- pStyleBox->SetText( String() );
- }
- else if ( bStyle )
- {
- FontInfo aInfo = pFontList->Get( String(), eWeight, eItalic );
- pStyleBox->SetText( pFontList->GetStyleName( aInfo ) );
- }
- if (!bStyleAvailable)
- {
- pStyleBox->Disable( );
- pStyleLabel->Disable( );
- }
-
- // SizeBox fuellen
- FillSizeBox_Impl( pNameBox );
- switch ( eLangGrp )
- {
- case Western : nWhich = GetWhich( SID_ATTR_CHAR_FONTHEIGHT ); break;
- case Asian : nWhich = GetWhich( SID_ATTR_CHAR_CJK_FONTHEIGHT ); break;
- case Ctl : nWhich = GetWhich( SID_ATTR_CHAR_CTL_FONTHEIGHT ); break;
- }
- eState = rSet.GetItemState( nWhich );
-
- if ( pSizeBox->IsRelativeMode() )
- {
- SfxMapUnit eUnit = rSet.GetPool()->GetMetric( nWhich );
- const SvxFontHeightItem& rItem = (SvxFontHeightItem&)rSet.Get( nWhich );
-
- if( rItem.GetProp() != 100 || SFX_MAPUNIT_RELATIVE != rItem.GetPropUnit() )
- {
- sal_Bool bPtRel = SFX_MAPUNIT_POINT == rItem.GetPropUnit();
- pSizeBox->SetPtRelative( bPtRel );
- pSizeBox->SetValue( bPtRel ? ((short)rItem.GetProp()) * 10 : rItem.GetProp() );
- }
- else
- {
- pSizeBox->SetRelative();
- pSizeBox->SetValue( (long)CalcToPoint( rItem.GetHeight(), eUnit, 10 ) );
- }
- }
- else if ( eState >= SFX_ITEM_DEFAULT )
- {
- SfxMapUnit eUnit = rSet.GetPool()->GetMetric( nWhich );
- const SvxFontHeightItem& rItem = (SvxFontHeightItem&)rSet.Get( nWhich );
- pSizeBox->SetValue( (long)CalcToPoint( rItem.GetHeight(), eUnit, 10 ) );
- }
- else
- {
- pSizeBox->SetText( String() );
- if ( eState <= SFX_ITEM_READONLY )
- {
- pSizeBox->Disable( );
- pSizeLabel->Disable( );
- }
- }
-
- switch ( eLangGrp )
- {
- case Western : nWhich = GetWhich( SID_ATTR_CHAR_LANGUAGE ); break;
- case Asian : nWhich = GetWhich( SID_ATTR_CHAR_CJK_LANGUAGE ); break;
- case Ctl : nWhich = GetWhich( SID_ATTR_CHAR_CTL_LANGUAGE ); break;
- }
- pLangBox->SetNoSelection();
- eState = rSet.GetItemState( nWhich );
-
- switch ( eState )
- {
- case SFX_ITEM_UNKNOWN:
- pLangFT->Hide();
- pLangBox->Hide();
- break;
-
- case SFX_ITEM_DISABLED:
- case SFX_ITEM_READONLY:
- pLangFT->Disable();
- pLangBox->Disable();
- break;
-
- case SFX_ITEM_DEFAULT:
- case SFX_ITEM_SET:
- {
- const SvxLanguageItem& rItem = (SvxLanguageItem&)rSet.Get( nWhich );
- LanguageType eLangType = (LanguageType)rItem.GetValue();
- DBG_ASSERT( eLangType != LANGUAGE_SYSTEM, "LANGUAGE_SYSTEM not allowed" );
- if ( eLangType != LANGUAGE_DONTKNOW )
- pLangBox->SelectLanguage( eLangType );
- break;
- }
- }
-
- if ( Western == eLangGrp )
- m_aFontTypeFT.SetText( pFontList->GetFontMapText(
- pFontList->Get( pNameBox->GetText(), pStyleBox->GetText() ) ) );
-
- // save these settings
- pNameBox->SaveValue();
- pStyleBox->SaveValue();
- pSizeBox->SaveValue();
- pLangBox->SaveValue();
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool SvxCharNamePage::FillItemSet_Impl( SfxItemSet& rSet, LanguageGroup eLangGrp )
-{
- sal_Bool bModified = sal_False;
-
- FontNameBox* pNameBox = NULL;
- FontStyleBox* pStyleBox = NULL;
- FontSizeBox* pSizeBox = NULL;
- SvxLanguageBox* pLangBox = NULL;
- sal_uInt16 nWhich = 0;
- sal_uInt16 nSlot = 0;
-
- switch ( eLangGrp )
- {
- case Western :
- pNameBox = m_pWestFontNameLB;
- pStyleBox = m_pWestFontStyleLB;
- pSizeBox = m_pWestFontSizeLB;
- pLangBox = m_pWestFontLanguageLB;
- nSlot = SID_ATTR_CHAR_FONT;
- break;
-
- case Asian :
- pNameBox = m_pEastFontNameLB;
- pStyleBox = m_pEastFontStyleLB;
- pSizeBox = m_pEastFontSizeLB;
- pLangBox = m_pEastFontLanguageLB;
- nSlot = SID_ATTR_CHAR_CJK_FONT;
- break;
-
- case Ctl :
- pNameBox = m_pCTLFontNameLB;
- pStyleBox = m_pCTLFontStyleLB;
- pSizeBox = m_pCTLFontSizeLB;
- pLangBox = m_pCTLFontLanguageLB;
- nSlot = SID_ATTR_CHAR_CTL_FONT;
- break;
- }
-
- nWhich = GetWhich( nSlot );
- const SfxPoolItem* pItem = NULL;
- const SfxItemSet& rOldSet = GetItemSet();
- const SfxPoolItem* pOld = NULL;
-
- const SfxItemSet* pExampleSet = GetTabDialog() ? GetTabDialog()->GetExampleSet() : NULL;
-
- bool bChanged = true;
- const String& rFontName = pNameBox->GetText();
- const FontList* pFontList = GetFontList();
- String aStyleBoxText =pStyleBox->GetText();
- sal_uInt16 nEntryPos = pStyleBox->GetEntryPos( aStyleBoxText );
- if ( nEntryPos >= m_pImpl->m_nExtraEntryPos )
- aStyleBoxText.Erase();
- FontInfo aInfo( pFontList->Get( rFontName, aStyleBoxText ) );
- SvxFontItem aFontItem( aInfo.GetFamily(), aInfo.GetName(), aInfo.GetStyleName(),
- aInfo.GetPitch(), aInfo.GetCharSet(), nWhich );
- pOld = GetOldItem( rSet, nSlot );
-
- if ( pOld )
- {
- const SvxFontItem& rItem = *( (const SvxFontItem*)pOld );
-
- if ( rItem.GetFamilyName() == aFontItem.GetFamilyName() )
- bChanged = false;
- }
-
- if ( !bChanged )
- bChanged = !pNameBox->GetSavedValue().Len();
-
- if ( !bChanged && pExampleSet &&
- pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
- ( (SvxFontItem*)pItem )->GetFamilyName() != aFontItem.GetFamilyName() )
- bChanged = true;
-
- if ( bChanged && rFontName.Len() )
- {
- rSet.Put( aFontItem );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- rSet.ClearItem( nWhich );
-
-
- bChanged = sal_True;
- switch ( eLangGrp )
- {
- case Western : nSlot = SID_ATTR_CHAR_WEIGHT; break;
- case Asian : nSlot = SID_ATTR_CHAR_CJK_WEIGHT; break;
- case Ctl : nSlot = SID_ATTR_CHAR_CTL_WEIGHT; break;
- }
- nWhich = GetWhich( nSlot );
- FontWeight eWeight = aInfo.GetWeight();
- if ( nEntryPos >= m_pImpl->m_nExtraEntryPos )
- eWeight = WEIGHT_NORMAL;
- SvxWeightItem aWeightItem( eWeight, nWhich );
- pOld = GetOldItem( rSet, nSlot );
-
- if ( pOld )
- {
- const SvxWeightItem& rItem = *( (const SvxWeightItem*)pOld );
-
- if ( rItem.GetValue() == aWeightItem.GetValue() )
- bChanged = false;
- }
-
- if ( !bChanged )
- {
- bChanged = !pStyleBox->GetSavedValue().Len();
-
- if ( m_pImpl->m_bInSearchMode && bChanged &&
- aInfo.GetWeight() == WEIGHT_NORMAL && aInfo.GetItalic() != ITALIC_NONE )
- bChanged = true;
- }
-
- if ( !bChanged && pExampleSet &&
- pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
- ( (SvxWeightItem*)pItem )->GetValue() != aWeightItem.GetValue() )
- bChanged = true;
-
- if ( nEntryPos >= m_pImpl->m_nExtraEntryPos )
- bChanged = ( nEntryPos == m_pImpl->m_nExtraEntryPos );
-
- String aText( pStyleBox->GetText() ); // Tristate, dann Text leer
-
- if ( bChanged && aText.Len() )
- {
- rSet.Put( aWeightItem );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = true;
- switch ( eLangGrp )
- {
- case Western : nSlot = SID_ATTR_CHAR_POSTURE; break;
- case Asian : nSlot = SID_ATTR_CHAR_CJK_POSTURE; break;
- case Ctl : nSlot = SID_ATTR_CHAR_CTL_POSTURE; break;
- }
- nWhich = GetWhich( nSlot );
- FontItalic eItalic = aInfo.GetItalic();
- if ( nEntryPos >= m_pImpl->m_nExtraEntryPos )
- eItalic = ITALIC_NONE;
- SvxPostureItem aPostureItem( eItalic, nWhich );
- pOld = GetOldItem( rSet, nSlot );
-
- if ( pOld )
- {
- const SvxPostureItem& rItem = *( (const SvxPostureItem*)pOld );
-
- if ( rItem.GetValue() == aPostureItem.GetValue() )
- bChanged = false;
- }
-
- if ( !bChanged )
- {
- bChanged = !pStyleBox->GetSavedValue().Len();
-
- if ( m_pImpl->m_bInSearchMode && bChanged &&
- aInfo.GetItalic() == ITALIC_NONE && aInfo.GetWeight() != WEIGHT_NORMAL )
- bChanged = false;
- }
-
- if ( !bChanged && pExampleSet &&
- pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
- ( (SvxPostureItem*)pItem )->GetValue() != aPostureItem.GetValue() )
- bChanged = true;
-
- if ( nEntryPos >= m_pImpl->m_nExtraEntryPos )
- bChanged = ( nEntryPos == ( m_pImpl->m_nExtraEntryPos + 1 ) );
-
- if ( bChanged && aText.Len() )
- {
- rSet.Put( aPostureItem );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- // FontSize
- long nSize = static_cast<long>(pSizeBox->GetValue());
-
- if ( !pSizeBox->GetText().Len() ) // GetValue() gibt dann Min-Wert zurueck
- nSize = 0;
- long nSavedSize = pSizeBox->GetSavedValue().ToInt32();
- bool bRel = true;
-
- if ( !pSizeBox->IsRelative() )
- {
- nSavedSize *= 10;
- bRel = false;
- }
-
- switch ( eLangGrp )
- {
- case Western : nSlot = SID_ATTR_CHAR_FONTHEIGHT; break;
- case Asian : nSlot = SID_ATTR_CHAR_CJK_FONTHEIGHT; break;
- case Ctl : nSlot = SID_ATTR_CHAR_CTL_FONTHEIGHT; break;
- }
- nWhich = GetWhich( nSlot );
- const SvxFontHeightItem* pOldHeight = (const SvxFontHeightItem*)GetOldItem( rSet, nSlot );
- bChanged = ( nSize != nSavedSize );
-
- if ( !bChanged && pExampleSet &&
- pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET )
- {
- float fSize = (float)nSize / 10;
- long nVal = CalcToUnit( fSize, rSet.GetPool()->GetMetric( nWhich ) );
- if ( ( (SvxFontHeightItem*)pItem )->GetHeight() != (sal_uInt32)nVal )
- bChanged = true;
- }
-
- if ( bChanged || !pOldHeight ||
- bRel != ( SFX_MAPUNIT_RELATIVE != pOldHeight->GetPropUnit() || 100 != pOldHeight->GetProp() ) )
- {
- SfxMapUnit eUnit = rSet.GetPool()->GetMetric( nWhich );
- if ( pSizeBox->IsRelative() )
- {
- DBG_ASSERT( GetItemSet().GetParent(), "No parent set" );
- const SvxFontHeightItem& rOldItem =
- (const SvxFontHeightItem&)GetItemSet().GetParent()->Get( nWhich );
-
- SvxFontHeightItem aHeight( 240, 100, nWhich );
- if ( pSizeBox->IsPtRelative() )
- aHeight.SetHeight( rOldItem.GetHeight(), (sal_uInt16)( nSize / 10 ), SFX_MAPUNIT_POINT, eUnit );
- else
- aHeight.SetHeight( rOldItem.GetHeight(), (sal_uInt16)nSize, SFX_MAPUNIT_RELATIVE );
- rSet.Put( aHeight );
- }
- else
- {
- float fSize = (float)nSize / 10;
- rSet.Put( SvxFontHeightItem( CalcToUnit( fSize, eUnit ), 100, nWhich ) );
- }
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = true;
- switch ( eLangGrp )
- {
- case Western : nSlot = SID_ATTR_CHAR_LANGUAGE; break;
- case Asian : nSlot = SID_ATTR_CHAR_CJK_LANGUAGE; break;
- case Ctl : nSlot = SID_ATTR_CHAR_CTL_LANGUAGE; break;
- }
- nWhich = GetWhich( nSlot );
- pOld = GetOldItem( rSet, nSlot );
- sal_uInt16 nLangPos = pLangBox->GetSelectEntryPos();
- LanguageType eLangType = (LanguageType)(sal_uLong)pLangBox->GetEntryData( nLangPos );
-
- if ( pOld )
- {
- const SvxLanguageItem& rItem = *( (const SvxLanguageItem*)pOld );
-
- if ( nLangPos == LISTBOX_ENTRY_NOTFOUND || eLangType == (LanguageType)rItem.GetValue() )
- bChanged = false;
- }
-
- if ( !bChanged )
- bChanged = ( pLangBox->GetSavedValue() == LISTBOX_ENTRY_NOTFOUND );
-
- if ( bChanged && nLangPos != LISTBOX_ENTRY_NOTFOUND )
- {
- rSet.Put( SvxLanguageItem( eLangType, nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- return bModified;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharNamePage::ResetColor_Impl( const SfxItemSet& rSet )
-{
- sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_COLOR );
- SfxItemState eState = rSet.GetItemState( nWhich );
-
- switch ( eState )
- {
- case SFX_ITEM_UNKNOWN:
- m_pColorLB->Hide();
- break;
-
- case SFX_ITEM_DISABLED:
- case SFX_ITEM_READONLY:
- m_pColorLB->Disable();
- break;
-
- case SFX_ITEM_DONTCARE:
- m_pColorLB->SetNoSelection();
- break;
-
- case SFX_ITEM_DEFAULT:
- case SFX_ITEM_SET:
- {
- SvxFont& rFont = GetPreviewFont();
- SvxFont& rCJKFont = GetPreviewCJKFont();
- SvxFont& rCTLFont = GetPreviewCTLFont();
- const SvxColorItem& rItem = (SvxColorItem&)rSet.Get( nWhich );
- Color aColor = rItem.GetValue();
- rFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
- rCJKFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
- rCTLFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
- m_aPreviewWin.Invalidate();
- sal_uInt16 nSelPos = m_pColorLB->GetEntryPos( aColor );
- if ( nSelPos == LISTBOX_ENTRY_NOTFOUND && aColor == Color( COL_TRANSPARENT ) )
- nSelPos = m_pColorLB->GetEntryPos( m_pImpl->m_aTransparentText );
-
- if ( LISTBOX_ENTRY_NOTFOUND != nSelPos )
- m_pColorLB->SelectEntryPos( nSelPos );
- else
- {
- nSelPos = m_pColorLB->GetEntryPos( aColor );
- if ( LISTBOX_ENTRY_NOTFOUND != nSelPos )
- m_pColorLB->SelectEntryPos( nSelPos );
- else
- m_pColorLB->SelectEntryPos(
- m_pColorLB->InsertEntry( aColor, String( SVX_RES( RID_SVXSTR_COLOR_USER ) ) ) );
- }
- break;
- }
- }
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharNamePage, UpdateHdl_Impl, Timer*, EMPTYARG )
-{
- UpdatePreview_Impl();
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharNamePage, FontModifyHdl_Impl, void*, pNameBox )
-{
- m_pImpl->m_aUpdateTimer.Start();
-
- if ( m_pWestFontNameLB == pNameBox || m_pEastFontNameLB == pNameBox || m_pCTLFontNameLB == pNameBox )
- {
- FillStyleBox_Impl( (FontNameBox*)pNameBox );
- FillSizeBox_Impl( (FontNameBox*)pNameBox );
- }
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharNamePage, ColorBoxSelectHdl_Impl, ColorListBox*, pBox )
-{
- SvxFont& rFont = GetPreviewFont();
- SvxFont& rCJKFont = GetPreviewCJKFont();
- SvxFont& rCTLFont = GetPreviewCTLFont();
- Color aSelectedColor;
- if ( pBox->GetSelectEntry() == m_pImpl->m_aTransparentText )
- aSelectedColor = Color( COL_TRANSPARENT );
- else
- aSelectedColor = pBox->GetSelectEntryColor();
- rFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
- rCJKFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
- rCTLFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
- m_aPreviewWin.Invalidate();
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharNamePage::ActivatePage( const SfxItemSet& rSet )
-{
- SvxCharBasePage::ActivatePage( rSet );
-
- UpdatePreview_Impl(); // instead of asynchronous calling in ctor
-}
-
-// -----------------------------------------------------------------------
-
-int SvxCharNamePage::DeactivatePage( SfxItemSet* _pSet )
-{
- if ( _pSet )
- FillItemSet( *_pSet );
- return LEAVE_PAGE;
-}
-
-// -----------------------------------------------------------------------
-
-SfxTabPage* SvxCharNamePage::Create( Window* pParent, const SfxItemSet& rSet )
-{
- return new SvxCharNamePage( pParent, rSet );
-}
-
-// -----------------------------------------------------------------------
-
-sal_uInt16* SvxCharNamePage::GetRanges()
-{
- return pNameRanges;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharNamePage::Reset( const SfxItemSet& rSet )
-{
- Reset_Impl( rSet, Western );
- Reset_Impl( rSet, Asian );
- Reset_Impl( rSet, Ctl );
- ResetColor_Impl( rSet );
- m_pColorLB->SaveValue();
-
- SetPrevFontWidthScale( rSet );
- UpdatePreview_Impl();
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool SvxCharNamePage::FillItemSet( SfxItemSet& rSet )
-{
- sal_Bool bModified = FillItemSet_Impl( rSet, Western );
- bModified |= FillItemSet_Impl( rSet, Asian );
- bModified |= FillItemSet_Impl( rSet, Ctl );
- return bModified;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharNamePage::SetFontList( const SvxFontListItem& rItem )
-{
- if ( m_pImpl->m_bMustDelete )
- {
- delete m_pImpl->m_pFontList;
- }
- m_pImpl->m_pFontList = rItem.GetFontList()->Clone();
- m_pImpl->m_bMustDelete = sal_True;
-}
-
-// -----------------------------------------------------------------------
-namespace
-{
- void enableRelativeMode( SvxCharNamePage* _pPage, FontSizeBox* _pFontSizeLB, sal_uInt16 _nHeightWhich )
- {
- _pFontSizeLB->EnableRelativeMode( 5, 995, 5 ); // min 5%, max 995%, step 5
-
- const SvxFontHeightItem& rHeightItem =
- (SvxFontHeightItem&)_pPage->GetItemSet().GetParent()->Get( _nHeightWhich );
- SfxMapUnit eUnit = _pPage->GetItemSet().GetPool()->GetMetric( _nHeightWhich );
- short nCurHeight =
- static_cast< short >( CalcToPoint( rHeightItem.GetHeight(), eUnit, 1 ) * 10 );
-
- // ausgehend von der akt. Hoehe:
- // - negativ bis minimal 2 pt
- // - positiv bis maximal 999 pt
- _pFontSizeLB->EnablePtRelativeMode( sal::static_int_cast< short >(-(nCurHeight - 20)), (9999 - nCurHeight), 10 );
- }
-}
-// -----------------------------------------------------------------------------
-
-void SvxCharNamePage::EnableRelativeMode()
-{
- DBG_ASSERT( GetItemSet().GetParent(), "RelativeMode, but no ParentSet!" );
- enableRelativeMode(this,m_pWestFontSizeLB,GetWhich( SID_ATTR_CHAR_FONTHEIGHT ));
- enableRelativeMode(this,m_pEastFontSizeLB,GetWhich( SID_ATTR_CHAR_CJK_FONTHEIGHT ));
- enableRelativeMode(this,m_pCTLFontSizeLB,GetWhich( SID_ATTR_CHAR_CTL_FONTHEIGHT ));
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharNamePage::EnableSearchMode()
-{
- m_pImpl->m_bInSearchMode = sal_True;
-}
-// -----------------------------------------------------------------------
-void SvxCharNamePage::DisableControls( sal_uInt16 nDisable )
-{
- if ( DISABLE_LANGUAGE & nDisable )
- {
- if ( m_pWestFontLanguageFT ) m_pWestFontLanguageFT->Disable();
- if ( m_pWestFontLanguageLB ) m_pWestFontLanguageLB->Disable();
- if ( m_pEastFontLanguageFT ) m_pEastFontLanguageFT->Disable();
- if ( m_pEastFontLanguageLB ) m_pEastFontLanguageLB->Disable();
- if ( m_pCTLFontLanguageFT ) m_pCTLFontLanguageFT->Disable();
- if ( m_pCTLFontLanguageLB ) m_pCTLFontLanguageLB->Disable();
- }
-
- if ( DISABLE_HIDE_LANGUAGE & nDisable )
- {
- if ( m_pWestFontLanguageFT ) m_pWestFontLanguageFT->Hide();
- if ( m_pWestFontLanguageLB ) m_pWestFontLanguageLB->Hide();
- if ( m_pEastFontLanguageFT ) m_pEastFontLanguageFT->Hide();
- if ( m_pEastFontLanguageLB ) m_pEastFontLanguageLB->Hide();
- if ( m_pCTLFontLanguageFT ) m_pCTLFontLanguageFT->Hide();
- if ( m_pCTLFontLanguageLB ) m_pCTLFontLanguageLB->Hide();
- }
-}
-
-// -----------------------------------------------------------------------
-void SvxCharNamePage::SetPreviewBackgroundToCharacter()
-{
- m_bPreviewBackgroundToCharacter = sal_True;
-}
-
-// -----------------------------------------------------------------------
-void SvxCharNamePage::PageCreated (SfxAllItemSet aSet)
-{
- SFX_ITEMSET_ARG (&aSet,pFontListItem,SvxFontListItem,SID_ATTR_CHAR_FONTLIST,sal_False);
- SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_FLAG_TYPE,sal_False);
- SFX_ITEMSET_ARG (&aSet,pDisalbeItem,SfxUInt16Item,SID_DISABLE_CTL,sal_False);
- if (pFontListItem)
- SetFontList(*pFontListItem);
-
- if (pFlagItem)
- {
- sal_uInt32 nFlags=pFlagItem->GetValue();
- if ( ( nFlags & SVX_RELATIVE_MODE ) == SVX_RELATIVE_MODE )
- EnableRelativeMode();
- if ( ( nFlags & SVX_PREVIEW_CHARACTER ) == SVX_PREVIEW_CHARACTER )
- SetPreviewBackgroundToCharacter();
- }
- if (pDisalbeItem)
- DisableControls(pDisalbeItem->GetValue());
-}
-// class SvxCharEffectsPage ----------------------------------------------
-
-SvxCharEffectsPage::SvxCharEffectsPage( Window* pParent, const SfxItemSet& rInSet ) :
-
- SvxCharBasePage( pParent, CUI_RES( RID_SVXPAGE_CHAR_EFFECTS ), rInSet, WIN_EFFECTS_PREVIEW, FT_EFFECTS_FONTTYPE ),
-
- m_aFontColorFT ( this, CUI_RES( FT_FONTCOLOR ) ),
- m_aFontColorLB ( this, CUI_RES( LB_FONTCOLOR ) ),
-
- m_aEffectsFT ( this, CUI_RES( FT_EFFECTS ) ),
- m_aEffectsLB ( this, 0 ),
-
- m_aEffects2LB ( this, CUI_RES( LB_EFFECTS2 ) ),
-
- m_aReliefFT ( this, CUI_RES( FT_RELIEF ) ),
- m_aReliefLB ( this, CUI_RES( LB_RELIEF ) ),
-
- m_aOutlineBtn ( this, CUI_RES( CB_OUTLINE ) ),
- m_aShadowBtn ( this, CUI_RES( CB_SHADOW ) ),
- m_aBlinkingBtn ( this, CUI_RES( CB_BLINKING ) ),
- m_aHiddenBtn ( this, CUI_RES( CB_CHARHIDDEN ) ),
-
- m_aVerticalLine ( this, CUI_RES( FL_EFFECTS_VERTICAL ) ),
-
- m_aOverlineFT ( this, CUI_RES( FT_OVERLINE ) ),
- m_aOverlineLB ( this, CUI_RES( LB_OVERLINE ) ),
- m_aOverlineColorFT ( this, CUI_RES( FT_OVERLINE_COLOR ) ),
- m_aOverlineColorLB ( this, CUI_RES( LB_OVERLINE_COLOR ) ),
- m_aStrikeoutFT ( this, CUI_RES( FT_STRIKEOUT ) ),
- m_aStrikeoutLB ( this, CUI_RES( LB_STRIKEOUT ) ),
- m_aUnderlineFT ( this, CUI_RES( FT_UNDERLINE ) ),
- m_aUnderlineLB ( this, CUI_RES( LB_UNDERLINE ) ),
- m_aUnderlineColorFT ( this, CUI_RES( FT_UNDERLINE_COLOR ) ),
- m_aUnderlineColorLB ( this, CUI_RES( LB_UNDERLINE_COLOR ) ),
- m_aIndividualWordsBtn ( this, CUI_RES( CB_INDIVIDUALWORDS ) ),
-
- m_aAsianLine ( this, CUI_RES( FL_EFFECTS_ASIAN ) ),
-
- m_aEmphasisFT ( this, CUI_RES( FT_EMPHASIS ) ),
- m_aEmphasisLB ( this, CUI_RES( LB_EMPHASIS ) ),
- m_aPositionFT ( this, CUI_RES( FT_POSITION ) ),
- m_aPositionLB ( this, CUI_RES( LB_POSITION ) ),
-
- m_aTransparentColorName ( CUI_RES( STR_CHARNAME_TRANSPARENT ) )
-
-{
- m_aEffectsLB.Hide();
- FreeResource();
- Initialize();
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharEffectsPage::Initialize()
-{
- // to handle the changes of the other pages
- SetExchangeSupport();
-
- // HTML-Mode
- const SfxPoolItem* pItem;
- SfxObjectShell* pShell;
- if ( SFX_ITEM_SET == GetItemSet().GetItemState( SID_HTML_MODE, sal_False, &pItem ) ||
- ( NULL != ( pShell = SfxObjectShell::Current() ) &&
- NULL != ( pItem = pShell->GetItem( SID_HTML_MODE ) ) ) )
- {
- m_nHtmlMode = ( (const SfxUInt16Item*)pItem )->GetValue();
- if ( ( m_nHtmlMode & HTMLMODE_ON ) == HTMLMODE_ON )
- {
- //!!! hide some controls please
- }
- }
-
- // fill the color box
- SfxObjectShell* pDocSh = SfxObjectShell::Current();
- DBG_ASSERT( pDocSh, "DocShell not found!" );
- XColorTable* pColorTable = NULL;
- bool bKillTable = false;
-
- if ( pDocSh )
- {
- pItem = pDocSh->GetItem( SID_COLOR_TABLE );
- if ( pItem != NULL )
- pColorTable = ( (SvxColorTableItem*)pItem )->GetColorTable();
- }
-
- if ( !pColorTable )
- {
- pColorTable = new XColorTable( SvtPathOptions().GetPalettePath() );
- bKillTable = true;
- }
-
- m_aUnderlineColorLB.SetUpdateMode( sal_False );
- m_aOverlineColorLB.SetUpdateMode( sal_False );
- m_aFontColorLB.SetUpdateMode( sal_False );
-
- {
- SfxPoolItem* pDummy;
- SfxViewFrame* pFrame = SfxViewFrame::GetFirst( pDocSh );
- if ( !pFrame ||
- SFX_ITEM_DEFAULT > pFrame->GetBindings().QueryState( SID_ATTR_AUTO_COLOR_INVALID, pDummy ) )
- {
- m_aUnderlineColorLB.InsertAutomaticEntryColor( Color( COL_AUTO ) );
- m_aOverlineColorLB.InsertAutomaticEntryColor( Color( COL_AUTO ) );
- m_aFontColorLB.InsertAutomaticEntryColor( Color( COL_AUTO ) );
- }
- }
- for ( long i = 0; i < pColorTable->Count(); i++ )
- {
- XColorEntry* pEntry = pColorTable->GetColor(i);
- m_aUnderlineColorLB.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
- m_aOverlineColorLB.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
- m_aFontColorLB.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
- }
-
- m_aUnderlineColorLB.SetUpdateMode( sal_True );
- m_aOverlineColorLB.SetUpdateMode( sal_True );
- m_aFontColorLB.SetUpdateMode( sal_True );
- m_aFontColorLB.SetSelectHdl( LINK( this, SvxCharEffectsPage, ColorBoxSelectHdl_Impl ) );
-
- if ( bKillTable )
- delete pColorTable;
-
- // handler
- Link aLink = LINK( this, SvxCharEffectsPage, SelectHdl_Impl );
- m_aUnderlineLB.SetSelectHdl( aLink );
- m_aUnderlineColorLB.SetSelectHdl( aLink );
- m_aOverlineLB.SetSelectHdl( aLink );
- m_aOverlineColorLB.SetSelectHdl( aLink );
- m_aStrikeoutLB.SetSelectHdl( aLink );
- m_aEmphasisLB.SetSelectHdl( aLink );
- m_aPositionLB.SetSelectHdl( aLink );
- m_aEffects2LB.SetSelectHdl( aLink );
- m_aReliefLB.SetSelectHdl( aLink );
-
- m_aUnderlineLB.SelectEntryPos( 0 );
- m_aUnderlineColorLB.SelectEntryPos( 0 );
- m_aOverlineLB.SelectEntryPos( 0 );
- m_aOverlineColorLB.SelectEntryPos( 0 );
- m_aStrikeoutLB.SelectEntryPos( 0 );
- m_aEmphasisLB.SelectEntryPos( 0 );
- m_aPositionLB.SelectEntryPos( 0 );
- SelectHdl_Impl( NULL );
- SelectHdl_Impl( &m_aEmphasisLB );
-
- m_aEffects2LB.SelectEntryPos( 0 );
-
- m_aIndividualWordsBtn.SetClickHdl( LINK( this, SvxCharEffectsPage, CbClickHdl_Impl ) );
- aLink = LINK( this, SvxCharEffectsPage, TristClickHdl_Impl );
- m_aOutlineBtn.SetClickHdl( aLink );
- m_aShadowBtn.SetClickHdl( aLink );
-
- if ( !SvtLanguageOptions().IsAsianTypographyEnabled() )
- {
- m_aAsianLine.Hide();
- m_aEmphasisFT.Hide();
- m_aEmphasisLB.Hide();
- m_aPositionFT.Hide();
- m_aPositionLB.Hide();
- }
-}
-// -----------------------------------------------------------------------
-
-void SvxCharEffectsPage::UpdatePreview_Impl()
-{
- SvxFont& rFont = GetPreviewFont();
- SvxFont& rCJKFont = GetPreviewCJKFont();
- SvxFont& rCTLFont = GetPreviewCTLFont();
-
- sal_uInt16 nPos = m_aUnderlineLB.GetSelectEntryPos();
- FontUnderline eUnderline = (FontUnderline)(sal_uLong)m_aUnderlineLB.GetEntryData( nPos );
- nPos = m_aOverlineLB.GetSelectEntryPos();
- FontUnderline eOverline = (FontUnderline)(sal_uLong)m_aOverlineLB.GetEntryData( nPos );
- nPos = m_aStrikeoutLB.GetSelectEntryPos();
- FontStrikeout eStrikeout = (FontStrikeout)(sal_uLong)m_aStrikeoutLB.GetEntryData( nPos );
- rFont.SetUnderline( eUnderline );
- rCJKFont.SetUnderline( eUnderline );
- rCTLFont.SetUnderline( eUnderline );
- m_aPreviewWin.SetTextLineColor( m_aUnderlineColorLB.GetSelectEntryColor() );
- rFont.SetOverline( eOverline );
- rCJKFont.SetOverline( eOverline );
- rCTLFont.SetOverline( eOverline );
- m_aPreviewWin.SetOverlineColor( m_aOverlineColorLB.GetSelectEntryColor() );
- rFont.SetStrikeout( eStrikeout );
- rCJKFont.SetStrikeout( eStrikeout );
- rCTLFont.SetStrikeout( eStrikeout );
-
- nPos = m_aPositionLB.GetSelectEntryPos();
- sal_Bool bUnder = ( CHRDLG_POSITION_UNDER == (sal_uLong)m_aPositionLB.GetEntryData( nPos ) );
- FontEmphasisMark eMark = (FontEmphasisMark)m_aEmphasisLB.GetSelectEntryPos();
- eMark |= bUnder ? EMPHASISMARK_POS_BELOW : EMPHASISMARK_POS_ABOVE;
- rFont.SetEmphasisMark( eMark );
- rCJKFont.SetEmphasisMark( eMark );
- rCTLFont.SetEmphasisMark( eMark );
-
- sal_uInt16 nRelief = m_aReliefLB.GetSelectEntryPos();
- if(LISTBOX_ENTRY_NOTFOUND != nRelief)
- {
- rFont.SetRelief( (FontRelief)nRelief );
- rCJKFont.SetRelief( (FontRelief)nRelief );
- rCTLFont.SetRelief( (FontRelief)nRelief );
- }
-
- rFont.SetOutline( StateToAttr( m_aOutlineBtn.GetState() ) );
- rCJKFont.SetOutline( rFont.IsOutline() );
- rCTLFont.SetOutline( rFont.IsOutline() );
-
- rFont.SetShadow( StateToAttr( m_aShadowBtn.GetState() ) );
- rCJKFont.SetShadow( rFont.IsShadow() );
- rCTLFont.SetShadow( rFont.IsShadow() );
-
- sal_uInt16 nCapsPos = m_aEffects2LB.GetSelectEntryPos();
- if ( nCapsPos != LISTBOX_ENTRY_NOTFOUND )
- {
- rFont.SetCaseMap( (SvxCaseMap)nCapsPos );
- rCJKFont.SetCaseMap( (SvxCaseMap)nCapsPos );
- // #i78474# small caps do not exist in CTL fonts
- rCTLFont.SetCaseMap( static_cast<SvxCaseMap>( nCapsPos == SVX_CASEMAP_KAPITAELCHEN ? SVX_CASEMAP_NOT_MAPPED : (SvxCaseMap)nCapsPos) );
- }
-
- sal_Bool bWordLine = m_aIndividualWordsBtn.IsChecked();
- rFont.SetWordLineMode( bWordLine );
- rCJKFont.SetWordLineMode( bWordLine );
- rCTLFont.SetWordLineMode( bWordLine );
-
- m_aPreviewWin.Invalidate();
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharEffectsPage::SetCaseMap_Impl( SvxCaseMap eCaseMap )
-{
- if ( SVX_CASEMAP_END > eCaseMap )
- m_aEffects2LB.SelectEntryPos(
- sal::static_int_cast< sal_uInt16 >( eCaseMap ) );
- else
- {
- m_aEffects2LB.SetNoSelection();
- eCaseMap = SVX_CASEMAP_NOT_MAPPED;
- }
-
- UpdatePreview_Impl();
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharEffectsPage::ResetColor_Impl( const SfxItemSet& rSet )
-{
- sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_COLOR );
- SfxItemState eState = rSet.GetItemState( nWhich );
-
- switch ( eState )
- {
- case SFX_ITEM_UNKNOWN:
- m_aFontColorFT.Hide();
- m_aFontColorLB.Hide();
- break;
-
- case SFX_ITEM_DISABLED:
- case SFX_ITEM_READONLY:
- m_aFontColorFT.Disable();
- m_aFontColorLB.Disable();
- break;
-
- case SFX_ITEM_DONTCARE:
- m_aFontColorLB.SetNoSelection();
- break;
-
- case SFX_ITEM_DEFAULT:
- case SFX_ITEM_SET:
- {
- SvxFont& rFont = GetPreviewFont();
- SvxFont& rCJKFont = GetPreviewCJKFont();
- SvxFont& rCTLFont = GetPreviewCTLFont();
-
- const SvxColorItem& rItem = (SvxColorItem&)rSet.Get( nWhich );
- Color aColor = rItem.GetValue();
- rFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
- rCJKFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
- rCTLFont.SetColor( aColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aColor );
-
- m_aPreviewWin.Invalidate();
- sal_uInt16 nSelPos = m_aFontColorLB.GetEntryPos( aColor );
- if ( nSelPos == LISTBOX_ENTRY_NOTFOUND && aColor == Color( COL_TRANSPARENT ) )
- nSelPos = m_aFontColorLB.GetEntryPos( m_aTransparentColorName );
-
- if ( LISTBOX_ENTRY_NOTFOUND != nSelPos )
- m_aFontColorLB.SelectEntryPos( nSelPos );
- else
- {
- nSelPos = m_aFontColorLB.GetEntryPos( aColor );
- if ( LISTBOX_ENTRY_NOTFOUND != nSelPos )
- m_aFontColorLB.SelectEntryPos( nSelPos );
- else
- m_aFontColorLB.SelectEntryPos(
- m_aFontColorLB.InsertEntry( aColor, String( SVX_RES( RID_SVXSTR_COLOR_USER ) ) ) );
- }
- break;
- }
- }
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool SvxCharEffectsPage::FillItemSetColor_Impl( SfxItemSet& rSet )
-{
- sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_COLOR );
- const SvxColorItem* pOld = (const SvxColorItem*)GetOldItem( rSet, SID_ATTR_CHAR_COLOR );
- const SvxColorItem* pItem = NULL;
- sal_Bool bChanged = sal_True;
- const SfxItemSet* pExampleSet = GetTabDialog() ? GetTabDialog()->GetExampleSet() : NULL;
- const SfxItemSet& rOldSet = GetItemSet();
-
- Color aSelectedColor;
- if ( m_aFontColorLB.GetSelectEntry() == m_aTransparentColorName )
- aSelectedColor = Color( COL_TRANSPARENT );
- else
- aSelectedColor = m_aFontColorLB.GetSelectEntryColor();
-
- if ( pOld && pOld->GetValue() == aSelectedColor )
- bChanged = sal_False;
-
- if ( !bChanged )
- bChanged = ( m_aFontColorLB.GetSavedValue() == LISTBOX_ENTRY_NOTFOUND );
-
- if ( !bChanged && pExampleSet &&
- pExampleSet->GetItemState( nWhich, sal_False, (const SfxPoolItem**)&pItem ) == SFX_ITEM_SET &&
- ( (SvxColorItem*)pItem )->GetValue() != aSelectedColor )
- bChanged = sal_True;
-
- sal_Bool bModified = sal_False;
-
- if ( bChanged && m_aFontColorLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND )
- {
- rSet.Put( SvxColorItem( aSelectedColor, nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- return bModified;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharEffectsPage, SelectHdl_Impl, ListBox*, pBox )
-{
- if ( &m_aEmphasisLB == pBox )
- {
- sal_uInt16 nEPos = m_aEmphasisLB.GetSelectEntryPos();
- sal_Bool bEnable = ( nEPos > 0 && nEPos != LISTBOX_ENTRY_NOTFOUND );
- m_aPositionFT.Enable( bEnable );
- m_aPositionLB.Enable( bEnable );
- }
- else if( &m_aReliefLB == pBox)
- {
- sal_Bool bEnable = ( pBox->GetSelectEntryPos() == 0 );
- m_aOutlineBtn.Enable( bEnable );
- m_aShadowBtn.Enable( bEnable );
- }
- else if ( &m_aPositionLB != pBox )
- {
- sal_uInt16 nUPos = m_aUnderlineLB.GetSelectEntryPos(),
- nOPos = m_aOverlineLB.GetSelectEntryPos(),
- nSPos = m_aStrikeoutLB.GetSelectEntryPos();
- sal_Bool bUEnable = ( nUPos > 0 && nUPos != LISTBOX_ENTRY_NOTFOUND );
- sal_Bool bOEnable = ( nOPos > 0 && nOPos != LISTBOX_ENTRY_NOTFOUND );
- m_aUnderlineColorFT.Enable( bUEnable );
- m_aUnderlineColorLB.Enable( bUEnable );
- m_aOverlineColorFT.Enable( bOEnable );
- m_aOverlineColorLB.Enable( bOEnable );
- m_aIndividualWordsBtn.Enable( bUEnable || bOEnable || ( nSPos > 0 && nSPos != LISTBOX_ENTRY_NOTFOUND ) );
- }
- UpdatePreview_Impl();
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharEffectsPage, UpdatePreview_Impl, ListBox*, EMPTYARG )
-{
- bool bEnable = ( ( m_aUnderlineLB.GetSelectEntryPos() > 0 ) ||
- ( m_aOverlineLB.GetSelectEntryPos() > 0 ) ||
- ( m_aStrikeoutLB.GetSelectEntryPos() > 0 ) );
- m_aIndividualWordsBtn.Enable( bEnable );
-
- UpdatePreview_Impl();
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharEffectsPage, CbClickHdl_Impl, CheckBox*, EMPTYARG )
-{
- UpdatePreview_Impl();
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharEffectsPage, TristClickHdl_Impl, TriStateBox*, EMPTYARG )
-{
- UpdatePreview_Impl();
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharEffectsPage, ColorBoxSelectHdl_Impl, ColorListBox*, pBox )
-{
- SvxFont& rFont = GetPreviewFont();
- SvxFont& rCJKFont = GetPreviewCJKFont();
- SvxFont& rCTLFont = GetPreviewCTLFont();
-
- Color aSelectedColor;
- if ( pBox->GetSelectEntry() == m_aTransparentColorName )
- aSelectedColor = Color( COL_TRANSPARENT );
- else
- aSelectedColor = pBox->GetSelectEntryColor();
- rFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
- rCJKFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
- rCTLFont.SetColor( aSelectedColor.GetColor() == COL_AUTO ? Color(COL_BLACK) : aSelectedColor );
-
- m_aPreviewWin.Invalidate();
- return 0;
-}
-// -----------------------------------------------------------------------
-
-int SvxCharEffectsPage::DeactivatePage( SfxItemSet* _pSet )
-{
- if ( _pSet )
- FillItemSet( *_pSet );
- return LEAVE_PAGE;
-}
-
-// -----------------------------------------------------------------------
-
-SfxTabPage* SvxCharEffectsPage::Create( Window* pParent, const SfxItemSet& rSet )
-{
- return new SvxCharEffectsPage( pParent, rSet );
-}
-
-// -----------------------------------------------------------------------
-
-sal_uInt16* SvxCharEffectsPage::GetRanges()
-{
- return pEffectsRanges;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharEffectsPage::Reset( const SfxItemSet& rSet )
-{
- SvxFont& rFont = GetPreviewFont();
- SvxFont& rCJKFont = GetPreviewCJKFont();
- SvxFont& rCTLFont = GetPreviewCTLFont();
-
- sal_Bool bEnable = sal_False;
-
- // Underline
- sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_UNDERLINE );
- rFont.SetUnderline( UNDERLINE_NONE );
- rCJKFont.SetUnderline( UNDERLINE_NONE );
- rCTLFont.SetUnderline( UNDERLINE_NONE );
-
- m_aUnderlineLB.SelectEntryPos( 0 );
- SfxItemState eState = rSet.GetItemState( nWhich );
-
- if ( eState >= SFX_ITEM_DONTCARE )
- {
- if ( eState == SFX_ITEM_DONTCARE )
- m_aUnderlineLB.SetNoSelection();
- else
- {
- const SvxUnderlineItem& rItem = (SvxUnderlineItem&)rSet.Get( nWhich );
- FontUnderline eUnderline = (FontUnderline)rItem.GetValue();
- rFont.SetUnderline( eUnderline );
- rCJKFont.SetUnderline( eUnderline );
- rCTLFont.SetUnderline( eUnderline );
-
- if ( eUnderline != UNDERLINE_NONE )
- {
- for ( sal_uInt16 i = 0; i < m_aUnderlineLB.GetEntryCount(); ++i )
- {
- if ( (FontUnderline)(sal_uLong)m_aUnderlineLB.GetEntryData(i) == eUnderline )
- {
- m_aUnderlineLB.SelectEntryPos(i);
- bEnable = sal_True;
- break;
- }
- }
-
- Color aColor = rItem.GetColor();
- sal_uInt16 nPos = m_aUnderlineColorLB.GetEntryPos( aColor );
-
- if ( LISTBOX_ENTRY_NOTFOUND != nPos )
- m_aUnderlineColorLB.SelectEntryPos( nPos );
- else
- {
- nPos = m_aUnderlineColorLB.GetEntryPos( aColor );
- if ( LISTBOX_ENTRY_NOTFOUND != nPos )
- m_aUnderlineColorLB.SelectEntryPos( nPos );
- else
- m_aUnderlineColorLB.SelectEntryPos(
- m_aUnderlineColorLB.InsertEntry( aColor,
- String( SVX_RES( RID_SVXSTR_COLOR_USER ) ) ) );
- }
- }
- else
- {
- m_aUnderlineColorLB.SelectEntry( Color( COL_AUTO ));
- m_aUnderlineColorLB.Disable();
- }
- }
- }
-
- // Overline
- nWhich = GetWhich( SID_ATTR_CHAR_OVERLINE );
- rFont.SetOverline( UNDERLINE_NONE );
- rCJKFont.SetOverline( UNDERLINE_NONE );
- rCTLFont.SetOverline( UNDERLINE_NONE );
-
- m_aOverlineLB.SelectEntryPos( 0 );
- eState = rSet.GetItemState( nWhich );
-
- if ( eState >= SFX_ITEM_DONTCARE )
- {
- if ( eState == SFX_ITEM_DONTCARE )
- m_aOverlineLB.SetNoSelection();
- else
- {
- const SvxOverlineItem& rItem = (SvxOverlineItem&)rSet.Get( nWhich );
- FontUnderline eOverline = (FontUnderline)rItem.GetValue();
- rFont.SetOverline( eOverline );
- rCJKFont.SetOverline( eOverline );
- rCTLFont.SetOverline( eOverline );
-
- if ( eOverline != UNDERLINE_NONE )
- {
- for ( sal_uInt16 i = 0; i < m_aOverlineLB.GetEntryCount(); ++i )
- {
- if ( (FontUnderline)(sal_uLong)m_aOverlineLB.GetEntryData(i) == eOverline )
- {
- m_aOverlineLB.SelectEntryPos(i);
- bEnable = sal_True;
- break;
- }
- }
-
- Color aColor = rItem.GetColor();
- sal_uInt16 nPos = m_aOverlineColorLB.GetEntryPos( aColor );
-
- if ( LISTBOX_ENTRY_NOTFOUND != nPos )
- m_aOverlineColorLB.SelectEntryPos( nPos );
- else
- {
- nPos = m_aOverlineColorLB.GetEntryPos( aColor );
- if ( LISTBOX_ENTRY_NOTFOUND != nPos )
- m_aOverlineColorLB.SelectEntryPos( nPos );
- else
- m_aOverlineColorLB.SelectEntryPos(
- m_aOverlineColorLB.InsertEntry( aColor,
- String( SVX_RES( RID_SVXSTR_COLOR_USER ) ) ) );
- }
- }
- else
- {
- m_aOverlineColorLB.SelectEntry( Color( COL_AUTO ));
- m_aOverlineColorLB.Disable();
- }
- }
- }
-
- // Strikeout
- nWhich = GetWhich( SID_ATTR_CHAR_STRIKEOUT );
- rFont.SetStrikeout( STRIKEOUT_NONE );
- rCJKFont.SetStrikeout( STRIKEOUT_NONE );
- rCTLFont.SetStrikeout( STRIKEOUT_NONE );
-
- m_aStrikeoutLB.SelectEntryPos( 0 );
- eState = rSet.GetItemState( nWhich );
-
- if ( eState >= SFX_ITEM_DONTCARE )
- {
- if ( eState == SFX_ITEM_DONTCARE )
- m_aStrikeoutLB.SetNoSelection();
- else
- {
- const SvxCrossedOutItem& rItem = (SvxCrossedOutItem&)rSet.Get( nWhich );
- FontStrikeout eStrikeout = (FontStrikeout)rItem.GetValue();
- rFont.SetStrikeout( eStrikeout );
- rCJKFont.SetStrikeout( eStrikeout );
- rCTLFont.SetStrikeout( eStrikeout );
-
- if ( eStrikeout != STRIKEOUT_NONE )
- {
- for ( sal_uInt16 i = 0; i < m_aStrikeoutLB.GetEntryCount(); ++i )
- {
- if ( (FontStrikeout)(sal_uLong)m_aStrikeoutLB.GetEntryData(i) == eStrikeout )
- {
- m_aStrikeoutLB.SelectEntryPos(i);
- bEnable = sal_True;
- break;
- }
- }
- }
- }
- }
-
- // WordLineMode
- nWhich = GetWhich( SID_ATTR_CHAR_WORDLINEMODE );
- switch ( eState )
- {
- case SFX_ITEM_UNKNOWN:
- m_aIndividualWordsBtn.Hide();
- break;
-
- case SFX_ITEM_DISABLED:
- case SFX_ITEM_READONLY:
- m_aIndividualWordsBtn.Disable();
- break;
-
- case SFX_ITEM_DONTCARE:
- m_aIndividualWordsBtn.SetState( STATE_DONTKNOW );
- break;
-
- case SFX_ITEM_DEFAULT:
- case SFX_ITEM_SET:
- {
- const SvxWordLineModeItem& rItem = (SvxWordLineModeItem&)rSet.Get( nWhich );
- rFont.SetWordLineMode( rItem.GetValue() );
- rCJKFont.SetWordLineMode( rItem.GetValue() );
- rCTLFont.SetWordLineMode( rItem.GetValue() );
-
- m_aIndividualWordsBtn.Check( rItem.GetValue() );
- m_aIndividualWordsBtn.Enable( bEnable );
- break;
- }
- }
-
- // Emphasis
- nWhich = GetWhich( SID_ATTR_CHAR_EMPHASISMARK );
- eState = rSet.GetItemState( nWhich );
-
- if ( eState >= SFX_ITEM_DEFAULT )
- {
- const SvxEmphasisMarkItem& rItem = (SvxEmphasisMarkItem&)rSet.Get( nWhich );
- FontEmphasisMark eMark = rItem.GetEmphasisMark();
- rFont.SetEmphasisMark( eMark );
- rCJKFont.SetEmphasisMark( eMark );
- rCTLFont.SetEmphasisMark( eMark );
-
- m_aEmphasisLB.SelectEntryPos( (sal_uInt16)( eMark & EMPHASISMARK_STYLE ) );
- eMark &= ~EMPHASISMARK_STYLE;
- sal_uLong nEntryData = ( eMark == EMPHASISMARK_POS_ABOVE )
- ? CHRDLG_POSITION_OVER
- : ( eMark == EMPHASISMARK_POS_BELOW ) ? CHRDLG_POSITION_UNDER : 0;
-
- for ( sal_uInt16 i = 0; i < m_aPositionLB.GetEntryCount(); i++ )
- {
- if ( nEntryData == (sal_uLong)m_aPositionLB.GetEntryData(i) )
- {
- m_aPositionLB.SelectEntryPos(i);
- break;
- }
- }
- }
- else if ( eState == SFX_ITEM_DONTCARE )
- m_aEmphasisLB.SetNoSelection( );
- else if ( eState == SFX_ITEM_UNKNOWN )
- {
- m_aEmphasisFT.Hide();
- m_aEmphasisLB.Hide();
- }
- else // SFX_ITEM_DISABLED or SFX_ITEM_READONLY
- {
- m_aEmphasisFT.Disable();
- m_aEmphasisLB.Disable();
- }
-
- // the select handler for the underline/overline/strikeout list boxes
-// SelectHdl_Impl( NULL );
- DBG_ASSERT(m_aUnderlineLB.GetSelectHdl() == m_aOverlineLB.GetSelectHdl(),
- "SvxCharEffectsPage::Reset: inconsistence (1)!");
- DBG_ASSERT(m_aUnderlineLB.GetSelectHdl() == m_aStrikeoutLB.GetSelectHdl(),
- "SvxCharEffectsPage::Reset: inconsistence (1)!");
- m_aUnderlineLB.GetSelectHdl().Call(NULL);
- // don't call SelectHdl_Impl directly!
- // in DisableControls, we may have re-reouted the select handler
-
- // the select handler for the emphasis listbox
-// SelectHdl_Impl( &m_aEmphasisLB );
- DBG_ASSERT(m_aEmphasisLB.GetSelectHdl() == LINK(this, SvxCharEffectsPage, SelectHdl_Impl),
- "SvxCharEffectsPage::Reset: inconsistence (2)!");
- m_aEmphasisLB.GetSelectHdl().Call( &m_aEmphasisLB );
- // this is for consistency only. Here it would be allowed to call SelectHdl_Impl directly ...
-
- // Effects
- SvxCaseMap eCaseMap = SVX_CASEMAP_END;
- nWhich = GetWhich( SID_ATTR_CHAR_CASEMAP );
- eState = rSet.GetItemState( nWhich );
- switch ( eState )
- {
- case SFX_ITEM_UNKNOWN:
- m_aEffectsFT.Hide();
- m_aEffects2LB.Hide();
- break;
-
- case SFX_ITEM_DISABLED:
- case SFX_ITEM_READONLY:
- m_aEffectsFT.Disable();
- m_aEffects2LB.Disable();
- break;
-
- case SFX_ITEM_DONTCARE:
- m_aEffects2LB.SetNoSelection();
- break;
-
- case SFX_ITEM_DEFAULT:
- case SFX_ITEM_SET:
- {
- const SvxCaseMapItem& rItem = (const SvxCaseMapItem&)rSet.Get( nWhich );
- eCaseMap = (SvxCaseMap)rItem.GetValue();
- break;
- }
- }
- SetCaseMap_Impl( eCaseMap );
-
- //Relief
- nWhich = GetWhich(SID_ATTR_CHAR_RELIEF);
- eState = rSet.GetItemState( nWhich );
- switch ( eState )
- {
- case SFX_ITEM_UNKNOWN:
- m_aReliefFT.Hide();
- m_aReliefLB.Hide();
- break;
-
- case SFX_ITEM_DISABLED:
- case SFX_ITEM_READONLY:
- m_aReliefFT.Disable();
- m_aReliefLB.Disable();
- break;
-
- case SFX_ITEM_DONTCARE:
- m_aReliefLB.SetNoSelection();
- break;
-
- case SFX_ITEM_DEFAULT:
- case SFX_ITEM_SET:
- {
- const SvxCharReliefItem& rItem = (const SvxCharReliefItem&)rSet.Get( nWhich );
- m_aReliefLB.SelectEntryPos(rItem.GetValue());
- SelectHdl_Impl(&m_aReliefLB);
- break;
- }
- }
-
- // Outline
- nWhich = GetWhich( SID_ATTR_CHAR_CONTOUR );
- eState = rSet.GetItemState( nWhich );
- switch ( eState )
- {
- case SFX_ITEM_UNKNOWN:
- m_aOutlineBtn.Hide();
- break;
-
- case SFX_ITEM_DISABLED:
- case SFX_ITEM_READONLY:
- m_aOutlineBtn.Disable();
- break;
-
- case SFX_ITEM_DONTCARE:
- m_aOutlineBtn.SetState( STATE_DONTKNOW );
- break;
-
- case SFX_ITEM_DEFAULT:
- case SFX_ITEM_SET:
- {
- const SvxContourItem& rItem = (SvxContourItem&)rSet.Get( nWhich );
- m_aOutlineBtn.SetState( (TriState)rItem.GetValue() );
- m_aOutlineBtn.EnableTriState( sal_False );
- break;
- }
- }
-
- // Shadow
- nWhich = GetWhich( SID_ATTR_CHAR_SHADOWED );
- eState = rSet.GetItemState( nWhich );
-
- switch ( eState )
- {
- case SFX_ITEM_UNKNOWN:
- m_aShadowBtn.Hide();
- break;
-
- case SFX_ITEM_DISABLED:
- case SFX_ITEM_READONLY:
- m_aShadowBtn.Disable();
- break;
-
- case SFX_ITEM_DONTCARE:
- m_aShadowBtn.SetState( STATE_DONTKNOW );
- break;
-
- case SFX_ITEM_DEFAULT:
- case SFX_ITEM_SET:
- {
- const SvxShadowedItem& rItem = (SvxShadowedItem&)rSet.Get( nWhich );
- m_aShadowBtn.SetState( (TriState)rItem.GetValue() );
- m_aShadowBtn.EnableTriState( sal_False );
- break;
- }
- }
-
- // Blinking
- nWhich = GetWhich( SID_ATTR_FLASH );
- eState = rSet.GetItemState( nWhich );
-
- switch ( eState )
- {
- case SFX_ITEM_UNKNOWN:
- m_aBlinkingBtn.Hide();
- break;
-
- case SFX_ITEM_DISABLED:
- case SFX_ITEM_READONLY:
- m_aBlinkingBtn.Disable();
- break;
-
- case SFX_ITEM_DONTCARE:
- m_aBlinkingBtn.SetState( STATE_DONTKNOW );
- break;
-
- case SFX_ITEM_DEFAULT:
- case SFX_ITEM_SET:
- {
- const SvxBlinkItem& rItem = (SvxBlinkItem&)rSet.Get( nWhich );
- m_aBlinkingBtn.SetState( (TriState)rItem.GetValue() );
- m_aBlinkingBtn.EnableTriState( sal_False );
- break;
- }
- }
- // Hidden
- nWhich = GetWhich( SID_ATTR_CHAR_HIDDEN );
- eState = rSet.GetItemState( nWhich );
-
- switch ( eState )
- {
- case SFX_ITEM_UNKNOWN:
- m_aHiddenBtn.Hide();
- break;
-
- case SFX_ITEM_DISABLED:
- case SFX_ITEM_READONLY:
- m_aHiddenBtn.Disable();
- break;
-
- case SFX_ITEM_DONTCARE:
- m_aHiddenBtn.SetState( STATE_DONTKNOW );
- break;
-
- case SFX_ITEM_DEFAULT:
- case SFX_ITEM_SET:
- {
- const SvxCharHiddenItem& rItem = (SvxCharHiddenItem&)rSet.Get( nWhich );
- m_aHiddenBtn.SetState( (TriState)rItem.GetValue() );
- m_aHiddenBtn.EnableTriState( sal_False );
- break;
- }
- }
-
- SetPrevFontWidthScale( rSet );
- ResetColor_Impl( rSet );
-
- // preview update
- m_aPreviewWin.Invalidate();
-
- // save this settings
- m_aUnderlineLB.SaveValue();
- m_aUnderlineColorLB.SaveValue();
- m_aOverlineLB.SaveValue();
- m_aOverlineColorLB.SaveValue();
- m_aStrikeoutLB.SaveValue();
- m_aIndividualWordsBtn.SaveValue();
- m_aEmphasisLB.SaveValue();
- m_aPositionLB.SaveValue();
- m_aEffects2LB.SaveValue();
- m_aReliefLB.SaveValue();
- m_aOutlineBtn.SaveValue();
- m_aShadowBtn.SaveValue();
- m_aBlinkingBtn.SaveValue();
- m_aHiddenBtn.SaveValue();
- m_aFontColorLB.SaveValue();
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool SvxCharEffectsPage::FillItemSet( SfxItemSet& rSet )
-{
- const SfxPoolItem* pOld = 0;
- const SfxItemSet& rOldSet = GetItemSet();
- sal_Bool bModified = sal_False;
- bool bChanged = true;
-
- // Underline
- sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_UNDERLINE );
- pOld = GetOldItem( rSet, SID_ATTR_CHAR_UNDERLINE );
- sal_uInt16 nPos = m_aUnderlineLB.GetSelectEntryPos();
- FontUnderline eUnder = (FontUnderline)(sal_uLong)m_aUnderlineLB.GetEntryData( nPos );
-
- if ( pOld )
- {
- //! if there are different underline styles in the selection the
- //! item-state in the 'rOldSet' will be invalid. In this case
- //! changing the underline style will be allowed if a style is
- //! selected in the listbox.
- sal_Bool bAllowChg = LISTBOX_ENTRY_NOTFOUND != nPos &&
- SFX_ITEM_DEFAULT > rOldSet.GetItemState( nWhich, sal_True );
-
- const SvxUnderlineItem& rItem = *( (const SvxUnderlineItem*)pOld );
- if ( (FontUnderline)rItem.GetValue() == eUnder &&
- ( UNDERLINE_NONE == eUnder || rItem.GetColor() == m_aUnderlineColorLB.GetSelectEntryColor() ) &&
- ! bAllowChg )
- bChanged = false;
- }
-
- if ( bChanged )
- {
- SvxUnderlineItem aNewItem( eUnder, nWhich );
- aNewItem.SetColor( m_aUnderlineColorLB.GetSelectEntryColor() );
- rSet.Put( aNewItem );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = true;
-
- // Overline
- nWhich = GetWhich( SID_ATTR_CHAR_OVERLINE );
- pOld = GetOldItem( rSet, SID_ATTR_CHAR_OVERLINE );
- nPos = m_aOverlineLB.GetSelectEntryPos();
- FontUnderline eOver = (FontUnderline)(sal_uLong)m_aOverlineLB.GetEntryData( nPos );
-
- if ( pOld )
- {
- //! if there are different underline styles in the selection the
- //! item-state in the 'rOldSet' will be invalid. In this case
- //! changing the underline style will be allowed if a style is
- //! selected in the listbox.
- sal_Bool bAllowChg = LISTBOX_ENTRY_NOTFOUND != nPos &&
- SFX_ITEM_DEFAULT > rOldSet.GetItemState( nWhich, sal_True );
-
- const SvxOverlineItem& rItem = *( (const SvxOverlineItem*)pOld );
- if ( (FontUnderline)rItem.GetValue() == eOver &&
- ( UNDERLINE_NONE == eOver || rItem.GetColor() == m_aOverlineColorLB.GetSelectEntryColor() ) &&
- ! bAllowChg )
- bChanged = false;
- }
-
- if ( bChanged )
- {
- SvxOverlineItem aNewItem( eOver, nWhich );
- aNewItem.SetColor( m_aOverlineColorLB.GetSelectEntryColor() );
- rSet.Put( aNewItem );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = true;
-
- // Strikeout
- nWhich = GetWhich( SID_ATTR_CHAR_STRIKEOUT );
- pOld = GetOldItem( rSet, SID_ATTR_CHAR_STRIKEOUT );
- nPos = m_aStrikeoutLB.GetSelectEntryPos();
- FontStrikeout eStrike = (FontStrikeout)(sal_uLong)m_aStrikeoutLB.GetEntryData( nPos );
-
- if ( pOld )
- {
- //! if there are different strikeout styles in the selection the
- //! item-state in the 'rOldSet' will be invalid. In this case
- //! changing the strikeout style will be allowed if a style is
- //! selected in the listbox.
- sal_Bool bAllowChg = LISTBOX_ENTRY_NOTFOUND != nPos &&
- SFX_ITEM_DEFAULT > rOldSet.GetItemState( nWhich, sal_True );
-
- const SvxCrossedOutItem& rItem = *( (const SvxCrossedOutItem*)pOld );
- if ( !m_aStrikeoutLB.IsEnabled()
- || ((FontStrikeout)rItem.GetValue() == eStrike && !bAllowChg) )
- bChanged = false;
- }
-
- if ( bChanged )
- {
- rSet.Put( SvxCrossedOutItem( eStrike, nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = true;
-
- // Individual words
- nWhich = GetWhich( SID_ATTR_CHAR_WORDLINEMODE );
- pOld = GetOldItem( rSet, SID_ATTR_CHAR_WORDLINEMODE );
-
- if ( pOld )
- {
- const SvxWordLineModeItem& rItem = *( (const SvxWordLineModeItem*)pOld );
- if ( rItem.GetValue() == m_aIndividualWordsBtn.IsChecked() )
- bChanged = false;
- }
-
- if ( rOldSet.GetItemState( nWhich ) == SFX_ITEM_DONTCARE &&
- m_aIndividualWordsBtn.IsChecked() == m_aIndividualWordsBtn.GetSavedValue() )
- bChanged = false;
-
- if ( bChanged )
- {
- rSet.Put( SvxWordLineModeItem( m_aIndividualWordsBtn.IsChecked(), nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = true;
-
- // Emphasis
- nWhich = GetWhich( SID_ATTR_CHAR_EMPHASISMARK );
- pOld = GetOldItem( rSet, SID_ATTR_CHAR_EMPHASISMARK );
- sal_uInt16 nMarkPos = m_aEmphasisLB.GetSelectEntryPos();
- sal_uInt16 nPosPos = m_aPositionLB.GetSelectEntryPos();
- FontEmphasisMark eMark = (FontEmphasisMark)nMarkPos;
- if ( m_aPositionLB.IsEnabled() )
- {
- eMark |= ( CHRDLG_POSITION_UNDER == (sal_uLong)m_aPositionLB.GetEntryData( nPosPos ) )
- ? EMPHASISMARK_POS_BELOW : EMPHASISMARK_POS_ABOVE;
- }
-
- if ( pOld )
- {
- if( rOldSet.GetItemState( nWhich ) != SFX_ITEM_DONTCARE )
- {
- const SvxEmphasisMarkItem& rItem = *( (const SvxEmphasisMarkItem*)pOld );
- if ( rItem.GetEmphasisMark() == eMark )
- bChanged = false;
- }
- }
-
- if ( rOldSet.GetItemState( nWhich ) == SFX_ITEM_DONTCARE &&
- m_aEmphasisLB.GetSavedValue() == nMarkPos && m_aPositionLB.GetSavedValue() == nPosPos )
- bChanged = false;
-
- if ( bChanged )
- {
- rSet.Put( SvxEmphasisMarkItem( eMark, nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = true;
-
- // Effects
- nWhich = GetWhich( SID_ATTR_CHAR_CASEMAP );
- pOld = GetOldItem( rSet, SID_ATTR_CHAR_CASEMAP );
- SvxCaseMap eCaseMap = SVX_CASEMAP_NOT_MAPPED;
- bool bChecked = false;
- sal_uInt16 nCapsPos = m_aEffects2LB.GetSelectEntryPos();
- if ( nCapsPos != LISTBOX_ENTRY_NOTFOUND )
- {
- eCaseMap = (SvxCaseMap)nCapsPos;
- bChecked = true;
- }
-
- if ( pOld )
- {
- //! if there are different effect styles in the selection the
- //! item-state in the 'rOldSet' will be invalid. In this case
- //! changing the effect style will be allowed if a style is
- //! selected in the listbox.
- sal_Bool bAllowChg = LISTBOX_ENTRY_NOTFOUND != nPos &&
- SFX_ITEM_DEFAULT > rOldSet.GetItemState( nWhich, sal_True );
-
- const SvxCaseMapItem& rItem = *( (const SvxCaseMapItem*)pOld );
- if ( (SvxCaseMap)rItem.GetValue() == eCaseMap && !bAllowChg )
- bChanged = false;
- }
-
- if ( bChanged && bChecked )
- {
- rSet.Put( SvxCaseMapItem( eCaseMap, nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = true;
-
- //Relief
- nWhich = GetWhich(SID_ATTR_CHAR_RELIEF);
- if(m_aReliefLB.GetSelectEntryPos() != m_aReliefLB.GetSavedValue())
- {
- m_aReliefLB.SaveValue();
- SvxCharReliefItem aRelief((FontRelief)m_aReliefLB.GetSelectEntryPos(), nWhich);
- rSet.Put(aRelief);
- }
-
- // Outline
- const SfxItemSet* pExampleSet = GetTabDialog() ? GetTabDialog()->GetExampleSet() : NULL;
- nWhich = GetWhich( SID_ATTR_CHAR_CONTOUR );
- pOld = GetOldItem( rSet, SID_ATTR_CHAR_CONTOUR );
- TriState eState = m_aOutlineBtn.GetState();
- const SfxPoolItem* pItem;
-
- if ( pOld )
- {
- const SvxContourItem& rItem = *( (const SvxContourItem*)pOld );
- if ( rItem.GetValue() == StateToAttr( eState ) && m_aOutlineBtn.GetSavedValue() == eState )
- bChanged = false;
- }
-
- if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
- !StateToAttr( eState ) && ( (SvxContourItem*)pItem )->GetValue() )
- bChanged = true;
-
- if ( bChanged && eState != STATE_DONTKNOW )
- {
- rSet.Put( SvxContourItem( StateToAttr( eState ), nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = true;
-
- // Shadow
- nWhich = GetWhich( SID_ATTR_CHAR_SHADOWED );
- pOld = GetOldItem( rSet, SID_ATTR_CHAR_SHADOWED );
- eState = m_aShadowBtn.GetState();
-
- if ( pOld )
- {
- const SvxShadowedItem& rItem = *( (const SvxShadowedItem*)pOld );
- if ( rItem.GetValue() == StateToAttr( eState ) && m_aShadowBtn.GetSavedValue() == eState )
- bChanged = false;
- }
-
- if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
- !StateToAttr( eState ) && ( (SvxShadowedItem*)pItem )->GetValue() )
- bChanged = true;
-
- if ( bChanged && eState != STATE_DONTKNOW )
- {
- rSet.Put( SvxShadowedItem( StateToAttr( eState ), nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = true;
-
- // Blinking
- nWhich = GetWhich( SID_ATTR_FLASH );
- pOld = GetOldItem( rSet, SID_ATTR_FLASH );
- eState = m_aBlinkingBtn.GetState();
-
- if ( pOld )
- {
- const SvxBlinkItem& rItem = *( (const SvxBlinkItem*)pOld );
- if ( rItem.GetValue() == StateToAttr( eState ) && m_aBlinkingBtn.GetSavedValue() == eState )
- bChanged = false;
- }
-
- if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
- !StateToAttr( eState ) && ( (SvxBlinkItem*)pItem )->GetValue() )
- bChanged = true;
-
- if ( bChanged && eState != STATE_DONTKNOW )
- {
- rSet.Put( SvxBlinkItem( StateToAttr( eState ), nWhich ) );
- bModified = true;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- // Hidden
- nWhich = GetWhich( SID_ATTR_CHAR_HIDDEN );
- pOld = GetOldItem( rSet, SID_ATTR_CHAR_HIDDEN );
- eState = m_aHiddenBtn.GetState();
- bChanged = true;
-
- if ( pOld )
- {
- const SvxCharHiddenItem& rItem = *( (const SvxCharHiddenItem*)pOld );
- if ( rItem.GetValue() == StateToAttr( eState ) && m_aHiddenBtn.GetSavedValue() == eState )
- bChanged = false;
- }
-
- if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET &&
- !StateToAttr( eState ) && ( (SvxCharHiddenItem*)pItem )->GetValue() )
- bChanged = true;
-
- if ( bChanged && eState != STATE_DONTKNOW )
- {
- rSet.Put( SvxCharHiddenItem( StateToAttr( eState ), nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bModified |= FillItemSetColor_Impl( rSet );
-
- return bModified;
-}
-
-void SvxCharEffectsPage::DisableControls( sal_uInt16 nDisable )
-{
- if ( ( DISABLE_CASEMAP & nDisable ) == DISABLE_CASEMAP )
- {
- m_aEffectsFT.Disable();
- m_aEffects2LB.Disable();
- }
-
- if ( ( DISABLE_WORDLINE & nDisable ) == DISABLE_WORDLINE )
- m_aIndividualWordsBtn.Disable();
-
- if ( ( DISABLE_BLINK & nDisable ) == DISABLE_BLINK )
- m_aBlinkingBtn.Disable();
-
- if ( ( DISABLE_UNDERLINE_COLOR & nDisable ) == DISABLE_UNDERLINE_COLOR )
- {
- // disable the controls
- m_aUnderlineColorFT.Disable( );
- m_aUnderlineColorLB.Disable( );
- // and reroute the selection handler of the controls which normally would affect the color box dis-/enabling
- m_aUnderlineLB.SetSelectHdl(LINK(this, SvxCharEffectsPage, UpdatePreview_Impl));
- m_aStrikeoutLB.SetSelectHdl(LINK(this, SvxCharEffectsPage, UpdatePreview_Impl));
- }
-}
-
-void SvxCharEffectsPage::EnableFlash()
-{
- if ( !( ( m_nHtmlMode & HTMLMODE_ON ) && !( m_nHtmlMode & HTMLMODE_BLINK ) ) )
- m_aBlinkingBtn.Show();
-}
-
-// -----------------------------------------------------------------------
-void SvxCharEffectsPage::SetPreviewBackgroundToCharacter()
-{
- m_bPreviewBackgroundToCharacter = sal_True;
-}
-
-// -----------------------------------------------------------------------
-void SvxCharEffectsPage::PageCreated (SfxAllItemSet aSet)
-{
- SFX_ITEMSET_ARG (&aSet,pDisableCtlItem,SfxUInt16Item,SID_DISABLE_CTL,sal_False);
- SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_FLAG_TYPE,sal_False);
- if (pDisableCtlItem)
- DisableControls(pDisableCtlItem->GetValue());
-
- if (pFlagItem)
- {
- sal_uInt32 nFlags=pFlagItem->GetValue();
- if ( ( nFlags & SVX_ENABLE_FLASH ) == SVX_ENABLE_FLASH )
- EnableFlash();
- if ( ( nFlags & SVX_PREVIEW_CHARACTER ) == SVX_PREVIEW_CHARACTER )
- SetPreviewBackgroundToCharacter();
- }
-}
-
-// class SvxCharPositionPage ---------------------------------------------
-
-SvxCharPositionPage::SvxCharPositionPage( Window* pParent, const SfxItemSet& rInSet ) :
-
- SvxCharBasePage( pParent, CUI_RES( RID_SVXPAGE_CHAR_POSITION ), rInSet, WIN_POS_PREVIEW, FT_POS_FONTTYPE ),
-
- m_aPositionLine ( this, CUI_RES( FL_POSITION ) ),
- m_aHighPosBtn ( this, CUI_RES( RB_HIGHPOS ) ),
- m_aNormalPosBtn ( this, CUI_RES( RB_NORMALPOS ) ),
- m_aLowPosBtn ( this, CUI_RES( RB_LOWPOS ) ),
- m_aHighLowFT ( this, CUI_RES( FT_HIGHLOW ) ),
- m_aHighLowEdit ( this, CUI_RES( ED_HIGHLOW ) ),
- m_aHighLowRB ( this, CUI_RES( CB_HIGHLOW ) ),
- m_aFontSizeFT ( this, CUI_RES( FT_FONTSIZE ) ),
- m_aFontSizeEdit ( this, CUI_RES( ED_FONTSIZE ) ),
- m_aRotationScalingFL( this, CUI_RES( FL_ROTATION_SCALING ) ),
- m_aScalingFL ( this, CUI_RES( FL_SCALING ) ),
- m_a0degRB ( this, CUI_RES( RB_0_DEG ) ),
- m_a90degRB ( this, CUI_RES( RB_90_DEG ) ),
- m_a270degRB ( this, CUI_RES( RB_270_DEG ) ),
- m_aFitToLineCB ( this, CUI_RES( CB_FIT_TO_LINE ) ),
- m_aScaleWidthFT ( this, CUI_RES( FT_SCALE_WIDTH ) ),
- m_aScaleWidthMF ( this, CUI_RES( MF_SCALE_WIDTH ) ),
-
- m_aKerningLine ( this, CUI_RES( FL_KERNING2 ) ),
- m_aKerningLB ( this, CUI_RES( LB_KERNING2 ) ),
- m_aKerningFT ( this, CUI_RES( FT_KERNING2 ) ),
- m_aKerningEdit ( this, CUI_RES( ED_KERNING2 ) ),
- m_aPairKerningBtn ( this, CUI_RES( CB_PAIRKERNING ) ),
-
- m_nSuperEsc ( (short)DFLT_ESC_SUPER ),
- m_nSubEsc ( (short)DFLT_ESC_SUB ),
- m_nScaleWidthItemSetVal ( 100 ),
- m_nScaleWidthInitialVal ( 100 ),
- m_nSuperProp ( (sal_uInt8)DFLT_ESC_PROP ),
- m_nSubProp ( (sal_uInt8)DFLT_ESC_PROP )
-{
- FreeResource();
- Initialize();
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharPositionPage::Initialize()
-{
- // to handle the changes of the other pages
- SetExchangeSupport();
-
- GetPreviewFont().SetSize( Size( 0, 240 ) );
- GetPreviewCJKFont().SetSize( Size( 0, 240 ) );
- GetPreviewCTLFont().SetSize( Size( 0, 240 ) );
-
- m_aNormalPosBtn.Check();
- PositionHdl_Impl( &m_aNormalPosBtn );
- m_aKerningLB.SelectEntryPos( 0 );
- KerningSelectHdl_Impl( NULL );
-
- Link aLink = LINK( this, SvxCharPositionPage, PositionHdl_Impl );
- m_aHighPosBtn.SetClickHdl( aLink );
- m_aNormalPosBtn.SetClickHdl( aLink );
- m_aLowPosBtn.SetClickHdl( aLink );
-
- aLink = LINK( this, SvxCharPositionPage, RotationHdl_Impl );
- m_a0degRB .SetClickHdl( aLink );
- m_a90degRB .SetClickHdl( aLink );
- m_a270degRB.SetClickHdl( aLink );
-
- aLink = LINK( this, SvxCharPositionPage, FontModifyHdl_Impl );
- m_aHighLowEdit.SetModifyHdl( aLink );
- m_aFontSizeEdit.SetModifyHdl( aLink );
-
- aLink = LINK( this, SvxCharPositionPage, LoseFocusHdl_Impl );
- m_aHighLowEdit.SetLoseFocusHdl( aLink );
- m_aFontSizeEdit.SetLoseFocusHdl( aLink );
-
- m_aHighLowRB.SetClickHdl( LINK( this, SvxCharPositionPage, AutoPositionHdl_Impl ) );
- m_aFitToLineCB.SetClickHdl( LINK( this, SvxCharPositionPage, FitToLineHdl_Impl ) );
- m_aKerningLB.SetSelectHdl( LINK( this, SvxCharPositionPage, KerningSelectHdl_Impl ) );
- m_aKerningEdit.SetModifyHdl( LINK( this, SvxCharPositionPage, KerningModifyHdl_Impl ) );
- m_aPairKerningBtn.SetClickHdl( LINK( this, SvxCharPositionPage, PairKerningHdl_Impl ) );
- m_aScaleWidthMF.SetModifyHdl( LINK( this, SvxCharPositionPage, ScaleWidthModifyHdl_Impl ) );
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharPositionPage::UpdatePreview_Impl( sal_uInt8 nProp, sal_uInt8 nEscProp, short nEsc )
-{
- SetPrevFontEscapement( nProp, nEscProp, nEsc );
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharPositionPage::SetEscapement_Impl( sal_uInt16 nEsc )
-{
- SvxEscapementItem aEscItm( (SvxEscapement)nEsc, SID_ATTR_CHAR_ESCAPEMENT );
-
- if ( SVX_ESCAPEMENT_SUPERSCRIPT == nEsc )
- {
- aEscItm.GetEsc() = m_nSuperEsc;
- aEscItm.GetProp() = m_nSuperProp;
- }
- else if ( SVX_ESCAPEMENT_SUBSCRIPT == nEsc )
- {
- aEscItm.GetEsc() = m_nSubEsc;
- aEscItm.GetProp() = m_nSubProp;
- }
-
- short nFac = aEscItm.GetEsc() < 0 ? -1 : 1;
-
- m_aHighLowEdit.SetValue( aEscItm.GetEsc() * nFac );
- m_aFontSizeEdit.SetValue( aEscItm.GetProp() );
-
- if ( SVX_ESCAPEMENT_OFF == nEsc )
- {
- m_aHighLowFT.Disable();
- m_aHighLowEdit.Disable();
- m_aFontSizeFT.Disable();
- m_aFontSizeEdit.Disable();
- m_aHighLowRB.Disable();
- }
- else
- {
- m_aFontSizeFT.Enable();
- m_aFontSizeEdit.Enable();
- m_aHighLowRB.Enable();
-
- if ( !m_aHighLowRB.IsChecked() )
- {
- m_aHighLowFT.Enable();
- m_aHighLowEdit.Enable();
- }
- else
- AutoPositionHdl_Impl( &m_aHighLowRB );
- }
-
- UpdatePreview_Impl( 100, aEscItm.GetProp(), aEscItm.GetEsc() );
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharPositionPage, PositionHdl_Impl, RadioButton*, pBtn )
-{
- sal_uInt16 nEsc = SVX_ESCAPEMENT_OFF; // also when pBtn == NULL
-
- if ( &m_aHighPosBtn == pBtn )
- nEsc = SVX_ESCAPEMENT_SUPERSCRIPT;
- else if ( &m_aLowPosBtn == pBtn )
- nEsc = SVX_ESCAPEMENT_SUBSCRIPT;
-
- SetEscapement_Impl( nEsc );
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharPositionPage, RotationHdl_Impl, RadioButton*, pBtn )
-{
- sal_Bool bEnable = sal_False;
- if (&m_a90degRB == pBtn || &m_a270degRB == pBtn)
- bEnable = sal_True;
- else
- OSL_ENSURE( &m_a0degRB == pBtn, "unexpected button" );
- m_aFitToLineCB.Enable( bEnable );
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharPositionPage, FontModifyHdl_Impl, MetricField*, EMPTYARG )
-{
- sal_uInt8 nEscProp = (sal_uInt8)m_aFontSizeEdit.GetValue();
- short nEsc = (short)m_aHighLowEdit.GetValue();
- nEsc *= m_aLowPosBtn.IsChecked() ? -1 : 1;
- UpdatePreview_Impl( 100, nEscProp, nEsc );
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharPositionPage, AutoPositionHdl_Impl, CheckBox*, pBox )
-{
- if ( pBox->IsChecked() )
- {
- m_aHighLowFT.Disable();
- m_aHighLowEdit.Disable();
- }
- else
- PositionHdl_Impl( m_aHighPosBtn.IsChecked() ? &m_aHighPosBtn
- : m_aLowPosBtn.IsChecked() ? &m_aLowPosBtn
- : &m_aNormalPosBtn );
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharPositionPage, FitToLineHdl_Impl, CheckBox*, pBox )
-{
- if ( &m_aFitToLineCB == pBox)
- {
- sal_uInt16 nVal = m_nScaleWidthInitialVal;
- if (m_aFitToLineCB.IsChecked())
- nVal = m_nScaleWidthItemSetVal;
- m_aScaleWidthMF.SetValue( nVal );
-
- m_aPreviewWin.SetFontWidthScale( nVal );
- }
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharPositionPage, KerningSelectHdl_Impl, ListBox*, EMPTYARG )
-{
- if ( m_aKerningLB.GetSelectEntryPos() > 0 )
- {
- m_aKerningFT.Enable();
- m_aKerningEdit.Enable();
-
- if ( m_aKerningLB.GetSelectEntryPos() == 2 )
- {
- // Condensed -> max value == 1/6 of the current font height
- SvxFont& rFont = GetPreviewFont();
- long nMax = rFont.GetSize().Height() / 6;
- m_aKerningEdit.SetMax( m_aKerningEdit.Normalize( nMax ), FUNIT_TWIP );
- m_aKerningEdit.SetLast( m_aKerningEdit.GetMax( m_aKerningEdit.GetUnit() ) );
- }
- else
- {
- m_aKerningEdit.SetMax( 9999 );
- m_aKerningEdit.SetLast( 9999 );
- }
- }
- else
- {
- m_aKerningEdit.SetValue( 0 );
- m_aKerningFT.Disable();
- m_aKerningEdit.Disable();
- }
-
- KerningModifyHdl_Impl( NULL );
-
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharPositionPage, KerningModifyHdl_Impl, MetricField*, EMPTYARG )
-{
- long nVal = static_cast<long>(m_aKerningEdit.GetValue());
- nVal = LogicToLogic( nVal, MAP_POINT, MAP_TWIP );
- long nKern = (short)m_aKerningEdit.Denormalize( nVal );
-
- // Condensed? -> then negative
- if ( m_aKerningLB.GetSelectEntryPos() == 2 )
- nKern *= -1;
-
- SvxFont& rFont = GetPreviewFont();
- SvxFont& rCJKFont = GetPreviewCJKFont();
- SvxFont& rCTLFont = GetPreviewCTLFont();
-
- rFont.SetFixKerning( (short)nKern );
- rCJKFont.SetFixKerning( (short)nKern );
- rCTLFont.SetFixKerning( (short)nKern );
- m_aPreviewWin.Invalidate();
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharPositionPage, PairKerningHdl_Impl, CheckBox*, EMPTYARG )
-{
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharPositionPage, LoseFocusHdl_Impl, MetricField*, pField )
-{
-#ifdef DBG_UTIL
- sal_Bool bHigh = m_aHighPosBtn.IsChecked();
-#endif
- sal_Bool bLow = m_aLowPosBtn.IsChecked();
- DBG_ASSERT( bHigh || bLow, "normal position is not valid" );
-
- if ( &m_aHighLowEdit == pField )
- {
- if ( bLow )
- m_nSubEsc = (short)m_aHighLowEdit.GetValue() * -1;
- else
- m_nSuperEsc = (short)m_aHighLowEdit.GetValue();
- }
- else if ( &m_aFontSizeEdit == pField )
- {
- if ( bLow )
- m_nSubProp = (sal_uInt8)m_aFontSizeEdit.GetValue();
- else
- m_nSuperProp = (sal_uInt8)m_aFontSizeEdit.GetValue();
- }
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharPositionPage, ScaleWidthModifyHdl_Impl, MetricField*, EMPTYARG )
-{
- m_aPreviewWin.SetFontWidthScale( sal_uInt16( m_aScaleWidthMF.GetValue() ) );
-
- return 0;
-}
-
-void SvxCharPositionPage::ActivatePage( const SfxItemSet& rSet )
-{
- //update the preview
- SvxCharBasePage::ActivatePage( rSet );
-
- //the only thing that has to be checked is the max. allowed value for the
- //condense edit field
- if ( m_aKerningLB.GetSelectEntryPos() == 2 )
- {
- // Condensed -> max value == 1/6 of the current font height
- SvxFont& rFont = GetPreviewFont();
- long nMax = rFont.GetSize().Height() / 6;
- long nKern = (short)m_aKerningEdit.Denormalize( LogicToLogic( static_cast<long>(m_aKerningEdit.GetValue()), MAP_POINT, MAP_TWIP ) );
- m_aKerningEdit.SetMax( m_aKerningEdit.Normalize( nKern > nMax ? nKern : nMax ), FUNIT_TWIP );
- m_aKerningEdit.SetLast( m_aKerningEdit.GetMax( m_aKerningEdit.GetUnit() ) );
- }
-}
-
-// -----------------------------------------------------------------------
-
-int SvxCharPositionPage::DeactivatePage( SfxItemSet* _pSet )
-{
- if ( _pSet )
- FillItemSet( *_pSet );
- return LEAVE_PAGE;
-}
-
-// -----------------------------------------------------------------------
-
-SfxTabPage* SvxCharPositionPage::Create( Window* pParent, const SfxItemSet& rSet )
-{
- return new SvxCharPositionPage( pParent, rSet );
-}
-
-// -----------------------------------------------------------------------
-
-sal_uInt16* SvxCharPositionPage::GetRanges()
-{
- return pPositionRanges;
-}
-
-// -----------------------------------------------------------------------
-void SvxCharPositionPage::Reset( const SfxItemSet& rSet )
-{
- String sUser = GetUserData();
-
- if ( sUser.Len() )
- {
- m_nSuperEsc = (short)sUser.GetToken( 0 ).ToInt32();
- m_nSubEsc = (short)sUser.GetToken( 1 ).ToInt32();
- m_nSuperProp = (sal_uInt8)sUser.GetToken( 2 ).ToInt32();
- m_nSubProp = (sal_uInt8)sUser.GetToken( 3 ).ToInt32();
- }
-
- short nEsc = 0;
- sal_uInt8 nEscProp = 100;
- sal_uInt8 nProp = 100;
-
- m_aHighLowFT.Disable();
- m_aHighLowEdit.Disable();
- m_aFontSizeFT.Disable();
- m_aFontSizeEdit.Disable();
-
- SvxFont& rFont = GetPreviewFont();
- SvxFont& rCJKFont = GetPreviewCJKFont();
- SvxFont& rCTLFont = GetPreviewCTLFont();
- sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_ESCAPEMENT );
-
- if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_DEFAULT )
- {
- const SvxEscapementItem& rItem = (SvxEscapementItem&)rSet.Get( nWhich );
- nEsc = rItem.GetEsc();
- nEscProp = rItem.GetProp();
-
- if ( nEsc != 0 )
- {
- m_aHighLowFT.Enable();
- m_aHighLowEdit.Enable();
- m_aFontSizeFT.Enable();
- m_aFontSizeEdit.Enable();
-
- short nFac;
- sal_Bool bAutomatic(sal_False);
-
- if ( nEsc > 0 )
- {
- nFac = 1;
- m_aHighPosBtn.Check( sal_True );
- if ( nEsc == DFLT_ESC_AUTO_SUPER )
- {
- nEsc = DFLT_ESC_SUPER;
- bAutomatic = sal_True;
- }
- }
- else
- {
- nFac = -1;
- m_aLowPosBtn.Check( sal_True );
- if ( nEsc == DFLT_ESC_AUTO_SUB )
- {
- nEsc = DFLT_ESC_SUB;
- bAutomatic = sal_True;
- }
- }
- if (!m_aHighLowRB.IsEnabled())
- {
- m_aHighLowRB.Enable();
- }
- m_aHighLowRB.Check(bAutomatic);
-
- if ( m_aHighLowRB.IsChecked() )
- {
- m_aHighLowFT.Disable();
- m_aHighLowEdit.Disable();
- }
- m_aHighLowEdit.SetValue( m_aHighLowEdit.Normalize( nFac * nEsc ) );
- }
- else
- {
- m_aNormalPosBtn.Check( sal_True );
- m_aHighLowRB.Check( sal_True );
- PositionHdl_Impl( NULL );
- }
- //the height has to be set after the handler is called to keep the value also if the escapement is zero
- m_aFontSizeEdit.SetValue( m_aFontSizeEdit.Normalize( nEscProp ) );
- }
- else
- {
- m_aHighPosBtn.Check( sal_False );
- m_aNormalPosBtn.Check( sal_False );
- m_aLowPosBtn.Check( sal_False );
- }
-
- // BspFont setzen
- SetPrevFontEscapement( nProp, nEscProp, nEsc );
-
- // Kerning
- nWhich = GetWhich( SID_ATTR_CHAR_KERNING );
-
- if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_DEFAULT )
- {
- const SvxKerningItem& rItem = (SvxKerningItem&)rSet.Get( nWhich );
- SfxMapUnit eUnit = rSet.GetPool()->GetMetric( nWhich );
- MapUnit eOrgUnit = (MapUnit)eUnit;
- MapUnit ePntUnit( MAP_POINT );
- long nBig = static_cast<long>(m_aKerningEdit.Normalize( static_cast<long>(rItem.GetValue()) ));
- long nKerning = LogicToLogic( nBig, eOrgUnit, ePntUnit );
-
- // Kerning am Font setzen, vorher in Twips umrechnen
- long nKern = LogicToLogic( rItem.GetValue(), (MapUnit)eUnit, MAP_TWIP );
- rFont.SetFixKerning( (short)nKern );
- rCJKFont.SetFixKerning( (short)nKern );
- rCTLFont.SetFixKerning( (short)nKern );
-
- if ( nKerning > 0 )
- {
- m_aKerningLB.SelectEntryPos( LW_GESPERRT );
- }
- else if ( nKerning < 0 )
- {
- m_aKerningLB.SelectEntryPos( LW_SCHMAL );
- nKerning = -nKerning;
- }
- else
- {
- nKerning = 0;
- m_aKerningLB.SelectEntryPos( LW_NORMAL );
- }
- //enable/disable and set min/max of the Edit
- KerningSelectHdl_Impl(&m_aKerningLB);
- //the attribute value must be displayed also if it's above the maximum allowed value
- long nVal = static_cast<long>(m_aKerningEdit.GetMax());
- if(nVal < nKerning)
- m_aKerningEdit.SetMax( nKerning );
- m_aKerningEdit.SetValue( nKerning );
- }
- else
- m_aKerningEdit.SetText( String() );
-
- // Pair kerning
- nWhich = GetWhich( SID_ATTR_CHAR_AUTOKERN );
-
- if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_DEFAULT )
- {
- const SvxAutoKernItem& rItem = (SvxAutoKernItem&)rSet.Get( nWhich );
- m_aPairKerningBtn.Check( rItem.GetValue() );
- }
- else
- m_aPairKerningBtn.Check( sal_False );
-
- // Scale Width
- nWhich = GetWhich( SID_ATTR_CHAR_SCALEWIDTH );
- if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_DEFAULT )
- {
- const SvxCharScaleWidthItem& rItem = ( SvxCharScaleWidthItem& ) rSet.Get( nWhich );
- m_nScaleWidthInitialVal = rItem.GetValue();
- m_aScaleWidthMF.SetValue( m_nScaleWidthInitialVal );
- }
- else
- m_aScaleWidthMF.SetValue( 100 );
-
- nWhich = GetWhich( SID_ATTR_CHAR_WIDTH_FIT_TO_LINE );
- if ( rSet.GetItemState( nWhich ) >= SFX_ITEM_DEFAULT )
- m_nScaleWidthItemSetVal = ((SfxUInt16Item&) rSet.Get( nWhich )).GetValue();
-
- // Rotation
- nWhich = GetWhich( SID_ATTR_CHAR_ROTATED );
- SfxItemState eState = rSet.GetItemState( nWhich );
- if( SFX_ITEM_UNKNOWN == eState )
- {
- m_aRotationScalingFL.Hide();
- m_aScalingFL.Show();
- m_a0degRB.Hide();
- m_a90degRB.Hide();
- m_a270degRB.Hide();
- m_aFitToLineCB.Hide();
- m_aFitToLineCB .Hide();
-
-
- // move the following controls upwards
- Window* aCntrlArr[] = {
- &m_aScaleWidthFT, &m_aScaleWidthMF, &m_aKerningLine,
- &m_aKerningLB, &m_aKerningFT, &m_aKerningEdit, &m_aPairKerningBtn,
- 0 };
-
- long nDiff = m_aScaleWidthMF.GetPosPixel().Y() -
- m_a0degRB.GetPosPixel().Y();
-
- for( Window** ppW = aCntrlArr; *ppW; ++ppW )
- {
- Point aPnt( (*ppW)->GetPosPixel() );
- aPnt.Y() -= nDiff;
- (*ppW)->SetPosPixel( aPnt );
- }
- }
- else
- {
- m_aScalingFL.Hide();
-
- Link aOldLink( m_aFitToLineCB.GetClickHdl() );
- m_aFitToLineCB.SetClickHdl( Link() );
- if( eState >= SFX_ITEM_DEFAULT )
- {
- const SvxCharRotateItem& rItem =
- (SvxCharRotateItem&) rSet.Get( nWhich );
- if (rItem.IsBottomToTop())
- m_a90degRB.Check( sal_True );
- else if (rItem.IsTopToBotton())
- m_a270degRB.Check( sal_True );
- else
- {
- DBG_ASSERT( 0 == rItem.GetValue(), "incorrect value" );
- m_a0degRB.Check( sal_True );
- }
- m_aFitToLineCB.Check( rItem.IsFitToLine() );
- }
- else
- {
- if( eState == SFX_ITEM_DONTCARE )
- {
- m_a0degRB.Check( sal_False );
- m_a90degRB.Check( sal_False );
- m_a270degRB.Check( sal_False );
- }
- else
- m_a0degRB.Check( sal_True );
-
- m_aFitToLineCB.Check( sal_False );
- }
- m_aFitToLineCB.SetClickHdl( aOldLink );
- m_aFitToLineCB.Enable( !m_a0degRB.IsChecked() );
-
- // is this value set?
- if( SFX_ITEM_UNKNOWN == rSet.GetItemState( GetWhich(
- SID_ATTR_CHAR_WIDTH_FIT_TO_LINE ) ))
- m_aFitToLineCB.Hide();
- }
-
- m_aHighPosBtn.SaveValue();
- m_aNormalPosBtn.SaveValue();
- m_aLowPosBtn.SaveValue();
- m_a0degRB.SaveValue();
- m_a90degRB.SaveValue();
- m_a270degRB.SaveValue();
- m_aFitToLineCB.SaveValue();
- m_aScaleWidthMF.SaveValue();
- m_aKerningLB.SaveValue();
- m_aKerningEdit.SaveValue();
- m_aPairKerningBtn.SaveValue();
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool SvxCharPositionPage::FillItemSet( SfxItemSet& rSet )
-{
- // Position (hoch, normal oder tief)
- const SfxItemSet& rOldSet = GetItemSet();
- sal_Bool bModified = sal_False, bChanged = sal_True;
- sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_ESCAPEMENT );
- const SfxPoolItem* pOld = GetOldItem( rSet, SID_ATTR_CHAR_ESCAPEMENT );
- const bool bHigh = m_aHighPosBtn.IsChecked();
- short nEsc;
- sal_uInt8 nEscProp;
-
- if ( bHigh || m_aLowPosBtn.IsChecked() )
- {
- if ( m_aHighLowRB.IsChecked() )
- nEsc = bHigh ? DFLT_ESC_AUTO_SUPER : DFLT_ESC_AUTO_SUB;
- else
- {
- nEsc = (short)m_aHighLowEdit.Denormalize( m_aHighLowEdit.GetValue() );
- nEsc *= (bHigh ? 1 : -1);
- }
- nEscProp = (sal_uInt8)m_aFontSizeEdit.Denormalize( m_aFontSizeEdit.GetValue() );
- }
- else
- {
- nEsc = 0;
- nEscProp = 100;
- }
-
- if ( pOld )
- {
- const SvxEscapementItem& rItem = *( (const SvxEscapementItem*)pOld );
- if ( rItem.GetEsc() == nEsc && rItem.GetProp() == nEscProp )
- bChanged = sal_False;
- }
-
- if ( !bChanged && !m_aHighPosBtn.GetSavedValue() &&
- !m_aNormalPosBtn.GetSavedValue() && !m_aLowPosBtn.GetSavedValue() )
- bChanged = sal_True;
-
- if ( bChanged &&
- ( m_aHighPosBtn.IsChecked() || m_aNormalPosBtn.IsChecked() || m_aLowPosBtn.IsChecked() ) )
- {
- rSet.Put( SvxEscapementItem( nEsc, nEscProp, nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = sal_True;
-
- // Kerning
- nWhich = GetWhich( SID_ATTR_CHAR_KERNING );
- pOld = GetOldItem( rSet, SID_ATTR_CHAR_KERNING );
- sal_uInt16 nPos = m_aKerningLB.GetSelectEntryPos();
- short nKerning = 0;
- SfxMapUnit eUnit = rSet.GetPool()->GetMetric( nWhich );
-
- if ( nPos == LW_GESPERRT || nPos == LW_SCHMAL )
- {
- long nTmp = static_cast<long>(m_aKerningEdit.GetValue());
- long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)eUnit );
- nKerning = (short)m_aKerningEdit.Denormalize( nVal );
-
- if ( nPos == LW_SCHMAL )
- nKerning *= - 1;
- }
-
- if ( pOld )
- {
- const SvxKerningItem& rItem = *( (const SvxKerningItem*)pOld );
- if ( rItem.GetValue() == nKerning )
- bChanged = sal_False;
- }
-
- if ( !bChanged &&
- ( m_aKerningLB.GetSavedValue() == LISTBOX_ENTRY_NOTFOUND ||
- ( !m_aKerningEdit.GetSavedValue().Len() && m_aKerningEdit.IsEnabled() ) ) )
- bChanged = sal_True;
-
- if ( bChanged && nPos != LISTBOX_ENTRY_NOTFOUND )
- {
- rSet.Put( SvxKerningItem( nKerning, nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- bChanged = sal_True;
-
- // Pair-Kerning
- nWhich = GetWhich( SID_ATTR_CHAR_AUTOKERN );
-
- if ( m_aPairKerningBtn.IsChecked() != m_aPairKerningBtn.GetSavedValue() )
- {
- rSet.Put( SvxAutoKernItem( m_aPairKerningBtn.IsChecked(), nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- // Scale Width
- nWhich = GetWhich( SID_ATTR_CHAR_SCALEWIDTH );
- if ( m_aScaleWidthMF.GetText() != m_aScaleWidthMF.GetSavedValue() )
- {
- rSet.Put( SvxCharScaleWidthItem( (sal_uInt16)m_aScaleWidthMF.GetValue(), nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- // Rotation
- nWhich = GetWhich( SID_ATTR_CHAR_ROTATED );
- if ( m_a0degRB .IsChecked() != m_a0degRB .GetSavedValue() ||
- m_a90degRB .IsChecked() != m_a90degRB .GetSavedValue() ||
- m_a270degRB .IsChecked() != m_a270degRB .GetSavedValue() ||
- m_aFitToLineCB.IsChecked() != m_aFitToLineCB.GetSavedValue() )
- {
- SvxCharRotateItem aItem( 0, m_aFitToLineCB.IsChecked(), nWhich );
- if (m_a90degRB.IsChecked())
- aItem.SetBottomToTop();
- else if (m_a270degRB.IsChecked())
- aItem.SetTopToBotton();
- rSet.Put( aItem );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- return bModified;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharPositionPage::FillUserData()
-{
- const sal_Unicode cTok = ';';
-
- String sUser( UniString::CreateFromInt32( m_nSuperEsc ) );
- sUser.Append( cTok );
- sUser.Append( UniString::CreateFromInt32( m_nSubEsc ) );
- sUser.Append( cTok );
- sUser.Append( UniString::CreateFromInt32( m_nSuperProp ) );
- sUser.Append( cTok );
- sUser.Append( UniString::CreateFromInt32( m_nSubProp ) );
- SetUserData( sUser );
-}
-
-// -----------------------------------------------------------------------
-void SvxCharPositionPage::SetPreviewBackgroundToCharacter()
-{
- m_bPreviewBackgroundToCharacter = sal_True;
-}
-// -----------------------------------------------------------------------
-void SvxCharPositionPage::PageCreated (SfxAllItemSet aSet)
-{
- SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_FLAG_TYPE,sal_False);
- if (pFlagItem)
- {
- sal_uInt32 nFlags=pFlagItem->GetValue();
- if ( ( nFlags & SVX_PREVIEW_CHARACTER ) == SVX_PREVIEW_CHARACTER )
- SetPreviewBackgroundToCharacter();
- }
-}
-// class SvxCharTwoLinesPage ------------------------------------------------
-
-SvxCharTwoLinesPage::SvxCharTwoLinesPage( Window* pParent, const SfxItemSet& rInSet ) :
-
- SvxCharBasePage( pParent, CUI_RES( RID_SVXPAGE_CHAR_TWOLINES ), rInSet, WIN_TWOLINES_PREVIEW, FT_TWOLINES_FONTTYPE ),
-
- m_aSwitchOnLine ( this, CUI_RES( FL_SWITCHON ) ),
- m_aTwoLinesBtn ( this, CUI_RES( CB_TWOLINES ) ),
-
- m_aEncloseLine ( this, CUI_RES( FL_ENCLOSE ) ),
- m_aStartBracketFT ( this, CUI_RES( FT_STARTBRACKET ) ),
- m_aStartBracketLB ( this, CUI_RES( ED_STARTBRACKET ) ),
- m_aEndBracketFT ( this, CUI_RES( FT_ENDBRACKET ) ),
- m_aEndBracketLB ( this, CUI_RES( ED_ENDBRACKET ) ),
- m_nStartBracketPosition( 0 ),
- m_nEndBracketPosition( 0 )
-{
- FreeResource();
- Initialize();
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharTwoLinesPage::Initialize()
-{
- Size aSize = m_aStartBracketLB.GetSizePixel();
- aSize.Height() = m_aStartBracketLB.CalcSize( 1, 6 ).Height();
- m_aStartBracketLB.SetSizePixel( aSize );
- aSize = m_aEndBracketLB.GetSizePixel();
- aSize.Height() = m_aEndBracketLB.CalcSize( 1, 6 ).Height();
- m_aEndBracketLB.SetSizePixel( aSize );
-
- m_aTwoLinesBtn.Check( sal_False );
- TwoLinesHdl_Impl( NULL );
-
- m_aTwoLinesBtn.SetClickHdl( LINK( this, SvxCharTwoLinesPage, TwoLinesHdl_Impl ) );
-
- Link aLink = LINK( this, SvxCharTwoLinesPage, CharacterMapHdl_Impl );
- m_aStartBracketLB.SetSelectHdl( aLink );
- m_aEndBracketLB.SetSelectHdl( aLink );
-
- SvxFont& rFont = GetPreviewFont();
- SvxFont& rCJKFont = GetPreviewCJKFont();
- SvxFont& rCTLFont = GetPreviewCTLFont();
- rFont.SetSize( Size( 0, 220 ) );
- rCJKFont.SetSize( Size( 0, 220 ) );
- rCTLFont.SetSize( Size( 0, 220 ) );
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharTwoLinesPage::SelectCharacter( ListBox* pBox )
-{
-
- bool bStart = pBox == &m_aStartBracketLB;
- //SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
- //if(pFact)
- {
- //AbstractSvxCharacterMap* aDlg = pFact->CreateSvxCharacterMap( this, RID_SVXDLG_CHARMAP );
- SvxCharacterMap* aDlg = new SvxCharacterMap( this );
- aDlg->DisableFontSelection();
-
- if ( aDlg->Execute() == RET_OK )
- {
- sal_Unicode cChar = (sal_Unicode) aDlg->GetChar();
- SetBracket( cChar, bStart );
- }
- else
- {
- pBox->SelectEntryPos( bStart ? m_nStartBracketPosition : m_nEndBracketPosition );
- }
- delete aDlg;
- }
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharTwoLinesPage::SetBracket( sal_Unicode cBracket, sal_Bool bStart )
-{
- sal_uInt16 nEntryPos = 0;
- ListBox* pBox = bStart ? &m_aStartBracketLB : &m_aEndBracketLB;
- if ( 0 == cBracket )
- pBox->SelectEntryPos(0);
- else
- {
- bool bFound = false;
- for ( sal_uInt16 i = 1; i < pBox->GetEntryCount(); ++i )
- {
- if ( (sal_uLong)pBox->GetEntryData(i) != CHRDLG_ENCLOSE_SPECIAL_CHAR )
- {
- const sal_Unicode cChar = pBox->GetEntry(i).GetChar(0);
- if ( cChar == cBracket )
- {
- pBox->SelectEntryPos(i);
- nEntryPos = i;
- bFound = true;
- break;
- }
- }
- }
-
- if ( !bFound )
- {
- nEntryPos = pBox->InsertEntry( String( cBracket ) );
- pBox->SelectEntryPos( nEntryPos );
- }
- }
- if( bStart )
- m_nStartBracketPosition = nEntryPos;
- else
- m_nEndBracketPosition = nEntryPos;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharTwoLinesPage, TwoLinesHdl_Impl, CheckBox*, EMPTYARG )
-{
- sal_Bool bChecked = m_aTwoLinesBtn.IsChecked();
- m_aStartBracketFT.Enable( bChecked );
- m_aStartBracketLB.Enable( bChecked );
- m_aEndBracketFT.Enable( bChecked );
- m_aEndBracketLB.Enable( bChecked );
-
- UpdatePreview_Impl();
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxCharTwoLinesPage, CharacterMapHdl_Impl, ListBox*, pBox )
-{
- sal_uInt16 nPos = pBox->GetSelectEntryPos();
- if ( CHRDLG_ENCLOSE_SPECIAL_CHAR == (sal_uLong)pBox->GetEntryData( nPos ) )
- SelectCharacter( pBox );
- else
- {
- bool bStart = pBox == &m_aStartBracketLB;
- if( bStart )
- m_nStartBracketPosition = nPos;
- else
- m_nEndBracketPosition = nPos;
- }
- UpdatePreview_Impl();
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharTwoLinesPage::ActivatePage( const SfxItemSet& rSet )
-{
- SvxCharBasePage::ActivatePage( rSet );
-}
-
-// -----------------------------------------------------------------------
-
-int SvxCharTwoLinesPage::DeactivatePage( SfxItemSet* _pSet )
-{
- if ( _pSet )
- FillItemSet( *_pSet );
- return LEAVE_PAGE;
-}
-
-// -----------------------------------------------------------------------
-
-SfxTabPage* SvxCharTwoLinesPage::Create( Window* pParent, const SfxItemSet& rSet )
-{
- return new SvxCharTwoLinesPage( pParent, rSet );
-}
-
-// -----------------------------------------------------------------------
-
-sal_uInt16* SvxCharTwoLinesPage::GetRanges()
-{
- return pTwoLinesRanges;
-}
-
-// -----------------------------------------------------------------------
-
-void SvxCharTwoLinesPage::Reset( const SfxItemSet& rSet )
-{
- m_aTwoLinesBtn.Check( sal_False );
- sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_TWO_LINES );
- SfxItemState eState = rSet.GetItemState( nWhich );
-
- if ( eState >= SFX_ITEM_DONTCARE )
- {
- const SvxTwoLinesItem& rItem = (SvxTwoLinesItem&)rSet.Get( nWhich );
- m_aTwoLinesBtn.Check( rItem.GetValue() );
-
- if ( rItem.GetValue() )
- {
- SetBracket( rItem.GetStartBracket(), sal_True );
- SetBracket( rItem.GetEndBracket(), sal_False );
- }
- }
- TwoLinesHdl_Impl( NULL );
-
- SetPrevFontWidthScale( rSet );
-}
-
-// -----------------------------------------------------------------------
-
-sal_Bool SvxCharTwoLinesPage::FillItemSet( SfxItemSet& rSet )
-{
- const SfxItemSet& rOldSet = GetItemSet();
- sal_Bool bModified = sal_False, bChanged = sal_True;
- sal_uInt16 nWhich = GetWhich( SID_ATTR_CHAR_TWO_LINES );
- const SfxPoolItem* pOld = GetOldItem( rSet, SID_ATTR_CHAR_TWO_LINES );
- sal_Bool bOn = m_aTwoLinesBtn.IsChecked();
- sal_Unicode cStart = ( bOn && m_aStartBracketLB.GetSelectEntryPos() > 0 )
- ? m_aStartBracketLB.GetSelectEntry().GetChar(0) : 0;
- sal_Unicode cEnd = ( bOn && m_aEndBracketLB.GetSelectEntryPos() > 0 )
- ? m_aEndBracketLB.GetSelectEntry().GetChar(0) : 0;
-
- if ( pOld )
- {
- const SvxTwoLinesItem& rItem = *( (const SvxTwoLinesItem*)pOld );
- if ( rItem.GetValue() == bOn &&
- ( !bOn || ( rItem.GetStartBracket() == cStart && rItem.GetEndBracket() == cEnd ) ) )
- bChanged = sal_False;
- }
-
- if ( bChanged )
- {
- rSet.Put( SvxTwoLinesItem( bOn, cStart, cEnd, nWhich ) );
- bModified = sal_True;
- }
- else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) )
- CLEARTITEM;
-
- return bModified;
-}
-
-void SvxCharTwoLinesPage::UpdatePreview_Impl()
-{
- sal_Unicode cStart = m_aStartBracketLB.GetSelectEntryPos() > 0
- ? m_aStartBracketLB.GetSelectEntry().GetChar(0) : 0;
- sal_Unicode cEnd = m_aEndBracketLB.GetSelectEntryPos() > 0
- ? m_aEndBracketLB.GetSelectEntry().GetChar(0) : 0;
- m_aPreviewWin.SetBrackets(cStart, cEnd);
- m_aPreviewWin.SetTwoLines(m_aTwoLinesBtn.IsChecked());
- m_aPreviewWin.Invalidate();
-}
-// -----------------------------------------------------------------------
-void SvxCharTwoLinesPage::SetPreviewBackgroundToCharacter()
-{
- m_bPreviewBackgroundToCharacter = sal_True;
-}
-
-// -----------------------------------------------------------------------
-void SvxCharTwoLinesPage::PageCreated (SfxAllItemSet aSet)
-{
- SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_FLAG_TYPE,sal_False);
- if (pFlagItem)
- {
- sal_uInt32 nFlags=pFlagItem->GetValue();
- if ( ( nFlags & SVX_PREVIEW_CHARACTER ) == SVX_PREVIEW_CHARACTER )
- SetPreviewBackgroundToCharacter();
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */