diff options
Diffstat (limited to 'extensions/source/propctrlr/fontdialog.cxx')
-rw-r--r-- | extensions/source/propctrlr/fontdialog.cxx | 277 |
1 files changed, 145 insertions, 132 deletions
diff --git a/extensions/source/propctrlr/fontdialog.cxx b/extensions/source/propctrlr/fontdialog.cxx index 89e6fb80e635..78dd50c8475d 100644 --- a/extensions/source/propctrlr/fontdialog.cxx +++ b/extensions/source/propctrlr/fontdialog.cxx @@ -32,7 +32,6 @@ #include <com/sun/star/awt/FontUnderline.hpp> #include <com/sun/star/awt/FontStrikeout.hpp> #include "formstrings.hxx" -#include "fontitemids.hxx" #include <editeng/charreliefitem.hxx> #include <editeng/emphasismarkitem.hxx> #include <editeng/fontitem.hxx> @@ -49,7 +48,7 @@ #include <editeng/shdditem.hxx> #include <editeng/flstitem.hxx> #include <svtools/ctrltool.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <com/sun/star/beans/XPropertyState.hpp> #include <svx/svxids.hrc> #include <svx/svxdlg.hxx> @@ -67,6 +66,35 @@ namespace pcr //= OFontPropertyExtractor + namespace FontItemIds + { + constexpr sal_uInt16 CFID_FONT = 1; + constexpr sal_uInt16 CFID_HEIGHT = 2; + constexpr sal_uInt16 CFID_WEIGHT = 3; + constexpr sal_uInt16 CFID_POSTURE = 4; + constexpr sal_uInt16 CFID_LANGUAGE = 5; + constexpr sal_uInt16 CFID_UNDERLINE = 6; + constexpr sal_uInt16 CFID_STRIKEOUT = 7; + constexpr TypedWhichId<SvxWordLineModeItem> CFID_WORDLINEMODE(8); + constexpr sal_uInt16 CFID_CHARCOLOR = 9; + constexpr sal_uInt16 CFID_RELIEF = 10; + constexpr TypedWhichId<SvxEmphasisMarkItem> CFID_EMPHASIS(11); + + constexpr sal_uInt16 CFID_CJK_FONT = 12; + constexpr sal_uInt16 CFID_CJK_HEIGHT = 13; + constexpr sal_uInt16 CFID_CJK_WEIGHT = 14; + constexpr sal_uInt16 CFID_CJK_POSTURE = 15; + constexpr sal_uInt16 CFID_CJK_LANGUAGE = 16; + constexpr sal_uInt16 CFID_CASEMAP = 17; + constexpr TypedWhichId<SvxContourItem> CFID_CONTOUR(18); + constexpr TypedWhichId<SvxShadowedItem> CFID_SHADOWED(19); + + constexpr sal_uInt16 CFID_FONTLIST = 20; + + constexpr sal_uInt16 CFID_FIRST_ITEM_ID = CFID_FONT; + constexpr sal_uInt16 CFID_LAST_ITEM_ID = CFID_FONTLIST; + } + namespace { class OFontPropertyExtractor @@ -216,32 +244,32 @@ namespace pcr sal_Int32 nColor32 = aPropExtractor.getInt32FontProperty(PROPERTY_TEXTCOLOR, 0); // build SfxItems with the values - SvxFontItem aFontItem(static_cast<FontFamily>(nFontFamily), aFontName, aFontStyleName, PITCH_DONTKNOW, nFontCharset, CFID_FONT); + SvxFontItem aFontItem(static_cast<FontFamily>(nFontFamily), aFontName, aFontStyleName, PITCH_DONTKNOW, nFontCharset, FontItemIds::CFID_FONT); nFontHeight = static_cast<float>(o3tl::convert(nFontHeight, o3tl::Length::pt, o3tl::Length::twip)); - SvxFontHeightItem aSvxFontHeightItem(static_cast<sal_uInt32>(nFontHeight),100,CFID_HEIGHT); + SvxFontHeightItem aSvxFontHeightItem(static_cast<sal_uInt32>(nFontHeight),100,FontItemIds::CFID_HEIGHT); FontWeight eWeight=vcl::unohelper::ConvertFontWeight(nFontWeight); FontItalic eItalic=vcl::unohelper::ConvertFontSlant(nFontSlant); FontLineStyle eUnderline=static_cast<FontLineStyle>(nFontLineStyle); FontStrikeout eStrikeout=static_cast<FontStrikeout>(nFontStrikeout); - SvxWeightItem aWeightItem(eWeight,CFID_WEIGHT); - SvxPostureItem aPostureItem(eItalic,CFID_POSTURE); + SvxWeightItem aWeightItem(eWeight,FontItemIds::CFID_WEIGHT); + SvxPostureItem aPostureItem(eItalic,FontItemIds::CFID_POSTURE); - SvxCrossedOutItem aCrossedOutItem(eStrikeout,CFID_STRIKEOUT); - SvxWordLineModeItem aWordLineModeItem(bWordLineMode, CFID_WORDLINEMODE); + SvxCrossedOutItem aCrossedOutItem(eStrikeout,FontItemIds::CFID_STRIKEOUT); + SvxWordLineModeItem aWordLineModeItem(bWordLineMode, FontItemIds::CFID_WORDLINEMODE); - SvxUnderlineItem aUnderlineItem(eUnderline,CFID_UNDERLINE); + SvxUnderlineItem aUnderlineItem(eUnderline,FontItemIds::CFID_UNDERLINE); aUnderlineItem.SetColor(Color(ColorTransparency, nTextLineColor)); - SvxColorItem aSvxColorItem(Color(ColorTransparency, nColor32),CFID_CHARCOLOR); - SvxLanguageItem aLanguageItem(Application::GetSettings().GetUILanguageTag().getLanguageType(), CFID_LANGUAGE); + SvxColorItem aSvxColorItem(Color(ColorTransparency, nColor32),FontItemIds::CFID_CHARCOLOR); + SvxLanguageItem aLanguageItem(Application::GetSettings().GetUILanguageTag().getLanguageType(), FontItemIds::CFID_LANGUAGE); // the 2 CJK props - SvxCharReliefItem aFontReliefItem(static_cast<FontRelief>(nFontRelief), CFID_RELIEF); - SvxEmphasisMarkItem aEmphasisMarkitem(static_cast<FontEmphasisMark>(nFontEmphasisMark), CFID_EMPHASIS); + SvxCharReliefItem aFontReliefItem(static_cast<FontRelief>(nFontRelief), FontItemIds::CFID_RELIEF); + SvxEmphasisMarkItem aEmphasisMarkitem(static_cast<FontEmphasisMark>(nFontEmphasisMark), FontItemIds::CFID_EMPHASIS); _pSet->Put(aFontItem); _pSet->Put(aSvxFontHeightItem); @@ -255,16 +283,16 @@ namespace pcr _pSet->Put(aFontReliefItem); _pSet->Put(aEmphasisMarkitem); - aPropExtractor.invalidateItem(PROPERTY_FONT_NAME, CFID_FONT, *_pSet); - aPropExtractor.invalidateItem(PROPERTY_FONT_HEIGHT, CFID_HEIGHT, *_pSet); - aPropExtractor.invalidateItem(PROPERTY_FONT_WEIGHT, CFID_WEIGHT, *_pSet, css::awt::FontWeight::DONTKNOW == nFontWeight); - aPropExtractor.invalidateItem(PROPERTY_FONT_SLANT, CFID_POSTURE, *_pSet, css::awt::FontSlant_DONTKNOW == nFontSlant); - aPropExtractor.invalidateItem(PROPERTY_FONT_UNDERLINE, CFID_UNDERLINE, *_pSet, css::awt::FontUnderline::DONTKNOW == nFontLineStyle); - aPropExtractor.invalidateItem(PROPERTY_FONT_STRIKEOUT, CFID_STRIKEOUT, *_pSet, css::awt::FontStrikeout::DONTKNOW == nFontStrikeout); - aPropExtractor.invalidateItem(PROPERTY_WORDLINEMODE, CFID_WORDLINEMODE, *_pSet); - aPropExtractor.invalidateItem(PROPERTY_TEXTCOLOR, CFID_CHARCOLOR, *_pSet); - aPropExtractor.invalidateItem(PROPERTY_FONT_RELIEF, CFID_RELIEF, *_pSet); - aPropExtractor.invalidateItem(PROPERTY_FONT_EMPHASIS_MARK, CFID_EMPHASIS, *_pSet); + aPropExtractor.invalidateItem(PROPERTY_FONT_NAME, FontItemIds::CFID_FONT, *_pSet); + aPropExtractor.invalidateItem(PROPERTY_FONT_HEIGHT, FontItemIds::CFID_HEIGHT, *_pSet); + aPropExtractor.invalidateItem(PROPERTY_FONT_WEIGHT, FontItemIds::CFID_WEIGHT, *_pSet, css::awt::FontWeight::DONTKNOW == nFontWeight); + aPropExtractor.invalidateItem(PROPERTY_FONT_SLANT, FontItemIds::CFID_POSTURE, *_pSet, css::awt::FontSlant_DONTKNOW == nFontSlant); + aPropExtractor.invalidateItem(PROPERTY_FONT_UNDERLINE, FontItemIds::CFID_UNDERLINE, *_pSet, css::awt::FontUnderline::DONTKNOW == nFontLineStyle); + aPropExtractor.invalidateItem(PROPERTY_FONT_STRIKEOUT, FontItemIds::CFID_STRIKEOUT, *_pSet, css::awt::FontStrikeout::DONTKNOW == nFontStrikeout); + aPropExtractor.invalidateItem(PROPERTY_WORDLINEMODE, FontItemIds::CFID_WORDLINEMODE, *_pSet); + aPropExtractor.invalidateItem(PROPERTY_TEXTCOLOR, FontItemIds::CFID_CHARCOLOR, *_pSet); + aPropExtractor.invalidateItem(PROPERTY_FONT_RELIEF, FontItemIds::CFID_RELIEF, *_pSet); + aPropExtractor.invalidateItem(PROPERTY_FONT_EMPHASIS_MARK, FontItemIds::CFID_EMPHASIS, *_pSet); } catch (const Exception&) { @@ -298,70 +326,70 @@ namespace pcr { // font name - SfxItemState eState = _rSet.GetItemState(CFID_FONT); + SfxItemState eState = _rSet.GetItemState(FontItemIds::CFID_FONT); if ( eState == SfxItemState::SET ) { const SvxFontItem& rFontItem = - static_cast<const SvxFontItem&>(_rSet.Get(CFID_FONT)); + static_cast<const SvxFontItem&>(_rSet.Get(FontItemIds::CFID_FONT)); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_NAME , makeAny(rFontItem.GetFamilyName())); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_STYLENAME, makeAny(rFontItem.GetStyleName())); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_FAMILY , makeAny(static_cast<sal_Int16>(rFontItem.GetFamily()))); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_CHARSET , makeAny(static_cast<sal_Int16>(rFontItem.GetCharSet()))); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_NAME , Any(rFontItem.GetFamilyName())); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_STYLENAME, Any(rFontItem.GetStyleName())); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_FAMILY , Any(static_cast<sal_Int16>(rFontItem.GetFamily()))); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_CHARSET , Any(static_cast<sal_Int16>(rFontItem.GetCharSet()))); } // font height - eState = _rSet.GetItemState(CFID_HEIGHT); + eState = _rSet.GetItemState(FontItemIds::CFID_HEIGHT); if ( eState == SfxItemState::SET ) { const SvxFontHeightItem& rSvxFontHeightItem = - static_cast<const SvxFontHeightItem&>(_rSet.Get(CFID_HEIGHT)); + static_cast<const SvxFontHeightItem&>(_rSet.Get(FontItemIds::CFID_HEIGHT)); float nHeight = static_cast<float>(o3tl::convert(rSvxFontHeightItem.GetHeight(), o3tl::Length::twip, o3tl::Length::pt)); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_HEIGHT,makeAny(nHeight)); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_HEIGHT,Any(nHeight)); } // font weight - eState = _rSet.GetItemState(CFID_WEIGHT); + eState = _rSet.GetItemState(FontItemIds::CFID_WEIGHT); if ( eState == SfxItemState::SET ) { const SvxWeightItem& rWeightItem = - static_cast<const SvxWeightItem&>(_rSet.Get(CFID_WEIGHT)); + static_cast<const SvxWeightItem&>(_rSet.Get(FontItemIds::CFID_WEIGHT)); float nWeight = vcl::unohelper::ConvertFontWeight(rWeightItem.GetWeight()); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_WEIGHT,makeAny(nWeight)); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_WEIGHT,Any(nWeight)); } // font slant - eState = _rSet.GetItemState(CFID_POSTURE); + eState = _rSet.GetItemState(FontItemIds::CFID_POSTURE); if ( eState == SfxItemState::SET ) { const SvxPostureItem& rPostureItem = - static_cast<const SvxPostureItem&>(_rSet.Get(CFID_POSTURE)); + static_cast<const SvxPostureItem&>(_rSet.Get(FontItemIds::CFID_POSTURE)); css::awt::FontSlant eSlant = vcl::unohelper::ConvertFontSlant(rPostureItem.GetPosture()); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_SLANT, makeAny(static_cast<sal_Int16>(eSlant))); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_SLANT, Any(static_cast<sal_Int16>(eSlant))); } // font underline - eState = _rSet.GetItemState(CFID_UNDERLINE); + eState = _rSet.GetItemState(FontItemIds::CFID_UNDERLINE); if ( eState == SfxItemState::SET ) { const SvxUnderlineItem& rUnderlineItem = - static_cast<const SvxUnderlineItem&>(_rSet.Get(CFID_UNDERLINE)); + static_cast<const SvxUnderlineItem&>(_rSet.Get(FontItemIds::CFID_UNDERLINE)); sal_Int16 nUnderline = static_cast<sal_Int16>(rUnderlineItem.GetLineStyle()); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_UNDERLINE,makeAny(nUnderline)); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_UNDERLINE,Any(nUnderline)); // the text line color is transported in this item, too Color nColor = rUnderlineItem.GetColor(); @@ -375,37 +403,37 @@ namespace pcr // font strikeout - eState = _rSet.GetItemState(CFID_STRIKEOUT); + eState = _rSet.GetItemState(FontItemIds::CFID_STRIKEOUT); if ( eState == SfxItemState::SET ) { const SvxCrossedOutItem& rCrossedOutItem = - static_cast<const SvxCrossedOutItem&>(_rSet.Get(CFID_STRIKEOUT)); + static_cast<const SvxCrossedOutItem&>(_rSet.Get(FontItemIds::CFID_STRIKEOUT)); sal_Int16 nStrikeout = static_cast<sal_Int16>(rCrossedOutItem.GetStrikeout()); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_STRIKEOUT,makeAny(nStrikeout)); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_STRIKEOUT,Any(nStrikeout)); } // font wordline mode - eState = _rSet.GetItemState(CFID_WORDLINEMODE); + eState = _rSet.GetItemState(FontItemIds::CFID_WORDLINEMODE); if ( eState == SfxItemState::SET ) { const SvxWordLineModeItem& rWordLineModeItem = - static_cast<const SvxWordLineModeItem&>(_rSet.Get(CFID_WORDLINEMODE)); + _rSet.Get(FontItemIds::CFID_WORDLINEMODE); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_WORDLINEMODE, css::uno::makeAny(rWordLineModeItem.GetValue())); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_WORDLINEMODE, css::uno::Any(rWordLineModeItem.GetValue())); } // text color - eState = _rSet.GetItemState(CFID_CHARCOLOR); + eState = _rSet.GetItemState(FontItemIds::CFID_CHARCOLOR); if ( eState == SfxItemState::SET ) { const SvxColorItem& rColorItem = - static_cast<const SvxColorItem&>(_rSet.Get(CFID_CHARCOLOR)); + static_cast<const SvxColorItem&>(_rSet.Get(FontItemIds::CFID_CHARCOLOR)); Color nColor = rColorItem.GetValue(); @@ -418,26 +446,25 @@ namespace pcr // font relief - eState = _rSet.GetItemState(CFID_RELIEF); + eState = _rSet.GetItemState(FontItemIds::CFID_RELIEF); if ( eState == SfxItemState::SET ) { const SvxCharReliefItem& rReliefItem = - static_cast<const SvxCharReliefItem&>(_rSet.Get(CFID_RELIEF)); + static_cast<const SvxCharReliefItem&>(_rSet.Get(FontItemIds::CFID_RELIEF)); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_RELIEF, makeAny(static_cast<sal_Int16>(rReliefItem.GetValue())) ); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_RELIEF, Any(static_cast<sal_Int16>(rReliefItem.GetValue())) ); } // font emphasis mark - eState = _rSet.GetItemState(CFID_EMPHASIS); + eState = _rSet.GetItemState(FontItemIds::CFID_EMPHASIS); if ( eState == SfxItemState::SET ) { - const SvxEmphasisMarkItem& rEmphMarkItem = - static_cast<const SvxEmphasisMarkItem&>(_rSet.Get(CFID_EMPHASIS)); + const SvxEmphasisMarkItem& rEmphMarkItem = _rSet.Get(FontItemIds::CFID_EMPHASIS); - lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_EMPHASIS_MARK, makeAny(static_cast<sal_Int16>(rEmphMarkItem.GetEmphasisMark())) ); + lcl_pushBackPropertyValue( _out_properties, PROPERTY_FONT_EMPHASIS_MARK, Any(static_cast<sal_Int16>(rEmphMarkItem.GetEmphasisMark())) ); } } catch (const Exception& ) @@ -465,103 +492,89 @@ namespace pcr } } - void ControlCharacterDialog::createItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults) + static ItemInfoPackage& getItemInfoPackageCntChrDlg() { - // just to be sure... - _rpSet = nullptr; - _rpPool = nullptr; - _rpDefaults = nullptr; - - // create and initialize the defaults - _rpDefaults = new std::vector<SfxPoolItem*>(CFID_LAST_ITEM_ID - CFID_FIRST_ITEM_ID + 1); - - vcl::Font aDefaultVCLFont = Application::GetDefaultDevice()->GetSettings().GetStyleSettings().GetAppFont(); - - SfxPoolItem** pCounter = _rpDefaults->data(); // want to modify this without affecting the out param _rppDefaults - *pCounter++ = new SvxFontItem(aDefaultVCLFont.GetFamilyType(), aDefaultVCLFont.GetFamilyName(), aDefaultVCLFont.GetStyleName(), aDefaultVCLFont.GetPitch(), aDefaultVCLFont.GetCharSet(), CFID_FONT); - *pCounter++ = new SvxFontHeightItem(aDefaultVCLFont.GetFontHeight(), 100, CFID_HEIGHT); - *pCounter++ = new SvxWeightItem(aDefaultVCLFont.GetWeight(), CFID_WEIGHT); - *pCounter++ = new SvxPostureItem(aDefaultVCLFont.GetItalic(), CFID_POSTURE); - *pCounter++ = new SvxLanguageItem(Application::GetSettings().GetUILanguageTag().getLanguageType(), CFID_LANGUAGE); - *pCounter++ = new SvxUnderlineItem(aDefaultVCLFont.GetUnderline(), CFID_UNDERLINE); - *pCounter++ = new SvxCrossedOutItem(aDefaultVCLFont.GetStrikeout(), CFID_STRIKEOUT); - *pCounter++ = new SvxWordLineModeItem(aDefaultVCLFont.IsWordLineMode(), CFID_WORDLINEMODE); - *pCounter++ = new SvxColorItem(aDefaultVCLFont.GetColor(), CFID_CHARCOLOR); - *pCounter++ = new SvxCharReliefItem(aDefaultVCLFont.GetRelief(), CFID_RELIEF); - *pCounter++ = new SvxEmphasisMarkItem(aDefaultVCLFont.GetEmphasisMark(), CFID_EMPHASIS); - - *pCounter++ = new SvxFontItem(aDefaultVCLFont.GetFamilyType(), aDefaultVCLFont.GetFamilyName(), aDefaultVCLFont.GetStyleName(), aDefaultVCLFont.GetPitch(), aDefaultVCLFont.GetCharSet(), CFID_CJK_FONT); - *pCounter++ = new SvxFontHeightItem(aDefaultVCLFont.GetFontHeight(), 100, CFID_CJK_HEIGHT); - *pCounter++ = new SvxWeightItem(aDefaultVCLFont.GetWeight(), CFID_CJK_WEIGHT); - *pCounter++ = new SvxPostureItem(aDefaultVCLFont.GetItalic(), CFID_CJK_POSTURE); - *pCounter++ = new SvxLanguageItem(Application::GetSettings().GetUILanguageTag().getLanguageType(), CFID_CJK_LANGUAGE); - - *pCounter++ = new SvxCaseMapItem(SvxCaseMap::NotMapped, CFID_CASEMAP); - *pCounter++ = new SvxContourItem(false, CFID_CONTOUR); - *pCounter++ = new SvxShadowedItem(false, CFID_SHADOWED); - - *pCounter++ = new SvxFontListItem (new FontList(Application::GetDefaultDevice()), CFID_FONTLIST); - - // create the pool - static SfxItemInfo const aItemInfos[CFID_LAST_ITEM_ID - CFID_FIRST_ITEM_ID + 1] = + class ItemInfoPackageCntChrDlg : public ItemInfoPackage { - { SID_ATTR_CHAR_FONT, false }, - { SID_ATTR_CHAR_FONTHEIGHT, false }, - { SID_ATTR_CHAR_WEIGHT, false }, - { SID_ATTR_CHAR_POSTURE, false }, - { SID_ATTR_CHAR_LANGUAGE, false }, - { SID_ATTR_CHAR_UNDERLINE, false }, - { SID_ATTR_CHAR_STRIKEOUT, false }, - { SID_ATTR_CHAR_WORDLINEMODE, false }, - { SID_ATTR_CHAR_COLOR, false }, - { SID_ATTR_CHAR_RELIEF, false }, - { SID_ATTR_CHAR_EMPHASISMARK, false }, - { 0, false }, - { 0, false }, - { 0, false }, - { 0, false }, - { 0, false }, - { 0, false }, - { 0, false }, - { 0, false }, - { SID_ATTR_CHAR_FONTLIST, false } + vcl::Font maDefaultVCLFont{Application::GetDefaultDevice()->GetSettings().GetStyleSettings().GetAppFont()}; + typedef std::array<ItemInfoStatic, FontItemIds::CFID_LAST_ITEM_ID - FontItemIds::CFID_FIRST_ITEM_ID + 1> ItemInfoArrayCntChrDlg; + ItemInfoArrayCntChrDlg maItemInfos {{ + // m_nWhich, m_pItem, m_nSlotID, m_nItemInfoFlags + { FontItemIds::CFID_FONT, new SvxFontItem(maDefaultVCLFont.GetFamilyType(), maDefaultVCLFont.GetFamilyName(), maDefaultVCLFont.GetStyleName(), maDefaultVCLFont.GetPitch(), maDefaultVCLFont.GetCharSet(), FontItemIds::CFID_FONT), SID_ATTR_CHAR_FONT, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_HEIGHT, new SvxFontHeightItem(maDefaultVCLFont.GetFontHeight(), 100, FontItemIds::CFID_HEIGHT), SID_ATTR_CHAR_FONTHEIGHT, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_WEIGHT, new SvxWeightItem(maDefaultVCLFont.GetWeight(), FontItemIds::CFID_WEIGHT), SID_ATTR_CHAR_WEIGHT, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_POSTURE, new SvxPostureItem(maDefaultVCLFont.GetItalic(), FontItemIds::CFID_POSTURE), SID_ATTR_CHAR_POSTURE, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_LANGUAGE, new SvxLanguageItem(Application::GetSettings().GetUILanguageTag().getLanguageType(), FontItemIds::CFID_LANGUAGE), SID_ATTR_CHAR_LANGUAGE, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_UNDERLINE, new SvxUnderlineItem(maDefaultVCLFont.GetUnderline(), FontItemIds::CFID_UNDERLINE), SID_ATTR_CHAR_UNDERLINE, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_STRIKEOUT, new SvxCrossedOutItem(maDefaultVCLFont.GetStrikeout(), FontItemIds::CFID_STRIKEOUT), SID_ATTR_CHAR_STRIKEOUT, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_WORDLINEMODE, new SvxWordLineModeItem(maDefaultVCLFont.IsWordLineMode(), FontItemIds::CFID_WORDLINEMODE), SID_ATTR_CHAR_WORDLINEMODE, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_CHARCOLOR, new SvxColorItem(maDefaultVCLFont.GetColor(), FontItemIds::CFID_CHARCOLOR), SID_ATTR_CHAR_COLOR, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_RELIEF, new SvxCharReliefItem(maDefaultVCLFont.GetRelief(), FontItemIds::CFID_RELIEF), SID_ATTR_CHAR_RELIEF, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_EMPHASIS, new SvxEmphasisMarkItem(maDefaultVCLFont.GetEmphasisMark(), FontItemIds::CFID_EMPHASIS), SID_ATTR_CHAR_EMPHASISMARK, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_CJK_FONT, new SvxFontItem(maDefaultVCLFont.GetFamilyType(), maDefaultVCLFont.GetFamilyName(), maDefaultVCLFont.GetStyleName(), maDefaultVCLFont.GetPitch(), maDefaultVCLFont.GetCharSet(), FontItemIds::CFID_CJK_FONT), 0, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_CJK_HEIGHT, new SvxFontHeightItem(maDefaultVCLFont.GetFontHeight(), 100, FontItemIds::CFID_CJK_HEIGHT), 0, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_CJK_WEIGHT, new SvxWeightItem(maDefaultVCLFont.GetWeight(), FontItemIds::CFID_CJK_WEIGHT), 0, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_CJK_POSTURE, new SvxPostureItem(maDefaultVCLFont.GetItalic(), FontItemIds::CFID_CJK_POSTURE), 0, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_CJK_LANGUAGE, new SvxLanguageItem(Application::GetSettings().GetUILanguageTag().getLanguageType(), FontItemIds::CFID_CJK_LANGUAGE), 0, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_CASEMAP, new SvxCaseMapItem(SvxCaseMap::NotMapped, FontItemIds::CFID_CASEMAP), 0, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_CONTOUR, new SvxContourItem(false, FontItemIds::CFID_CONTOUR), 0, SFX_ITEMINFOFLAG_NONE }, + { FontItemIds::CFID_SHADOWED, new SvxShadowedItem(false, FontItemIds::CFID_SHADOWED), 0, SFX_ITEMINFOFLAG_NONE }, + + // SvxFontListItem has to be DynamicDefault. It is pool-dependent in the sense + // that it cannot/should not exist. Additionally SvxFontListItem has NO destructor + // and does not delete the contained/set FontList - this is done 'handish' in + // ControlCharacterDialog::destroyItemSet, see below... + { FontItemIds::CFID_FONTLIST, nullptr, SID_ATTR_CHAR_FONTLIST, SFX_ITEMINFOFLAG_NONE } + }}; + + virtual const ItemInfoStatic& getItemInfoStatic(size_t nIndex) const override { return maItemInfos[nIndex]; } + + public: + virtual size_t size() const override { return maItemInfos.size(); } + virtual const ItemInfo& getItemInfo(size_t nIndex, SfxItemPool& /*rPool*/) override { return maItemInfos[nIndex]; } }; - _rpPool = new SfxItemPool("PCRControlFontItemPool", CFID_FIRST_ITEM_ID, CFID_LAST_ITEM_ID, - aItemInfos, _rpDefaults); - _rpPool->FreezeIdRanges(); + static std::unique_ptr<ItemInfoPackageCntChrDlg> g_aItemInfoPackageCntChrDlg; + if (!g_aItemInfoPackageCntChrDlg) + g_aItemInfoPackageCntChrDlg.reset(new ItemInfoPackageCntChrDlg); + return *g_aItemInfoPackageCntChrDlg; + } + + void ControlCharacterDialog::createItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool, FontList& rFontList) + { + // just to be sure... + _rpSet = nullptr; + _rpPool = nullptr; + _rpPool = new SfxItemPool("PCRControlFontItemPool"); + _rpPool->registerItemInfoPackage( + getItemInfoPackageCntChrDlg(), + [&rFontList](sal_uInt16 nWhich) + { + SfxPoolItem* pRetval(nullptr); + if (FontItemIds::CFID_FONTLIST == nWhich) + pRetval = new SvxFontListItem(&rFontList, FontItemIds::CFID_FONTLIST); + return pRetval; + }); // and, finally, the set _rpSet.reset(new SfxItemSet(*_rpPool)); } - void ControlCharacterDialog::destroyItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool, std::vector<SfxPoolItem*>*& _rpDefaults) + void ControlCharacterDialog::destroyItemSet(std::unique_ptr<SfxItemSet>& _rpSet, rtl::Reference<SfxItemPool>& _rpPool) { - // from the pool, get and remember the font list (needs to be deleted) - const SvxFontListItem& rFontListItem = static_cast<const SvxFontListItem&>(_rpPool->GetDefaultItem(CFID_FONTLIST)); - const FontList* pFontList = rFontListItem.GetFontList(); - // _first_ delete the set (referring the pool) _rpSet.reset(); // delete the pool - _rpPool->ReleaseDefaults(true); - // the "true" means delete the items, too _rpPool = nullptr; - - // reset the defaults ptr - _rpDefaults = nullptr; - // no need to explicitly delete the defaults, this has been done by the ReleaseDefaults - - delete pFontList; } - void ControlCharacterDialog::PageCreated(const OString& rId, SfxTabPage& rPage) + void ControlCharacterDialog::PageCreated(const OUString& rId, SfxTabPage& rPage) { SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool())); if (rId == "font") { - aSet.Put (static_cast<const SvxFontListItem&>(GetInputSetImpl()->Get(CFID_FONTLIST))); + aSet.Put (static_cast<const SvxFontListItem&>(GetInputSetImpl()->Get(FontItemIds::CFID_FONTLIST))); aSet.Put (SfxUInt16Item(SID_DISABLE_CTL,DISABLE_HIDE_LANGUAGE)); rPage.PageCreated(aSet); } |