summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cui/Library_cui.mk1
-rw-r--r--cui/UIConfig_cui.mk1
-rw-r--r--cui/source/dialogs/FontFeaturesDialog.cxx233
-rw-r--r--cui/source/inc/FontFeaturesDialog.hxx66
-rw-r--r--cui/source/inc/chardlg.hxx6
-rw-r--r--cui/source/tabpages/chardlg.cxx47
-rw-r--r--cui/uiconfig/ui/charnamepage.ui111
-rw-r--r--cui/uiconfig/ui/fontfeaturesdialog.ui177
8 files changed, 615 insertions, 27 deletions
diff --git a/cui/Library_cui.mk b/cui/Library_cui.mk
index 44bac812c557..7ae5435fd6ed 100644
--- a/cui/Library_cui.mk
+++ b/cui/Library_cui.mk
@@ -102,6 +102,7 @@ $(eval $(call gb_Library_add_exception_objects,cui,\
cui/source/dialogs/cuiimapwnd \
cui/source/dialogs/cuitbxform \
cui/source/dialogs/dlgname \
+ cui/source/dialogs/FontFeaturesDialog \
cui/source/dialogs/hangulhanjadlg \
cui/source/dialogs/hldocntp \
cui/source/dialogs/hldoctp \
diff --git a/cui/UIConfig_cui.mk b/cui/UIConfig_cui.mk
index be4a3ac180a8..dd3e94bb1a9b 100644
--- a/cui/UIConfig_cui.mk
+++ b/cui/UIConfig_cui.mk
@@ -63,6 +63,7 @@ $(eval $(call gb_UIConfig_add_uifiles,cui,\
cui/uiconfig/ui/effectspage \
cui/uiconfig/ui/eventsconfigpage \
cui/uiconfig/ui/formatcellsdialog \
+ cui/uiconfig/ui/fontfeaturesdialog \
cui/uiconfig/ui/galleryapplyprogress \
cui/uiconfig/ui/galleryfilespage \
cui/uiconfig/ui/gallerygeneralpage \
diff --git a/cui/source/dialogs/FontFeaturesDialog.cxx b/cui/source/dialogs/FontFeaturesDialog.cxx
new file mode 100644
index 000000000000..6f9543c13109
--- /dev/null
+++ b/cui/source/dialogs/FontFeaturesDialog.cxx
@@ -0,0 +1,233 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#include <FontFeaturesDialog.hxx>
+
+#include <vcl/font/FeatureParser.hxx>
+#include <svx/strings.hrc>
+#include <svx/dialmgr.hxx>
+
+using namespace css;
+
+namespace cui
+{
+FontFeaturesDialog::FontFeaturesDialog(vcl::Window* pParent, OUString const& rFontName)
+ : ModalDialog(pParent, "FontFeaturesDialog", "cui/ui/fontfeaturesdialog.ui")
+ , m_sFontName(rFontName)
+{
+ get(m_pContentGrid, "contentGrid");
+ get(m_pPreviewWindow, "preview");
+ initialize();
+}
+
+FontFeaturesDialog::~FontFeaturesDialog() { disposeOnce(); }
+
+VclPtr<ComboBox> makeEnumComboBox(vcl::Window* pParent,
+ vcl::font::FeatureDefinition const& rFeatureDefinition)
+{
+ VclPtr<ComboBox> aNameBox(
+ VclPtr<ComboBox>::Create(pParent, WB_TABSTOP | WB_DROPDOWN | WB_AUTOHSCROLL));
+ aNameBox->InsertEntry(SvxResId(RID_SVXSTR_NONE));
+ for (vcl::font::FeatureParameter const& rParameter : rFeatureDefinition.getEnumParameters())
+ {
+ aNameBox->InsertEntry(rParameter.getDescription());
+ }
+ aNameBox->EnableAutoSize(true);
+ return aNameBox;
+}
+
+void FontFeaturesDialog::initialize()
+{
+ ScopedVclPtrInstance<VirtualDevice> aVDev(*Application::GetDefaultDevice(),
+ DeviceFormat::DEFAULT, DeviceFormat::DEFAULT);
+ aVDev->SetOutputSizePixel(Size(10, 10));
+
+ vcl::Font aFont = aVDev->GetFont();
+ aFont.SetFamilyName(m_sFontName);
+ aVDev->SetFont(aFont);
+
+ std::vector<vcl::font::Feature> rFontFeatures;
+
+ if (!aVDev->GetFontFeatures(rFontFeatures))
+ return;
+
+ vcl::font::FeatureParser aParser(m_sFontName);
+ std::unordered_map<sal_uInt32, sal_uInt32> aExistingFeatures = aParser.getFeaturesMap();
+
+ std::unordered_set<sal_uInt32> aDoneFeatures;
+
+ sal_Int32 i = 0;
+ for (vcl::font::Feature const& rFontFeature : rFontFeatures)
+ {
+ sal_uInt32 nFontFeatureCode = rFontFeature.m_aID.m_aFeatureCode;
+
+ if (aDoneFeatures.find(nFontFeatureCode) != aDoneFeatures.end())
+ continue;
+
+ aDoneFeatures.insert(nFontFeatureCode);
+
+ vcl::font::FeatureDefinition aDefinition;
+ if (rFontFeature.m_aDefinition)
+ aDefinition = rFontFeature.m_aDefinition;
+ if (!aDefinition)
+ aDefinition = { nFontFeatureCode, nullptr };
+
+ m_aFeatureItems.emplace_back();
+
+ sal_uInt32 nValue = 0;
+ if (aExistingFeatures.find(nFontFeatureCode) != aExistingFeatures.end())
+ nValue = aExistingFeatures.at(nFontFeatureCode);
+
+ FontFeatureItem& aCurrentItem = m_aFeatureItems.back();
+ aCurrentItem.m_aFeatureCode = nFontFeatureCode;
+
+ sal_Int32 nGridPositionX = (i % 2) * 2;
+ sal_Int32 nGridPositionY = i / 2;
+
+ Link<ComboBox&, void> aComboBoxSelectHandler
+ = LINK(this, FontFeaturesDialog, ComboBoxSelectedHdl);
+ Link<CheckBox&, void> aCheckBoxToggleHandler
+ = LINK(this, FontFeaturesDialog, CheckBoxToggledHdl);
+
+ if (aDefinition.getType() == vcl::font::FeatureParameterType::ENUM)
+ {
+ aCurrentItem.m_pText
+ = VclPtr<FixedText>::Create(m_pContentGrid, WB_LEFT | WB_VCENTER | WB_3DLOOK);
+ aCurrentItem.m_pText->set_grid_left_attach(nGridPositionX);
+ aCurrentItem.m_pText->set_grid_top_attach(nGridPositionY);
+ aCurrentItem.m_pText->set_margin_left(6);
+ aCurrentItem.m_pText->set_margin_right(6);
+ aCurrentItem.m_pText->set_margin_top(3);
+ aCurrentItem.m_pText->set_margin_bottom(3);
+ aCurrentItem.m_pText->SetText(aDefinition.getDescription());
+ aCurrentItem.m_pText->Show();
+
+ aCurrentItem.m_pCombo = makeEnumComboBox(m_pContentGrid, aDefinition);
+
+ aCurrentItem.m_pCombo->SelectEntryPos(nValue);
+ aCurrentItem.m_pCombo->set_grid_left_attach(nGridPositionX + 1);
+ aCurrentItem.m_pCombo->set_grid_top_attach(nGridPositionY);
+ aCurrentItem.m_pCombo->set_margin_left(6);
+ aCurrentItem.m_pCombo->set_margin_right(6);
+ aCurrentItem.m_pCombo->set_margin_top(3);
+ aCurrentItem.m_pCombo->set_margin_bottom(3);
+ aCurrentItem.m_pCombo->SetSelectHdl(aComboBoxSelectHandler);
+ aCurrentItem.m_pCombo->Show();
+ }
+ else
+ {
+ aCurrentItem.m_pCheck = VclPtr<CheckBox>::Create(
+ m_pContentGrid, WB_CLIPCHILDREN | WB_LEFT | WB_VCENTER | WB_3DLOOK);
+ aCurrentItem.m_pCheck->set_grid_left_attach(nGridPositionX);
+ aCurrentItem.m_pCheck->set_grid_top_attach(nGridPositionY);
+ aCurrentItem.m_pCheck->set_grid_width(2);
+ aCurrentItem.m_pCheck->set_margin_left(6);
+ aCurrentItem.m_pCheck->set_margin_right(6);
+ aCurrentItem.m_pCheck->set_margin_top(3);
+ aCurrentItem.m_pCheck->set_margin_bottom(3);
+ aCurrentItem.m_pCheck->Check(nValue > 0);
+ aCurrentItem.m_pCheck->SetText(aDefinition.getDescription());
+ aCurrentItem.m_pCheck->SetToggleHdl(aCheckBoxToggleHandler);
+ aCurrentItem.m_pCheck->Show();
+ }
+
+ i++;
+ }
+
+ updateFontPreview();
+}
+
+void FontFeaturesDialog::updateFontPreview()
+{
+ vcl::Font rPreviewFont = m_pPreviewWindow->GetFont();
+ vcl::Font rPreviewFontCJK = m_pPreviewWindow->GetCJKFont();
+ vcl::Font rPreviewFontCTL = m_pPreviewWindow->GetCTLFont();
+
+ OUString sNewFontName = createFontNameWithFeatures();
+
+ rPreviewFont.SetFamilyName(sNewFontName);
+ rPreviewFontCJK.SetFamilyName(sNewFontName);
+ rPreviewFontCTL.SetFamilyName(sNewFontName);
+
+ m_pPreviewWindow->SetFont(rPreviewFont, rPreviewFontCJK, rPreviewFontCTL);
+}
+
+void FontFeaturesDialog::dispose()
+{
+ m_pContentGrid.clear();
+ m_pPreviewWindow.clear();
+ for (FontFeatureItem& rItem : m_aFeatureItems)
+ {
+ rItem.m_pText.disposeAndClear();
+ rItem.m_pCombo.disposeAndClear();
+ rItem.m_pCheck.disposeAndClear();
+ }
+ ModalDialog::dispose();
+}
+
+IMPL_LINK_NOARG(FontFeaturesDialog, CheckBoxToggledHdl, CheckBox&, void) { updateFontPreview(); }
+
+IMPL_LINK_NOARG(FontFeaturesDialog, ComboBoxSelectedHdl, ComboBox&, void) { updateFontPreview(); }
+
+OUString FontFeaturesDialog::createFontNameWithFeatures()
+{
+ OUString sResultFontName;
+ OUString sNameSuffix;
+ bool bFirst = true;
+
+ for (FontFeatureItem& rItem : m_aFeatureItems)
+ {
+ if (rItem.m_pCheck)
+ {
+ if (rItem.m_pCheck->IsChecked())
+ {
+ if (!bFirst)
+ sNameSuffix += OUString(vcl::font::FeatureSeparator);
+ else
+ bFirst = false;
+
+ sNameSuffix += vcl::font::featureCodeAsString(rItem.m_aFeatureCode);
+ }
+ }
+ else if (rItem.m_pCombo && rItem.m_pText)
+ {
+ sal_uInt32 nSelection = rItem.m_pCombo->GetSelectedEntryPos();
+ if (nSelection > 0)
+ {
+ if (!bFirst)
+ sNameSuffix += OUString(vcl::font::FeatureSeparator);
+ else
+ bFirst = false;
+
+ sNameSuffix += vcl::font::featureCodeAsString(rItem.m_aFeatureCode);
+ sNameSuffix += "=";
+ sNameSuffix += OUString::number(nSelection);
+ }
+ }
+ }
+ sResultFontName = vcl::font::trimFontNameFeatures(m_sFontName);
+ if (!sNameSuffix.isEmpty())
+ sResultFontName += OUString(vcl::font::FeaturePrefix) + sNameSuffix;
+ return sResultFontName;
+}
+
+short FontFeaturesDialog::Execute()
+{
+ short nResult = ModalDialog::Execute();
+ if (nResult == RET_OK)
+ {
+ m_sResultFontName = createFontNameWithFeatures();
+ }
+ return nResult;
+}
+
+} // end svx namespace
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/inc/FontFeaturesDialog.hxx b/cui/source/inc/FontFeaturesDialog.hxx
new file mode 100644
index 000000000000..9f1421594ac9
--- /dev/null
+++ b/cui/source/inc/FontFeaturesDialog.hxx
@@ -0,0 +1,66 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#ifndef INCLUDED_CUI_SOURCE_INC_FONTFEATURESDIALOG_HXX
+#define INCLUDED_CUI_SOURCE_INC_FONTFEATURESDIALOG_HXX
+
+#include <vcl/layout.hxx>
+#include <vcl/font/Feature.hxx>
+#include <svx/fntctrl.hxx>
+#include "chardlg.hxx"
+#include <memory>
+
+namespace cui
+{
+struct FontFeatureItem
+{
+ FontFeatureItem()
+ : m_aFeatureCode(0)
+ {
+ }
+
+ sal_uInt32 m_aFeatureCode;
+ VclPtr<Control> m_pText;
+ VclPtr<ComboBox> m_pCombo;
+ VclPtr<CheckBox> m_pCheck;
+};
+
+class FontFeaturesDialog : public ModalDialog
+{
+private:
+ VclPtr<VclGrid> m_pContentGrid;
+ VclPtr<SvxFontPrevWindow> m_pPreviewWindow;
+
+ std::vector<FontFeatureItem> m_aFeatureItems;
+ OUString m_sFontName;
+ OUString m_sResultFontName;
+
+ void initialize();
+ OUString createFontNameWithFeatures();
+
+ DECL_LINK(ComboBoxSelectedHdl, ComboBox&, void);
+ DECL_LINK(CheckBoxToggledHdl, CheckBox&, void);
+
+public:
+ FontFeaturesDialog(vcl::Window* pParent, OUString const& rFontName);
+ ~FontFeaturesDialog() override;
+ void dispose() override;
+ short Execute() override;
+
+ OUString getResultFontName() { return m_sResultFontName; }
+
+ void updateFontPreview();
+};
+
+} // end svx namespaces
+
+#endif // INCLUDED_CUI_SOURCE_INC_FONTFEATURESDIALOG_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/inc/chardlg.hxx b/cui/source/inc/chardlg.hxx
index 25235e19d880..cee534052568 100644
--- a/cui/source/inc/chardlg.hxx
+++ b/cui/source/inc/chardlg.hxx
@@ -27,6 +27,7 @@
#include <svx/langbox.hxx>
#include <vcl/layout.hxx>
#include <vcl/weld.hxx>
+#include <vcl/button.hxx>
#include <memory>
// forward ---------------------------------------------------------------
@@ -109,6 +110,7 @@ private:
VclPtr<FixedText> m_pWestFontLanguageFT;
VclPtr<SvxLanguageComboBox> m_pWestFontLanguageLB;
VclPtr<FixedText> m_pWestFontTypeFT;
+ VclPtr<PushButton> m_pWestFontFeaturesButton;
VclPtr<VclContainer> m_pEastFrame;
VclPtr<FixedText> m_pEastFontNameFT;
@@ -120,6 +122,7 @@ private:
VclPtr<FixedText> m_pEastFontLanguageFT;
VclPtr<SvxLanguageBox> m_pEastFontLanguageLB;
VclPtr<FixedText> m_pEastFontTypeFT;
+ VclPtr<PushButton> m_pEastFontFeaturesButton;
VclPtr<VclContainer> m_pCTLFrame;
VclPtr<FixedText> m_pCTLFontNameFT;
@@ -131,6 +134,7 @@ private:
VclPtr<FixedText> m_pCTLFontLanguageFT;
VclPtr<SvxLanguageBox> m_pCTLFontLanguageLB;
VclPtr<FixedText> m_pCTLFontTypeFT;
+ VclPtr<PushButton> m_pCTLFontFeaturesButton;
std::unique_ptr<SvxCharNamePage_Impl> m_pImpl;
@@ -164,6 +168,8 @@ private:
DECL_LINK( FontModifyEditHdl_Impl, Edit&, void );
DECL_LINK( FontModifyListBoxHdl_Impl, ListBox&, void );
DECL_LINK( FontModifyComboBoxHdl_Impl, ComboBox&, void );
+ DECL_LINK(FontFeatureButtonClicked, Button*, void);
+
void FontModifyHdl_Impl(void const *);
public:
diff --git a/cui/source/tabpages/chardlg.cxx b/cui/source/tabpages/chardlg.cxx
index 612cb2fc4b3b..03fc6723cbe4 100644
--- a/cui/source/tabpages/chardlg.cxx
+++ b/cui/source/tabpages/chardlg.cxx
@@ -69,6 +69,7 @@
#include <svl/intitem.hxx>
#include <sfx2/request.hxx>
#include <svx/flagsdef.hxx>
+#include <FontFeaturesDialog.hxx>
using namespace ::com::sun::star;
@@ -302,6 +303,8 @@ SvxCharNamePage::SvxCharNamePage( vcl::Window* pParent, const SfxItemSet& rInSet
get(m_pWestFontLanguageFT, "westlangft-cjk");
get(m_pWestFontLanguageLB, "westlanglb-cjk");
get(m_pWestFontTypeFT, "westfontinfo-cjk");
+
+ get(m_pWestFontFeaturesButton, "west_features_button-cjk");
}
else
{
@@ -328,6 +331,7 @@ SvxCharNamePage::SvxCharNamePage( vcl::Window* pParent, const SfxItemSet& rInSet
get(m_pEastFontLanguageFT, "eastlangft");
get(m_pEastFontLanguageLB, "eastlanglb");
get(m_pEastFontTypeFT, "eastfontinfo");
+ get(m_pEastFontFeaturesButton, "east_features_button");
get(m_pCTLFrame, "ctl");
get(m_pCTLFontNameFT, "ctlfontnameft");
@@ -339,6 +343,7 @@ SvxCharNamePage::SvxCharNamePage( vcl::Window* pParent, const SfxItemSet& rInSet
get(m_pCTLFontLanguageFT, "ctllangft");
get(m_pCTLFontLanguageLB, "ctllanglb");
get(m_pCTLFontTypeFT, "ctlfontinfo");
+ get(m_pCTLFontFeaturesButton, "ctl_features_button");
//In MacOSX the standard dialogs name font-name, font-style as
//Family, Typeface
@@ -404,6 +409,7 @@ void SvxCharNamePage::dispose()
m_pWestFontSizeLB.clear();
m_pWestFontLanguageFT.clear();
m_pWestFontLanguageLB.clear();
+ m_pWestFontFeaturesButton.clear();
m_pWestFontTypeFT.clear();
m_pEastFrame.clear();
m_pEastFontNameFT.clear();
@@ -415,6 +421,7 @@ void SvxCharNamePage::dispose()
m_pEastFontLanguageFT.clear();
m_pEastFontLanguageLB.clear();
m_pEastFontTypeFT.clear();
+ m_pEastFontFeaturesButton.clear();
m_pCTLFrame.clear();
m_pCTLFontNameFT.clear();
m_pCTLFontNameLB.clear();
@@ -425,6 +432,8 @@ void SvxCharNamePage::dispose()
m_pCTLFontLanguageFT.clear();
m_pCTLFontLanguageLB.clear();
m_pCTLFontTypeFT.clear();
+ m_pCTLFontFeaturesButton.clear();
+
SvxCharBasePage::dispose();
}
@@ -438,14 +447,20 @@ void SvxCharNamePage::Initialize()
m_pWestFontStyleLB->SetModifyHdl( aLink );
m_pWestFontSizeLB->SetModifyHdl( aLink );
m_pWestFontLanguageLB->SetSelectHdl( LINK( this, SvxCharNamePage, FontModifyComboBoxHdl_Impl ) );
+
+ m_pWestFontFeaturesButton->SetClickHdl(LINK(this, SvxCharNamePage, FontFeatureButtonClicked));
+
m_pEastFontNameLB->SetModifyHdl( aLink );
m_pEastFontStyleLB->SetModifyHdl( aLink );
m_pEastFontSizeLB->SetModifyHdl( aLink );
m_pEastFontLanguageLB->SetSelectHdl( LINK( this, SvxCharNamePage, FontModifyListBoxHdl_Impl ) );
+ m_pEastFontFeaturesButton->SetClickHdl(LINK(this, SvxCharNamePage, FontFeatureButtonClicked));
+
m_pCTLFontNameLB->SetModifyHdl( aLink );
m_pCTLFontStyleLB->SetModifyHdl( aLink );
m_pCTLFontSizeLB->SetModifyHdl( aLink );
m_pCTLFontLanguageLB->SetSelectHdl( LINK( this, SvxCharNamePage, FontModifyListBoxHdl_Impl ) );
+ m_pCTLFontFeaturesButton->SetClickHdl(LINK(this, SvxCharNamePage, FontFeatureButtonClicked));
m_pImpl->m_aUpdateIdle.SetInvokeHandler( LINK( this, SvxCharNamePage, UpdateHdl_Impl ) );
}
@@ -1185,6 +1200,38 @@ IMPL_LINK( SvxCharNamePage, FontModifyEditHdl_Impl, Edit&, rBox, void )
{
FontModifyHdl_Impl(&rBox);
}
+IMPL_LINK(SvxCharNamePage, FontFeatureButtonClicked, Button*, pButton, void )
+{
+ OUString sFontName;
+ FontNameBox * pNameBox = nullptr;
+
+ if (pButton == m_pWestFontFeaturesButton.get())
+ {
+ pNameBox = m_pWestFontNameLB;
+ sFontName = GetPreviewFont().GetFamilyName();
+ }
+ else if (pButton == m_pEastFontFeaturesButton.get())
+ {
+ pNameBox = m_pEastFontNameLB;
+ sFontName = GetPreviewCJKFont().GetFamilyName();
+ }
+ else if (pButton == m_pCTLFontFeaturesButton.get())
+ {
+ pNameBox = m_pCTLFontNameLB;
+ sFontName = GetPreviewCTLFont().GetFamilyName();
+ }
+
+ if (!sFontName.isEmpty() && pNameBox)
+ {
+ ScopedVclPtrInstance<cui::FontFeaturesDialog> pDialog(this, sFontName);
+ if (pDialog->Execute() == RET_OK)
+ {
+ pNameBox->SetText(pDialog->getResultFontName());
+ UpdatePreview_Impl();
+ }
+ }
+}
+
void SvxCharNamePage::FontModifyHdl_Impl(void const * pNameBox)
{
m_pImpl->m_aUpdateIdle.Start();
diff --git a/cui/uiconfig/ui/charnamepage.ui b/cui/uiconfig/ui/charnamepage.ui
index 05ed0dd817a7..d46795b75434 100644
--- a/cui/uiconfig/ui/charnamepage.ui
+++ b/cui/uiconfig/ui/charnamepage.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.22.1 -->
<interface domain="cui">
<requires lib="gtk+" version="3.18"/>
<requires lib="LibreOffice" version="1.0"/>
@@ -27,7 +27,7 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
- <property name="width">3</property>
+ <property name="width">4</property>
</packing>
</child>
<child>
@@ -42,10 +42,10 @@
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes" context="charnamepage|westlangft-nocjk">Language:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">westlanglb-nocjk</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
@@ -70,7 +70,7 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
- <property name="width">3</property>
+ <property name="width">4</property>
</packing>
</child>
<child>
@@ -103,7 +103,7 @@
<object class="GtkLabel" id="westfontnameft-nocjk">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label" translatable="no" context="charnamepage|westfontnameft-nocjk">Family:</property>
+ <property name="label" context="charnamepage|westfontnameft-nocjk">Family:</property>
</object>
</child>
</object>
@@ -142,7 +142,7 @@
<object class="GtkLabel" id="weststyleft-nocjk">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label" translatable="no" context="charnamepage|weststyleft-nocjk">Style:</property>
+ <property name="label" context="charnamepage|weststyleft-nocjk">Style:</property>
</object>
</child>
</object>
@@ -191,6 +191,18 @@
<property name="top_attach">0</property>
</packing>
</child>
+ <child>
+ <object class="GtkButton" id="west_features_button-nocjk">
+ <property name="label" translatable="yes" context="charnamepage|west_features_button-nocjk">Features...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -223,10 +235,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="no" context="charnamepage|westfontnameft-cjk">Family:</property>
+ <property name="label" context="charnamepage|westfontnameft-cjk">Family:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">westfontnamelb-cjk</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -238,10 +250,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="no" context="charnamepage|weststyleft-cjk">Style:</property>
+ <property name="label" context="charnamepage|weststyleft-cjk">Style:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">weststylelb-cjk</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -253,10 +265,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes" context="charnamepage|westsizeft-cjk">Size:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">westsizelb-cjk</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">2</property>
@@ -268,10 +280,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes" context="charnamepage|westlangft-cjk">Language:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">westlanglb-cjk</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">3</property>
@@ -332,9 +344,24 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
- <property name="width">4</property>
+ <property name="width">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="west_features_button-cjk">
+ <property name="label" translatable="yes" context="charnamepage|west_features_button-cjk">Features...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">4</property>
+ <property name="top_attach">1</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</child>
</object>
@@ -381,10 +408,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="no" context="charnamepage|eastfontnameft">Family:</property>
+ <property name="label" context="charnamepage|eastfontnameft">Family:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">eastfontnamelb</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -396,10 +423,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="no" context="charnamepage|eaststyleft">Style:</property>
+ <property name="label" context="charnamepage|eaststyleft">Style:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">eaststylelb</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -411,10 +438,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes" context="charnamepage|eastsizeft">Size:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">eastsizelb</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">2</property>
@@ -426,10 +453,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes" context="charnamepage|eastlangft">Language:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">eastlanglb</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">3</property>
@@ -489,9 +516,24 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
- <property name="width">4</property>
+ <property name="width">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="east_features_button">
+ <property name="label" translatable="yes" context="charnamepage|east_features_button">Features...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">4</property>
+ <property name="top_attach">1</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</child>
</object>
@@ -538,10 +580,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="no" context="charnamepage|ctlfontnameft">Family:</property>
+ <property name="label" context="charnamepage|ctlfontnameft">Family:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">ctlfontnamelb</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -553,10 +595,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="no" context="charnamepage|ctlstyleft">Style:</property>
+ <property name="label" context="charnamepage|ctlstyleft">Style:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">ctlstylelb</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">1</property>
@@ -568,10 +610,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes" context="charnamepage|ctlsizeft">Size:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">ctlsizelb</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">2</property>
@@ -583,10 +625,10 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes" context="charnamepage|ctllangft">Language:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">ctllanglb</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">3</property>
@@ -647,9 +689,24 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
- <property name="width">4</property>
+ <property name="width">5</property>
</packing>
</child>
+ <child>
+ <object class="GtkButton" id="ctl_features_button">
+ <property name="label" translatable="yes" context="charnamepage|ctl_features_button">Features...</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">4</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</child>
</object>
diff --git a/cui/uiconfig/ui/fontfeaturesdialog.ui b/cui/uiconfig/ui/fontfeaturesdialog.ui
new file mode 100644
index 000000000000..f7ae893eb9c0
--- /dev/null
+++ b/cui/uiconfig/ui/fontfeaturesdialog.ui
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface domain="cui">
+ <requires lib="gtk+" version="3.18"/>
+ <requires lib="LibreOffice" version="1.0"/>
+ <object class="GtkDialog" id="FontFeaturesDialog">
+ <property name="can_focus">False</property>
+ <property name="border_width">6</property>
+ <property name="title" translatable="yes" context="newtabledialog|NewTableDialog">Font Features</property>
+ <property name="modal">True</property>
+ <property name="default_width">1</property>
+ <property name="default_height">1</property>
+ <property name="type_hint">dialog</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="help">
+ <property name="label">gtk-help</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ <property name="secondary">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="ok">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="cancel">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkViewport">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkGrid" id="contentGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">end</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <property name="right_padding">12</property>
+ <child>
+ <object class="svxlo-SvxFontPrevWindow" id="preview:border">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="preview:border-atkobject">
+ <property name="AtkObject::accessible-name" translatable="yes" context="fontfeaturesdialog|preview-atkobject">Preview</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-11">help</action-widget>
+ <action-widget response="-5">ok</action-widget>
+ <action-widget response="-6">cancel</action-widget>
+ </action-widgets>
+ </object>
+</interface>