|  | /************************************************************** | 
|  | * | 
|  | * Licensed to the Apache Software Foundation (ASF) under one | 
|  | * or more contributor license agreements.  See the NOTICE file | 
|  | * distributed with this work for additional information | 
|  | * regarding copyright ownership.  The ASF licenses this file | 
|  | * to you under the Apache License, Version 2.0 (the | 
|  | * "License"); you may not use this file except in compliance | 
|  | * with the License.  You may obtain a copy of the License at | 
|  | * | 
|  | *   http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, | 
|  | * software distributed under the License is distributed on an | 
|  | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | * KIND, either express or implied.  See the License for the | 
|  | * specific language governing permissions and limitations | 
|  | * under the License. | 
|  | * | 
|  | *************************************************************/ | 
|  |  | 
|  |  | 
|  |  | 
|  | // MARKER(update_precomp.py): autogen include statement, do not remove | 
|  | #include "precompiled_cui.hxx" | 
|  |  | 
|  | // 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 <cuires.hrc> | 
|  | #include "chardlg.hrc" | 
|  |  | 
|  | #include <svx/xtable.hxx>		// XColorList | 
|  | #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> //CHINA001 | 
|  | #include <cuires.hrc> //CHINA001 | 
|  | #include <svl/intitem.hxx> //CHINA001 | 
|  | #include <sfx2/request.hxx> //CHINA001 | 
|  | #include "svx/flagsdef.hxx" //CHINA001 | 
|  |  | 
|  | 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::SetPrevFontAttributes( const SfxItemSet& rSet ) | 
|  | void SvxCharBasePage::ActivatePage( const SfxItemSet& rSet ) | 
|  | { | 
|  | SvxFont&		rFont = GetPreviewFont(); | 
|  | SvxFont&		rCJKFont = GetPreviewCJKFont(); | 
|  | SvxFont&		rCTLFont = GetPreviewCTLFont(); | 
|  | sal_uInt16			nWhich; | 
|  |  | 
|  | nWhich = GetWhich( SID_CHAR_DLG_PREVIEW_STRING ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SfxStringItem& rItem = ( SfxStringItem& ) rSet.Get( nWhich ); | 
|  | ::rtl::OUString aString = rItem.GetValue(); | 
|  | if( aString.getLength() != 0 ) | 
|  | m_aPreviewWin.SetPreviewText( aString ); | 
|  | else | 
|  | m_aPreviewWin.SetFontNameAsPreviewText(); | 
|  | } | 
|  |  | 
|  | // Underline | 
|  | FontUnderline eUnderline; | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_UNDERLINE ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxUnderlineItem& rItem = ( SvxUnderlineItem& ) rSet.Get( nWhich ); | 
|  | eUnderline = ( FontUnderline ) rItem.GetValue(); | 
|  | m_aPreviewWin.SetTextLineColor( rItem.GetColor() ); | 
|  | } | 
|  | else | 
|  | eUnderline = UNDERLINE_NONE; | 
|  |  | 
|  | rFont.SetUnderline( eUnderline ); | 
|  | rCJKFont.SetUnderline( eUnderline ); | 
|  | rCTLFont.SetUnderline( eUnderline ); | 
|  |  | 
|  | // Overline | 
|  | FontUnderline eOverline; | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_OVERLINE ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxOverlineItem& rItem = ( SvxOverlineItem& ) rSet.Get( nWhich ); | 
|  | eOverline = ( FontUnderline ) rItem.GetValue(); | 
|  | m_aPreviewWin.SetOverlineColor( rItem.GetColor() ); | 
|  | } | 
|  | else | 
|  | eOverline = UNDERLINE_NONE; | 
|  |  | 
|  | rFont.SetOverline( eOverline ); | 
|  | rCJKFont.SetOverline( eOverline ); | 
|  | rCTLFont.SetOverline( eOverline ); | 
|  |  | 
|  | //	Strikeout | 
|  | FontStrikeout eStrikeout; | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_STRIKEOUT ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxCrossedOutItem& rItem = ( SvxCrossedOutItem& ) rSet.Get( nWhich ); | 
|  | eStrikeout = ( FontStrikeout ) rItem.GetValue(); | 
|  | } | 
|  | else | 
|  | eStrikeout = STRIKEOUT_NONE; | 
|  |  | 
|  | rFont.SetStrikeout( eStrikeout ); | 
|  | rCJKFont.SetStrikeout( eStrikeout ); | 
|  | rCTLFont.SetStrikeout( eStrikeout ); | 
|  |  | 
|  | // WordLineMode | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_WORDLINEMODE ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxWordLineModeItem& rItem = ( SvxWordLineModeItem& ) rSet.Get( nWhich ); | 
|  | rFont.SetWordLineMode( rItem.GetValue() ); | 
|  | rCJKFont.SetWordLineMode( rItem.GetValue() ); | 
|  | rCTLFont.SetWordLineMode( rItem.GetValue() ); | 
|  | } | 
|  |  | 
|  | // Emphasis | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_EMPHASISMARK ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxEmphasisMarkItem& rItem = ( SvxEmphasisMarkItem& ) rSet.Get( nWhich ); | 
|  | FontEmphasisMark eMark = rItem.GetEmphasisMark(); | 
|  | rFont.SetEmphasisMark( eMark ); | 
|  | rCJKFont.SetEmphasisMark( eMark ); | 
|  | rCTLFont.SetEmphasisMark( eMark ); | 
|  | } | 
|  |  | 
|  | // Relief | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_RELIEF ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxCharReliefItem& rItem = ( SvxCharReliefItem& ) rSet.Get( nWhich ); | 
|  | FontRelief eFontRelief = ( FontRelief ) rItem.GetValue(); | 
|  | rFont.SetRelief( eFontRelief ); | 
|  | rCJKFont.SetRelief( eFontRelief ); | 
|  | rCTLFont.SetRelief( eFontRelief ); | 
|  | } | 
|  |  | 
|  | // Effects | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_CASEMAP ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxCaseMapItem& rItem = ( SvxCaseMapItem& ) rSet.Get( nWhich ); | 
|  | SvxCaseMap eCaseMap = ( SvxCaseMap ) rItem.GetValue(); | 
|  | rFont.SetCaseMap( eCaseMap ); | 
|  | rCJKFont.SetCaseMap( eCaseMap ); | 
|  | // #i78474# small caps do not exist in CTL fonts | 
|  | rCTLFont.SetCaseMap( eCaseMap == SVX_CASEMAP_KAPITAELCHEN ? SVX_CASEMAP_NOT_MAPPED : eCaseMap ); | 
|  | } | 
|  |  | 
|  | // Outline | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_CONTOUR ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxContourItem& rItem = ( SvxContourItem& ) rSet.Get( nWhich ); | 
|  | sal_Bool bOutline = rItem.GetValue(); | 
|  | rFont.SetOutline( bOutline ); | 
|  | rCJKFont.SetOutline( bOutline ); | 
|  | rCTLFont.SetOutline( bOutline ); | 
|  | } | 
|  |  | 
|  | // Shadow | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_SHADOWED ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxShadowedItem& rItem = ( SvxShadowedItem& ) rSet.Get( nWhich ); | 
|  | sal_Bool bShadow = rItem.GetValue(); | 
|  | rFont.SetShadow( bShadow ); | 
|  | rCJKFont.SetShadow( bShadow ); | 
|  | rCTLFont.SetShadow( bShadow ); | 
|  | } | 
|  |  | 
|  | // Background | 
|  | sal_Bool bTransparent; | 
|  | nWhich = GetWhich( m_bPreviewBackgroundToCharacter ? SID_ATTR_BRUSH : SID_ATTR_BRUSH_CHAR ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxBrushItem& rBrush = ( SvxBrushItem& ) rSet.Get( nWhich ); | 
|  | const Color& rColor = rBrush.GetColor(); | 
|  | bTransparent = rColor.GetTransparency() > 0; | 
|  | rFont.SetFillColor( rColor ); | 
|  | rCJKFont.SetFillColor( rColor ); | 
|  | rCTLFont.SetFillColor( rColor ); | 
|  | } | 
|  | else | 
|  | bTransparent = sal_True; | 
|  |  | 
|  | rFont.SetTransparent( bTransparent ); | 
|  | rCJKFont.SetTransparent( bTransparent ); | 
|  | rCTLFont.SetTransparent( bTransparent ); | 
|  |  | 
|  | Color aBackCol( COL_TRANSPARENT ); | 
|  | if( !m_bPreviewBackgroundToCharacter ) | 
|  | { | 
|  | nWhich = GetWhich( SID_ATTR_BRUSH ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxBrushItem& rBrush = ( SvxBrushItem& ) rSet.Get( nWhich ); | 
|  | if( GPOS_NONE == rBrush.GetGraphicPos() ) | 
|  | aBackCol = rBrush.GetColor(); | 
|  | } | 
|  | } | 
|  | m_aPreviewWin.SetBackColor( aBackCol ); | 
|  |  | 
|  | // Font | 
|  | SetPrevFont( rSet, SID_ATTR_CHAR_FONT, rFont ); | 
|  | SetPrevFont( rSet, SID_ATTR_CHAR_CJK_FONT, rCJKFont ); | 
|  | SetPrevFont( rSet, SID_ATTR_CHAR_CTL_FONT, rCTLFont ); | 
|  |  | 
|  | // Style | 
|  | SetPrevFontStyle( rSet, SID_ATTR_CHAR_POSTURE, SID_ATTR_CHAR_WEIGHT, rFont ); | 
|  | SetPrevFontStyle( rSet, SID_ATTR_CHAR_CJK_POSTURE, SID_ATTR_CHAR_CJK_WEIGHT, rCJKFont ); | 
|  | SetPrevFontStyle( rSet, SID_ATTR_CHAR_CTL_POSTURE, SID_ATTR_CHAR_CTL_WEIGHT, rCTLFont ); | 
|  |  | 
|  | // Size | 
|  | SetPrevFontSize( rSet, SID_ATTR_CHAR_FONTHEIGHT, rFont ); | 
|  | SetPrevFontSize( rSet, SID_ATTR_CHAR_CJK_FONTHEIGHT, rCJKFont ); | 
|  | SetPrevFontSize( rSet, SID_ATTR_CHAR_CTL_FONTHEIGHT, rCTLFont ); | 
|  |  | 
|  | // Color | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_COLOR ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxColorItem& rItem = ( SvxColorItem& ) rSet.Get( nWhich ); | 
|  | Color aCol( rItem.GetValue() ); | 
|  | rFont.SetColor( aCol ); | 
|  | rCJKFont.SetColor( aCol ); | 
|  | rCTLFont.SetColor( aCol ); | 
|  |  | 
|  | m_aPreviewWin.AutoCorrectFontColor();	// handle color COL_AUTO | 
|  | } | 
|  |  | 
|  | // Kerning | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_KERNING ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxKerningItem& rItem = ( SvxKerningItem& ) rSet.Get( nWhich ); | 
|  | short nKern = ( short ) | 
|  | LogicToLogic( rItem.GetValue(), ( MapUnit ) rSet.GetPool()->GetMetric( nWhich ), MAP_TWIP ); | 
|  | rFont.SetFixKerning( nKern ); | 
|  | rCJKFont.SetFixKerning( nKern ); | 
|  | rCTLFont.SetFixKerning( nKern ); | 
|  | } | 
|  |  | 
|  | // Escapement | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_ESCAPEMENT ); | 
|  | const sal_uInt8 nProp = 100; | 
|  | short nEsc; | 
|  | sal_uInt8 nEscProp; | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxEscapementItem& rItem = ( SvxEscapementItem& ) rSet.Get( nWhich ); | 
|  | nEsc = rItem.GetEsc(); | 
|  | nEscProp = rItem.GetProp(); | 
|  |  | 
|  | if( nEsc == DFLT_ESC_AUTO_SUPER ) | 
|  | nEsc = DFLT_ESC_SUPER; | 
|  | else if( nEsc == DFLT_ESC_AUTO_SUB ) | 
|  | nEsc = DFLT_ESC_SUB; | 
|  | } | 
|  | else | 
|  | { | 
|  | nEsc  = 0; | 
|  | nEscProp = 100; | 
|  | } | 
|  |  | 
|  | SetPrevFontEscapement( nProp, nEscProp, nEsc ); | 
|  |  | 
|  | // Font width scale | 
|  | SetPrevFontWidthScale( rSet ); | 
|  |  | 
|  | m_aPreviewWin.Invalidate(); | 
|  | } | 
|  |  | 
|  | // ----------------------------------------------------------------------- | 
|  |  | 
|  | void SvxCharBasePage::SetPrevFontSize( const SfxItemSet& rSet, sal_uInt16 nSlot, SvxFont& rFont ) | 
|  | { | 
|  | sal_uInt16 nWhich = GetWhich( nSlot ); | 
|  | long nH; | 
|  | if( rSet.GetItemState( nWhich ) >= SFX_ITEM_SET ) | 
|  | { | 
|  | nH = LogicToLogic(	( ( SvxFontHeightItem& ) rSet.Get( nWhich ) ).GetHeight(), | 
|  | ( MapUnit ) rSet.GetPool()->GetMetric( nWhich ), | 
|  | MAP_TWIP ); | 
|  | } | 
|  | else | 
|  | nH = 240;	// as default 12pt | 
|  |  | 
|  | rFont.SetSize( Size( 0, nH ) ); | 
|  | } | 
|  |  | 
|  | // ----------------------------------------------------------------------- | 
|  |  | 
|  | void SvxCharBasePage::SetPrevFont( const SfxItemSet& rSet, sal_uInt16 nSlot, SvxFont& rFont ) | 
|  | { | 
|  | sal_uInt16 nWhich = GetWhich( nSlot ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxFontItem& rFontItem = ( SvxFontItem& ) rSet.Get( nWhich ); | 
|  | rFont.SetFamily( rFontItem.GetFamily() ); | 
|  | rFont.SetName( rFontItem.GetFamilyName() ); | 
|  | rFont.SetPitch( rFontItem.GetPitch() ); | 
|  | rFont.SetCharSet( rFontItem.GetCharSet() ); | 
|  | rFont.SetStyleName( rFontItem.GetStyleName() ); | 
|  | } | 
|  | } | 
|  |  | 
|  | // ----------------------------------------------------------------------- | 
|  |  | 
|  | void SvxCharBasePage::SetPrevFontStyle( const SfxItemSet& rSet, sal_uInt16 nPosture, sal_uInt16 nWeight, SvxFont& rFont ) | 
|  | { | 
|  | sal_uInt16 nWhich = GetWhich( nPosture ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | const SvxPostureItem& rItem = ( SvxPostureItem& ) rSet.Get( nWhich ); | 
|  | rFont.SetItalic( ( FontItalic ) rItem.GetValue() != ITALIC_NONE ? ITALIC_NORMAL : ITALIC_NONE ); | 
|  | } | 
|  |  | 
|  | nWhich = GetWhich( nWeight ); | 
|  | if( ISITEMSET ) | 
|  | { | 
|  | SvxWeightItem& rItem = ( SvxWeightItem& ) rSet.Get( nWhich ); | 
|  | rFont.SetWeight( ( FontWeight ) rItem.GetValue() != WEIGHT_NORMAL ? WEIGHT_BOLD : WEIGHT_NORMAL ); | 
|  | } | 
|  | } | 
|  |  | 
|  | // ----------------------------------------------------------------------- | 
|  |  | 
|  | 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 ) ); | 
|  | } | 
|  |  | 
|  | 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!" ); | 
|  | XColorListSharedPtr aColorTable; | 
|  | const SfxPoolItem* pItem = NULL; | 
|  |  | 
|  | if ( pDocSh ) | 
|  | { | 
|  | pItem = pDocSh->GetItem( SID_COLOR_TABLE ); | 
|  | if ( pItem != NULL ) | 
|  | aColorTable = static_cast< const SvxColorTableItem* >(pItem)->GetColorTable(); | 
|  | } | 
|  |  | 
|  | if ( !aColorTable.get() ) | 
|  | { | 
|  | aColorTable = XPropertyListFactory::CreateSharedXColorList(SvtPathOptions().GetPalettePath()); | 
|  | } | 
|  |  | 
|  | 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 < aColorTable->Count(); i++ ) | 
|  | { | 
|  | XColorEntry* pEntry = aColorTable->GetColor(i); | 
|  | m_pColorLB->InsertEntry( pEntry->GetColor(), pEntry->GetName() ); | 
|  | } | 
|  |  | 
|  | m_pColorLB->SetUpdateMode( sal_True ); | 
|  | 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" ); | 
|  | } | 
|  |  | 
|  | 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" ); | 
|  | } | 
|  |  | 
|  | FontInfo _aFontInfo( pFontList->Get( pNameBox->GetText(), pStyleBox->GetText() ) ); | 
|  | pSizeBox->Fill( &_aFontInfo, pFontList ); | 
|  | } | 
|  |  | 
|  | // ----------------------------------------------------------------------- | 
|  |  | 
|  | void SvxCharNamePage::Reset_Impl( const SfxItemSet& rSet, LanguageGroup eLangGrp ) | 
|  | { | 
|  | FixedText* pNameLabel = NULL; | 
|  | 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 : | 
|  | pNameLabel = m_pWestFontNameFT; | 
|  | 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 : | 
|  | pNameLabel = m_pEastFontNameFT; | 
|  | 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 : | 
|  | pNameLabel = m_pCTLFontNameFT; | 
|  | 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 ); | 
|  |  | 
|  | FASTBOOL bStyle = sal_False; | 
|  | FASTBOOL bStyleAvailable = sal_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 = sal_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 = sal_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; | 
|  |  | 
|  | FASTBOOL bChanged = sal_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 = sal_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 = sal_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 = sal_False; | 
|  | } | 
|  |  | 
|  | if ( !bChanged ) | 
|  | { | 
|  | bChanged = !pStyleBox->GetSavedValue().Len(); | 
|  |  | 
|  | if ( m_pImpl->m_bInSearchMode && bChanged && | 
|  | aInfo.GetWeight() == WEIGHT_NORMAL && aInfo.GetItalic() != ITALIC_NONE ) | 
|  | bChanged = sal_False; | 
|  | } | 
|  |  | 
|  | if ( !bChanged && pExampleSet && | 
|  | pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET && | 
|  | ( (SvxWeightItem*)pItem )->GetValue() != aWeightItem.GetValue() ) | 
|  | bChanged = sal_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 = sal_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 = sal_False; | 
|  | } | 
|  |  | 
|  | if ( !bChanged ) | 
|  | { | 
|  | bChanged = !pStyleBox->GetSavedValue().Len(); | 
|  |  | 
|  | if ( m_pImpl->m_bInSearchMode && bChanged && | 
|  | aInfo.GetItalic() == ITALIC_NONE && aInfo.GetWeight() != WEIGHT_NORMAL ) | 
|  | bChanged = sal_False; | 
|  | } | 
|  |  | 
|  | if ( !bChanged && pExampleSet && | 
|  | pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET && | 
|  | ( (SvxPostureItem*)pItem )->GetValue() != aPostureItem.GetValue() ) | 
|  | bChanged = sal_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(); | 
|  | FASTBOOL bRel = sal_True; | 
|  |  | 
|  | if ( !pSizeBox->IsRelative() ) | 
|  | { | 
|  | nSavedSize *= 10; | 
|  | bRel = sal_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 = sal_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 = sal_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 = sal_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) //add CHINA001 | 
|  | { | 
|  | 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); | 
|  | //CHINA001 SetFontList(pFontListItem->GetFontList()); | 
|  |  | 
|  | 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!" ); | 
|  | XColorListSharedPtr aColorTable; | 
|  |  | 
|  | if ( pDocSh ) | 
|  | { | 
|  | pItem = pDocSh->GetItem( SID_COLOR_TABLE ); | 
|  | if ( pItem != NULL ) | 
|  | aColorTable = static_cast< const SvxColorTableItem* >(pItem)->GetColorTable(); | 
|  | } | 
|  |  | 
|  | if ( !aColorTable.get() ) | 
|  | { | 
|  | aColorTable = XPropertyListFactory::CreateSharedXColorList(SvtPathOptions().GetPalettePath()); | 
|  | } | 
|  |  | 
|  | 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.InsertAutomaticEntry(); | 
|  | m_aOverlineColorLB.InsertAutomaticEntry(); | 
|  | m_aFontColorLB.InsertAutomaticEntry(); | 
|  | } | 
|  | } | 
|  | for ( long i = 0; i < aColorTable->Count(); i++ ) | 
|  | { | 
|  | XColorEntry* pEntry = aColorTable->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 ) ); | 
|  |  | 
|  | // 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 | 
|  | // 30.05.2001 - 86262 - frank.schoenheit@germany.sun.com | 
|  |  | 
|  | // 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; | 
|  | FASTBOOL bChanged = sal_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 = sal_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 = sal_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 = sal_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 = sal_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 = sal_False; | 
|  | } | 
|  |  | 
|  | if ( bChanged ) | 
|  | { | 
|  | rSet.Put( SvxCrossedOutItem( eStrike, nWhich ) ); | 
|  | bModified |= sal_True; | 
|  | } | 
|  | else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) ) | 
|  | CLEARTITEM; | 
|  |  | 
|  | bChanged = sal_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 = sal_False; | 
|  | } | 
|  |  | 
|  | if ( rOldSet.GetItemState( nWhich ) == SFX_ITEM_DONTCARE && | 
|  | m_aIndividualWordsBtn.IsChecked() == m_aIndividualWordsBtn.GetSavedValue() ) | 
|  | bChanged = sal_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 = sal_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 = sal_False; | 
|  | } | 
|  | } | 
|  |  | 
|  | if ( rOldSet.GetItemState( nWhich ) == SFX_ITEM_DONTCARE && | 
|  | m_aEmphasisLB.GetSavedValue() == nMarkPos && m_aPositionLB.GetSavedValue() == nPosPos ) | 
|  | bChanged = sal_False; | 
|  |  | 
|  | if ( bChanged ) | 
|  | { | 
|  | rSet.Put( SvxEmphasisMarkItem( eMark, nWhich ) ); | 
|  | bModified |= sal_True; | 
|  | } | 
|  | else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) ) | 
|  | CLEARTITEM; | 
|  |  | 
|  | bChanged = sal_True; | 
|  |  | 
|  | // Effects | 
|  | nWhich = GetWhich( SID_ATTR_CHAR_CASEMAP ); | 
|  | pOld = GetOldItem( rSet, SID_ATTR_CHAR_CASEMAP ); | 
|  | SvxCaseMap eCaseMap = SVX_CASEMAP_NOT_MAPPED; | 
|  | FASTBOOL bChecked = sal_False; | 
|  | sal_uInt16 nCapsPos = m_aEffects2LB.GetSelectEntryPos(); | 
|  | if ( nCapsPos != LISTBOX_ENTRY_NOTFOUND ) | 
|  | { | 
|  | eCaseMap = (SvxCaseMap)nCapsPos; | 
|  | bChecked = sal_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 = sal_False; | 
|  | } | 
|  |  | 
|  | if ( bChanged && bChecked ) | 
|  | { | 
|  | rSet.Put( SvxCaseMapItem( eCaseMap, nWhich ) ); | 
|  | bModified |= sal_True; | 
|  | } | 
|  | else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, sal_False ) ) | 
|  | CLEARTITEM; | 
|  |  | 
|  | bChanged = sal_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 = sal_False; | 
|  | } | 
|  |  | 
|  | if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET && | 
|  | !StateToAttr( eState ) && ( (SvxContourItem*)pItem )->GetValue() ) | 
|  | bChanged = sal_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 = sal_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 = sal_False; | 
|  | } | 
|  |  | 
|  | if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET && | 
|  | !StateToAttr( eState ) && ( (SvxShadowedItem*)pItem )->GetValue() ) | 
|  | bChanged = sal_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 = sal_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 = sal_False; | 
|  | } | 
|  |  | 
|  | if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET && | 
|  | !StateToAttr( eState ) && ( (SvxBlinkItem*)pItem )->GetValue() ) | 
|  | bChanged = sal_True; | 
|  |  | 
|  | if ( bChanged && eState != STATE_DONTKNOW ) | 
|  | { | 
|  | rSet.Put( SvxBlinkItem( StateToAttr( eState ), nWhich ) ); | 
|  | bModified = sal_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 = sal_True; | 
|  |  | 
|  | if ( pOld ) | 
|  | { | 
|  | const SvxCharHiddenItem& rItem = *( (const SvxCharHiddenItem*)pOld ); | 
|  | if ( rItem.GetValue() == StateToAttr( eState ) && m_aHiddenBtn.GetSavedValue() == eState ) | 
|  | bChanged = sal_False; | 
|  | } | 
|  |  | 
|  | if ( !bChanged && pExampleSet && pExampleSet->GetItemState( nWhich, sal_False, &pItem ) == SFX_ITEM_SET && | 
|  | !StateToAttr( eState ) && ( (SvxCharHiddenItem*)pItem )->GetValue() ) | 
|  | bChanged = sal_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) //add CHINA001 | 
|  | { | 
|  | 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; | 
|  | } | 
|  |  | 
|  | /* -----------------28.08.2003 12:12----------------- | 
|  |  | 
|  | --------------------------------------------------*/ | 
|  | 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 FASTBOOL 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) //add CHINA001 | 
|  | { | 
|  | 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 ) | 
|  | { | 
|  | //CHINA001 SvxCharacterMap aDlg( this ); | 
|  | 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();//CHINA001 aDlg.DisableFontSelection(); | 
|  |  | 
|  | if ( aDlg->Execute() == RET_OK )//CHINA001 ( aDlg.Execute() == RET_OK ) | 
|  | { | 
|  | sal_Unicode cChar = (sal_Unicode) aDlg->GetChar();//CHINA001 aDlg.GetChar(); | 
|  | SetBracket( cChar, bStart ); | 
|  | } | 
|  | else | 
|  | { | 
|  | pBox->SelectEntryPos( bStart ? m_nStartBracketPosition : m_nEndBracketPosition ); | 
|  | } | 
|  | delete aDlg; //add CHINA001 | 
|  | } | 
|  | } | 
|  |  | 
|  | // ----------------------------------------------------------------------- | 
|  |  | 
|  | 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 | 
|  | { | 
|  | FASTBOOL bFound = sal_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 = sal_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; | 
|  | } | 
|  | /* -----------------------------04.12.00 09:48-------------------------------- | 
|  |  | 
|  | ---------------------------------------------------------------------------*/ | 
|  | 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) //add CHINA001 | 
|  | { | 
|  | 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(); | 
|  | } | 
|  | } |