weld ScFilterDlg

Change-Id: I8bb8860d398af2ee9d6dd434c50f914e78b8021b
Reviewed-on: https://gerrit.libreoffice.org/70801
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/include/formula/funcutl.hxx b/include/formula/funcutl.hxx
index 22e46ec..3654d9e 100644
--- a/include/formula/funcutl.hxx
+++ b/include/formula/funcutl.hxx
@@ -177,6 +177,7 @@ public:
    void SetGetFocusHdl(const Link<WeldRefEdit&,void>& rLink) { maGetFocusHdl = rLink; }
    void SetLoseFocusHdl(const Link<WeldRefEdit&,void>& rLink) { maLoseFocusHdl = rLink; }
    void SetModifyHdl(const Link<WeldRefEdit&,void>& rLink) { maModifyHdl = rLink; }
    const Link<WeldRefEdit&,void>& GetModifyHdl() const { return maModifyHdl; }
    void SetActivateHdl(const Link<weld::Widget&,bool>& rLink) { maActivateHdl = rLink; }
};

diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx
index 5222a64c..326966e 100644
--- a/sc/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx
@@ -1647,11 +1647,8 @@ void ScTiledRenderingTest::testFilterDlg()
    CPPUNIT_ASSERT_EQUAL(true, pView2->GetViewFrame()->GetDispatcher()->IsLocked());
    CPPUNIT_ASSERT_EQUAL(false, pView1->GetViewFrame()->GetDispatcher()->IsLocked());

    KeyEvent aEvent(27, KEY_ESCAPE, 0);
    Application::PostKeyEvent(VclEventId::WindowKeyInput, pRefWindow->GetWindow(), &aEvent);
    Application::PostKeyEvent(VclEventId::WindowKeyUp, pRefWindow->GetWindow(), &aEvent);
    pRefWindow->GetController()->response(RET_CANCEL);

    Scheduler::ProcessEventsToIdle();
    CPPUNIT_ASSERT_EQUAL(false, pView2->GetViewFrame()->GetDispatcher()->IsLocked());
    CPPUNIT_ASSERT_EQUAL(false, pView1->GetViewFrame()->GetDispatcher()->IsLocked());

diff --git a/sc/source/ui/dbgui/filtdlg.cxx b/sc/source/ui/dbgui/filtdlg.cxx
index 9b6fe0e..477dc0f63 100644
--- a/sc/source/ui/dbgui/filtdlg.cxx
+++ b/sc/source/ui/dbgui/filtdlg.cxx
@@ -46,10 +46,10 @@
ScFilterDlg::EntryList::EntryList() :
    mnHeaderPos(INVALID_HEADER_POS) {}

ScFilterDlg::ScFilterDlg(SfxBindings* pB, SfxChildWindow* pCW, vcl::Window* pParent,
ScFilterDlg::ScFilterDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pParent,
    const SfxItemSet& rArgSet)
    : ScAnyRefDlg ( pB, pCW, pParent, "StandardFilterDialog",
        "modules/scalc/ui/standardfilterdialog.ui" )
    : ScAnyRefDlgController(pB, pCW, pParent,
        "modules/scalc/ui/standardfilterdialog.ui", "StandardFilterDialog")
    , aStrUndefined(ScResId(SCSTR_UNDEFINED))
    , aStrNone(ScResId(SCSTR_NONE))
    , aStrEmpty(ScResId(SCSTR_FILTER_EMPTY))
@@ -61,41 +61,42 @@ ScFilterDlg::ScFilterDlg(SfxBindings* pB, SfxChildWindow* pCW, vcl::Window* pPar
    , pDoc(nullptr)
    , nSrcTab(0)
    , bRefInputMode(false)
    , m_xLbConnect1(m_xBuilder->weld_combo_box("connect1"))
    , 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_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_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_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_xContents(m_xBuilder->weld_widget("grid"))
    , m_xScrollBar(m_xBuilder->weld_scrolled_window("scrollbar"))
    , m_xExpander(m_xBuilder->weld_expander("more"))
    , m_xBtnOk(m_xBuilder->weld_button("ok"))
    , m_xBtnCancel(m_xBuilder->weld_button("cancel"))
    , 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"))
{
    get(pLbConnect1,"connect1");
    get(pLbField1,"field1");
    get(pLbCond1,"cond1");
    get(pEdVal1,"val1");
    get(pLbConnect2,"connect2");
    get(pLbField2,"field2");
    get(pLbCond2,"cond2");
    get(pEdVal2,"val2");
    get(pLbConnect3,"connect3");
    get(pLbField3,"field3");
    get(pLbCond3,"cond3");
    get(pEdVal3,"val3");
    get(pLbConnect4,"connect4");
    get(pLbField4,"field4");
    get(pLbCond4,"cond4");
    get(pEdVal4,"val4");
    get(pScrollBar,"scrollbar");
    get(pExpander,"more");
    pExpander->SetExpandedHdl(LINK(this, ScFilterDlg, MoreExpandedHdl));
    get(pBtnOk,"ok");
    get(pBtnCancel,"cancel");
    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");
    m_xExpander->connect_expanded(LINK(this, ScFilterDlg, MoreExpandedHdl));
    m_xEdCopyArea->SetReferences(this, m_xFtDbAreaLabel.get());
    m_xRbCopyArea->SetReferences(this, m_xEdCopyArea.get());

    Init( rArgSet );

@@ -107,54 +108,12 @@ ScFilterDlg::ScFilterDlg(SfxBindings* pB, SfxChildWindow* pCW, vcl::Window* pPar

ScFilterDlg::~ScFilterDlg()
{
    disposeOnce();
}

void ScFilterDlg::dispose()
{
    pOptionsMgr.reset();
    pOutItem.reset();

    // Hack: RefInput control
    pTimer->Stop();
    pTimer.reset();

    pLbConnect1.clear();
    pLbField1.clear();
    pLbCond1.clear();
    pEdVal1.clear();
    pLbConnect2.clear();
    pLbField2.clear();
    pLbCond2.clear();
    pEdVal2.clear();
    pLbConnect3.clear();
    pLbField3.clear();
    pLbCond3.clear();
    pEdVal3.clear();
    pLbConnect4.clear();
    pLbField4.clear();
    pLbCond4.clear();
    pEdVal4.clear();
    pScrollBar.clear();
    pExpander.clear();
    pBtnOk.clear();
    pBtnCancel.clear();
    pBtnCase.clear();
    pBtnRegExp.clear();
    pBtnHeader.clear();
    pBtnUnique.clear();
    pBtnCopyResult.clear();
    pLbCopyArea.clear();
    pEdCopyArea.clear();
    pRbCopyArea.clear();
    pBtnDestPers.clear();
    pFtDbAreaLabel.clear();
    pFtDbArea.clear();
    maValueEdArr.clear();
    maFieldLbArr.clear();
    maCondLbArr.clear();
    maConnLbArr.clear();
    ScAnyRefDlg::dispose();
}

void ScFilterDlg::Init( const SfxItemSet& rArgSet )
@@ -162,29 +121,34 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
    const ScQueryItem& rQueryItem = static_cast<const ScQueryItem&>(
                                    rArgSet.Get( nWhichQuery ));

    pBtnOk->SetClickHdl      ( LINK( this, ScFilterDlg, EndDlgHdl ) );
    pBtnCancel->SetClickHdl  ( LINK( this, ScFilterDlg, EndDlgHdl ) );
    pBtnHeader->SetClickHdl  ( LINK( this, ScFilterDlg, CheckBoxHdl ) );
    pBtnCase->SetClickHdl    ( LINK( this, ScFilterDlg, CheckBoxHdl ) );
    m_xBtnOk->connect_clicked      ( LINK( this, ScFilterDlg, EndDlgHdl ) );
    m_xBtnCancel->connect_clicked  ( LINK( this, ScFilterDlg, EndDlgHdl ) );
    m_xBtnHeader->connect_clicked  ( LINK( this, ScFilterDlg, CheckBoxHdl ) );
    m_xBtnCase->connect_clicked    ( LINK( this, ScFilterDlg, CheckBoxHdl ) );

    pLbField1->SetSelectHdl  ( LINK( this, ScFilterDlg, LbSelectHdl ) );
    pLbField2->SetSelectHdl  ( LINK( this, ScFilterDlg, LbSelectHdl ) );
    pLbField3->SetSelectHdl  ( LINK( this, ScFilterDlg, LbSelectHdl ) );
    pLbField4->SetSelectHdl  ( LINK( this, ScFilterDlg, LbSelectHdl ) );
    pLbConnect1->SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
    pLbConnect2->SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
    pLbConnect3->SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
    pLbConnect4->SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbField1->connect_changed  ( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbField2->connect_changed  ( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbField3->connect_changed  ( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbField4->connect_changed  ( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbConnect1->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbConnect2->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbConnect3->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbConnect4->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );

    pLbField1->setMaxWidthChars(10);
    pLbField2->setMaxWidthChars(10);
    pLbField3->setMaxWidthChars(10);
    pLbField4->setMaxWidthChars(10);
    m_xLbField1->append_text("0000000000");
    m_xLbField1->set_active(0);
    auto nPrefWidth = m_xLbField1->get_preferred_size().Width();
    m_xLbField1->clear();

    pLbCond1->SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
    pLbCond2->SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
    pLbCond3->SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
    pLbCond4->SetSelectHdl( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbField1->set_size_request(nPrefWidth, -1);
    m_xLbField2->set_size_request(nPrefWidth, -1);
    m_xLbField3->set_size_request(nPrefWidth, -1);
    m_xLbField4->set_size_request(nPrefWidth, -1);

    m_xLbCond1->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbCond2->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbCond3->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
    m_xLbCond4->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );

    pViewData   = rQueryItem.GetViewData();
    pDoc        = pViewData ? pViewData->GetDocument() : nullptr;
@@ -192,41 +156,41 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )

    // for easier access:
    maFieldLbArr.reserve(QUERY_ENTRY_COUNT);
    maFieldLbArr.push_back(pLbField1);
    maFieldLbArr.push_back(pLbField2);
    maFieldLbArr.push_back(pLbField3);
    maFieldLbArr.push_back(pLbField4);
    maFieldLbArr.push_back(m_xLbField1.get());
    maFieldLbArr.push_back(m_xLbField2.get());
    maFieldLbArr.push_back(m_xLbField3.get());
    maFieldLbArr.push_back(m_xLbField4.get());
    maValueEdArr.reserve(QUERY_ENTRY_COUNT);
    maValueEdArr.push_back(pEdVal1);
    maValueEdArr.push_back(pEdVal2);
    maValueEdArr.push_back(pEdVal3);
    maValueEdArr.push_back(pEdVal4);
    maValueEdArr.push_back(m_xEdVal1.get());
    maValueEdArr.push_back(m_xEdVal2.get());
    maValueEdArr.push_back(m_xEdVal3.get());
    maValueEdArr.push_back(m_xEdVal4.get());
    maCondLbArr.reserve(QUERY_ENTRY_COUNT);
    maCondLbArr.push_back(pLbCond1);
    maCondLbArr.push_back(pLbCond2);
    maCondLbArr.push_back(pLbCond3);
    maCondLbArr.push_back(pLbCond4);
    maCondLbArr.push_back(m_xLbCond1.get());
    maCondLbArr.push_back(m_xLbCond2.get());
    maCondLbArr.push_back(m_xLbCond3.get());
    maCondLbArr.push_back(m_xLbCond4.get());
    maConnLbArr.reserve(QUERY_ENTRY_COUNT);
    maConnLbArr.push_back(pLbConnect1);
    maConnLbArr.push_back(pLbConnect2);
    maConnLbArr.push_back(pLbConnect3);
    maConnLbArr.push_back(pLbConnect4);
    maConnLbArr.push_back(m_xLbConnect1.get());
    maConnLbArr.push_back(m_xLbConnect2.get());
    maConnLbArr.push_back(m_xLbConnect3.get());
    maConnLbArr.push_back(m_xLbConnect4.get());

    // Option initialization:
    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 ) );
    // Read in field lists and select entries

@@ -247,12 +211,12 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
            if (rEntry.IsQueryByEmpty())
            {
                aValStr = aStrEmpty;
                maCondLbArr[i]->Disable();
                maCondLbArr[i]->set_sensitive(false);
            }
            else if (rEntry.IsQueryByNonEmpty())
            {
                aValStr = aStrNotEmpty;
                maCondLbArr[i]->Disable();
                maCondLbArr[i]->set_sensitive(false);
            }
            else
            {
@@ -301,92 +265,93 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
            maRefreshExceptQuery[i] = true;

        }
        maFieldLbArr[i]->SelectEntryPos( nFieldSelPos );
        maCondLbArr [i]->SelectEntryPos( nCondPos );
        maValueEdArr[i]->SetText( aValStr );
        maValueEdArr[i]->EnableAutocomplete( false );
        maValueEdArr[i]->SetModifyHdl( LINK( this, ScFilterDlg, ValModifyHdl ) );
        maFieldLbArr[i]->set_active( nFieldSelPos );
        maCondLbArr [i]->set_active( nCondPos );
        maValueEdArr[i]->set_entry_text( aValStr );
        maValueEdArr[i]->set_entry_completion(false);
        maValueEdArr[i]->connect_changed( LINK( this, ScFilterDlg, ValModifyHdl ) );
        UpdateValueList(i+1);
    }

    pScrollBar->SetEndScrollHdl( LINK( this, ScFilterDlg, ScrollHdl ) );
    pScrollBar->SetScrollHdl( LINK( this, ScFilterDlg, ScrollHdl ) );
    m_xScrollBar->set_user_managed_scrolling();
    m_xScrollBar->connect_vadjustment_changed( LINK( this, ScFilterDlg, ScrollHdl ) );
    m_xScrollBar->vadjustment_configure(0, 0, 8, 1, 3, 4);
    Size aSize(m_xContents->get_preferred_size());
    m_xContents->set_size_request(aSize.Width(), aSize.Height());

    pScrollBar->SetRange( Range( 0, 4 ) );
    pScrollBar->SetLineSize( 1 );
    pLbConnect1->Hide();
    m_xLbConnect1->hide();
    // Disable/Enable Logic:

    (pLbField1->GetSelectedEntryPos() != 0)
    && (pLbField2->GetSelectedEntryPos() != 0)
        ? pLbConnect2->SelectEntryPos( static_cast<sal_uInt16>(theQueryData.GetEntry(1).eConnect) )
        : pLbConnect2->SetNoSelection();
    (m_xLbField1->get_active() != 0)
    && (m_xLbField2->get_active() != 0)
        ? m_xLbConnect2->set_active( static_cast<sal_uInt16>(theQueryData.GetEntry(1).eConnect) )
        : m_xLbConnect2->set_active(-1);

    (pLbField2->GetSelectedEntryPos() != 0)
    && (pLbField3->GetSelectedEntryPos() != 0)
        ? pLbConnect3->SelectEntryPos( static_cast<sal_uInt16>(theQueryData.GetEntry(2).eConnect) )
        : pLbConnect3->SetNoSelection();
    (m_xLbField2->get_active() != 0)
    && (m_xLbField3->get_active() != 0)
        ? m_xLbConnect3->set_active( static_cast<sal_uInt16>(theQueryData.GetEntry(2).eConnect) )
        : m_xLbConnect3->set_active(-1);

    (pLbField3->GetSelectedEntryPos() != 0)
    && (pLbField4->GetSelectedEntryPos() != 0)
        ? pLbConnect4->SelectEntryPos( static_cast<sal_uInt16>(theQueryData.GetEntry(3).eConnect) )
        : pLbConnect4->SetNoSelection();
    if ( pLbField1->GetSelectedEntryPos() == 0 )
    (m_xLbField3->get_active() != 0)
    && (m_xLbField4->get_active() != 0)
        ? m_xLbConnect4->set_active( static_cast<sal_uInt16>(theQueryData.GetEntry(3).eConnect) )
        : m_xLbConnect4->set_active(-1);
    if ( m_xLbField1->get_active() == 0 )
    {
        pLbConnect2->Disable();
        pLbField2->Disable();
        pLbCond2->Disable();
        pEdVal2->Disable();
        m_xLbConnect2->set_sensitive(false);
        m_xLbField2->set_sensitive(false);
        m_xLbCond2->set_sensitive(false);
        m_xEdVal2->set_sensitive(false);
    }
    else if ( pLbConnect2->GetSelectedEntryCount() == 0 )
    else if ( m_xLbConnect2->get_active() == -1 )
    {
        pLbField2->Disable();
        pLbCond2->Disable();
        pEdVal2->Disable();
        m_xLbField2->set_sensitive(false);
        m_xLbCond2->set_sensitive(false);
        m_xEdVal2->set_sensitive(false);
    }

    if ( pLbField2->GetSelectedEntryPos() == 0 )
    if ( m_xLbField2->get_active() == 0 )
    {
        pLbConnect3->Disable();
        pLbField3->Disable();
        pLbCond3->Disable();
        pEdVal3->Disable();
        m_xLbConnect3->set_sensitive(false);
        m_xLbField3->set_sensitive(false);
        m_xLbCond3->set_sensitive(false);
        m_xEdVal3->set_sensitive(false);
    }
    else if ( pLbConnect3->GetSelectedEntryCount() == 0 )
    else if ( m_xLbConnect3->get_active() == -1 )
    {
        pLbField3->Disable();
        pLbCond3->Disable();
        pEdVal3->Disable();
        m_xLbField3->set_sensitive(false);
        m_xLbCond3->set_sensitive(false);
        m_xEdVal3->set_sensitive(false);
    }
    if ( pLbField3->GetSelectedEntryPos() == 0 )
    if ( m_xLbField3->get_active() == 0 )
    {
        pLbConnect4->Disable();
        pLbField4->Disable();
        pLbCond4->Disable();
        pEdVal4->Disable();
        m_xLbConnect4->set_sensitive(false);
        m_xLbField4->set_sensitive(false);
        m_xLbCond4->set_sensitive(false);
        m_xEdVal4->set_sensitive(false);
    }
    else if ( pLbConnect4->GetSelectedEntryCount() == 0 )
    else if ( m_xLbConnect4->get_active() == -1 )
    {
        pLbField4->Disable();
        pLbCond4->Disable();
        pEdVal4->Disable();
        m_xLbField4->set_sensitive(false);
        m_xLbCond4->set_sensitive(false);
        m_xEdVal4->set_sensitive(false);
    }

    pEdVal1->setMaxWidthChars(10);
    pEdVal2->setMaxWidthChars(10);
    pEdVal3->setMaxWidthChars(10);
    pEdVal4->setMaxWidthChars(10);
    m_xEdVal1->set_entry_width_chars(10);
    m_xEdVal2->set_entry_width_chars(10);
    m_xEdVal3->set_entry_width_chars(10);
    m_xEdVal4->set_entry_width_chars(10);

    if (pDoc != nullptr && pDoc->GetChangeTrack() != nullptr)
        pBtnCopyResult->Disable();
        m_xBtnCopyResult->set_sensitive(false);
}

bool ScFilterDlg::Close()
void ScFilterDlg::Close()
{
    if (pViewData)
        pViewData->GetDocShell()->CancelAutoDBRange();

    return DoClose( ScFilterDlgWrapper::GetChildWindowId() );
    DoClose( ScFilterDlgWrapper::GetChildWindowId() );
}

// Mouse-selected cell area becomes the new selection and is shown in the
@@ -397,9 +362,9 @@ void ScFilterDlg::SetReference( const ScRange& rRef, ScDocument* pDocP )
    if ( bRefInputMode )    // Only possible if in reference edit mode
    {
        if ( rRef.aStart != rRef.aEnd )
            RefInputStart( pEdCopyArea );
            RefInputStart( m_xEdCopyArea.get() );
        OUString aRefStr(rRef.aStart.Format(ScRefFlags::ADDR_ABS_3D, pDocP, pDocP->GetAddressConvention()));
        pEdCopyArea->SetRefString( aRefStr );
        m_xEdCopyArea->SetRefString( aRefStr );
    }
}

@@ -407,25 +372,25 @@ void ScFilterDlg::SetActive()
{
    if ( bRefInputMode )
    {
        pEdCopyArea->GrabFocus();
        pEdCopyArea->GetModifyHdl().Call( *pEdCopyArea );
        m_xEdCopyArea->GrabFocus();
        m_xEdCopyArea->GetModifyHdl().Call( *m_xEdCopyArea );
    }
    else
        GrabFocus();
        m_xDialog->grab_focus();

    RefInputDone();
}

void ScFilterDlg::FillFieldLists()
{
    pLbField1->Clear();
    pLbField2->Clear();
    pLbField3->Clear();
    pLbField4->Clear();
    pLbField1->InsertEntry( aStrNone, 0 );
    pLbField2->InsertEntry( aStrNone, 0 );
    pLbField3->InsertEntry( aStrNone, 0 );
    pLbField4->InsertEntry( aStrNone, 0 );
    m_xLbField1->clear();
    m_xLbField2->clear();
    m_xLbField3->clear();
    m_xLbField4->clear();
    m_xLbField1->append_text( aStrNone );
    m_xLbField2->append_text( aStrNone );
    m_xLbField3->append_text( aStrNone );
    m_xLbField4->append_text( aStrNone );

    if ( pDoc )
    {
@@ -435,42 +400,39 @@ void ScFilterDlg::FillFieldLists()
        SCROW   nFirstRow   = theQueryData.nRow1;
        SCCOL   nMaxCol     = theQueryData.nCol2;
        SCCOL   col = 0;
        sal_uInt16  i=1;

        for ( col=nFirstCol; col<=nMaxCol; col++ )
        {
            aFieldName = pDoc->GetString(col, nFirstRow, nTab);
            if (!pBtnHeader->IsChecked() || aFieldName.isEmpty())
            if (!m_xBtnHeader->get_active() || aFieldName.isEmpty())
            {
                aFieldName = ScGlobal::ReplaceOrAppend( aStrColumn, "%1", ScColToAlpha( col ));
            }
            pLbField1->InsertEntry( aFieldName, i );
            pLbField2->InsertEntry( aFieldName, i );
            pLbField3->InsertEntry( aFieldName, i );
            pLbField4->InsertEntry( aFieldName, i );
            i++;
            m_xLbField1->append_text( aFieldName );
            m_xLbField2->append_text( aFieldName );
            m_xLbField3->append_text( aFieldName );
            m_xLbField4->append_text( aFieldName );
        }
    }
}

void ScFilterDlg::UpdateValueList( size_t nList )
{
    bool bCaseSens = pBtnCase->IsChecked();
    bool bCaseSens = m_xBtnCase->get_active();

    if (pDoc && nList > 0 && nList <= QUERY_ENTRY_COUNT)
    {
        ComboBox*   pValList        = maValueEdArr[nList-1].get();
        const sal_Int32 nFieldSelPos = maFieldLbArr[nList-1]->GetSelectedEntryPos();
        sal_Int32 nListPos = 0;
        OUString aCurValue = pValList->GetText();
        weld::ComboBox* pValList = maValueEdArr[nList-1];
        const sal_Int32 nFieldSelPos = maFieldLbArr[nList-1]->get_active();
        OUString aCurValue = pValList->get_active_text();

        pValList->Clear();
        pValList->InsertEntry( aStrNotEmpty, nListPos++ );
        pValList->InsertEntry( aStrEmpty, nListPos++ );
        pValList->clear();
        pValList->append_text(aStrNotEmpty);
        pValList->append_text(aStrEmpty);

        if ( nFieldSelPos )
        {
            WaitObject aWaiter( this );     // even if only the list box has content
            weld::WaitObject aWaiter(m_xDialog.get());     // even if only the list box has content

            SCCOL nColumn = theQueryData.nCol1 + static_cast<SCCOL>(nFieldSelPos) - 1;
            EntryList* pList = nullptr;
@@ -532,11 +494,10 @@ void ScFilterDlg::UpdateValueList( size_t nList )

            for (const auto& rEntry : pList->maFilterEntries)
            {
                pValList->InsertEntry(rEntry.GetString(), nListPos++);
                pValList->append_text(rEntry.GetString());
            }
        }
        pValList->SetText( aCurValue );
        pValList->EnableDDAutoWidth(false);
        pValList->set_entry_text(aCurValue);
    }

    UpdateHdrInValueList( nList );
@@ -552,7 +513,7 @@ void ScFilterDlg::UpdateHdrInValueList( size_t nList )
    if (nList == 0 || nList > QUERY_ENTRY_COUNT)
        return;

    size_t nFieldSelPos = maFieldLbArr[nList-1]->GetSelectedEntryPos();
    size_t nFieldSelPos = maFieldLbArr[nList-1]->get_active();
    if (!nFieldSelPos)
        return;

@@ -567,24 +528,24 @@ void ScFilterDlg::UpdateHdrInValueList( size_t nList )
    if (nPos == INVALID_HEADER_POS)
        return;

    ComboBox* pValList = maValueEdArr[nList-1].get();
    size_t nListPos = nPos + 2;                 // for "empty" and "non-empty"
    weld::ComboBox* pValList = maValueEdArr[nList-1];
    int nListPos = nPos + 2;                 // for "empty" and "non-empty"

    const ScTypedStrData& rHdrEntry = m_EntryLists[nColumn]->maFilterEntries.maStrData[nPos];

    const OUString& aHdrStr = rHdrEntry.GetString();
    bool bWasThere = aHdrStr == pValList->GetEntry(nListPos);
    bool bInclude = !pBtnHeader->IsChecked();
    bool bWasThere = nListPos < pValList->get_count() && aHdrStr == pValList->get_text(nListPos);
    bool bInclude = !m_xBtnHeader->get_active();

    if (bInclude)           // Include entry
    {
        if (!bWasThere)
            pValList->InsertEntry(aHdrStr, nListPos);
            pValList->insert_text(nListPos, aHdrStr);
    }
    else                    // Omit entry
    {
        if (bWasThere)
            pValList->RemoveEntryAt(nListPos);
            pValList->remove(nListPos);
    }
}

@@ -592,11 +553,11 @@ void ScFilterDlg::ClearValueList( size_t nList )
{
    if (nList > 0 && nList <= QUERY_ENTRY_COUNT)
    {
        ComboBox* pValList = maValueEdArr[nList-1].get();
        pValList->Clear();
        pValList->InsertEntry( aStrNotEmpty, 0 );
        pValList->InsertEntry( aStrEmpty, 1 );
        pValList->SetText( EMPTY_OUSTRING );
        weld::ComboBox* pValList = maValueEdArr[nList-1];
        pValList->clear();
        pValList->append_text( aStrNotEmpty );
        pValList->append_text( aStrEmpty );
        pValList->set_entry_text( EMPTY_OUSTRING );
    }
}

@@ -614,14 +575,14 @@ ScQueryItem* ScFilterDlg::GetOutputItem()
    ScQueryParam    theParam( theQueryData );
    bool            bCopyPosOk = false;

    if ( pBtnCopyResult->IsChecked() )
    if ( m_xBtnCopyResult->get_active() )
    {
        ScRefFlags nResult = theCopyPos.Parse(
            pEdCopyArea->GetText(), pDoc, pDoc->GetAddressConvention());
            m_xEdCopyArea->GetText(), pDoc, pDoc->GetAddressConvention());
        bCopyPosOk = (nResult & ScRefFlags::VALID) == ScRefFlags::VALID;
    }

    if ( pBtnCopyResult->IsChecked() && bCopyPosOk )
    if ( m_xBtnCopyResult->get_active() && bCopyPosOk )
    {
        theParam.bInplace   = false;
        theParam.nDestTab   = theCopyPos.Tab();
@@ -636,12 +597,12 @@ ScQueryItem* ScFilterDlg::GetOutputItem()
        theParam.nDestRow   = 0;
    }

    theParam.bHasHeader     = pBtnHeader->IsChecked();
    theParam.bHasHeader     = m_xBtnHeader->get_active();
    theParam.bByRow         = true;
    theParam.bDuplicate     = !pBtnUnique->IsChecked();
    theParam.bCaseSens      = pBtnCase->IsChecked();
    theParam.eSearchType    = pBtnRegExp->IsChecked() ? utl::SearchParam::SearchType::Regexp : utl::SearchParam::SearchType::Normal;
    theParam.bDestPers      = pBtnDestPers->IsChecked();
    theParam.bDuplicate     = !m_xBtnUnique->get_active();
    theParam.bCaseSens      = m_xBtnCase->get_active();
    theParam.eSearchType    = m_xBtnRegExp->get_active() ? utl::SearchParam::SearchType::Regexp : utl::SearchParam::SearchType::Normal;
    theParam.bDestPers      = m_xBtnDestPers->get_active();

    // only set the three - reset everything else

@@ -657,24 +618,24 @@ bool ScFilterDlg::IsRefInputMode() const

// Handler:

IMPL_LINK( ScFilterDlg, EndDlgHdl, Button*, pBtn, void )
IMPL_LINK( ScFilterDlg, EndDlgHdl, weld::Button&, rBtn, void )
{
    if ( pBtn == pBtnOk )
    if ( &rBtn == m_xBtnOk.get() )
    {
        bool bAreaInputOk = true;

        if ( pBtnCopyResult->IsChecked() )
        if ( m_xBtnCopyResult->get_active() )
        {
            if ( !pOptionsMgr->VerifyPosStr( pEdCopyArea->GetText() ) )
            if ( !pOptionsMgr->VerifyPosStr( m_xEdCopyArea->GetText() ) )
            {
                if (!pExpander->get_expanded())
                  pExpander->set_expanded(true);
                if (!m_xExpander->get_expanded())
                  m_xExpander->set_expanded(true);

                std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(),
                std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(),
                                                          VclMessageType::Warning, VclButtonsType::Ok,
                                                          ScResId(STR_INVALID_TABREF)));
                xBox->run();
                pEdCopyArea->GrabFocus();
                m_xEdCopyArea->GrabFocus();
                bAreaInputOk = false;
            }
        }
@@ -686,18 +647,18 @@ IMPL_LINK( ScFilterDlg, EndDlgHdl, Button*, pBtn, void )
            GetBindings().GetDispatcher()->ExecuteList(FID_FILTER_OK,
                                      SfxCallMode::SLOT | SfxCallMode::RECORD,
                                      { GetOutputItem() });
            Close();
            response(RET_OK);
        }
    }
    else if ( pBtn == pBtnCancel )
    else if ( &rBtn == m_xBtnCancel.get() )
    {
        Close();
        response(RET_CANCEL);
    }
}

IMPL_LINK_NOARG(ScFilterDlg, MoreExpandedHdl, VclExpander&, void)
IMPL_LINK_NOARG(ScFilterDlg, MoreExpandedHdl, weld::Expander&, void)
{
    if ( pExpander->get_expanded() )
    if ( m_xExpander->get_expanded() )
        pTimer->Start();
    else
    {
@@ -711,55 +672,53 @@ IMPL_LINK_NOARG(ScFilterDlg, MoreExpandedHdl, VclExpander&, void)
IMPL_LINK( ScFilterDlg, TimeOutHdl, Timer*, _pTimer, void )
{
    // Check if RefInputMode is still true every 50ms
    if (_pTimer == pTimer.get() && m_xDialog->has_toplevel_focus())
        bRefInputMode = (m_xEdCopyArea->GetWidget()->has_focus() || m_xRbCopyArea->GetWidget()->has_focus());

    if( _pTimer == pTimer.get() && IsActive() )
        bRefInputMode = (pEdCopyArea->HasFocus() || pRbCopyArea->HasFocus());

    if ( pExpander->get_expanded() )
    if ( m_xExpander->get_expanded() )
        pTimer->Start();
}

IMPL_LINK( ScFilterDlg, LbSelectHdl, ListBox&, rLb, void )
IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
{
    /*
     * Handle enable/disable logic depending on which ListBox was selected
     */
    sal_uInt16 nOffset = GetSliderPos();

    if ( &rLb == pLbConnect1 )
    if ( &rLb == m_xLbConnect1.get() )
    {
        pLbField1->Enable();
        pLbCond1->Enable();
        pEdVal1->Enable();
        m_xLbField1->set_sensitive(true);
        m_xLbCond1->set_sensitive(true);
        m_xEdVal1->set_sensitive(true);

        const sal_Int32 nConnect1 = pLbConnect1->GetSelectedEntryPos();
        const sal_Int32 nConnect1 = m_xLbConnect1->get_active();
        size_t nQE = nOffset;
        theQueryData.GetEntry(nQE).eConnect =static_cast<ScQueryConnect>(nConnect1);
        if (maRefreshExceptQuery.size() < nQE + 1)
            maRefreshExceptQuery.resize(nQE + 1, false);
        maRefreshExceptQuery[nQE] = true;
    }

    else if ( &rLb == pLbConnect2 )
    else if ( &rLb == m_xLbConnect2.get() )
    {
        pLbField2->Enable();
        pLbCond2->Enable();
        pEdVal2->Enable();
        m_xLbField2->set_sensitive(true);
        m_xLbCond2->set_sensitive(true);
        m_xEdVal2->set_sensitive(true);

        const sal_Int32 nConnect2 = pLbConnect2->GetSelectedEntryPos();
        const sal_Int32 nConnect2 = m_xLbConnect2->get_active();
        size_t nQE = 1+nOffset;
        theQueryData.GetEntry(nQE).eConnect =static_cast<ScQueryConnect>(nConnect2);
        if (maRefreshExceptQuery.size() < nQE + 1)
            maRefreshExceptQuery.resize(nQE + 1, false);
        maRefreshExceptQuery[nQE]=true;
    }
    else if ( &rLb == pLbConnect3 )
    else if ( &rLb == m_xLbConnect3.get() )
    {
        pLbField3->Enable();
        pLbCond3->Enable();
        pEdVal3->Enable();
        m_xLbField3->set_sensitive(true);
        m_xLbCond3->set_sensitive(true);
        m_xEdVal3->set_sensitive(true);

        const sal_Int32 nConnect3 = pLbConnect3->GetSelectedEntryPos();
        const sal_Int32 nConnect3 = m_xLbConnect3->get_active();
        size_t nQE = 2 + nOffset;
        theQueryData.GetEntry(nQE).eConnect = static_cast<ScQueryConnect>(nConnect3);
        if (maRefreshExceptQuery.size() < nQE + 1)
@@ -767,49 +726,49 @@ IMPL_LINK( ScFilterDlg, LbSelectHdl, ListBox&, rLb, void )
        maRefreshExceptQuery[nQE] = true;

    }
    else if ( &rLb == pLbConnect4 )
    else if ( &rLb == m_xLbConnect4.get() )
    {
        pLbField4->Enable();
        pLbCond4->Enable();
        pEdVal4->Enable();
        m_xLbField4->set_sensitive(true);
        m_xLbCond4->set_sensitive(true);
        m_xEdVal4->set_sensitive(true);

        const sal_Int32 nConnect4 = pLbConnect4->GetSelectedEntryPos();
        const sal_Int32 nConnect4 = m_xLbConnect4->get_active();
        size_t nQE = 3 + nOffset;
        theQueryData.GetEntry(nQE).eConnect = static_cast<ScQueryConnect>(nConnect4);
        if (maRefreshExceptQuery.size() < nQE + 1)
            maRefreshExceptQuery.resize(nQE + 1, false);
        maRefreshExceptQuery[nQE] = true;
    }
    else if ( &rLb == pLbField1 )
    else if ( &rLb == m_xLbField1.get() )
    {
        if ( pLbField1->GetSelectedEntryPos() == 0 )
        if ( m_xLbField1->get_active() == 0 )
        {
            pLbConnect2->SetNoSelection();
            pLbConnect3->SetNoSelection();
            pLbConnect4->SetNoSelection();
            pLbField2->SelectEntryPos( 0 );
            pLbField3->SelectEntryPos( 0 );
            pLbField4->SelectEntryPos( 0 );
            pLbCond2->SelectEntryPos( 0 );
            pLbCond3->SelectEntryPos( 0 );
            pLbCond4->SelectEntryPos( 0 );
            m_xLbConnect2->set_active(-1);
            m_xLbConnect3->set_active(-1);
            m_xLbConnect4->set_active(-1);
            m_xLbField2->set_active( 0 );
            m_xLbField3->set_active( 0 );
            m_xLbField4->set_active( 0 );
            m_xLbCond2->set_active( 0 );
            m_xLbCond3->set_active( 0 );
            m_xLbCond4->set_active( 0 );
            ClearValueList( 1 );
            ClearValueList( 2 );
            ClearValueList( 3 );
            ClearValueList( 4 );

            pLbConnect2->Disable();
            pLbConnect3->Disable();
            pLbConnect4->Disable();
            pLbField2->Disable();
            pLbField3->Disable();
            pLbField4->Disable();
            pLbCond2->Disable();
            pLbCond3->Disable();
            pLbCond4->Disable();
            pEdVal2->Disable();
            pEdVal3->Disable();
            pEdVal4->Disable();
            m_xLbConnect2->set_sensitive(false);
            m_xLbConnect3->set_sensitive(false);
            m_xLbConnect4->set_sensitive(false);
            m_xLbField2->set_sensitive(false);
            m_xLbField3->set_sensitive(false);
            m_xLbField4->set_sensitive(false);
            m_xLbCond2->set_sensitive(false);
            m_xLbCond3->set_sensitive(false);
            m_xLbCond4->set_sensitive(false);
            m_xEdVal2->set_sensitive(false);
            m_xEdVal3->set_sensitive(false);
            m_xEdVal4->set_sensitive(false);
            SCSIZE nCount = theQueryData.GetEntryCount();
            if (maRefreshExceptQuery.size() < nCount + 1)
                maRefreshExceptQuery.resize(nCount + 1, false);
@@ -824,37 +783,37 @@ IMPL_LINK( ScFilterDlg, LbSelectHdl, ListBox&, rLb, void )
        else
        {
            UpdateValueList( 1 );
            if ( !pLbConnect2->IsEnabled() )
            if ( !m_xLbConnect2->get_sensitive() )
            {
                pLbConnect2->Enable();
                m_xLbConnect2->set_sensitive(true);
            }
            theQueryData.GetEntry(nOffset).bDoQuery = true;
            const sal_Int32 nField  = rLb.GetSelectedEntryPos();
            const sal_Int32 nField  = rLb.get_active();
            theQueryData.GetEntry(nOffset).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ;
        }
    }
    else if ( &rLb == pLbField2 )
    else if ( &rLb == m_xLbField2.get() )
    {
        if ( pLbField2->GetSelectedEntryPos() == 0 )
        if ( m_xLbField2->get_active() == 0 )
        {
            pLbConnect3->SetNoSelection();
            pLbConnect4->SetNoSelection();
            pLbField3->SelectEntryPos( 0 );
            pLbField4->SelectEntryPos( 0 );
            pLbCond3->SelectEntryPos( 0 );
            pLbCond4->SelectEntryPos( 0 );
            m_xLbConnect3->set_active(-1);
            m_xLbConnect4->set_active(-1);
            m_xLbField3->set_active( 0 );
            m_xLbField4->set_active( 0 );
            m_xLbCond3->set_active( 0 );
            m_xLbCond4->set_active( 0 );
            ClearValueList( 2 );
            ClearValueList( 3 );
            ClearValueList( 4 );

            pLbConnect3->Disable();
            pLbConnect4->Disable();
            pLbField3->Disable();
            pLbField4->Disable();
            pLbCond3->Disable();
            pLbCond4->Disable();
            pEdVal3->Disable();
            pEdVal4->Disable();
            m_xLbConnect3->set_sensitive(false);
            m_xLbConnect4->set_sensitive(false);
            m_xLbField3->set_sensitive(false);
            m_xLbField4->set_sensitive(false);
            m_xLbCond3->set_sensitive(false);
            m_xLbCond4->set_sensitive(false);
            m_xEdVal3->set_sensitive(false);
            m_xEdVal4->set_sensitive(false);

            sal_uInt16 nTemp=nOffset+1;
            SCSIZE nCount = theQueryData.GetEntryCount();
@@ -871,30 +830,30 @@ IMPL_LINK( ScFilterDlg, LbSelectHdl, ListBox&, rLb, void )
        else
        {
            UpdateValueList( 2 );
            if ( !pLbConnect3->IsEnabled() )
            if ( !m_xLbConnect3->get_sensitive() )
            {
                pLbConnect3->Enable();
                m_xLbConnect3->set_sensitive(true);
            }
            const sal_Int32 nField = rLb.GetSelectedEntryPos();
            const sal_Int32 nField = rLb.get_active();
            sal_uInt16 nQ=1+nOffset;
            theQueryData.GetEntry(nQ).bDoQuery = true;
            theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ;
        }
    }
    else if ( &rLb == pLbField3 )
    else if ( &rLb == m_xLbField3.get() )
    {
        if ( pLbField3->GetSelectedEntryPos() == 0 )
        if ( m_xLbField3->get_active() == 0 )
        {
            pLbConnect4->SetNoSelection();
            pLbField4->SelectEntryPos( 0 );
            pLbCond4->SelectEntryPos( 0 );
            m_xLbConnect4->set_active(-1);
            m_xLbField4->set_active( 0 );
            m_xLbCond4->set_active( 0 );
            ClearValueList( 3 );
            ClearValueList( 4 );

            pLbConnect4->Disable();
            pLbField4->Disable();
            pLbCond4->Disable();
            pEdVal4->Disable();
            m_xLbConnect4->set_sensitive(false);
            m_xLbField4->set_sensitive(false);
            m_xLbCond4->set_sensitive(false);
            m_xEdVal4->set_sensitive(false);

            sal_uInt16 nTemp=nOffset+2;
            SCSIZE nCount = theQueryData.GetEntryCount();
@@ -911,21 +870,21 @@ IMPL_LINK( ScFilterDlg, LbSelectHdl, ListBox&, rLb, void )
        else
        {
            UpdateValueList( 3 );
            if ( !pLbConnect4->IsEnabled() )
            if ( !m_xLbConnect4->get_sensitive() )
            {
                pLbConnect4->Enable();
                m_xLbConnect4->set_sensitive(true);
            }

            const sal_Int32 nField = rLb.GetSelectedEntryPos();
            const sal_Int32 nField = rLb.get_active();
            sal_uInt16 nQ=2+nOffset;
            theQueryData.GetEntry(nQ).bDoQuery = true;
            theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ;

        }
    }
    else if ( &rLb == pLbField4 )
    else if ( &rLb == m_xLbField4.get() )
    {
        if ( pLbField4->GetSelectedEntryPos() == 0 )
        if ( m_xLbField4->get_active() == 0 )
        {
            ClearValueList( 4 );
            sal_uInt16 nTemp=nOffset+3;
@@ -943,35 +902,35 @@ IMPL_LINK( ScFilterDlg, LbSelectHdl, ListBox&, rLb, void )
        else
        {
            UpdateValueList( 4 );
            const sal_Int32 nField = rLb.GetSelectedEntryPos();
            const sal_Int32 nField = rLb.get_active();
            sal_uInt16 nQ=3+nOffset;
            theQueryData.GetEntry(nQ).bDoQuery = true;
            theQueryData.GetEntry(nQ).nField = theQueryData.nCol1 + static_cast<SCCOL>(nField) - 1 ;
        }

    }
    else if ( &rLb == pLbCond1)
    else if ( &rLb == m_xLbCond1.get())
    {
        theQueryData.GetEntry(nOffset).eOp=static_cast<ScQueryOp>(rLb.GetSelectedEntryPos());
        theQueryData.GetEntry(nOffset).eOp=static_cast<ScQueryOp>(rLb.get_active());
    }
    else if ( &rLb == pLbCond2)
    else if ( &rLb == m_xLbCond2.get())
    {
        sal_uInt16 nQ=1+nOffset;
        theQueryData.GetEntry(nQ).eOp=static_cast<ScQueryOp>(rLb.GetSelectedEntryPos());
        theQueryData.GetEntry(nQ).eOp=static_cast<ScQueryOp>(rLb.get_active());
    }
    else if ( &rLb == pLbCond3)
    else if ( &rLb == m_xLbCond3.get())
    {
        sal_uInt16 nQ=2+nOffset;
        theQueryData.GetEntry(nQ).eOp=static_cast<ScQueryOp>(rLb.GetSelectedEntryPos());
        theQueryData.GetEntry(nQ).eOp=static_cast<ScQueryOp>(rLb.get_active());
    }
    else
    {
        sal_uInt16 nQ=3+nOffset;
        theQueryData.GetEntry(nQ).eOp=static_cast<ScQueryOp>(rLb.GetSelectedEntryPos());
        theQueryData.GetEntry(nQ).eOp=static_cast<ScQueryOp>(rLb.get_active());
    }
}

IMPL_LINK( ScFilterDlg, CheckBoxHdl, Button*, pBox, void )
IMPL_LINK( ScFilterDlg, CheckBoxHdl, weld::Button&, rBox, void )
{
    //  Column headers:
    //      Field list: Columnxx <-> column header string
@@ -979,17 +938,17 @@ IMPL_LINK( ScFilterDlg, CheckBoxHdl, Button*, pBox, void )
    //  Upper/lower case:
    //      Value list: completely new

    if ( pBox == pBtnHeader )              // Field list and value list
    if ( &rBox == m_xBtnHeader.get() )              // Field list and value list
    {
        const sal_Int32 nCurSel1 = pLbField1->GetSelectedEntryPos();
        const sal_Int32 nCurSel2 = pLbField2->GetSelectedEntryPos();
        const sal_Int32 nCurSel3 = pLbField3->GetSelectedEntryPos();
        const sal_Int32 nCurSel4 = pLbField4->GetSelectedEntryPos();
        const sal_Int32 nCurSel1 = m_xLbField1->get_active();
        const sal_Int32 nCurSel2 = m_xLbField2->get_active();
        const sal_Int32 nCurSel3 = m_xLbField3->get_active();
        const sal_Int32 nCurSel4 = m_xLbField4->get_active();
        FillFieldLists();
        pLbField1->SelectEntryPos( nCurSel1 );
        pLbField2->SelectEntryPos( nCurSel2 );
        pLbField3->SelectEntryPos( nCurSel3 );
        pLbField4->SelectEntryPos( nCurSel4 );
        m_xLbField1->set_active( nCurSel1 );
        m_xLbField2->set_active( nCurSel2 );
        m_xLbField3->set_active( nCurSel3 );
        m_xLbField4->set_active( nCurSel4 );

        UpdateHdrInValueList( 1 );
        UpdateHdrInValueList( 2 );
@@ -997,7 +956,7 @@ IMPL_LINK( ScFilterDlg, CheckBoxHdl, Button*, pBox, void )
        UpdateHdrInValueList( 4 );
    }

    if ( pBox == pBtnCase )            // Complete value list
    if ( &rBox == m_xBtnCase.get() )            // Complete value list
    {
        m_EntryLists.clear();
        UpdateValueList( 1 );       // current text is recorded
@@ -1007,43 +966,43 @@ IMPL_LINK( ScFilterDlg, CheckBoxHdl, Button*, pBox, void )
    }
}

IMPL_LINK( ScFilterDlg, ValModifyHdl, Edit&, rEd, void )
IMPL_LINK( ScFilterDlg, ValModifyHdl, weld::ComboBox&, rEd, void )
{
    size_t nOffset = GetSliderPos();
    size_t i = 0;
    size_t nQE = i + nOffset;
    OUString aStrVal = rEd.GetText();
    ListBox*  pLbCond   = pLbCond1;
    ListBox*  pLbField  = pLbField1;
    if ( &rEd == pEdVal2 )
    OUString aStrVal = rEd.get_active_text();
    weld::ComboBox*  pLbCond   = m_xLbCond1.get();
    weld::ComboBox*  pLbField  = m_xLbField1.get();
    if ( &rEd == m_xEdVal2.get() )
    {
        pLbCond  = pLbCond2;
        pLbField = pLbField2;
        pLbCond  = m_xLbCond2.get();
        pLbField = m_xLbField2.get();
        i=1;
        nQE=i+nOffset;
    }
    if ( &rEd == pEdVal3 )
    if ( &rEd == m_xEdVal3.get() )
    {
        pLbCond = pLbCond3;
        pLbField = pLbField3;
        pLbCond = m_xLbCond3.get();
        pLbField = m_xLbField3.get();
        i=2;
        nQE=i+nOffset;
    }
    if ( &rEd == pEdVal4 )
    if ( &rEd == m_xEdVal4.get() )
    {
        pLbCond = pLbCond4;
        pLbField = pLbField4;
        pLbCond = m_xLbCond4.get();
        pLbField = m_xLbField4.get();
        i=3;
        nQE=i+nOffset;
    }

    if ( aStrEmpty == aStrVal || aStrNotEmpty == aStrVal )
    {
        pLbCond->SelectEntry(OUString('='));
        pLbCond->Disable();
        pLbCond->set_active_text(OUString('='));
        pLbCond->set_sensitive(false);
    }
    else
        pLbCond->Enable();
        pLbCond->set_sensitive(true);

    if (maHasDates.size() < nQE + 1)
        maHasDates.resize(nQE + 1, false);
@@ -1052,7 +1011,7 @@ IMPL_LINK( ScFilterDlg, ValModifyHdl, Edit&, rEd, void )

    ScQueryEntry& rEntry = theQueryData.GetEntry( nQE );
    ScQueryEntry::Item& rItem = rEntry.GetQueryItem();
    bool bDoThis = (pLbField->GetSelectedEntryPos() != 0);
    bool bDoThis = (pLbField->get_active() != 0);
    rEntry.bDoQuery = bDoThis;

    if ( rEntry.bDoQuery || maRefreshExceptQuery[nQE] )
@@ -1079,18 +1038,18 @@ IMPL_LINK( ScFilterDlg, ValModifyHdl, Edit&, rEd, void )
            rItem.meType = bNumber ? ScQueryEntry::ByValue : ScQueryEntry::ByString;
        }

        const sal_Int32 nField = pLbField->GetSelectedEntryPos();
        const sal_Int32 nField = pLbField->get_active();
        rEntry.nField = nField ? (theQueryData.nCol1 +
            static_cast<SCCOL>(nField) - 1) : static_cast<SCCOL>(0);

        ScQueryOp eOp  = static_cast<ScQueryOp>(pLbCond->GetSelectedEntryPos());
        ScQueryOp eOp  = static_cast<ScQueryOp>(pLbCond->get_active());
        rEntry.eOp     = eOp;
        if (maHasDates[nQE] && !bByEmptyOrNotByEmpty)
            rItem.meType = ScQueryEntry::ByDate;
    }
}

IMPL_LINK_NOARG(ScFilterDlg, ScrollHdl, ScrollBar*, void)
IMPL_LINK_NOARG(ScFilterDlg, ScrollHdl, weld::ScrolledWindow&, void)
{
    SliderMoved();
}
@@ -1103,15 +1062,15 @@ void ScFilterDlg::SliderMoved()

size_t ScFilterDlg::GetSliderPos()
{
    return static_cast<size_t>(pScrollBar->GetThumbPos());
    return static_cast<size_t>(m_xScrollBar->vadjustment_get_value());
}

void ScFilterDlg::RefreshEditRow( size_t nOffset )
{
    if (nOffset==0)
        maConnLbArr[0]->Hide();
        maConnLbArr[0]->hide();
    else
        maConnLbArr[0]->Show();
        maConnLbArr[0]->show();

    for (size_t i = 0; i < QUERY_ENTRY_COUNT; ++i)
    {
@@ -1135,51 +1094,51 @@ void ScFilterDlg::RefreshEditRow( size_t nOffset )
            if (rEntry.IsQueryByEmpty())
            {
                aValStr = aStrEmpty;
                maCondLbArr[i]->Disable();
                maCondLbArr[i]->set_sensitive(false);
            }
            else if (rEntry.IsQueryByNonEmpty())
            {
                aValStr = aStrNotEmpty;
                maCondLbArr[i]->Disable();
                maCondLbArr[i]->set_sensitive(false);
            }
            else
            {
                aValStr = aQueryStr;
                maCondLbArr[i]->Enable();
                maCondLbArr[i]->set_sensitive(true);
            }
            maFieldLbArr[i]->Enable();
            maValueEdArr[i]->Enable();
            maFieldLbArr[i]->set_sensitive(true);
            maValueEdArr[i]->set_sensitive(true);

            if (nOffset==0)
            {
                if (i<3)
                {
                    if(rEntry.bDoQuery)
                        maConnLbArr[i+1]->Enable();
                        maConnLbArr[i+1]->set_sensitive(true);
                    else
                        maConnLbArr[i+1]->Disable();
                        maConnLbArr[i+1]->set_sensitive(false);
                    size_t nQENext = nQE + 1;
                    if (maRefreshExceptQuery.size() < nQENext + 1)
                        maRefreshExceptQuery.resize(nQENext + 1, false);
                    if (theQueryData.GetEntry(nQENext).bDoQuery || maRefreshExceptQuery[nQENext])
                        maConnLbArr[i+1]->SelectEntryPos( static_cast<sal_uInt16>(theQueryData.GetEntry(nQENext).eConnect) );
                        maConnLbArr[i+1]->set_active( static_cast<sal_uInt16>(theQueryData.GetEntry(nQENext).eConnect) );
                    else
                        maConnLbArr[i+1]->SetNoSelection();
                        maConnLbArr[i+1]->set_active(-1);
                }
            }
            else
            {
                if(theQueryData.GetEntry( nQE-1).bDoQuery)
                    maConnLbArr[i]->Enable();
                    maConnLbArr[i]->set_sensitive(true);
                else
                    maConnLbArr[i]->Disable();
                    maConnLbArr[i]->set_sensitive(false);

                if (maRefreshExceptQuery.size() < nQE + 1)
                    maRefreshExceptQuery.resize(nQE + 1, false);
                if(rEntry.bDoQuery || maRefreshExceptQuery[nQE])
                    maConnLbArr[i]->SelectEntryPos( static_cast<sal_uInt16>(rEntry.eConnect) );
                    maConnLbArr[i]->set_active( static_cast<sal_uInt16>(rEntry.eConnect) );
                else
                    maConnLbArr[i]->SetNoSelection();
                    maConnLbArr[i]->set_active(-1);
            }

        }
@@ -1189,25 +1148,25 @@ void ScFilterDlg::RefreshEditRow( size_t nOffset )
            {
                if(i<3)
                {
                    maConnLbArr[i+1]->SetNoSelection();
                    maConnLbArr[i+1]->Disable();
                    maConnLbArr[i+1]->set_active(-1);
                    maConnLbArr[i+1]->set_sensitive(false);
                }
            }
            else
            {
                if(theQueryData.GetEntry( nQE-1).bDoQuery)
                    maConnLbArr[i]->Enable();
                    maConnLbArr[i]->set_sensitive(true);
                else
                    maConnLbArr[i]->Disable();
                maConnLbArr[i]->SetNoSelection();
                    maConnLbArr[i]->set_sensitive(false);
                maConnLbArr[i]->set_active(-1);
            }
            maFieldLbArr[i]->Disable();
            maCondLbArr[i]->Disable();
            maValueEdArr[i]->Disable();
            maFieldLbArr[i]->set_sensitive(false);
            maCondLbArr[i]->set_sensitive(false);
            maValueEdArr[i]->set_sensitive(false);
        }
        maFieldLbArr[i]->SelectEntryPos( nFieldSelPos );
        maCondLbArr [i]->SelectEntryPos( nCondPos );
        maValueEdArr[i]->SetText( aValStr );
        maFieldLbArr[i]->set_active( nFieldSelPos );
        maCondLbArr [i]->set_active( nCondPos );
        maValueEdArr[i]->set_entry_text( aValStr );
        UpdateValueList(i+1);
    }
}
diff --git a/sc/source/ui/dbgui/foptmgr.cxx b/sc/source/ui/dbgui/foptmgr.cxx
index 1449504..47e0274 100644
--- a/sc/source/ui/dbgui/foptmgr.cxx
+++ b/sc/source/ui/dbgui/foptmgr.cxx
@@ -66,6 +66,41 @@ ScFilterOptionsMgr::ScFilterOptionsMgr(
    Init();
}

FilterOptionsMgr::FilterOptionsMgr(
                                ScViewData*         ptrViewData,
                                const ScQueryParam& refQueryData,
                                weld::CheckButton* refBtnCase,
                                weld::CheckButton* refBtnRegExp,
                                weld::CheckButton* refBtnHeader,
                                weld::CheckButton* refBtnUnique,
                                weld::CheckButton* refBtnCopyResult,
                                weld::CheckButton* refBtnDestPers,
                                weld::ComboBox* refLbCopyArea,
                                formula::WeldRefEdit* refEdCopyArea,
                                formula::WeldRefButton* refRbCopyArea,
                                weld::Label* refFtDbAreaLabel,
                                weld::Label* refFtDbArea,
                                const OUString&     refStrUndefined )

    :   pViewData       ( ptrViewData ),
        pDoc            ( ptrViewData ? ptrViewData->GetDocument() : nullptr ),
        pBtnCase        ( refBtnCase ),
        pBtnRegExp      ( refBtnRegExp ),
        pBtnHeader      ( refBtnHeader ),
        pBtnUnique      ( refBtnUnique ),
        pBtnCopyResult  ( refBtnCopyResult ),
        pBtnDestPers    ( refBtnDestPers ),
        pLbCopyArea      ( refLbCopyArea ),
        pEdCopyArea      ( refEdCopyArea ),
        pRbCopyArea      ( refRbCopyArea ),
        pFtDbAreaLabel  ( refFtDbAreaLabel ),
        pFtDbArea       ( refFtDbArea ),
        rStrUndefined   ( refStrUndefined ),
        rQueryData      ( refQueryData )
{
    Init();
}

ScFilterOptionsMgr::~ScFilterOptionsMgr()
{
    const sal_Int32 nEntries = pLbCopyArea->GetEntryCount();
@@ -74,6 +109,10 @@ ScFilterOptionsMgr::~ScFilterOptionsMgr()
        delete static_cast<OUString*>(pLbCopyArea->GetEntryData( i ));
}

FilterOptionsMgr::~FilterOptionsMgr()
{
}

void ScFilterOptionsMgr::Init()
{
//moggi:TODO
@@ -193,6 +232,121 @@ void ScFilterOptionsMgr::Init()
        pEdCopyArea->SetText( EMPTY_OUSTRING );
}

void FilterOptionsMgr::Init()
{
//moggi:TODO
    OSL_ENSURE( pViewData && pDoc, "Init failed :-/" );

    pLbCopyArea->connect_changed( LINK( this, FilterOptionsMgr, LbAreaSelHdl ) );
    pEdCopyArea->SetModifyHdl  ( LINK( this, FilterOptionsMgr, EdAreaModifyHdl ) );
    pBtnCopyResult->connect_toggled( LINK( this, FilterOptionsMgr, BtnCopyResultHdl ) );

    pBtnCase->set_active( rQueryData.bCaseSens );
    pBtnHeader->set_active( rQueryData.bHasHeader );
    pBtnRegExp->set_active( rQueryData.eSearchType == utl::SearchParam::SearchType::Regexp );
    pBtnUnique->set_active( !rQueryData.bDuplicate );

    if ( pViewData && pDoc )
    {
        OUString theAreaStr;
        ScRange         theCurArea ( ScAddress( rQueryData.nCol1,
                                                rQueryData.nRow1,
                                                pViewData->GetTabNo() ),
                                     ScAddress( rQueryData.nCol2,
                                                rQueryData.nRow2,
                                                pViewData->GetTabNo() ) );
        ScDBCollection* pDBColl     = pDoc->GetDBCollection();
        OUString theDbArea;
        OUString   theDbName(STR_DB_LOCAL_NONAME);
        const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention();

        theAreaStr = theCurArea.Format(ScRefFlags::RANGE_ABS_3D, pDoc, eConv);

        // fill the target area list

        pLbCopyArea->clear();
        pLbCopyArea->append_text(rStrUndefined);

        ScAreaNameIterator aIter( pDoc );
        OUString aName;
        ScRange aRange;
        while ( aIter.Next( aName, aRange ) )
        {
            OUString aRefStr(aRange.aStart.Format(ScRefFlags::ADDR_ABS_3D, pDoc, eConv));
            pLbCopyArea->append(aRefStr, aName);
        }

        pBtnDestPers->set_active(true);         // always on when called
        pLbCopyArea->set_active( 0 );
        pEdCopyArea->SetText( EMPTY_OUSTRING );

        /*
         * Check whether the transferred area is a database area:
         */

        theDbArea = theAreaStr;

        if ( pDBColl )
        {
            ScAddress&  rStart  = theCurArea.aStart;
            ScAddress&  rEnd    = theCurArea.aEnd;
            const ScDBData* pDBData = pDBColl->GetDBAtArea(
                rStart.Tab(), rStart.Col(), rStart.Row(), rEnd.Col(), rEnd.Row());

            if ( pDBData )
            {
                pBtnHeader->set_active( pDBData->HasHeader() );
                theDbName = pDBData->GetName();

                pBtnHeader->set_sensitive(theDbName == STR_DB_LOCAL_NONAME);
            }
        }

        if ( theDbName != STR_DB_LOCAL_NONAME )
        {
            theDbArea += " (" + theDbName + ")";

            pFtDbArea->set_label( theDbArea );
        }
        else
        {
            pFtDbAreaLabel->set_label( OUString() );
            pFtDbArea->set_label( OUString() );
        }

        // position to copy to:

        if ( !rQueryData.bInplace )
        {
            OUString aString =
                ScAddress( rQueryData.nDestCol,
                           rQueryData.nDestRow,
                           rQueryData.nDestTab
                         ).Format(ScRefFlags::ADDR_ABS_3D, pDoc, eConv);

            pBtnCopyResult->set_active(true);
            pEdCopyArea->SetText( aString );
            EdAreaModifyHdl( *pEdCopyArea );
            pLbCopyArea->set_sensitive(true);
            pEdCopyArea->GetWidget()->set_sensitive(true);
            pRbCopyArea->GetWidget()->set_sensitive(true);
            pBtnDestPers->set_sensitive(true);
        }
        else
        {
            pBtnCopyResult->set_active( false );
            pEdCopyArea->SetText( EMPTY_OUSTRING );
            pLbCopyArea->set_sensitive(false);
            pEdCopyArea->GetWidget()->set_sensitive(false);
            pRbCopyArea->GetWidget()->set_sensitive(false);
            pBtnDestPers->set_sensitive(false);
        }
    }
    else
        pEdCopyArea->SetText( EMPTY_OUSTRING );
}


bool ScFilterOptionsMgr::VerifyPosStr( const OUString& rPosStr ) const
{
    OUString aPosStr( rPosStr );
@@ -206,6 +360,19 @@ bool ScFilterOptionsMgr::VerifyPosStr( const OUString& rPosStr ) const
    return (nResult & ScRefFlags::VALID) == ScRefFlags::VALID;
}

bool FilterOptionsMgr::VerifyPosStr( const OUString& rPosStr ) const
{
    OUString aPosStr( rPosStr );
    sal_Int32 nColonPos = aPosStr.indexOf( ':' );

    if ( -1 != nColonPos )
        aPosStr = aPosStr.copy( 0, nColonPos );

    ScRefFlags nResult = ScAddress().Parse( aPosStr, pDoc, pDoc->GetAddressConvention() );

    return (nResult & ScRefFlags::VALID) == ScRefFlags::VALID;
}

// Handler:

IMPL_LINK( ScFilterOptionsMgr, LbAreaSelHdl, ListBox&, rLb, void )
@@ -222,6 +389,21 @@ IMPL_LINK( ScFilterOptionsMgr, LbAreaSelHdl, ListBox&, rLb, void )
    }
}

IMPL_LINK( FilterOptionsMgr, LbAreaSelHdl, weld::ComboBox&, rLb, void )
{
    if ( &rLb == pLbCopyArea )
    {
        OUString aString;
        const sal_Int32 nSelPos = pLbCopyArea->get_active();

        if ( nSelPos > 0 )
            aString = pLbCopyArea->get_id(nSelPos);

        pEdCopyArea->SetText( aString );
    }
}


IMPL_LINK( ScFilterOptionsMgr, EdAreaModifyHdl, Edit&, rEd, void )
{
    if ( &rEd == pEdCopyArea )
@@ -248,6 +430,32 @@ IMPL_LINK( ScFilterOptionsMgr, EdAreaModifyHdl, Edit&, rEd, void )
    }
}

IMPL_LINK( FilterOptionsMgr, EdAreaModifyHdl, formula::WeldRefEdit&, rEd, void )
{
    if ( &rEd == pEdCopyArea )
    {
        OUString  theCurPosStr = rEd.GetText();
        ScRefFlags  nResult = ScAddress().Parse( theCurPosStr, pDoc, pDoc->GetAddressConvention() );

        if ( (nResult & ScRefFlags::VALID) == ScRefFlags::VALID)
        {
            const sal_Int32 nCount = pLbCopyArea->get_count();

            for ( sal_Int32 i=2; i<nCount; ++i )
            {
                OUString aStr = pLbCopyArea->get_id(i);
                if (theCurPosStr == aStr)
                {
                    pLbCopyArea->set_active( i );
                    return;
                }
            }

        }
        pLbCopyArea->set_active( 0 );
    }
}

IMPL_LINK( ScFilterOptionsMgr, BtnCopyResultHdl, CheckBox&, rBox, void )
{
    if ( &rBox == pBtnCopyResult )
@@ -270,4 +478,26 @@ IMPL_LINK( ScFilterOptionsMgr, BtnCopyResultHdl, CheckBox&, rBox, void )
    }
}

IMPL_LINK( FilterOptionsMgr, BtnCopyResultHdl, weld::ToggleButton&, rBox, void )
{
    if ( &rBox == pBtnCopyResult )
    {
        if ( rBox.get_active() )
        {
            pBtnDestPers->set_sensitive(true);
            pLbCopyArea->set_sensitive(true);
            pEdCopyArea->GetWidget()->set_sensitive(true);
            pRbCopyArea->GetWidget()->set_sensitive(true);
            pEdCopyArea->GrabFocus();
        }
        else
        {
            pBtnDestPers->set_sensitive(false);
            pLbCopyArea->set_sensitive(false);
            pEdCopyArea->GetWidget()->set_sensitive(false);
            pRbCopyArea->GetWidget()->set_sensitive(false);
        }
    }
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/filtdlg.hxx b/sc/source/ui/inc/filtdlg.hxx
index 5a2ab15..74e87b1 100644
--- a/sc/source/ui/inc/filtdlg.hxx
+++ b/sc/source/ui/inc/filtdlg.hxx
@@ -34,11 +34,12 @@
#include <map>

class ScFilterOptionsMgr;
class FilterOptionsMgr;
class ScViewData;
class ScDocument;
class ScQueryItem;

class ScFilterDlg : public ScAnyRefDlg
class ScFilterDlg : public ScAnyRefDlgController
{
    struct EntryList
    {
@@ -52,59 +53,21 @@ class ScFilterDlg : public ScAnyRefDlg
    };
    typedef std::map<SCCOL, std::unique_ptr<EntryList>> EntryListsMap;
public:
                    ScFilterDlg( SfxBindings* pB, SfxChildWindow* pCW, vcl::Window* pParent,
                                 const SfxItemSet&  rArgSet );
                    virtual ~ScFilterDlg() override;
    virtual void    dispose() override;
    ScFilterDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pParent,
                const SfxItemSet& rArgSet);
    virtual ~ScFilterDlg() 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;
    void            SliderMoved();
    size_t          GetSliderPos();
    void            RefreshEditRow( size_t nOffset );

private:
    VclPtr<ListBox>         pLbConnect1;
    VclPtr<ListBox>         pLbField1;
    VclPtr<ListBox>         pLbCond1;
    VclPtr<ComboBox>        pEdVal1;

    VclPtr<ListBox>         pLbConnect2;
    VclPtr<ListBox>         pLbField2;
    VclPtr<ListBox>         pLbCond2;
    VclPtr<ComboBox>        pEdVal2;

    VclPtr<ListBox>         pLbConnect3;
    VclPtr<ListBox>         pLbField3;
    VclPtr<ListBox>         pLbCond3;
    VclPtr<ComboBox>        pEdVal3;

    VclPtr<ListBox>         pLbConnect4;
    VclPtr<ListBox>         pLbField4;
    VclPtr<ListBox>         pLbCond4;
    VclPtr<ComboBox>        pEdVal4;

    VclPtr<ScrollBar>       pScrollBar;
    VclPtr<VclExpander>     pExpander;

    VclPtr<OKButton>        pBtnOk;
    VclPtr<CancelButton>    pBtnCancel;

    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;
    const OUString aStrNone;

@@ -112,7 +75,7 @@ private:
    const OUString aStrNotEmpty;
    const OUString aStrColumn;

    std::unique_ptr<ScFilterOptionsMgr> pOptionsMgr;
    std::unique_ptr<FilterOptionsMgr> pOptionsMgr;

    const sal_uInt16        nWhichQuery;
    ScQueryParam        theQueryData;
@@ -121,10 +84,10 @@ private:
    ScDocument*         pDoc;
    SCTAB               nSrcTab;

    std::vector<VclPtr<ComboBox>> maValueEdArr;
    std::vector<VclPtr<ListBox>>  maFieldLbArr;
    std::vector<VclPtr<ListBox>>  maCondLbArr;
    std::vector<VclPtr<ListBox>>  maConnLbArr;
    std::vector<weld::ComboBox*> maValueEdArr;
    std::vector<weld::ComboBox*> maFieldLbArr;
    std::vector<weld::ComboBox*> maCondLbArr;
    std::vector<weld::ComboBox*> maConnLbArr;

    std::deque<bool>   maHasDates;
    std::deque<bool>   maRefreshExceptQuery;
@@ -135,6 +98,45 @@ private:
    // Hack: RefInput control
    std::unique_ptr<Timer>  pTimer;

    std::unique_ptr<weld::ComboBox> m_xLbConnect1;
    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::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::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::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::Widget> m_xContents;
    std::unique_ptr<weld::ScrolledWindow> m_xScrollBar;
    std::unique_ptr<weld::Expander> m_xExpander;

    std::unique_ptr<weld::Button> m_xBtnOk;
    std::unique_ptr<weld::Button> m_xBtnCancel;

    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;

private:
    void            Init            ( const SfxItemSet& rArgSet );
    void            FillFieldLists  ();
@@ -145,12 +147,12 @@ private:
    ScQueryItem*    GetOutputItem   ();

    // Handler:
    DECL_LINK( LbSelectHdl,  ListBox&, void );
    DECL_LINK( ValModifyHdl, Edit&, void );
    DECL_LINK( CheckBoxHdl,  Button*, void );
    DECL_LINK( EndDlgHdl,    Button*, void );
    DECL_LINK( ScrollHdl, ScrollBar*, void );
    DECL_LINK( MoreExpandedHdl, VclExpander&, void );
    DECL_LINK( LbSelectHdl,  weld::ComboBox&, void );
    DECL_LINK( ValModifyHdl, weld::ComboBox&, void );
    DECL_LINK( CheckBoxHdl,  weld::Button&, void );
    DECL_LINK( EndDlgHdl,    weld::Button&, void );
    DECL_LINK( ScrollHdl, weld::ScrolledWindow&, void );
    DECL_LINK( MoreExpandedHdl, weld::Expander&, void );

    // Hack: RefInput control
    DECL_LINK( TimeOutHdl, Timer*, void );
diff --git a/sc/source/ui/inc/foptmgr.hxx b/sc/source/ui/inc/foptmgr.hxx
index eddfc10..b8ac4d1 100644
--- a/sc/source/ui/inc/foptmgr.hxx
+++ b/sc/source/ui/inc/foptmgr.hxx
@@ -27,6 +27,8 @@
namespace formula
{
    class RefButton;
    class WeldRefButton;
    class WeldRefEdit;
}
struct ScQueryParam;
class ScDocument;
@@ -81,6 +83,56 @@ private:
    DECL_LINK( BtnCopyResultHdl,    CheckBox&, void );
};

class FilterOptionsMgr
{
public:
    FilterOptionsMgr(ScViewData* ptrViewData,
                     const ScQueryParam& refQueryData,
                     weld::CheckButton*  refBtnCase,
                     weld::CheckButton* refBtnRegExp,
                     weld::CheckButton* refBtnHeader,
                     weld::CheckButton* refBtnUnique,
                     weld::CheckButton* refBtnCopyResult,
                     weld::CheckButton* refBtnDestPers,
                     weld::ComboBox* refLbCopyArea,
                     formula::WeldRefEdit* refEdCopyArea,
                     formula::WeldRefButton* refRbCopyArea,
                     weld::Label* refFtDbAreaLabel,
                     weld::Label* refFtDbArea,
                     const OUString& refStrUndefined );
    ~FilterOptionsMgr();
    bool    VerifyPosStr ( const OUString& rPosStr ) const;

private:
    ScViewData* const     pViewData;
    ScDocument* const     pDoc;

    weld::CheckButton* pBtnCase;
    weld::CheckButton* pBtnRegExp;
    weld::CheckButton* pBtnHeader;
    weld::CheckButton* pBtnUnique;
    weld::CheckButton* pBtnCopyResult;
    weld::CheckButton* pBtnDestPers;
    weld::ComboBox* pLbCopyArea;
    formula::WeldRefEdit* pEdCopyArea;
    formula::WeldRefButton* pRbCopyArea;
    weld::Label* pFtDbAreaLabel;
    weld::Label* pFtDbArea;

    const OUString&   rStrUndefined;

    const ScQueryParam& rQueryData;

private:
    void Init();

    // Handler:
    DECL_LINK( EdAreaModifyHdl, formula::WeldRefEdit&, void );
    DECL_LINK( LbAreaSelHdl, weld::ComboBox&, void );
    DECL_LINK( BtnCopyResultHdl, weld::ToggleButton&, void );
};


#endif // INCLUDED_SC_SOURCE_UI_INC_FOPTMGR_HXX

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/inc/reffact.hxx b/sc/source/ui/inc/reffact.hxx
index 81ec1f1..3d44627 100644
--- a/sc/source/ui/inc/reffact.hxx
+++ b/sc/source/ui/inc/reffact.hxx
@@ -51,7 +51,7 @@ DECL_WRAPPER_WITHID(ScOptSolverDlgWrapper)
DECL_WRAPPER_WITHID(ScXMLSourceDlgWrapper)
DECL_WRAPPER_WITHID(ScPivotLayoutWrapper)
DECL_WRAPPER_WITHID_CONTROLLER(ScTabOpDlgWrapper)
DECL_WRAPPER_WITHID(ScFilterDlgWrapper)
DECL_WRAPPER_WITHID_CONTROLLER(ScFilterDlgWrapper)
DECL_WRAPPER_WITHID(ScSpecialFilterDlgWrapper)
DECL_WRAPPER_WITHID_CONTROLLER(ScDbNameDlgWrapper)
DECL_WRAPPER_WITHID_CONTROLLER(ScConsolidateDlgWrapper)
diff --git a/sc/source/ui/view/reffact.cxx b/sc/source/ui/view/reffact.cxx
index 21e2b8a..445de33 100644
--- a/sc/source/ui/view/reffact.cxx
+++ b/sc/source/ui/view/reffact.cxx
@@ -39,7 +39,7 @@ SFX_IMPL_MODELESSDIALOG_WITHID(ScOptSolverDlgWrapper, SID_OPENDLG_OPTSOLVER )
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_MODELESSDIALOG_WITHID(ScFilterDlgWrapper, SID_FILTER )
SFX_IMPL_CHILDWINDOW_WITHID(ScFilterDlgWrapper, SID_FILTER )
SFX_IMPL_MODELESSDIALOG_WITHID(ScSpecialFilterDlgWrapper, SID_SPECIAL_FILTER )
SFX_IMPL_CHILDWINDOW_WITHID(ScDbNameDlgWrapper, SID_DEFINE_DBNAME )
SFX_IMPL_CHILDWINDOW_WITHID(ScConsolidateDlgWrapper, SID_OPENDLG_CONSOLIDATE)
@@ -135,7 +135,7 @@ IMPL_CHILD_CTOR( ScPivotLayoutWrapper, SID_OPENDLG_PIVOTTABLE )

IMPL_CONTROLLER_CHILD_CTOR( ScTabOpDlgWrapper, SID_OPENDLG_TABOP )

IMPL_CHILD_CTOR( ScFilterDlgWrapper, SID_FILTER )
IMPL_CONTROLLER_CHILD_CTOR( ScFilterDlgWrapper, SID_FILTER )

IMPL_CHILD_CTOR( ScSpecialFilterDlgWrapper, SID_SPECIAL_FILTER )

diff --git a/sc/source/ui/view/tabvwshc.cxx b/sc/source/ui/view/tabvwshc.cxx
index 202db6f..40d6a97 100644
--- a/sc/source/ui/view/tabvwshc.cxx
+++ b/sc/source/ui/view/tabvwshc.cxx
@@ -173,33 +173,6 @@ VclPtr<SfxModelessDialog> ScTabViewShell::CreateRefDialog(
        }
        break;

        case SID_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);

            aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA,
                                      &GetViewData(),
                                      &aQueryParam ) );

            // mark current sheet (due to RefInput in dialog)
            GetViewData().SetRefTabNo( GetViewData().GetTabNo() );

            pResult = VclPtr<ScFilterDlg>::Create( pB, pCW, pParent, aArgSet );
        }
        break;

        case SID_OPENDLG_OPTSOLVER:
        {
            ScViewData& rViewData = GetViewData();
@@ -486,6 +459,32 @@ std::unique_ptr<SfxModelessDialogController> ScTabViewShell::CreateRefDialogCont
            xResult.reset(new ScConsolidateDlg(pB, pCW, pParent, aArgSet));
            break;
        }
        case SID_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);

            aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA,
                                      &GetViewData(),
                                      &aQueryParam ) );

            // mark current sheet (due to RefInput in dialog)
            GetViewData().SetRefTabNo( GetViewData().GetTabNo() );

            xResult.reset(new ScFilterDlg(pB, pCW, pParent, aArgSet));
            break;
        }
    }

    if (xResult)
diff --git a/sc/uiconfig/scalc/ui/standardfilterdialog.ui b/sc/uiconfig/scalc/ui/standardfilterdialog.ui
index b1b7570..a71da96 100644
--- a/sc/uiconfig/scalc/ui/standardfilterdialog.ui
+++ b/sc/uiconfig/scalc/ui/standardfilterdialog.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="StandardFilterDialog">
    <property name="can_focus">False</property>
    <property name="border_width">6</property>
    <property name="title" translatable="yes" context="standardfilterdialog|StandardFilterDialog">Standard 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="can_focus">False</property>
@@ -80,6 +84,7 @@
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="hexpand">True</property>
            <property name="vexpand">True</property>
            <property name="label_xalign">0</property>
            <property name="shadow_type">none</property>
            <child>
@@ -91,458 +96,479 @@
                <property name="top_padding">6</property>
                <property name="left_padding">12</property>
                <child>
                  <object class="GtkGrid" id="grid1">
                  <object class="GtkScrolledWindow" id="scrollbar">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="can_focus">True</property>
                    <property name="hexpand">True</property>
                    <property name="vexpand">True</property>
                    <property name="row_spacing">6</property>
                    <property name="column_spacing">12</property>
                    <property name="hscrollbar_policy">never</property>
                    <property name="vscrollbar_policy">always</property>
                    <property name="shadow_type">in</property>
                    <child>
                      <object class="GtkScrollbar" id="scrollbar">
                        <property name="height_request">1</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="orientation">vertical</property>
                      </object>
                      <packing>
                        <property name="left_attach">4</property>
                        <property name="top_attach">0</property>
                        <property name="height">5</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="connect1">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <items>
                          <item translatable="yes" context="standardfilterdialog|connect1">AND</item>
                          <item translatable="yes" context="standardfilterdialog|connect1">OR</item>
                        </items>
                        <accessibility>
                          <relation type="labelled-by" target="label2"/>
                        </accessibility>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="connect1-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|connect1-atkobject">Operator 1</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">0</property>
                        <property name="top_attach">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="connect2">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <items>
                          <item translatable="yes" context="standardfilterdialog|connect2">AND</item>
                          <item translatable="yes" context="standardfilterdialog|connect2">OR</item>
                        </items>
                        <accessibility>
                          <relation type="labelled-by" target="label2"/>
                        </accessibility>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="connect2-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|connect2-atkobject">Operator 2</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">0</property>
                        <property name="top_attach">2</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="connect3">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <items>
                          <item translatable="yes" context="standardfilterdialog|connect3">AND</item>
                          <item translatable="yes" context="standardfilterdialog|connect3">OR</item>
                        </items>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="connect3-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|connect3-atkobject">Operator 3</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">0</property>
                        <property name="top_attach">3</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="connect4">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <items>
                          <item translatable="yes" context="standardfilterdialog|connect4">AND</item>
                          <item translatable="yes" context="standardfilterdialog|connect4">OR</item>
                        </items>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="connect4-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|connect4-atkobject">Operator 4</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">0</property>
                        <property name="top_attach">4</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkLabel" id="label2">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="label" translatable="yes" context="standardfilterdialog|label2">Operator</property>
                      </object>
                      <packing>
                        <property name="left_attach">0</property>
                        <property name="top_attach">0</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkLabel" id="label3">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="label" translatable="yes" context="standardfilterdialog|label3">Field name</property>
                      </object>
                      <packing>
                        <property name="left_attach">1</property>
                        <property name="top_attach">0</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkLabel" id="label4">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="label" translatable="yes" context="standardfilterdialog|label4">Condition</property>
                      </object>
                      <packing>
                        <property name="left_attach">2</property>
                        <property name="top_attach">0</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkLabel" id="label5">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="label" translatable="yes" context="standardfilterdialog|label5">Value</property>
                      </object>
                      <packing>
                        <property name="left_attach">3</property>
                        <property name="top_attach">0</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="field1">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <accessibility>
                          <relation type="labelled-by" target="label3"/>
                        </accessibility>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="field1-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|field1-atkobject">Field Name 1</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">1</property>
                        <property name="top_attach">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="field2">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <accessibility>
                          <relation type="labelled-by" target="label3"/>
                        </accessibility>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="field2-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|field2-atkobject">Field Name 2</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">1</property>
                        <property name="top_attach">2</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="field3">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <accessibility>
                          <relation type="labelled-by" target="label3"/>
                        </accessibility>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="field3-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|field3-atkobject">Field Name 3</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">1</property>
                        <property name="top_attach">3</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="field4">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="field4-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|field4-atkobject">Field Name 4</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">1</property>
                        <property name="top_attach">4</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="cond1">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <items>
                          <item translatable="no">=</item>
                          <item translatable="no">&lt;</item>
                          <item translatable="no">&gt;</item>
                          <item translatable="no">&lt;=</item>
                          <item translatable="no">&gt;=</item>
                          <item translatable="no">&lt;&gt;</item>
                          <item translatable="yes" context="standardfilterdialog|cond1">Largest</item>
                          <item translatable="yes" context="standardfilterdialog|cond1">Smallest</item>
                          <item translatable="yes" context="standardfilterdialog|cond1">Largest %</item>
                          <item translatable="yes" context="standardfilterdialog|cond1">Smallest %</item>
                          <item translatable="yes" context="standardfilterdialog|cond1">Contains</item>
                          <item translatable="yes" context="standardfilterdialog|cond1">Does not contain</item>
                          <item translatable="yes" context="standardfilterdialog|cond1">Begins with</item>
                          <item translatable="yes" context="standardfilterdialog|cond1">Does not begin with</item>
                          <item translatable="yes" context="standardfilterdialog|cond1">Ends with</item>
                          <item translatable="yes" context="standardfilterdialog|cond1">Does not end with</item>
                        </items>
                        <accessibility>
                          <relation type="labelled-by" target="label4"/>
                        </accessibility>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="cond1-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|cond1-atkobject">Condition 1</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">2</property>
                        <property name="top_attach">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="cond2">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <items>
                          <item translatable="no">=</item>
                          <item translatable="no">&lt;</item>
                          <item translatable="no">&gt;</item>
                          <item translatable="no">&lt;=</item>
                          <item translatable="no">&gt;=</item>
                          <item translatable="no">&lt;&gt;</item>
                          <item translatable="yes" context="standardfilterdialog|cond2">Largest</item>
                          <item translatable="yes" context="standardfilterdialog|cond2">Smallest</item>
                          <item translatable="yes" context="standardfilterdialog|cond2">Largest %</item>
                          <item translatable="yes" context="standardfilterdialog|cond2">Smallest %</item>
                          <item translatable="yes" context="standardfilterdialog|cond2">Contains</item>
                          <item translatable="yes" context="standardfilterdialog|cond2">Does not contain</item>
                          <item translatable="yes" context="standardfilterdialog|cond2">Begins with</item>
                          <item translatable="yes" context="standardfilterdialog|cond2">Does not begin with</item>
                          <item translatable="yes" context="standardfilterdialog|cond2">Ends with</item>
                          <item translatable="yes" context="standardfilterdialog|cond2">Does not end with</item>
                        </items>
                        <accessibility>
                          <relation type="labelled-by" target="label4"/>
                        </accessibility>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="cond2-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|cond2-atkobject">Condition 2</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">2</property>
                        <property name="top_attach">2</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="cond3">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <items>
                          <item translatable="no">=</item>
                          <item translatable="no">&lt;</item>
                          <item translatable="no">&gt;</item>
                          <item translatable="no">&lt;=</item>
                          <item translatable="no">&gt;=</item>
                          <item translatable="no">&lt;&gt;</item>
                          <item translatable="yes" context="standardfilterdialog|cond3">Largest</item>
                          <item translatable="yes" context="standardfilterdialog|cond3">Smallest</item>
                          <item translatable="yes" context="standardfilterdialog|cond3">Largest %</item>
                          <item translatable="yes" context="standardfilterdialog|cond3">Smallest %</item>
                          <item translatable="yes" context="standardfilterdialog|cond3">Contains</item>
                          <item translatable="yes" context="standardfilterdialog|cond3">Does not contain</item>
                          <item translatable="yes" context="standardfilterdialog|cond3">Begins with</item>
                          <item translatable="yes" context="standardfilterdialog|cond3">Does not begin with</item>
                          <item translatable="yes" context="standardfilterdialog|cond3">Ends with</item>
                          <item translatable="yes" context="standardfilterdialog|cond3">Does not end with</item>
                        </items>
                        <accessibility>
                          <relation type="labelled-by" target="label4"/>
                        </accessibility>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="cond3-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|cond3-atkobject">Condition 3</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">2</property>
                        <property name="top_attach">3</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="cond4">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <items>
                          <item translatable="no">=</item>
                          <item translatable="no">&lt;</item>
                          <item translatable="no">&gt;</item>
                          <item translatable="no">&lt;=</item>
                          <item translatable="no">&gt;=</item>
                          <item translatable="no">&lt;&gt;</item>
                          <item translatable="yes" context="standardfilterdialog|cond4">Largest</item>
                          <item translatable="yes" context="standardfilterdialog|cond4">Smallest</item>
                          <item translatable="yes" context="standardfilterdialog|cond4">Largest %</item>
                          <item translatable="yes" context="standardfilterdialog|cond4">Smallest %</item>
                          <item translatable="yes" context="standardfilterdialog|cond4">Contains</item>
                          <item translatable="yes" context="standardfilterdialog|cond4">Does not contain</item>
                          <item translatable="yes" context="standardfilterdialog|cond4">Begins with</item>
                          <item translatable="yes" context="standardfilterdialog|cond4">Does not begin with</item>
                          <item translatable="yes" context="standardfilterdialog|cond4">Ends with</item>
                          <item translatable="yes" context="standardfilterdialog|cond4">Does not end with</item>
                        </items>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="cond4-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|cond4-atkobject">Condition 4</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">2</property>
                        <property name="top_attach">4</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="val1">
                      <object class="GtkViewport">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="has_entry">True</property>
                        <child internal-child="entry">
                          <object class="GtkEntry" id="comboboxtext-entry2">
                        <property name="vexpand">True</property>
                        <child>
                          <object class="GtkGrid" id="grid">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                          </object>
                        </child>
                        <accessibility>
                          <relation type="labelled-by" target="label5"/>
                        </accessibility>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="val1-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|val1-atkobject">Value 1</property>
                            <child>
                              <object class="GtkGrid" id="grid1">
                                <property name="visible">True</property>
                                <property name="can_focus">False</property>
                                <property name="hexpand">True</property>
                                <property name="vexpand">True</property>
                                <property name="border_width">3</property>
                                <property name="row_spacing">6</property>
                                <property name="column_spacing">12</property>
                                <child>
                                  <object class="GtkComboBoxText" id="connect1">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <items>
                                      <item translatable="yes" context="standardfilterdialog|connect1">AND</item>
                                      <item translatable="yes" context="standardfilterdialog|connect1">OR</item>
                                    </items>
                                    <accessibility>
                                      <relation type="labelled-by" target="label2"/>
                                    </accessibility>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="connect1-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|connect1-atkobject">Operator 1</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">0</property>
                                    <property name="top_attach">1</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="connect2">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <items>
                                      <item translatable="yes" context="standardfilterdialog|connect2">AND</item>
                                      <item translatable="yes" context="standardfilterdialog|connect2">OR</item>
                                    </items>
                                    <accessibility>
                                      <relation type="labelled-by" target="label2"/>
                                    </accessibility>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="connect2-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|connect2-atkobject">Operator 2</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">0</property>
                                    <property name="top_attach">2</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="connect3">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <items>
                                      <item translatable="yes" context="standardfilterdialog|connect3">AND</item>
                                      <item translatable="yes" context="standardfilterdialog|connect3">OR</item>
                                    </items>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="connect3-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|connect3-atkobject">Operator 3</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">0</property>
                                    <property name="top_attach">3</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="connect4">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <items>
                                      <item translatable="yes" context="standardfilterdialog|connect4">AND</item>
                                      <item translatable="yes" context="standardfilterdialog|connect4">OR</item>
                                    </items>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="connect4-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|connect4-atkobject">Operator 4</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">0</property>
                                    <property name="top_attach">4</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkLabel" id="label2">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <property name="label" translatable="yes" context="standardfilterdialog|label2">Operator</property>
                                  </object>
                                  <packing>
                                    <property name="left_attach">0</property>
                                    <property name="top_attach">0</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkLabel" id="label3">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <property name="label" translatable="yes" context="standardfilterdialog|label3">Field name</property>
                                  </object>
                                  <packing>
                                    <property name="left_attach">1</property>
                                    <property name="top_attach">0</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkLabel" id="label4">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <property name="label" translatable="yes" context="standardfilterdialog|label4">Condition</property>
                                  </object>
                                  <packing>
                                    <property name="left_attach">2</property>
                                    <property name="top_attach">0</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkLabel" id="label5">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <property name="label" translatable="yes" context="standardfilterdialog|label5">Value</property>
                                  </object>
                                  <packing>
                                    <property name="left_attach">3</property>
                                    <property name="top_attach">0</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="field1">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <accessibility>
                                      <relation type="labelled-by" target="label3"/>
                                    </accessibility>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="field1-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|field1-atkobject">Field Name 1</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">1</property>
                                    <property name="top_attach">1</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="field2">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <accessibility>
                                      <relation type="labelled-by" target="label3"/>
                                    </accessibility>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="field2-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|field2-atkobject">Field Name 2</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">1</property>
                                    <property name="top_attach">2</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="field3">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <accessibility>
                                      <relation type="labelled-by" target="label3"/>
                                    </accessibility>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="field3-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|field3-atkobject">Field Name 3</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">1</property>
                                    <property name="top_attach">3</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="field4">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="field4-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|field4-atkobject">Field Name 4</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">1</property>
                                    <property name="top_attach">4</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="cond1">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <items>
                                      <item>=</item>
                                      <item>&lt;</item>
                                      <item>&gt;</item>
                                      <item>&lt;=</item>
                                      <item>&gt;=</item>
                                      <item>&lt;&gt;</item>
                                      <item translatable="yes" context="standardfilterdialog|cond1">Largest</item>
                                      <item translatable="yes" context="standardfilterdialog|cond1">Smallest</item>
                                      <item translatable="yes" context="standardfilterdialog|cond1">Largest %</item>
                                      <item translatable="yes" context="standardfilterdialog|cond1">Smallest %</item>
                                      <item translatable="yes" context="standardfilterdialog|cond1">Contains</item>
                                      <item translatable="yes" context="standardfilterdialog|cond1">Does not contain</item>
                                      <item translatable="yes" context="standardfilterdialog|cond1">Begins with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond1">Does not begin with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond1">Ends with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond1">Does not end with</item>
                                    </items>
                                    <accessibility>
                                      <relation type="labelled-by" target="label4"/>
                                    </accessibility>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="cond1-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|cond1-atkobject">Condition 1</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">2</property>
                                    <property name="top_attach">1</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="cond2">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <items>
                                      <item>=</item>
                                      <item>&lt;</item>
                                      <item>&gt;</item>
                                      <item>&lt;=</item>
                                      <item>&gt;=</item>
                                      <item>&lt;&gt;</item>
                                      <item translatable="yes" context="standardfilterdialog|cond2">Largest</item>
                                      <item translatable="yes" context="standardfilterdialog|cond2">Smallest</item>
                                      <item translatable="yes" context="standardfilterdialog|cond2">Largest %</item>
                                      <item translatable="yes" context="standardfilterdialog|cond2">Smallest %</item>
                                      <item translatable="yes" context="standardfilterdialog|cond2">Contains</item>
                                      <item translatable="yes" context="standardfilterdialog|cond2">Does not contain</item>
                                      <item translatable="yes" context="standardfilterdialog|cond2">Begins with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond2">Does not begin with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond2">Ends with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond2">Does not end with</item>
                                    </items>
                                    <accessibility>
                                      <relation type="labelled-by" target="label4"/>
                                    </accessibility>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="cond2-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|cond2-atkobject">Condition 2</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">2</property>
                                    <property name="top_attach">2</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="cond3">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <items>
                                      <item>=</item>
                                      <item>&lt;</item>
                                      <item>&gt;</item>
                                      <item>&lt;=</item>
                                      <item>&gt;=</item>
                                      <item>&lt;&gt;</item>
                                      <item translatable="yes" context="standardfilterdialog|cond3">Largest</item>
                                      <item translatable="yes" context="standardfilterdialog|cond3">Smallest</item>
                                      <item translatable="yes" context="standardfilterdialog|cond3">Largest %</item>
                                      <item translatable="yes" context="standardfilterdialog|cond3">Smallest %</item>
                                      <item translatable="yes" context="standardfilterdialog|cond3">Contains</item>
                                      <item translatable="yes" context="standardfilterdialog|cond3">Does not contain</item>
                                      <item translatable="yes" context="standardfilterdialog|cond3">Begins with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond3">Does not begin with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond3">Ends with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond3">Does not end with</item>
                                    </items>
                                    <accessibility>
                                      <relation type="labelled-by" target="label4"/>
                                    </accessibility>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="cond3-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|cond3-atkobject">Condition 3</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">2</property>
                                    <property name="top_attach">3</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="cond4">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <items>
                                      <item>=</item>
                                      <item>&lt;</item>
                                      <item>&gt;</item>
                                      <item>&lt;=</item>
                                      <item>&gt;=</item>
                                      <item>&lt;&gt;</item>
                                      <item translatable="yes" context="standardfilterdialog|cond4">Largest</item>
                                      <item translatable="yes" context="standardfilterdialog|cond4">Smallest</item>
                                      <item translatable="yes" context="standardfilterdialog|cond4">Largest %</item>
                                      <item translatable="yes" context="standardfilterdialog|cond4">Smallest %</item>
                                      <item translatable="yes" context="standardfilterdialog|cond4">Contains</item>
                                      <item translatable="yes" context="standardfilterdialog|cond4">Does not contain</item>
                                      <item translatable="yes" context="standardfilterdialog|cond4">Begins with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond4">Does not begin with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond4">Ends with</item>
                                      <item translatable="yes" context="standardfilterdialog|cond4">Does not end with</item>
                                    </items>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="cond4-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|cond4-atkobject">Condition 4</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">2</property>
                                    <property name="top_attach">4</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="val1">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <property name="hexpand">True</property>
                                    <property name="has_entry">True</property>
                                    <child internal-child="entry">
                                      <object class="GtkEntry" id="comboboxtext-entry2">
                                        <property name="can_focus">True</property>
                                        <property name="activates_default">True</property>
                                      </object>
                                    </child>
                                    <accessibility>
                                      <relation type="labelled-by" target="label5"/>
                                    </accessibility>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="val1-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|val1-atkobject">Value 1</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">3</property>
                                    <property name="top_attach">1</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="val2">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <property name="hexpand">True</property>
                                    <property name="has_entry">True</property>
                                    <child internal-child="entry">
                                      <object class="GtkEntry" id="comboboxtext-entry4">
                                        <property name="can_focus">True</property>
                                        <property name="activates_default">True</property>
                                      </object>
                                    </child>
                                    <accessibility>
                                      <relation type="labelled-by" target="label5"/>
                                    </accessibility>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="val2-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|val2-atkobject">Value 2</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">3</property>
                                    <property name="top_attach">2</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="val3">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <property name="hexpand">True</property>
                                    <property name="has_entry">True</property>
                                    <child internal-child="entry">
                                      <object class="GtkEntry" id="comboboxtext-entry6">
                                        <property name="can_focus">True</property>
                                        <property name="activates_default">True</property>
                                      </object>
                                    </child>
                                    <accessibility>
                                      <relation type="labelled-by" target="label5"/>
                                    </accessibility>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="val3-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|val3-atkobject">Value 3</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">3</property>
                                    <property name="top_attach">3</property>
                                  </packing>
                                </child>
                                <child>
                                  <object class="GtkComboBoxText" id="val4">
                                    <property name="visible">True</property>
                                    <property name="can_focus">False</property>
                                    <property name="hexpand">True</property>
                                    <property name="has_entry">True</property>
                                    <child internal-child="entry">
                                      <object class="GtkEntry" id="comboboxtext-entry8">
                                        <property name="can_focus">True</property>
                                        <property name="activates_default">True</property>
                                      </object>
                                    </child>
                                    <child internal-child="accessible">
                                      <object class="AtkObject" id="val4-atkobject">
                                        <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|val4-atkobject">Value 4</property>
                                      </object>
                                    </child>
                                  </object>
                                  <packing>
                                    <property name="left_attach">3</property>
                                    <property name="top_attach">4</property>
                                  </packing>
                                </child>
                              </object>
                              <packing>
                                <property name="left_attach">0</property>
                                <property name="top_attach">0</property>
                              </packing>
                            </child>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">3</property>
                        <property name="top_attach">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="val2">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="has_entry">True</property>
                        <child internal-child="entry">
                          <object class="GtkEntry" id="comboboxtext-entry4">
                            <property name="can_focus">False</property>
                          </object>
                        </child>
                        <accessibility>
                          <relation type="labelled-by" target="label5"/>
                        </accessibility>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="val2-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|val2-atkobject">Value 2</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">3</property>
                        <property name="top_attach">2</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="val3">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="has_entry">True</property>
                        <child internal-child="entry">
                          <object class="GtkEntry" id="comboboxtext-entry6">
                            <property name="can_focus">False</property>
                          </object>
                        </child>
                        <accessibility>
                          <relation type="labelled-by" target="label5"/>
                        </accessibility>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="val3-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|val3-atkobject">Value 3</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">3</property>
                        <property name="top_attach">3</property>
                      </packing>
                    </child>
                    <child>
                      <object class="GtkComboBoxText" id="val4">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="has_entry">True</property>
                        <child internal-child="entry">
                          <object class="GtkEntry" id="comboboxtext-entry8">
                            <property name="can_focus">False</property>
                          </object>
                        </child>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="val4-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|val4-atkobject">Value 4</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="left_attach">3</property>
                        <property name="top_attach">4</property>
                      </packing>
                    </child>
                  </object>
                </child>
@@ -720,7 +746,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>
@@ -741,7 +767,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 4c5a0ad..f199844 100644
--- a/solenv/sanitizers/ui/modules/scalc.suppr
+++ b/solenv/sanitizers/ui/modules/scalc.suppr
@@ -217,6 +217,7 @@ sc/uiconfig/scalc/ui/standardfilterdialog.ui://GtkComboBoxText[@id='val2'] missi
sc/uiconfig/scalc/ui/standardfilterdialog.ui://GtkComboBoxText[@id='val3'] missing-label-for
sc/uiconfig/scalc/ui/standardfilterdialog.ui://GtkLabel[@id='dbarealabel'] orphan-label
sc/uiconfig/scalc/ui/standardfilterdialog.ui://GtkLabel[@id='dbarea'] orphan-label
sc/uiconfig/scalc/ui/standardfilterdialog.ui://GtkButton[@id='rbcopyarea'] button-no-label
sc/uiconfig/scalc/ui/scenariodialog.ui://GtkEntry[@id='name'] no-labelled-by
sc/uiconfig/scalc/ui/scenariodialog.ui://GtkLabel[@id='alttitle'] orphan-label
sc/uiconfig/scalc/ui/scenariodialog.ui://GtkLabel[@id='createdft'] orphan-label