[Libreoffice-commits] core.git: sc/source sc/uiconfig

Martin van Zijl (via logerrit) logerrit at kemper.freedesktop.org
Tue Sep 15 06:40:41 UTC 2020


 sc/source/ui/dbgui/filtdlg.cxx               |  184 ++++++++++++++++++++++-----
 sc/source/ui/inc/filtdlg.hxx                 |   10 +
 sc/uiconfig/scalc/ui/standardfilterdialog.ui |   79 +++++++++++
 3 files changed, 241 insertions(+), 32 deletions(-)

New commits:
commit 937b780e3f696552fc686bf0c80c3050443b111a
Author:     Martin van Zijl <martin.vanzijl at gmail.com>
AuthorDate: Wed May 27 08:21:39 2020 +1200
Commit:     Heiko Tietze <heiko.tietze at documentfoundation.org>
CommitDate: Tue Sep 15 08:40:04 2020 +0200

    tdf#76898 standard filter: add buttons to remove conditions
    
    Change-Id: If59ff911c66537a6449231bc9d54817c4fa86d7b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94892
    Tested-by: Jenkins
    Reviewed-by: Heiko Tietze <heiko.tietze at documentfoundation.org>

diff --git a/sc/source/ui/dbgui/filtdlg.cxx b/sc/source/ui/dbgui/filtdlg.cxx
index 2b0d5618a92c..2e4ac4730545 100644
--- a/sc/source/ui/dbgui/filtdlg.cxx
+++ b/sc/source/ui/dbgui/filtdlg.cxx
@@ -65,18 +65,22 @@ ScFilterDlg::ScFilterDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pPa
     , m_xLbField1(m_xBuilder->weld_combo_box("field1"))
     , m_xLbCond1(m_xBuilder->weld_combo_box("cond1"))
     , m_xEdVal1(m_xBuilder->weld_combo_box("val1"))
+    , m_xBtnRemove1(m_xBuilder->weld_button("remove1"))
     , m_xLbConnect2(m_xBuilder->weld_combo_box("connect2"))
     , m_xLbField2(m_xBuilder->weld_combo_box("field2"))
     , m_xLbCond2(m_xBuilder->weld_combo_box("cond2"))
     , m_xEdVal2(m_xBuilder->weld_combo_box("val2"))
+    , m_xBtnRemove2(m_xBuilder->weld_button("remove2"))
     , m_xLbConnect3(m_xBuilder->weld_combo_box("connect3"))
     , m_xLbField3(m_xBuilder->weld_combo_box("field3"))
     , m_xLbCond3(m_xBuilder->weld_combo_box("cond3"))
     , m_xEdVal3(m_xBuilder->weld_combo_box("val3"))
+    , m_xBtnRemove3(m_xBuilder->weld_button("remove3"))
     , m_xLbConnect4(m_xBuilder->weld_combo_box("connect4"))
     , m_xLbField4(m_xBuilder->weld_combo_box("field4"))
     , m_xLbCond4(m_xBuilder->weld_combo_box("cond4"))
     , m_xEdVal4(m_xBuilder->weld_combo_box("val4"))
+    , m_xBtnRemove4(m_xBuilder->weld_button("remove4"))
     , m_xContents(m_xBuilder->weld_widget("grid"))
     , m_xScrollBar(m_xBuilder->weld_scrolled_window("scrollbar"))
     , m_xExpander(m_xBuilder->weld_expander("more"))
@@ -152,6 +156,11 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
     m_xLbCond3->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
     m_xLbCond4->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
 
+    m_xBtnRemove1->connect_clicked( LINK( this, ScFilterDlg, BtnRemoveHdl ) );
+    m_xBtnRemove2->connect_clicked( LINK( this, ScFilterDlg, BtnRemoveHdl ) );
+    m_xBtnRemove3->connect_clicked( LINK( this, ScFilterDlg, BtnRemoveHdl ) );
+    m_xBtnRemove4->connect_clicked( LINK( this, ScFilterDlg, BtnRemoveHdl ) );
+
     pViewData   = rQueryItem.GetViewData();
     pDoc        = pViewData ? pViewData->GetDocument() : nullptr;
     nSrcTab     = pViewData ? pViewData->GetTabNo() : static_cast<SCTAB>(0);
@@ -177,6 +186,11 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
     maConnLbArr.push_back(m_xLbConnect2.get());
     maConnLbArr.push_back(m_xLbConnect3.get());
     maConnLbArr.push_back(m_xLbConnect4.get());
+    maRemoveBtnArr.reserve(QUERY_ENTRY_COUNT);
+    maRemoveBtnArr.push_back(m_xBtnRemove1.get());
+    maRemoveBtnArr.push_back(m_xBtnRemove2.get());
+    maRemoveBtnArr.push_back(m_xBtnRemove3.get());
+    maRemoveBtnArr.push_back(m_xBtnRemove4.get());
 
     // Option initialization:
     pOptionsMgr.reset( new ScFilterOptionsMgr(
@@ -223,37 +237,7 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
             else
             {
                 OUString aQueryStr = rItem.maString.getString();
-                if (aQueryStr.isEmpty())
-                {
-                    if (rItem.meType == ScQueryEntry::ByValue)
-                    {
-                        if (pDoc)
-                        {
-                            pDoc->GetFormatTable()->GetInputLineString(rItem.mfVal, 0, aValStr);
-                        }
-                    }
-                    else if (rItem.meType == ScQueryEntry::ByDate)
-                    {
-                        if (pDoc)
-                        {
-                            SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
-                            pFormatter->GetInputLineString(rItem.mfVal,
-                                                           pFormatter->GetStandardFormat( SvNumFormatType::DATE), aValStr);
-                        }
-                    }
-                    else
-                    {
-                        SAL_WARN( "sc", "ScFilterDlg::Init: empty query string, really?");
-                        aValStr = aQueryStr;
-                    }
-                }
-                else
-                {
-                    // XXX NOTE: if not ByString we just assume this has been
-                    // set to a proper string corresponding to the numeric
-                    // value earlier!
-                    aValStr = aQueryStr;
-                }
+                SetValString(aQueryStr, rItem, aValStr);
             }
         }
         else if ( i == 0 )
@@ -304,12 +288,14 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
         m_xLbField2->set_sensitive(false);
         m_xLbCond2->set_sensitive(false);
         m_xEdVal2->set_sensitive(false);
+        m_xBtnRemove2->set_sensitive(false);
     }
     else if ( m_xLbConnect2->get_active() == -1 )
     {
         m_xLbField2->set_sensitive(false);
         m_xLbCond2->set_sensitive(false);
         m_xEdVal2->set_sensitive(false);
+        m_xBtnRemove2->set_sensitive(false);
     }
 
     if ( m_xLbField2->get_active() == 0 )
@@ -318,12 +304,14 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
         m_xLbField3->set_sensitive(false);
         m_xLbCond3->set_sensitive(false);
         m_xEdVal3->set_sensitive(false);
+        m_xBtnRemove3->set_sensitive(false);
     }
     else if ( m_xLbConnect3->get_active() == -1 )
     {
         m_xLbField3->set_sensitive(false);
         m_xLbCond3->set_sensitive(false);
         m_xEdVal3->set_sensitive(false);
+        m_xBtnRemove3->set_sensitive(false);
     }
     if ( m_xLbField3->get_active() == 0 )
     {
@@ -331,12 +319,14 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
         m_xLbField4->set_sensitive(false);
         m_xLbCond4->set_sensitive(false);
         m_xEdVal4->set_sensitive(false);
+        m_xBtnRemove4->set_sensitive(false);
     }
     else if ( m_xLbConnect4->get_active() == -1 )
     {
         m_xLbField4->set_sensitive(false);
         m_xLbCond4->set_sensitive(false);
         m_xEdVal4->set_sensitive(false);
+        m_xBtnRemove4->set_sensitive(false);
     }
 
     m_xEdVal1->set_entry_width_chars(10);
@@ -670,6 +660,9 @@ IMPL_LINK( ScFilterDlg, BtnClearHdl, weld::Button&, rBtn, void )
     m_xEdVal2->set_sensitive(false);
     m_xEdVal3->set_sensitive(false);
     m_xEdVal4->set_sensitive(false);
+    m_xBtnRemove2->set_sensitive(false);
+    m_xBtnRemove3->set_sensitive(false);
+    m_xBtnRemove4->set_sensitive(false);
 
     // clear query data objects
     SCSIZE nCount = theQueryData.GetEntryCount();
@@ -757,6 +750,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
         m_xLbField1->set_sensitive(true);
         m_xLbCond1->set_sensitive(true);
         m_xEdVal1->set_sensitive(true);
+        m_xBtnRemove1->set_sensitive(true);
 
         const sal_Int32 nConnect1 = m_xLbConnect1->get_active();
         size_t nQE = nOffset;
@@ -770,6 +764,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
         m_xLbField2->set_sensitive(true);
         m_xLbCond2->set_sensitive(true);
         m_xEdVal2->set_sensitive(true);
+        m_xBtnRemove2->set_sensitive(true);
 
         const sal_Int32 nConnect2 = m_xLbConnect2->get_active();
         size_t nQE = 1+nOffset;
@@ -783,6 +778,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
         m_xLbField3->set_sensitive(true);
         m_xLbCond3->set_sensitive(true);
         m_xEdVal3->set_sensitive(true);
+        m_xBtnRemove3->set_sensitive(true);
 
         const sal_Int32 nConnect3 = m_xLbConnect3->get_active();
         size_t nQE = 2 + nOffset;
@@ -797,6 +793,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
         m_xLbField4->set_sensitive(true);
         m_xLbCond4->set_sensitive(true);
         m_xEdVal4->set_sensitive(true);
+        m_xBtnRemove4->set_sensitive(true);
 
         const sal_Int32 nConnect4 = m_xLbConnect4->get_active();
         size_t nQE = 3 + nOffset;
@@ -835,6 +832,9 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
             m_xEdVal2->set_sensitive(false);
             m_xEdVal3->set_sensitive(false);
             m_xEdVal4->set_sensitive(false);
+            m_xBtnRemove2->set_sensitive(false);
+            m_xBtnRemove3->set_sensitive(false);
+            m_xBtnRemove4->set_sensitive(false);
             SCSIZE nCount = theQueryData.GetEntryCount();
             if (maRefreshExceptQuery.size() < nCount + 1)
                 maRefreshExceptQuery.resize(nCount + 1, false);
@@ -880,6 +880,8 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
             m_xLbCond4->set_sensitive(false);
             m_xEdVal3->set_sensitive(false);
             m_xEdVal4->set_sensitive(false);
+            m_xBtnRemove3->set_sensitive(false);
+            m_xBtnRemove4->set_sensitive(false);
 
             sal_uInt16 nTemp=nOffset+1;
             SCSIZE nCount = theQueryData.GetEntryCount();
@@ -920,6 +922,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
             m_xLbField4->set_sensitive(false);
             m_xLbCond4->set_sensitive(false);
             m_xEdVal4->set_sensitive(false);
+            m_xBtnRemove4->set_sensitive(false);
 
             sal_uInt16 nTemp=nOffset+2;
             SCSIZE nCount = theQueryData.GetEntryCount();
@@ -1115,6 +1118,84 @@ IMPL_LINK( ScFilterDlg, ValModifyHdl, weld::ComboBox&, rEd, void )
         rItem.meType = ScQueryEntry::ByDate;
 }
 
+IMPL_LINK( ScFilterDlg, BtnRemoveHdl, weld::Button&, rBtn, void )
+{
+    // Calculate the row to delete
+    sal_uInt16 nOffset = GetSliderPos();
+    int nButtonIndex = 0;
+    if ( &rBtn == m_xBtnRemove2.get() )
+        nButtonIndex = 1;
+    if ( &rBtn == m_xBtnRemove3.get() )
+        nButtonIndex = 2;
+    if ( &rBtn == m_xBtnRemove4.get() )
+        nButtonIndex = 3;
+    SCSIZE nRowToDelete = nOffset + nButtonIndex;
+
+    // Check that the index is sensible
+    SCSIZE nCount = theQueryData.GetEntryCount();
+    if (nRowToDelete >= nCount)
+    {
+        SAL_WARN( "sc", "ScFilterDlg::BtnRemoveHdl: could not delete row - invalid index.");
+        return;
+    }
+
+    // Resize maRefreshExceptQuery
+    if (maRefreshExceptQuery.size() < nCount + 1)
+        maRefreshExceptQuery.resize(nCount + 1, false);
+
+    // Move all the subsequent rows back one position;
+    // also find the last row, which we will delete
+    SCSIZE nRowToClear = nCount-1;
+    for (SCSIZE i = nRowToDelete; i < nCount-1; ++i)
+    {
+        if (theQueryData.GetEntry(i+1).bDoQuery)
+        {
+            theQueryData.GetEntry(i) = theQueryData.GetEntry(i+1);
+        }
+        else
+        {
+            nRowToClear = i;
+            break;
+        }
+    }
+
+    // If the next row is being edited, but not confirmed, move it back
+    // one position
+    if (nRowToClear < nCount-1  &&  maRefreshExceptQuery[nRowToClear+1])
+    {
+        theQueryData.GetEntry(nRowToClear) = theQueryData.GetEntry(nRowToClear+1);
+        maRefreshExceptQuery[nRowToClear] = true;
+        maRefreshExceptQuery[nRowToClear+1] = false;
+    }
+    else
+    {
+        // Remove the very last one, since everything has moved back
+        theQueryData.GetEntry(nRowToClear).bDoQuery = false;
+        theQueryData.GetEntry(nRowToClear).nField =  static_cast<SCCOL>(0);
+        maRefreshExceptQuery[nRowToClear] = false;
+    }
+
+    // Always enable the very first row
+    if (!theQueryData.GetEntry(0).bDoQuery)
+    {
+        maRefreshExceptQuery[0] = true;
+    }
+
+    // Refresh the UI
+    RefreshEditRow( nOffset );
+
+    // Special handling if the very first row was cleared
+    if (!theQueryData.GetEntry(0).bDoQuery)
+    {
+        m_xLbConnect1->set_active(-1);
+        m_xLbField1->set_active(0);
+        m_xLbField1->set_sensitive(true);
+        m_xLbCond1->set_active(0);
+        m_xLbCond1->set_sensitive(true);
+        ClearValueList(1);
+    }
+}
+
 IMPL_LINK_NOARG(ScFilterDlg, ScrollHdl, weld::ScrolledWindow&, void)
 {
     SliderMoved();
@@ -1169,11 +1250,12 @@ void ScFilterDlg::RefreshEditRow( size_t nOffset )
             }
             else
             {
-                aValStr = aQueryStr;
+                SetValString(aQueryStr, rItem, aValStr);
                 maCondLbArr[i]->set_sensitive(true);
             }
             maFieldLbArr[i]->set_sensitive(true);
             maValueEdArr[i]->set_sensitive(true);
+            maRemoveBtnArr[i]->set_sensitive(true);
 
             if (nOffset==0)
             {
@@ -1229,6 +1311,7 @@ void ScFilterDlg::RefreshEditRow( size_t nOffset )
             maFieldLbArr[i]->set_sensitive(false);
             maCondLbArr[i]->set_sensitive(false);
             maValueEdArr[i]->set_sensitive(false);
+            maRemoveBtnArr[i]->set_sensitive(false);
         }
         maFieldLbArr[i]->set_active( nFieldSelPos );
         maCondLbArr [i]->set_active( nCondPos );
@@ -1237,4 +1320,41 @@ void ScFilterDlg::RefreshEditRow( size_t nOffset )
     }
 }
 
+void ScFilterDlg::SetValString( const OUString& rQueryStr, const ScQueryEntry::Item& rItem,
+    OUString& rValStr )
+{
+    if (rQueryStr.isEmpty())
+    {
+        pDoc = pViewData ? pViewData->GetDocument() : nullptr;
+        if (rItem.meType == ScQueryEntry::ByValue)
+        {
+            if (pDoc)
+            {
+                pDoc->GetFormatTable()->GetInputLineString(rItem.mfVal, 0, rValStr);
+            }
+        }
+        else if (rItem.meType == ScQueryEntry::ByDate)
+        {
+            if (pDoc)
+            {
+                SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
+                pFormatter->GetInputLineString(rItem.mfVal,
+                                               pFormatter->GetStandardFormat( SvNumFormatType::DATE), rValStr);
+            }
+        }
+        else
+        {
+            SAL_WARN( "sc", "ScFilterDlg::SetValString: empty query string, really?");
+            rValStr = rQueryStr;
+        }
+    }
+    else
+    {
+        // XXX NOTE: if not ByString we just assume this has been
+        // set to a proper string corresponding to the numeric
+        // value earlier!
+        rValStr = rQueryStr;
+    }
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/filtdlg.hxx b/sc/source/ui/inc/filtdlg.hxx
index e6c2d375f1c1..58853188a5fa 100644
--- a/sc/source/ui/inc/filtdlg.hxx
+++ b/sc/source/ui/inc/filtdlg.hxx
@@ -24,6 +24,7 @@
 #include "anyrefdg.hxx"
 #include <queryparam.hxx>
 #include <filterentries.hxx>
+#include <queryentry.hxx>
 
 #include <memory>
 #include <deque>
@@ -84,6 +85,7 @@ private:
     std::vector<weld::ComboBox*> maFieldLbArr;
     std::vector<weld::ComboBox*> maCondLbArr;
     std::vector<weld::ComboBox*> maConnLbArr;
+    std::vector<weld::Button*>   maRemoveBtnArr;
 
     std::deque<bool>   maHasDates;
     std::deque<bool>   maRefreshExceptQuery;
@@ -98,21 +100,25 @@ private:
     std::unique_ptr<weld::ComboBox> m_xLbField1;
     std::unique_ptr<weld::ComboBox> m_xLbCond1;
     std::unique_ptr<weld::ComboBox> m_xEdVal1;
+    std::unique_ptr<weld::Button>   m_xBtnRemove1;
 
     std::unique_ptr<weld::ComboBox> m_xLbConnect2;
     std::unique_ptr<weld::ComboBox> m_xLbField2;
     std::unique_ptr<weld::ComboBox> m_xLbCond2;
     std::unique_ptr<weld::ComboBox> m_xEdVal2;
+    std::unique_ptr<weld::Button>   m_xBtnRemove2;
 
     std::unique_ptr<weld::ComboBox> m_xLbConnect3;
     std::unique_ptr<weld::ComboBox> m_xLbField3;
     std::unique_ptr<weld::ComboBox> m_xLbCond3;
     std::unique_ptr<weld::ComboBox> m_xEdVal3;
+    std::unique_ptr<weld::Button>   m_xBtnRemove3;
 
     std::unique_ptr<weld::ComboBox> m_xLbConnect4;
     std::unique_ptr<weld::ComboBox> m_xLbField4;
     std::unique_ptr<weld::ComboBox> m_xLbCond4;
     std::unique_ptr<weld::ComboBox> m_xEdVal4;
+    std::unique_ptr<weld::Button>   m_xBtnRemove4;
 
     std::unique_ptr<weld::Widget> m_xContents;
     std::unique_ptr<weld::ScrolledWindow> m_xScrollBar;
@@ -142,12 +148,16 @@ private:
     void            ClearValueList  ( size_t nList );
     size_t          GetFieldSelPos  ( SCCOL nField );
     ScQueryItem*    GetOutputItem   ();
+    void            SetValString    ( const OUString& rQueryStr,
+                                      const ScQueryEntry::Item& rItem,
+                                      OUString& rValStr );
 
     // Handler:
     DECL_LINK( LbSelectHdl,  weld::ComboBox&, void );
     DECL_LINK( ValModifyHdl, weld::ComboBox&, void );
     DECL_LINK( CheckBoxHdl,  weld::Button&, void );
     DECL_LINK( BtnClearHdl,  weld::Button&, void );
+    DECL_LINK( BtnRemoveHdl, weld::Button&, void );
     DECL_LINK( EndDlgHdl,    weld::Button&, void );
     DECL_LINK( ScrollHdl, weld::ScrolledWindow&, void );
     DECL_LINK( MoreExpandedHdl, weld::Expander&, void );
diff --git a/sc/uiconfig/scalc/ui/standardfilterdialog.ui b/sc/uiconfig/scalc/ui/standardfilterdialog.ui
index bc996a9f935f..3fe741bca6c3 100644
--- a/sc/uiconfig/scalc/ui/standardfilterdialog.ui
+++ b/sc/uiconfig/scalc/ui/standardfilterdialog.ui
@@ -2,6 +2,26 @@
 <!-- Generated with glade 3.36.0 -->
 <interface domain="sc">
   <requires lib="gtk+" version="3.18"/>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="icon_name">cmd/sc_delete.png</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="icon_name">cmd/sc_delete.png</property>
+  </object>
+  <object class="GtkImage" id="image3">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="icon_name">cmd/sc_delete.png</property>
+  </object>
+  <object class="GtkImage" id="image4">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="icon_name">cmd/sc_delete.png</property>
+  </object>
   <object class="GtkDialog" id="StandardFilterDialog">
     <property name="can_focus">False</property>
     <property name="border_width">6</property>
@@ -593,6 +613,65 @@
                                     <property name="top_attach">4</property>
                                   </packing>
                                 </child>
+                                <child>
+                                  <object class="GtkButton" id="remove1">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="tooltip_text" translatable="yes" context="standardfilterdialog|remove1|tooltip_text">Remove</property>
+                                    <property name="margin_right">8</property>
+                                    <property name="image">image1</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">4</property>
+                                    <property name="top_attach">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkButton" id="remove2">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="tooltip_text" translatable="yes" context="standardfilterdialog|remove2|tooltip_text">Remove</property>
+                                    <property name="margin_right">8</property>
+                                    <property name="image">image2</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">4</property>
+                                    <property name="top_attach">2</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkButton" id="remove3">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="tooltip_text" translatable="yes" context="standardfilterdialog|remove3|tooltip_text">Remove</property>
+                                    <property name="margin_right">8</property>
+                                    <property name="image">image3</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">4</property>
+                                    <property name="top_attach">3</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkButton" id="remove4">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="tooltip_text" translatable="yes" context="standardfilterdialog|remove4|tooltip_text">Remove</property>
+                                    <property name="margin_right">8</property>
+                                    <property name="image">image4</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">4</property>
+                                    <property name="top_attach">4</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
                               </object>
                               <packing>
                                 <property name="left_attach">0</property>


More information about the Libreoffice-commits mailing list