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>

Reply via email to