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"><</item>
<item translatable="no">></item>
<item translatable="no"><=</item>
<item translatable="no">>=</item>
<item translatable="no"><></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"><</item>
<item translatable="no">></item>
<item translatable="no"><=</item>
<item translatable="no">>=</item>
<item translatable="no"><></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"><</item>
<item translatable="no">></item>
<item translatable="no"><=</item>
<item translatable="no">>=</item>
<item translatable="no"><></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"><</item>
<item translatable="no">></item>
<item translatable="no"><=</item>
<item translatable="no">>=</item>
<item translatable="no"><></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><</item>
<item>></item>
<item><=</item>
<item>>=</item>
<item><></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><</item>
<item>></item>
<item><=</item>
<item>>=</item>
<item><></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><</item>
<item>></item>
<item><=</item>
<item>>=</item>
<item><></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><</item>
<item>></item>
<item><=</item>
<item>>=</item>
<item><></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