| /************************************************************** |
| * |
| * 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(); |
| } |
| } |