sc/source/ui/dbgui/sfiltdlg.cxx              |  262 +++++++++++----------------
 sc/source/ui/inc/filtdlg.hxx                 |   65 +++---
 sc/source/ui/inc/reffact.hxx                 |    2 
 sc/source/ui/view/reffact.cxx                |    4 
 sc/source/ui/view/tabvwshc.cxx               |   57 ++---
 sc/uiconfig/scalc/ui/advancedfilterdialog.ui |   23 +-
 solenv/sanitizers/ui/modules/scalc.suppr     |    4 
 7 files changed, 194 insertions(+), 223 deletions(-)

New commits:
commit 73482f5e8742cc9fce32de1fc660059aae2a9583
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Tue Apr 16 15:44:33 2019 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Wed Apr 17 08:58:11 2019 +0200

    weld ScSpecialFilterDlg
    
    Change-Id: Iecf88c5720f2407654d85a1a70a04faed43fd690
    Reviewed-on: https://gerrit.libreoffice.org/70832
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/sc/source/ui/dbgui/sfiltdlg.cxx b/sc/source/ui/dbgui/sfiltdlg.cxx
index 919632c577fd..8438dcf2f563 100644
--- a/sc/source/ui/dbgui/sfiltdlg.cxx
+++ b/sc/source/ui/dbgui/sfiltdlg.cxx
@@ -51,44 +51,45 @@ namespace
 
 //  class ScSpecialFilterDialog
 
-ScSpecialFilterDlg::ScSpecialFilterDlg( SfxBindings* pB, SfxChildWindow* pCW, 
vcl::Window* pParent,
+ScSpecialFilterDlg::ScSpecialFilterDlg( SfxBindings* pB, SfxChildWindow* pCW, 
weld::Window* pParent,
                                         const SfxItemSet&   rArgSet )
 
-    :   ScAnyRefDlg ( pB, pCW, pParent, "AdvancedFilterDialog", 
"modules/scalc/ui/advancedfilterdialog.ui" ),
-
-        aStrUndefined   ( ScResId(SCSTR_UNDEFINED) ),
-        nWhichQuery     ( rArgSet.GetPool()->GetWhich( SID_QUERY ) ),
-        theQueryData    ( static_cast<const ScQueryItem&>(
-                           rArgSet.Get( nWhichQuery )).GetQueryData() ),
-        pViewData       ( nullptr ),
-        pDoc            ( nullptr ),
-        pRefInputEdit   ( nullptr ),
-        bRefInputMode   ( false )
+    : ScAnyRefDlgController(pB, pCW, pParent, 
"modules/scalc/ui/advancedfilterdialog.ui", "AdvancedFilterDialog")
+    , aStrUndefined   ( ScResId(SCSTR_UNDEFINED) )
+    , nWhichQuery     ( rArgSet.GetPool()->GetWhich( SID_QUERY ) )
+    , theQueryData    ( static_cast<const ScQueryItem&>(
+                           rArgSet.Get( nWhichQuery )).GetQueryData() )
+    , pViewData(nullptr)
+    , pDoc(nullptr)
+    , bRefInputMode(false)
+    , m_pRefInputEdit(nullptr)
+    , m_xLbFilterArea(m_xBuilder->weld_combo_box("lbfilterarea"))
+    , m_xEdFilterArea(new 
formula::WeldRefEdit(m_xBuilder->weld_entry("edfilterarea")))
+    , m_xRbFilterArea(new 
formula::WeldRefButton(m_xBuilder->weld_button("rbfilterarea")))
+    , m_xExpander(m_xBuilder->weld_expander("more"))
+    , m_xBtnCase(m_xBuilder->weld_check_button("case"))
+    , m_xBtnRegExp(m_xBuilder->weld_check_button("regexp"))
+    , m_xBtnHeader(m_xBuilder->weld_check_button("header"))
+    , m_xBtnUnique(m_xBuilder->weld_check_button("unique"))
+    , m_xBtnCopyResult(m_xBuilder->weld_check_button("copyresult"))
+    , m_xLbCopyArea(m_xBuilder->weld_combo_box("lbcopyarea"))
+    , m_xEdCopyArea(new 
formula::WeldRefEdit(m_xBuilder->weld_entry("edcopyarea")))
+    , m_xRbCopyArea(new 
formula::WeldRefButton(m_xBuilder->weld_button("rbcopyarea")))
+    , m_xBtnDestPers(m_xBuilder->weld_check_button("destpers"))
+    , m_xFtDbAreaLabel(m_xBuilder->weld_label("dbarealabel"))
+    , m_xFtDbArea(m_xBuilder->weld_label("dbarea"))
+    , m_xBtnOk(m_xBuilder->weld_button("ok"))
+    , m_xBtnCancel(m_xBuilder->weld_button("cancel"))
+    , m_xFilterFrame(m_xBuilder->weld_frame("filterframe"))
+    , m_xFilterLabel(m_xFilterFrame->weld_label_widget())
 {
-    get(pLbFilterArea,"lbfilterarea");
-    get(pEdFilterArea,"edfilterarea");
-    pEdFilterArea->SetReferences(this, 
get<VclFrame>("filterframe")->get_label_widget());
-    get(pRbFilterArea,"rbfilterarea");
-    pRbFilterArea->SetReferences(this, pEdFilterArea);
-    get(pBtnCase,"case");
-    get(pBtnRegExp,"regexp");
-    get(pBtnHeader,"header");
-    get(pBtnUnique,"unique");
-    get(pBtnCopyResult,"copyresult");
-    get(pLbCopyArea,"lbcopyarea");
-    get(pEdCopyArea,"edcopyarea");
-    pEdCopyArea->SetReferences(this, pBtnCopyResult);
-    get(pRbCopyArea,"rbcopyarea");
-    pRbCopyArea->SetReferences(this, pEdCopyArea);
-    get(pBtnDestPers,"destpers");
-    get(pFtDbAreaLabel,"dbarealabel");
-    get(pFtDbArea,"dbarea");
-    get(pBtnOk,"ok");
-    get(pBtnCancel,"cancel");
-    get(pExpander,"more");
+    m_xEdFilterArea->SetReferences(this, m_xFilterLabel.get());
+    m_xRbFilterArea->SetReferences(this, m_xEdFilterArea.get());
+    m_xEdCopyArea->SetReferences(this, m_xFtDbAreaLabel.get());
+    m_xRbCopyArea->SetReferences(this, m_xEdCopyArea.get());
 
     Init( rArgSet );
-    pEdFilterArea->GrabFocus();
+    m_xEdFilterArea->GrabFocus();
 
     // hack: control of RefInput
     pIdle.reset( new Idle("Special Filter Dialog") );
@@ -100,16 +101,6 @@ ScSpecialFilterDlg::ScSpecialFilterDlg( SfxBindings* pB, 
SfxChildWindow* pCW, vc
 
 ScSpecialFilterDlg::~ScSpecialFilterDlg()
 {
-    disposeOnce();
-}
-
-void ScSpecialFilterDlg::dispose()
-{
-    const sal_Int32 nEntries = pLbFilterArea->GetEntryCount();
-
-    for ( sal_Int32 i=1; i<nEntries; ++i )
-        delete static_cast<OUString*>(pLbFilterArea->GetEntryData( i ));
-
     pOptionsMgr.reset();
 
     pOutItem.reset();
@@ -117,26 +108,6 @@ void ScSpecialFilterDlg::dispose()
     // hack: control of RefInput
     pIdle->Stop();
     pIdle.reset();
-
-    pLbFilterArea.clear();
-    pEdFilterArea.clear();
-    pRbFilterArea.clear();
-    pExpander.clear();
-    pBtnCase.clear();
-    pBtnRegExp.clear();
-    pBtnHeader.clear();
-    pBtnUnique.clear();
-    pBtnCopyResult.clear();
-    pLbCopyArea.clear();
-    pEdCopyArea.clear();
-    pRbCopyArea.clear();
-    pBtnDestPers.clear();
-    pFtDbAreaLabel.clear();
-    pFtDbArea.clear();
-    pBtnOk.clear();
-    pBtnCancel.clear();
-    pRefInputEdit.clear();
-    ScAnyRefDlg::dispose();
 }
 
 void ScSpecialFilterDlg::Init( const SfxItemSet& rArgSet )
@@ -144,33 +115,32 @@ void ScSpecialFilterDlg::Init( const SfxItemSet& rArgSet )
     const ScQueryItem& rQueryItem = static_cast<const ScQueryItem&>(
                                     rArgSet.Get( nWhichQuery ));
 
-    pBtnOk->SetClickHdl          ( LINK( this, ScSpecialFilterDlg, EndDlgHdl ) 
);
-    pBtnCancel->SetClickHdl      ( LINK( this, ScSpecialFilterDlg, EndDlgHdl ) 
);
-    pLbFilterArea->SetSelectHdl  ( LINK( this, ScSpecialFilterDlg, 
FilterAreaSelHdl ) );
-    pEdFilterArea->SetModifyHdl  ( LINK( this, ScSpecialFilterDlg, 
FilterAreaModHdl ) );
+    m_xBtnOk->connect_clicked( LINK( this, ScSpecialFilterDlg, EndDlgHdl ) );
+    m_xBtnCancel->connect_clicked( LINK( this, ScSpecialFilterDlg, EndDlgHdl ) 
);
+    m_xLbFilterArea->connect_changed( LINK( this, ScSpecialFilterDlg, 
FilterAreaSelHdl ) );
+    m_xEdFilterArea->SetModifyHdl  ( LINK( this, ScSpecialFilterDlg, 
FilterAreaModHdl ) );
 
     pViewData   = rQueryItem.GetViewData();
     pDoc        = pViewData ? pViewData->GetDocument()  : nullptr;
 
-    pEdFilterArea->SetText( EMPTY_OUSTRING );      // may be overwritten below
+    m_xEdFilterArea->SetText( EMPTY_OUSTRING );      // may be overwritten 
below
 
     if ( pViewData && pDoc )
     {
-        if(pDoc->GetChangeTrack()!=nullptr) pBtnCopyResult->Disable();
+        if(pDoc->GetChangeTrack()!=nullptr) 
m_xBtnCopyResult->set_sensitive(false);
 
         ScRangeName* pRangeNames = pDoc->GetRangeName();
-        pLbFilterArea->Clear();
-        pLbFilterArea->InsertEntry( aStrUndefined, 0 );
+        m_xLbFilterArea->clear();
+        m_xLbFilterArea->append_text(aStrUndefined);
 
         for (const auto& rEntry : *pRangeNames)
         {
             if (!rEntry.second->HasType(ScRangeData::Type::Criteria))
                 continue;
 
-            const sal_Int32 nInsert = 
pLbFilterArea->InsertEntry(rEntry.second->GetName());
             OUString aSymbol;
             rEntry.second->GetSymbol(aSymbol);
-            pLbFilterArea->SetEntryData(nInsert, new OUString(aSymbol));
+            m_xLbFilterArea->append(aSymbol, rEntry.second->GetName());
         }
 
         //  is there a stored source range?
@@ -179,33 +149,33 @@ void ScSpecialFilterDlg::Init( const SfxItemSet& rArgSet )
         if (rQueryItem.GetAdvancedQuerySource(aAdvSource))
         {
             OUString aRefStr(aAdvSource.Format(ScRefFlags::RANGE_ABS_3D, pDoc, 
pDoc->GetAddressConvention()));
-            pEdFilterArea->SetRefString( aRefStr );
+            m_xEdFilterArea->SetRefString( aRefStr );
         }
     }
 
-    pLbFilterArea->SelectEntryPos( 0 );
+    m_xLbFilterArea->set_active( 0 );
 
     // let options be initialized:
 
-    pOptionsMgr.reset( new ScFilterOptionsMgr(
+    pOptionsMgr.reset( new FilterOptionsMgr(
                             pViewData,
                             theQueryData,
-                            pBtnCase,
-                            pBtnRegExp,
-                            pBtnHeader,
-                            pBtnUnique,
-                            pBtnCopyResult,
-                            pBtnDestPers,
-                            pLbCopyArea,
-                            pEdCopyArea,
-                            pRbCopyArea,
-                            pFtDbAreaLabel,
-                            pFtDbArea,
+                            m_xBtnCase.get(),
+                            m_xBtnRegExp.get(),
+                            m_xBtnHeader.get(),
+                            m_xBtnUnique.get(),
+                            m_xBtnCopyResult.get(),
+                            m_xBtnDestPers.get(),
+                            m_xLbCopyArea.get(),
+                            m_xEdCopyArea.get(),
+                            m_xRbCopyArea.get(),
+                            m_xFtDbAreaLabel.get(),
+                            m_xFtDbArea.get(),
                             aStrUndefined ) );
 
     //  special filter always needs column headers
-    pBtnHeader->Check();
-    pBtnHeader->Disable();
+    m_xBtnHeader->set_active(true);
+    m_xBtnHeader->set_sensitive(false);
 
     // turn on modal mode
     // SetDispatcherLock( true );
@@ -213,12 +183,12 @@ void ScSpecialFilterDlg::Init( const SfxItemSet& rArgSet )
     //SFX_APPWINDOW->Disable(false);        //! general method in ScAnyRefDlg
 }
 
-bool ScSpecialFilterDlg::Close()
+void ScSpecialFilterDlg::Close()
 {
     if (pViewData)
         pViewData->GetDocShell()->CancelAutoDBRange();
 
-    return DoClose( ScSpecialFilterDlgWrapper::GetChildWindowId() );
+    DoClose( ScSpecialFilterDlgWrapper::GetChildWindowId() );
 }
 
 // Transfer of a table area selected with the mouse, which is then displayed
@@ -226,20 +196,20 @@ bool ScSpecialFilterDlg::Close()
 
 void ScSpecialFilterDlg::SetReference( const ScRange& rRef, ScDocument* pDocP )
 {
-    if ( bRefInputMode && pRefInputEdit )       // only possible if in the 
reference edit mode
+    if ( bRefInputMode && m_pRefInputEdit )       // only possible if in the 
reference edit mode
     {
         if ( rRef.aStart != rRef.aEnd )
-            RefInputStart( pRefInputEdit );
+            RefInputStart( m_pRefInputEdit );
 
         OUString aRefStr;
         const formula::FormulaGrammar::AddressConvention eConv = 
pDocP->GetAddressConvention();
 
-        if ( pRefInputEdit == pEdCopyArea)
+        if (m_pRefInputEdit == m_xEdCopyArea.get())
             aRefStr = rRef.aStart.Format(ScRefFlags::ADDR_ABS_3D, pDocP, 
eConv);
-        else if ( pRefInputEdit == pEdFilterArea)
+        else if (m_pRefInputEdit == m_xEdFilterArea.get())
             aRefStr = rRef.Format(ScRefFlags::RANGE_ABS_3D, pDocP, eConv);
 
-        pRefInputEdit->SetRefString( aRefStr );
+        m_pRefInputEdit->SetRefString( aRefStr );
     }
 }
 
@@ -247,19 +217,19 @@ void ScSpecialFilterDlg::SetActive()
 {
     if ( bRefInputMode )
     {
-        if ( pRefInputEdit == pEdCopyArea )
+        if (m_pRefInputEdit == m_xEdCopyArea.get())
         {
-            pEdCopyArea->GrabFocus();
-            pEdCopyArea->GetModifyHdl().Call( *pEdCopyArea );
+            m_xEdCopyArea->GrabFocus();
+            m_xEdCopyArea->GetModifyHdl().Call( *m_xEdCopyArea );
         }
-        else if ( pRefInputEdit == pEdFilterArea )
+        else if (m_pRefInputEdit == m_xEdFilterArea.get())
         {
-            pEdFilterArea->GrabFocus();
-            FilterAreaModHdl( *pEdFilterArea );
+            m_xEdFilterArea->GrabFocus();
+            FilterAreaModHdl( *m_xEdFilterArea );
         }
     }
     else
-        GrabFocus();
+        m_xDialog->grab_focus();
 
     RefInputDone();
 }
@@ -279,14 +249,14 @@ bool ScSpecialFilterDlg::IsRefInputMode() const
 
 // Handler:
 
-IMPL_LINK( ScSpecialFilterDlg, EndDlgHdl, Button*, pBtn, void )
+IMPL_LINK(ScSpecialFilterDlg, EndDlgHdl, weld::Button&, rBtn, void)
 {
     OSL_ENSURE( pDoc && pViewData, "Document or ViewData not found. :-/" );
 
-    if ( (pBtn == pBtnOk) && pDoc && pViewData )
+    if (&rBtn == m_xBtnOk.get() && pDoc && pViewData)
     {
-        OUString          theCopyStr( pEdCopyArea->GetText() );
-        OUString          theAreaStr( pEdFilterArea->GetText() );
+        OUString          theCopyStr( m_xEdCopyArea->GetText() );
+        OUString          theAreaStr( m_xEdFilterArea->GetText() );
         ScQueryParam    theOutParam( theQueryData );
         ScAddress       theAdrCopy;
         bool            bEditInputOk    = true;
@@ -294,7 +264,7 @@ IMPL_LINK( ScSpecialFilterDlg, EndDlgHdl, Button*, pBtn, 
void )
         ScRange         theFilterArea;
         const formula::FormulaGrammar::AddressConvention eConv = 
pDoc->GetAddressConvention();
 
-        if ( pBtnCopyResult->IsChecked() )
+        if ( m_xBtnCopyResult->get_active() )
         {
             sal_Int32 nColonPos = theCopyStr.indexOf( ':' );
 
@@ -305,11 +275,11 @@ IMPL_LINK( ScSpecialFilterDlg, EndDlgHdl, Button*, pBtn, 
void )
 
             if ( (nResult & ScRefFlags::VALID) == ScRefFlags::ZERO )
             {
-                if (!pExpander->get_expanded())
-                    pExpander->set_expanded(true);
+                if (!m_xExpander->get_expanded())
+                    m_xExpander->set_expanded(true);
 
-                ERRORBOX(GetFrameWeld(), STR_INVALID_TABREF);
-                pEdCopyArea->GrabFocus();
+                ERRORBOX(m_xDialog.get(), STR_INVALID_TABREF);
+                m_xEdCopyArea->GrabFocus();
                 bEditInputOk = false;
             }
         }
@@ -320,8 +290,8 @@ IMPL_LINK( ScSpecialFilterDlg, EndDlgHdl, Button*, pBtn, 
void )
 
             if ( (nResult & ScRefFlags::VALID) == ScRefFlags::ZERO )
             {
-                ERRORBOX(GetFrameWeld(), STR_INVALID_TABREF);
-                pEdFilterArea->GrabFocus();
+                ERRORBOX(m_xDialog.get(), STR_INVALID_TABREF);
+                m_xEdFilterArea->GrabFocus();
                 bEditInputOk = false;
             }
         }
@@ -340,7 +310,7 @@ IMPL_LINK( ScSpecialFilterDlg, EndDlgHdl, Button*, pBtn, 
void )
                 ScAddress& rStart = theFilterArea.aStart;
                 ScAddress& rEnd   = theFilterArea.aEnd;
 
-                if ( pBtnCopyResult->IsChecked() )
+                if ( m_xBtnCopyResult->get_active() )
                 {
                     theOutParam.bInplace    = false;
                     theOutParam.nDestTab    = theAdrCopy.Tab();
@@ -355,13 +325,13 @@ IMPL_LINK( ScSpecialFilterDlg, EndDlgHdl, Button*, pBtn, 
void )
                     theOutParam.nDestRow    = 0;
                 }
 
-                theOutParam.bHasHeader = pBtnHeader->IsChecked();
+                theOutParam.bHasHeader = m_xBtnHeader->get_active();
                 theOutParam.bByRow     = true;
-                theOutParam.bCaseSens  = pBtnCase->IsChecked();
-                theOutParam.eSearchType = pBtnRegExp->IsChecked() ? 
utl::SearchParam::SearchType::Regexp :
+                theOutParam.bCaseSens  = m_xBtnCase->get_active();
+                theOutParam.eSearchType = m_xBtnRegExp->get_active() ? 
utl::SearchParam::SearchType::Regexp :
                     utl::SearchParam::SearchType::Normal;
-                theOutParam.bDuplicate = !pBtnUnique->IsChecked();
-                theOutParam.bDestPers  = pBtnDestPers->IsChecked();
+                theOutParam.bDuplicate = !m_xBtnUnique->get_active();
+                theOutParam.bDestPers  = m_xBtnDestPers->get_active();
 
                 bQueryOk = pDoc->CreateQueryParam(ScRange(rStart,rEnd), 
theOutParam);
             }
@@ -374,39 +344,38 @@ IMPL_LINK( ScSpecialFilterDlg, EndDlgHdl, Button*, pBtn, 
void )
             GetBindings().GetDispatcher()->ExecuteList(FID_FILTER_OK,
                     SfxCallMode::SLOT | SfxCallMode::RECORD,
                     { GetOutputItem(theOutParam, theFilterArea) });
-            Close();
+            response(RET_OK);
         }
         else
         {
-            ERRORBOX(GetFrameWeld(), STR_INVALID_QUERYAREA);
-            pEdFilterArea->GrabFocus();
+            ERRORBOX(m_xDialog.get(), STR_INVALID_QUERYAREA);
+            m_xEdFilterArea->GrabFocus();
         }
     }
-    else if ( pBtn == pBtnCancel )
+    else if (&rBtn == m_xBtnCancel.get())
     {
-        Close();
+        response(RET_CANCEL);
     }
 }
 
 IMPL_LINK( ScSpecialFilterDlg, TimeOutHdl, Timer*, _pIdle, void )
 {
     // every 50ms check whether RefInputMode is still true
-
-    if( (_pIdle == pIdle.get()) && IsActive() )
+    if (_pIdle == pIdle.get() && m_xDialog->has_toplevel_focus())
     {
-        if( pEdCopyArea->HasFocus() || pRbCopyArea->HasFocus() )
+        if( m_xEdCopyArea->GetWidget()->has_focus() || 
m_xRbCopyArea->GetWidget()->has_focus() )
         {
-            pRefInputEdit = pEdCopyArea;
+            m_pRefInputEdit = m_xEdCopyArea.get();
             bRefInputMode = true;
         }
-        else if( pEdFilterArea->HasFocus() || pRbFilterArea->HasFocus() )
+        else if( m_xEdFilterArea->GetWidget()->has_focus() || 
m_xRbFilterArea->GetWidget()->has_focus() )
         {
-            pRefInputEdit = pEdFilterArea;
+            m_pRefInputEdit = m_xEdFilterArea.get();
             bRefInputMode = true;
         }
         else if( bRefInputMode )
         {
-            pRefInputEdit = nullptr;
+            m_pRefInputEdit = nullptr;
             bRefInputMode = false;
         }
     }
@@ -414,23 +383,23 @@ IMPL_LINK( ScSpecialFilterDlg, TimeOutHdl, Timer*, 
_pIdle, void )
     pIdle->Start();
 }
 
-IMPL_LINK( ScSpecialFilterDlg, FilterAreaSelHdl, ListBox&, rLb, void )
+IMPL_LINK(ScSpecialFilterDlg, FilterAreaSelHdl, weld::ComboBox&, rLb, void)
 {
-    if ( &rLb == pLbFilterArea )
+    if (&rLb == m_xLbFilterArea.get())
     {
         OUString  aString;
-        const sal_Int32 nSelPos = pLbFilterArea->GetSelectedEntryPos();
+        const sal_Int32 nSelPos = m_xLbFilterArea->get_active();
 
         if ( nSelPos > 0 )
-            aString = *static_cast<OUString*>(pLbFilterArea->GetEntryData( 
nSelPos ));
+            aString = m_xLbFilterArea->get_id(nSelPos);
 
-        pEdFilterArea->SetText( aString );
+        m_xEdFilterArea->SetText( aString );
     }
 }
 
-IMPL_LINK( ScSpecialFilterDlg, FilterAreaModHdl, Edit&, rEd, void )
+IMPL_LINK( ScSpecialFilterDlg, FilterAreaModHdl, formula::WeldRefEdit&, rEd, 
void )
 {
-    if ( &rEd == pEdFilterArea )
+    if (&rEd == m_xEdFilterArea.get())
     {
         if ( pDoc && pViewData )
         {
@@ -439,22 +408,21 @@ IMPL_LINK( ScSpecialFilterDlg, FilterAreaModHdl, Edit&, 
rEd, void )
 
             if ( (nResult & ScRefFlags::VALID) == ScRefFlags::VALID )
             {
-                const sal_Int32 nCount  = pLbFilterArea->GetEntryCount();
-
-                for ( sal_Int32 i=1; i<nCount; ++i )
+                const sal_Int32 nCount  = m_xLbFilterArea->get_count();
+                for (sal_Int32 i = 1; i < nCount; ++i)
                 {
-                    OUString* pStr = 
static_cast<OUString*>(pLbFilterArea->GetEntryData( i ));
-                    if (theCurAreaStr == *pStr)
+                    OUString aStr = m_xLbFilterArea->get_id(i);
+                    if (theCurAreaStr == aStr)
                     {
-                        pLbFilterArea->SelectEntryPos( i );
+                        m_xLbFilterArea->set_active( i );
                         return;
                     }
                 }
-                pLbFilterArea->SelectEntryPos( 0 );
+                m_xLbFilterArea->set_active( 0 );
             }
         }
         else
-            pLbFilterArea->SelectEntryPos( 0 );
+            m_xLbFilterArea->set_active( 0 );
     }
 }
 
diff --git a/sc/source/ui/inc/filtdlg.hxx b/sc/source/ui/inc/filtdlg.hxx
index 74e87b1cf12b..6e14a2444167 100644
--- a/sc/source/ui/inc/filtdlg.hxx
+++ b/sc/source/ui/inc/filtdlg.hxx
@@ -33,7 +33,6 @@
 #include <vector>
 #include <map>
 
-class ScFilterOptionsMgr;
 class FilterOptionsMgr;
 class ScViewData;
 class ScDocument;
@@ -158,44 +157,24 @@ private:
     DECL_LINK( TimeOutHdl, Timer*, void );
 };
 
-class ScSpecialFilterDlg : public ScAnyRefDlg
+class ScSpecialFilterDlg : public ScAnyRefDlgController
 {
 public:
-                    ScSpecialFilterDlg( SfxBindings* pB, SfxChildWindow* pCW, 
vcl::Window* pParent,
-                                        const SfxItemSet&   rArgSet );
-                    virtual ~ScSpecialFilterDlg() override;
-    virtual void    dispose() override;
+    ScSpecialFilterDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* 
pParent,
+                       const SfxItemSet& rArgSet);
+    virtual ~ScSpecialFilterDlg() override;
 
     virtual void    SetReference( const ScRange& rRef, ScDocument* pDoc ) 
override;
 
     virtual bool    IsRefInputMode() const override;
     virtual void    SetActive() override;
 
-    virtual bool    Close() override;
+    virtual void    Close() override;
 
 private:
-    VclPtr<ListBox>         pLbFilterArea;
-    VclPtr<formula::RefEdit>   pEdFilterArea;
-    VclPtr<formula::RefButton> pRbFilterArea;
-
-    VclPtr<VclExpander>     pExpander;
-    VclPtr<CheckBox>        pBtnCase;
-    VclPtr<CheckBox>        pBtnRegExp;
-    VclPtr<CheckBox>        pBtnHeader;
-    VclPtr<CheckBox>        pBtnUnique;
-    VclPtr<CheckBox>        pBtnCopyResult;
-    VclPtr<ListBox>         pLbCopyArea;
-    VclPtr<formula::RefEdit> pEdCopyArea;
-    VclPtr<formula::RefButton> pRbCopyArea;
-    VclPtr<CheckBox>        pBtnDestPers;
-    VclPtr<FixedText>       pFtDbAreaLabel;
-    VclPtr<FixedText>       pFtDbArea;
     const OUString aStrUndefined;
 
-    VclPtr<OKButton>        pBtnOk;
-    VclPtr<CancelButton>    pBtnCancel;
-
-    std::unique_ptr<ScFilterOptionsMgr> pOptionsMgr;
+    std::unique_ptr<FilterOptionsMgr> pOptionsMgr;
 
     const sal_uInt16    nWhichQuery;
     const ScQueryParam  theQueryData;
@@ -203,21 +182,45 @@ private:
     ScViewData*         pViewData;
     ScDocument*         pDoc;
 
-    VclPtr<formula::RefEdit>   pRefInputEdit;
     bool                bRefInputMode;
 
     // Hack: RefInput control
     std::unique_ptr<Idle> pIdle;
 
+    formula::WeldRefEdit* m_pRefInputEdit;
+
+    std::unique_ptr<weld::ComboBox> m_xLbFilterArea;
+    std::unique_ptr<formula::WeldRefEdit> m_xEdFilterArea;
+    std::unique_ptr<formula::WeldRefButton> m_xRbFilterArea;
+
+    std::unique_ptr<weld::Expander> m_xExpander;
+    std::unique_ptr<weld::CheckButton> m_xBtnCase;
+    std::unique_ptr<weld::CheckButton> m_xBtnRegExp;
+    std::unique_ptr<weld::CheckButton> m_xBtnHeader;
+    std::unique_ptr<weld::CheckButton> m_xBtnUnique;
+    std::unique_ptr<weld::CheckButton> m_xBtnCopyResult;
+    std::unique_ptr<weld::ComboBox> m_xLbCopyArea;
+    std::unique_ptr<formula::WeldRefEdit> m_xEdCopyArea;
+    std::unique_ptr<formula::WeldRefButton> m_xRbCopyArea;
+    std::unique_ptr<weld::CheckButton> m_xBtnDestPers;
+    std::unique_ptr<weld::Label> m_xFtDbAreaLabel;
+    std::unique_ptr<weld::Label> m_xFtDbArea;
+
+    std::unique_ptr<weld::Button> m_xBtnOk;
+    std::unique_ptr<weld::Button> m_xBtnCancel;
+
+    std::unique_ptr<weld::Frame> m_xFilterFrame;
+    std::unique_ptr<weld::Label> m_xFilterLabel;
+
 private:
     void            Init( const SfxItemSet& rArgSet );
     ScQueryItem*    GetOutputItem( const ScQueryParam& rParam,
                                     const ScRange& rSource );
 
     // Handler
-    DECL_LINK( FilterAreaSelHdl, ListBox&, void );
-    DECL_LINK( FilterAreaModHdl, Edit&, void );
-    DECL_LINK( EndDlgHdl,  Button*, void );
+    DECL_LINK( FilterAreaSelHdl, weld::ComboBox&, void );
+    DECL_LINK( FilterAreaModHdl, formula::WeldRefEdit&, void );
+    DECL_LINK( EndDlgHdl,  weld::Button&, void );
 
     // Hack: RefInput control
     DECL_LINK( TimeOutHdl, Timer*, void );
diff --git a/sc/source/ui/inc/reffact.hxx b/sc/source/ui/inc/reffact.hxx
index 3d44627c9e6d..09c83aaf5632 100644
--- a/sc/source/ui/inc/reffact.hxx
+++ b/sc/source/ui/inc/reffact.hxx
@@ -52,7 +52,7 @@ DECL_WRAPPER_WITHID(ScXMLSourceDlgWrapper)
 DECL_WRAPPER_WITHID(ScPivotLayoutWrapper)
 DECL_WRAPPER_WITHID_CONTROLLER(ScTabOpDlgWrapper)
 DECL_WRAPPER_WITHID_CONTROLLER(ScFilterDlgWrapper)
-DECL_WRAPPER_WITHID(ScSpecialFilterDlgWrapper)
+DECL_WRAPPER_WITHID_CONTROLLER(ScSpecialFilterDlgWrapper)
 DECL_WRAPPER_WITHID_CONTROLLER(ScDbNameDlgWrapper)
 DECL_WRAPPER_WITHID_CONTROLLER(ScConsolidateDlgWrapper)
 DECL_WRAPPER_WITHID_CONTROLLER(ScPrintAreasDlgWrapper)
diff --git a/sc/source/ui/view/reffact.cxx b/sc/source/ui/view/reffact.cxx
index 445de338882d..02c89d153321 100644
--- a/sc/source/ui/view/reffact.cxx
+++ b/sc/source/ui/view/reffact.cxx
@@ -40,7 +40,7 @@ SFX_IMPL_MODELESSDIALOG_WITHID(ScXMLSourceDlgWrapper, 
SID_MANAGE_XML_SOURCE)
 SFX_IMPL_MODELESSDIALOG_WITHID(ScPivotLayoutWrapper, SID_OPENDLG_PIVOTTABLE )
 SFX_IMPL_CHILDWINDOW_WITHID(ScTabOpDlgWrapper, SID_OPENDLG_TABOP )
 SFX_IMPL_CHILDWINDOW_WITHID(ScFilterDlgWrapper, SID_FILTER )
-SFX_IMPL_MODELESSDIALOG_WITHID(ScSpecialFilterDlgWrapper, SID_SPECIAL_FILTER )
+SFX_IMPL_CHILDWINDOW_WITHID(ScSpecialFilterDlgWrapper, SID_SPECIAL_FILTER )
 SFX_IMPL_CHILDWINDOW_WITHID(ScDbNameDlgWrapper, SID_DEFINE_DBNAME )
 SFX_IMPL_CHILDWINDOW_WITHID(ScConsolidateDlgWrapper, SID_OPENDLG_CONSOLIDATE)
 SFX_IMPL_CHILDWINDOW_WITHID(ScPrintAreasDlgWrapper, SID_OPENDLG_EDIT_PRINTAREA 
)
@@ -137,7 +137,7 @@ IMPL_CONTROLLER_CHILD_CTOR( ScTabOpDlgWrapper, 
SID_OPENDLG_TABOP )
 
 IMPL_CONTROLLER_CHILD_CTOR( ScFilterDlgWrapper, SID_FILTER )
 
-IMPL_CHILD_CTOR( ScSpecialFilterDlgWrapper, SID_SPECIAL_FILTER )
+IMPL_CONTROLLER_CHILD_CTOR( ScSpecialFilterDlgWrapper, SID_SPECIAL_FILTER )
 
 IMPL_CONTROLLER_CHILD_CTOR( ScDbNameDlgWrapper, SID_DEFINE_DBNAME )
 
diff --git a/sc/source/ui/view/tabvwshc.cxx b/sc/source/ui/view/tabvwshc.cxx
index 40d6a9744ea6..a13c875d776d 100644
--- a/sc/source/ui/view/tabvwshc.cxx
+++ b/sc/source/ui/view/tabvwshc.cxx
@@ -144,35 +144,6 @@ VclPtr<SfxModelessDialog> ScTabViewShell::CreateRefDialog(
 
     switch( nSlotId )
     {
-        case SID_SPECIAL_FILTER:
-        {
-            ScQueryParam    aQueryParam;
-            SfxItemSet      aArgSet( GetPool(),
-                                     svl::Items<SCITEM_QUERYDATA,
-                                     SCITEM_QUERYDATA>{} );
-
-            ScDBData* pDBData = GetDBData(false, SC_DB_MAKE, 
ScGetDBSelection::RowDown);
-            pDBData->ExtendDataArea(pDoc);
-            pDBData->GetQueryParam( aQueryParam );
-
-            ScRange aArea;
-            pDBData->GetArea(aArea);
-            MarkRange(aArea, false);
-
-            ScQueryItem aItem( SCITEM_QUERYDATA, &GetViewData(), &aQueryParam 
);
-            ScRange aAdvSource;
-            if (pDBData->GetAdvancedQuerySource(aAdvSource))
-                aItem.SetAdvancedQuerySource( &aAdvSource );
-
-            aArgSet.Put( aItem );
-
-            // mark current sheet (due to RefInput in dialog)
-            GetViewData().SetRefTabNo( GetViewData().GetTabNo() );
-
-            pResult = VclPtr<ScSpecialFilterDlg>::Create( pB, pCW, pParent, 
aArgSet );
-        }
-        break;
-
         case SID_OPENDLG_OPTSOLVER:
         {
             ScViewData& rViewData = GetViewData();
@@ -485,6 +456,34 @@ std::unique_ptr<SfxModelessDialogController> 
ScTabViewShell::CreateRefDialogCont
             xResult.reset(new ScFilterDlg(pB, pCW, pParent, aArgSet));
             break;
         }
+        case SID_SPECIAL_FILTER:
+        {
+            ScQueryParam    aQueryParam;
+            SfxItemSet      aArgSet( GetPool(),
+                                     svl::Items<SCITEM_QUERYDATA,
+                                     SCITEM_QUERYDATA>{} );
+
+            ScDBData* pDBData = GetDBData(false, SC_DB_MAKE, 
ScGetDBSelection::RowDown);
+            pDBData->ExtendDataArea(pDoc);
+            pDBData->GetQueryParam( aQueryParam );
+
+            ScRange aArea;
+            pDBData->GetArea(aArea);
+            MarkRange(aArea, false);
+
+            ScQueryItem aItem( SCITEM_QUERYDATA, &GetViewData(), &aQueryParam 
);
+            ScRange aAdvSource;
+            if (pDBData->GetAdvancedQuerySource(aAdvSource))
+                aItem.SetAdvancedQuerySource( &aAdvSource );
+
+            aArgSet.Put( aItem );
+
+            // mark current sheet (due to RefInput in dialog)
+            GetViewData().SetRefTabNo( GetViewData().GetTabNo() );
+
+            xResult.reset(new ScSpecialFilterDlg(pB, pCW, pParent, aArgSet));
+            break;
+        }
     }
 
     if (xResult)
diff --git a/sc/uiconfig/scalc/ui/advancedfilterdialog.ui 
b/sc/uiconfig/scalc/ui/advancedfilterdialog.ui
index fc3d8d4ceaa1..7701e3c3ae61 100644
--- a/sc/uiconfig/scalc/ui/advancedfilterdialog.ui
+++ b/sc/uiconfig/scalc/ui/advancedfilterdialog.ui
@@ -1,14 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.22.1 -->
 <interface domain="sc">
   <requires lib="gtk+" version="3.18"/>
-  <requires lib="LibreOffice" version="1.0"/>
   <object class="GtkDialog" id="AdvancedFilterDialog">
     <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes" 
context="advancedfilterdialog|AdvancedFilterDialog">Advanced Filter</property>
     <property name="resizable">False</property>
+    <property name="default_width">0</property>
+    <property name="default_height">0</property>
     <property name="type_hint">dialog</property>
+    <child>
+      <placeholder/>
+    </child>
     <child internal-child="vbox">
       <object class="GtkBox" id="dialog-vbox1">
         <property name="visible">True</property>
@@ -101,7 +105,7 @@
                     <property name="vexpand">True</property>
                     <property name="column_spacing">12</property>
                     <child>
-                      <object class="foruilo-RefButton" id="rbfilterarea">
+                      <object class="GtkButton" id="rbfilterarea">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">True</property>
@@ -118,9 +122,6 @@
                       <object class="GtkComboBoxText" id="lbfilterarea">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="width_chars">20</property>
-                        <property name="entry_text_column">0</property>
-                        <property name="id_column">1</property>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
@@ -128,10 +129,11 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="foruilo-RefEdit" id="edfilterarea">
+                      <object class="GtkEntry" id="edfilterarea">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="hexpand">True</property>
+                        <property name="activates_default">True</property>
                         <property name="width_chars">30</property>
                       </object>
                       <packing>
@@ -303,9 +305,6 @@
                       <object class="GtkComboBoxText" id="lbcopyarea">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="width_chars">20</property>
-                        <property name="entry_text_column">0</property>
-                        <property name="id_column">1</property>
                         <accessibility>
                           <relation type="labelled-by" target="copyresult"/>
                         </accessibility>
@@ -321,7 +320,7 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="foruilo-RefEdit" id="edcopyarea">
+                      <object class="GtkEntry" id="edcopyarea">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="margin_bottom">1</property>
@@ -342,7 +341,7 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="foruilo-RefButton" id="rbcopyarea">
+                      <object class="GtkButton" id="rbcopyarea">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">True</property>
diff --git a/solenv/sanitizers/ui/modules/scalc.suppr 
b/solenv/sanitizers/ui/modules/scalc.suppr
index f1998440ad95..6eecccc9cd70 100644
--- a/solenv/sanitizers/ui/modules/scalc.suppr
+++ b/solenv/sanitizers/ui/modules/scalc.suppr
@@ -1,4 +1,6 @@
-sc/uiconfig/scalc/ui/advancedfilterdialog.ui://foruilo-RefEdit[@id='edfilterarea']
 no-labelled-by
+sc/uiconfig/scalc/ui/advancedfilterdialog.ui://GtkEntry[@id='edfilterarea'] 
no-labelled-by
+sc/uiconfig/scalc/ui/advancedfilterdialog.ui://GtkButton[@id='rbfilterarea'] 
button-no-label
+sc/uiconfig/scalc/ui/advancedfilterdialog.ui://GtkButton[@id='rbcopyarea'] 
button-no-label
 sc/uiconfig/scalc/ui/advancedfilterdialog.ui://GtkLabel[@id='dbarealabel'] 
orphan-label
 sc/uiconfig/scalc/ui/advancedfilterdialog.ui://GtkLabel[@id='dbarea'] 
orphan-label
 
sc/uiconfig/scalc/ui/aggregatefunctionentry.ui:GtkGrid[@id='grid']/GtkBox/GtkLabel
 orphan-label
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to