summaryrefslogtreecommitdiffstats
path: root/extensions/source/propctrlr/fontdialog.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/source/propctrlr/fontdialog.cxx')
-rw-r--r--extensions/source/propctrlr/fontdialog.cxx277
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);
}