sw/source/ui/misc/contentcontroldlg.cxx | 62 +++++++++++++++++++ sw/source/uibase/inc/contentcontroldlg.hxx | 3 sw/uiconfig/swriter/ui/contentcontroldlg.ui | 87 ++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+)
New commits: commit b673b2b868d9d549d059db4c135d776b48977469 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Fri Jun 3 08:12:42 2022 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Fri Jun 3 09:10:23 2022 +0200 sw content controls, date: add properties dialog - add a dateframe to contentcontroldlg.ui, to be hidden for non-date content controls - use a SwNumFormatTreeView to present a list of number formats, with a special "additional formats..." at the end that triggers a popup where a custom date format and language can be set - set the format of that tree view in the SwContentControlDlg ctor - update the SwContentControl from the tree view in SwContentControlDlg::OkHdl() Change-Id: If245eee821fd7fe8b41a40f74b9011c1a6ec140a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135327 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins diff --git a/sw/source/ui/misc/contentcontroldlg.cxx b/sw/source/ui/misc/contentcontroldlg.cxx index 2d713b0091f4..84f440a6fa8f 100644 --- a/sw/source/ui/misc/contentcontroldlg.cxx +++ b/sw/source/ui/misc/contentcontroldlg.cxx @@ -21,12 +21,15 @@ #include <vcl/weld.hxx> #include <cui/cuicharmap.hxx> +#include <svl/numformat.hxx> +#include <svl/zformat.hxx> #include <wrtsh.hxx> #include <ndtxt.hxx> #include <textcontentcontrol.hxx> #include <IDocumentState.hxx> #include <swuiexp.hxx> +#include <numfmtlb.hxx> using namespace com::sun::star; @@ -48,6 +51,8 @@ SwContentControlDlg::SwContentControlDlg(weld::Window* pParent, SwWrtShell& rWrt , m_xDeleteBtn(m_xBuilder->weld_button("remove")) , m_xMoveUpBtn(m_xBuilder->weld_button("moveup")) , m_xMoveDownBtn(m_xBuilder->weld_button("movedown")) + , m_xDateFrame(m_xBuilder->weld_frame("dateframe")) + , m_xDateFormat(new SwNumFormatTreeView(m_xBuilder->weld_tree_view("date_formats_treeview"))) , m_xOk(m_xBuilder->weld_button("ok")) { m_xCheckedStateBtn->connect_clicked(LINK(this, SwContentControlDlg, SelectCharHdl)); @@ -116,6 +121,42 @@ SwContentControlDlg::SwContentControlDlg(weld::Window* pParent, SwWrtShell& rWrt m_xListItemsFrame->set_visible(false); m_xListItemButtons->set_visible(false); } + + if (m_pContentControl->GetDate()) + { + m_xDateFormat->SetFormatType(SvNumFormatType::DATE); + m_xDateFormat->SetShowLanguageControl(true); + + // Set height to double of the default. + weld::TreeView& rTreeView = dynamic_cast<weld::TreeView&>(m_xDateFormat->get_widget()); + rTreeView.set_size_request(rTreeView.get_preferred_size().Width(), + rTreeView.get_height_rows(10)); + + OUString sFormatString = m_pContentControl->GetDateFormat(); + OUString sLang = m_pContentControl->GetDateLanguage(); + if (!sFormatString.isEmpty() && !sLang.isEmpty()) + { + SvNumberFormatter* pNumberFormatter = m_rWrtShell.GetNumberFormatter(); + LanguageType aLangType = LanguageTag(sLang).getLanguageType(); + sal_uInt32 nFormat = pNumberFormatter->GetEntryKey(sFormatString, aLangType); + if (nFormat == NUMBERFORMAT_ENTRY_NOT_FOUND) + { + sal_Int32 nCheckPos = 0; + SvNumFormatType nType; + pNumberFormatter->PutEntry(sFormatString, nCheckPos, nType, nFormat, + LanguageTag(sLang).getLanguageType()); + } + + if (aLangType != LANGUAGE_DONTKNOW && nFormat != NUMBERFORMAT_ENTRY_NOT_FOUND) + { + m_xDateFormat->SetDefFormat(nFormat); + } + } + } + else + { + m_xDateFrame->set_visible(false); + } } SwContentControlDlg::~SwContentControlDlg() {} @@ -159,6 +200,27 @@ IMPL_LINK_NOARG(SwContentControlDlg, OkHdl, weld::Button&, void) bChanged = true; } + if (m_pContentControl->GetDate()) + { + SvNumberFormatter* pNumberFormatter = m_rWrtShell.GetNumberFormatter(); + const SvNumberformat* pFormat = pNumberFormatter->GetEntry(m_xDateFormat->GetFormat()); + if (pFormat) + { + if (pFormat->GetFormatstring() != m_pContentControl->GetDateFormat()) + { + m_pContentControl->SetDateFormat(pFormat->GetFormatstring()); + bChanged = true; + } + + OUString aLanguage = LanguageTag(pFormat->GetLanguage()).getBcp47(); + if (aLanguage != m_pContentControl->GetDateLanguage()) + { + m_pContentControl->SetDateLanguage(aLanguage); + bChanged = true; + } + } + } + if (bChanged) { m_rWrtShell.GetDoc()->getIDocumentState().SetModified(); diff --git a/sw/source/uibase/inc/contentcontroldlg.hxx b/sw/source/uibase/inc/contentcontroldlg.hxx index d4f90685ba04..7654e3d6befb 100644 --- a/sw/source/uibase/inc/contentcontroldlg.hxx +++ b/sw/source/uibase/inc/contentcontroldlg.hxx @@ -24,6 +24,7 @@ class SwWrtShell; class SwContentControl; class SwContentControlListItem; +class SwNumFormatTreeView; /** * The content control dialog allows editing the properties of the content control under the @@ -49,6 +50,8 @@ class SwContentControlDlg final : public SfxDialogController std::unique_ptr<weld::Button> m_xDeleteBtn; std::unique_ptr<weld::Button> m_xMoveUpBtn; std::unique_ptr<weld::Button> m_xMoveDownBtn; + std::unique_ptr<weld::Frame> m_xDateFrame; + std::unique_ptr<SwNumFormatTreeView> m_xDateFormat; std::unique_ptr<weld::Button> m_xOk; diff --git a/sw/uiconfig/swriter/ui/contentcontroldlg.ui b/sw/uiconfig/swriter/ui/contentcontroldlg.ui index fabfb41a5c7a..ef6b2081426c 100644 --- a/sw/uiconfig/swriter/ui/contentcontroldlg.ui +++ b/sw/uiconfig/swriter/ui/contentcontroldlg.ui @@ -12,6 +12,14 @@ <column type="gchararray"/> </columns> </object> + <object class="GtkTreeStore" id="date_liststore"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name id --> + <column type="gchararray"/> + </columns> + </object> <object class="GtkDialog" id="ContentControlDialog"> <property name="can-focus">False</property> <property name="border-width">6</property> @@ -377,6 +385,85 @@ <property name="position">3</property> </packing> </child> + <child> + <object class="GtkFrame" id="dateframe"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <!-- n-columns=1 n-rows=1 --> + <object class="GtkGrid" id="list_grid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="row_spacing">12</property> + <child> + <object class="GtkScrolledWindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="margin-start">12</property> + <property name="margin-top">6</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView" id="date_formats_treeview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="model">date_liststore</property> + <property name="headers_visible">False</property> + <property name="headers_clickable">False</property> + <property name="search_column">0</property> + <property name="show_expanders">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection1"/> + </child> + <child> + <object class="GtkTreeViewColumn" id="treeviewcolumn2"> + <child> + <object class="GtkCellRendererText" id="cellrenderertext1"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </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> + <child type="label"> + <object class="GtkLabel" id="lbldate"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="contentcontroldlg|lbldate">Date Format:</property> + <property name="use_underline">True</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> </object> </child> <action-widgets>