12 #include <rtl/ustrbuf.hxx>
15 #include <unordered_set>
21 FontFeaturesDialog::FontFeaturesDialog(
weld::Window* pParent, OUString
const& rFontName)
22 : GenericDialogController(pParent,
"cui/ui/fontfeaturesdialog.ui",
"FontFeaturesDialog")
23 , m_sFontName(rFontName)
24 , m_xContentWindow(m_xBuilder->weld_scrolled_window(
"contentWindow"))
25 , m_xContentGrid(m_xBuilder->weld_container(
"contentGrid"))
26 , m_xPreviewWindow(new
weld::CustomWeld(*m_xBuilder,
"preview", m_aPreviewWindow))
41 rNameBox.
append(OUString::number(rParameter.getCode()), rParameter.getDescription());
42 if (rParameter.getCode() == nDefault)
52 DeviceFormat::DEFAULT, DeviceFormat::DEFAULT);
55 std::unordered_set<sal_uInt32> aDoneFeatures;
56 std::vector<vcl::font::Feature> rFilteredFontFeatures;
60 sal_uInt32 nFontFeatureCode = rFontFeature.m_aID.m_aFeatureCode;
61 if (!aDoneFeatures.insert(nFontFeatureCode).second)
63 rFilteredFontFeatures.push_back(rFontFeature);
66 int nRowHeight =
fillGrid(rFilteredFontFeatures);
71 static_cast<tools::Long>(300L)));
92 sal_uInt32 nFontFeatureCode = rFontFeature.m_aID.m_aFeatureCode;
95 if (rFontFeature.m_aDefinition)
96 aDefinition = rFontFeature.m_aDefinition;
98 aDefinition = { nFontFeatureCode,
"" };
103 if (aExistingFeatures.find(nFontFeatureCode) != aExistingFeatures.end())
104 nValue = aExistingFeatures.at(nFontFeatureCode);
112 sal_Int32 nGridPositionX = (i % 2) * 2;
113 sal_Int32 nGridPositionY = i / 2;
114 aCurrentItem.
m_xContainer->set_grid_left_attach(nGridPositionX);
115 aCurrentItem.
m_xContainer->set_grid_top_attach(nGridPositionY);
129 aCurrentItem.
m_xCombo->set_active(nInit);
130 aCurrentItem.
m_xCombo->connect_changed(aComboBoxSelectHandler);
135 aCurrentItem.
m_xCheck->set_active(nValue > 0);
137 aCurrentItem.
m_xCheck->connect_toggled(aCheckBoxToggleHandler);
142 = std::max<int>(nRowHeight, aCurrentItem.
m_xContainer->get_preferred_size().Height());
177 OUString sResultFontName;
178 OUStringBuffer sNameSuffix;
183 if (rItem.m_xCheck->get_visible())
185 if (sal_uInt32(rItem.m_xCheck->get_active()) != rItem.m_nDefault)
193 if (!rItem.m_xCheck->get_active())
194 sNameSuffix.append(
"=0");
197 else if (rItem.m_xCombo->get_visible() && rItem.m_xText->get_visible())
199 sal_Int32 nSelection = rItem.m_xCombo->get_active_id().toInt32();
200 if (nSelection !=
int(rItem.m_nDefault))
208 sNameSuffix.append(
"=");
209 sNameSuffix.append(OUString::number(nSelection));
214 if (!sNameSuffix.isEmpty())
217 return sResultFontName;
222 short nResult = GenericDialogController::run();
#define LINK(Instance, Class, Member)
OUString m_sResultFontName
constexpr const char FeaturePrefix
OUString getDescription() const
OUString createFontNameWithFeatures()
IMPL_LINK_NOARG(ColorPickerDialog, ColorFieldControlModifydl, ColorFieldControl &, void)
OUString featureCodeAsString(uint32_t nFeature)
virtual short run() override
const std::vector< FeatureParameter > & getEnumParameters() const
void append(const OUString &rId, const OUString &rStr)
uint32_t getDefault() const
std::unordered_map< uint32_t, uint32_t > getFeaturesMap() const
OUString trimFontNameFeatures(OUString const &rFontName)
static OutputDevice * GetDefaultDevice()
void SetFont(const SvxFont &rNormalFont, const SvxFont &rCJKFont, const SvxFont &rCTLFont)
std::vector< vcl::font::Feature > getFontFeatureList(OUString const &rFontName, VirtualDevice &rVDev)
constexpr const char FeatureSeparator
std::unique_ptr< weld::ScrolledWindow > m_xContentWindow
void SetFamilyName(const OUString &rFamilyName)
std::unique_ptr< weld::Widget > m_xContainer
static sal_Int32 makeEnumComboBox(weld::ComboBox &rNameBox, vcl::font::FeatureDefinition const &rFeatureDefinition, uint32_t nDefault)
FeatureParameterType getType() const
int fillGrid(std::vector< vcl::font::Feature > const &rFontFeatures)
std::vector< FontFeatureItem > m_aFeatureItems
std::unique_ptr< weld::Label > m_xText
std::unique_ptr< weld::ComboBox > m_xCombo
SvxFontPrevWindow m_aPreviewWindow
sal_uInt32 m_aFeatureCode
std::unique_ptr< weld::Container > m_xContentGrid
~FontFeaturesDialog() override
std::unique_ptr< weld::CheckButton > m_xCheck