summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>2021-09-09 09:33:49 +0200
committerSamuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>2021-09-16 16:21:19 +0200
commitd9dd003f63a781e63bfbe380ea737e080c21881f (patch)
tree35defd81fdfb99b6254f8d5011fe3dd42297d248 /sc
parent40f38fd16dad4374543d4a7a109b3264837ce8d1 (diff)
tdf#143103 Support Color Filter in "Standard Filter" dialog
Change-Id: Ie8ffc928315b742d5b445d5fdda62cb9c2aabc0e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122089 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>
Diffstat (limited to 'sc')
-rw-r--r--sc/source/ui/dbgui/filtdlg.cxx243
-rw-r--r--sc/source/ui/inc/filtdlg.hxx10
-rw-r--r--sc/uiconfig/scalc/ui/standardfilterdialog.ui428
3 files changed, 555 insertions, 126 deletions
diff --git a/sc/source/ui/dbgui/filtdlg.cxx b/sc/source/ui/dbgui/filtdlg.cxx
index ef093efcb326..06df4ae300f2 100644
--- a/sc/source/ui/dbgui/filtdlg.cxx
+++ b/sc/source/ui/dbgui/filtdlg.cxx
@@ -34,10 +34,14 @@
#include <strings.hrc>
#include <filtdlg.hxx>
+#include <vcl/menu.hxx>
#include <vcl/svapp.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/virdev.hxx>
#include <vcl/weld.hxx>
#include <svl/numformat.hxx>
#include <svl/sharedstringpool.hxx>
+#include <toolkit/helper/vclunohelper.hxx>
#include <limits>
@@ -56,6 +60,8 @@ ScFilterDlg::ScFilterDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pPa
, aStrEmpty(ScResId(SCSTR_FILTER_EMPTY))
, aStrNotEmpty(ScResId(SCSTR_FILTER_NOTEMPTY))
, aStrColumn(ScResId(SCSTR_COLUMN))
+ , aStrTextColor(ScResId(SCSTR_FILTER_TEXT_COLOR))
+ , aStrBackgroundColor(ScResId(SCSTR_FILTER_BACKGROUND_COLOR))
, nWhichQuery(rArgSet.GetPool()->GetWhich(SID_QUERY))
, theQueryData(static_cast<const ScQueryItem&>(rArgSet.Get(nWhichQuery)).GetQueryData())
, pViewData(nullptr)
@@ -66,21 +72,25 @@ ScFilterDlg::ScFilterDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pPa
, m_xLbField1(m_xBuilder->weld_combo_box("field1"))
, m_xLbCond1(m_xBuilder->weld_combo_box("cond1"))
, m_xEdVal1(m_xBuilder->weld_combo_box("val1"))
+ , m_xLbColor1(m_xBuilder->weld_combo_box("color1"))
, m_xBtnRemove1(m_xBuilder->weld_button("remove1"))
, m_xLbConnect2(m_xBuilder->weld_combo_box("connect2"))
, m_xLbField2(m_xBuilder->weld_combo_box("field2"))
, m_xLbCond2(m_xBuilder->weld_combo_box("cond2"))
, m_xEdVal2(m_xBuilder->weld_combo_box("val2"))
+ , m_xLbColor2(m_xBuilder->weld_combo_box("color2"))
, m_xBtnRemove2(m_xBuilder->weld_button("remove2"))
, m_xLbConnect3(m_xBuilder->weld_combo_box("connect3"))
, m_xLbField3(m_xBuilder->weld_combo_box("field3"))
, m_xLbCond3(m_xBuilder->weld_combo_box("cond3"))
, m_xEdVal3(m_xBuilder->weld_combo_box("val3"))
+ , m_xLbColor3(m_xBuilder->weld_combo_box("color3"))
, m_xBtnRemove3(m_xBuilder->weld_button("remove3"))
, m_xLbConnect4(m_xBuilder->weld_combo_box("connect4"))
, m_xLbField4(m_xBuilder->weld_combo_box("field4"))
, m_xLbCond4(m_xBuilder->weld_combo_box("cond4"))
, m_xEdVal4(m_xBuilder->weld_combo_box("val4"))
+ , m_xLbColor4(m_xBuilder->weld_combo_box("color4"))
, m_xBtnRemove4(m_xBuilder->weld_button("remove4"))
, m_xContents(m_xBuilder->weld_widget("grid"))
, m_xScrollBar(m_xBuilder->weld_scrolled_window("scrollbar", true))
@@ -122,6 +132,33 @@ ScFilterDlg::~ScFilterDlg()
pTimer.reset();
}
+namespace {
+VirtualDevice* lcl_getColorImage(const Color &rColor)
+{
+ const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
+ Size aImageSize(rStyleSettings.GetListBoxPreviewDefaultPixelSize());
+
+ VclPtrInstance<VirtualDevice> xDevice;
+ xDevice->SetOutputSize(aImageSize);
+ const tools::Rectangle aRect(Point(0, 0), aImageSize);
+ if (rColor == COL_NONE_COLOR)
+ {
+ const Color aW(COL_WHITE);
+ const Color aG(0xef, 0xef, 0xef);
+ xDevice->DrawCheckered(aRect.TopLeft(), aRect.GetSize(), 8, aW, aG);
+ xDevice->SetFillColor();
+ }
+ else
+ {
+ xDevice->SetFillColor(rColor);
+ }
+
+ xDevice->DrawRect(aRect);
+
+ return xDevice.get();
+}
+}
+
void ScFilterDlg::Init( const SfxItemSet& rArgSet )
{
const ScQueryItem& rQueryItem = static_cast<const ScQueryItem&>(
@@ -157,6 +194,11 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
m_xLbCond3->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
m_xLbCond4->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
+ m_xLbColor1->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
+ m_xLbColor2->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
+ m_xLbColor3->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
+ m_xLbColor4->connect_changed( LINK( this, ScFilterDlg, LbSelectHdl ) );
+
m_xBtnRemove1->connect_clicked( LINK( this, ScFilterDlg, BtnRemoveHdl ) );
m_xBtnRemove2->connect_clicked( LINK( this, ScFilterDlg, BtnRemoveHdl ) );
m_xBtnRemove3->connect_clicked( LINK( this, ScFilterDlg, BtnRemoveHdl ) );
@@ -187,6 +229,11 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
maConnLbArr.push_back(m_xLbConnect2.get());
maConnLbArr.push_back(m_xLbConnect3.get());
maConnLbArr.push_back(m_xLbConnect4.get());
+ maColorLbArr.reserve(QUERY_ENTRY_COUNT);
+ maColorLbArr.push_back(m_xLbColor1.get());
+ maColorLbArr.push_back(m_xLbColor2.get());
+ maColorLbArr.push_back(m_xLbColor3.get());
+ maColorLbArr.push_back(m_xLbColor4.get());
maRemoveBtnArr.reserve(QUERY_ENTRY_COUNT);
maRemoveBtnArr.push_back(m_xBtnRemove1.get());
maRemoveBtnArr.push_back(m_xBtnRemove2.get());
@@ -219,6 +266,8 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
size_t nCondPos = 0;
size_t nFieldSelPos = 0;
+ maColorLbArr[i]->set_visible(false);
+
ScQueryEntry& rEntry = theQueryData.GetEntry(i);
if ( rEntry.bDoQuery )
{
@@ -236,8 +285,11 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
}
else if (rEntry.IsQueryByTextColor() || rEntry.IsQueryByBackgroundColor())
{
- // No support for color filters in filter dialog currently
- continue;
+ nCondPos = maCondLbArr[i]->find_text(
+ rEntry.IsQueryByTextColor() ? aStrTextColor : aStrBackgroundColor);
+ maValueEdArr[i]->set_visible(false);
+ maColorLbArr[i]->set_visible(true);
+ maColorLbArr[i]->set_sensitive(true);
}
else
{
@@ -263,6 +315,7 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
maValueEdArr[i]->set_entry_completion(false);
maValueEdArr[i]->connect_changed( LINK( this, ScFilterDlg, ValModifyHdl ) );
UpdateValueList(i+1);
+ UpdateColorList(i+1);
}
m_xScrollBar->connect_vadjustment_changed( LINK( this, ScFilterDlg, ScrollHdl ) );
@@ -293,6 +346,7 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
m_xLbField2->set_sensitive(false);
m_xLbCond2->set_sensitive(false);
m_xEdVal2->set_sensitive(false);
+ m_xLbColor2->set_sensitive(false);
m_xBtnRemove2->set_sensitive(false);
}
else if ( m_xLbConnect2->get_active() == -1 )
@@ -300,6 +354,7 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
m_xLbField2->set_sensitive(false);
m_xLbCond2->set_sensitive(false);
m_xEdVal2->set_sensitive(false);
+ m_xLbColor2->set_sensitive(false);
m_xBtnRemove2->set_sensitive(false);
}
@@ -309,6 +364,7 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
m_xLbField3->set_sensitive(false);
m_xLbCond3->set_sensitive(false);
m_xEdVal3->set_sensitive(false);
+ m_xLbColor3->set_sensitive(false);
m_xBtnRemove3->set_sensitive(false);
}
else if ( m_xLbConnect3->get_active() == -1 )
@@ -316,6 +372,7 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
m_xLbField3->set_sensitive(false);
m_xLbCond3->set_sensitive(false);
m_xEdVal3->set_sensitive(false);
+ m_xLbColor3->set_sensitive(false);
m_xBtnRemove3->set_sensitive(false);
}
if ( m_xLbField3->get_active() == 0 )
@@ -324,6 +381,7 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
m_xLbField4->set_sensitive(false);
m_xLbCond4->set_sensitive(false);
m_xEdVal4->set_sensitive(false);
+ m_xLbColor4->set_sensitive(false);
m_xBtnRemove4->set_sensitive(false);
}
else if ( m_xLbConnect4->get_active() == -1 )
@@ -331,6 +389,7 @@ void ScFilterDlg::Init( const SfxItemSet& rArgSet )
m_xLbField4->set_sensitive(false);
m_xLbCond4->set_sensitive(false);
m_xEdVal4->set_sensitive(false);
+ m_xLbColor4->set_sensitive(false);
m_xBtnRemove4->set_sensitive(false);
}
@@ -567,6 +626,62 @@ void ScFilterDlg::ClearValueList( size_t nList )
}
}
+void ScFilterDlg::UpdateColorList(size_t nList)
+{
+ if (!pDoc || nList <= 0 || nList > QUERY_ENTRY_COUNT)
+ return;
+
+ size_t nPos = nList - 1;
+ ScQueryEntry& rEntry = theQueryData.GetEntry(nPos);
+ const sal_Int32 nFieldSelPos = maFieldLbArr[nPos]->get_active();
+ if (!nFieldSelPos)
+ return;
+
+ SCCOL nColumn = theQueryData.nCol1 + static_cast<SCCOL>(nFieldSelPos) - 1;
+ EntryList* pList = m_EntryLists[nColumn].get();
+ if (!pList)
+ return;
+
+ std::set<Color> aColors;
+ OUString sSelectedCondition = maCondLbArr[nPos]->get_active_text();
+ if (sSelectedCondition == aStrTextColor)
+ aColors = pList->maFilterEntries.getTextColors();
+ else if (sSelectedCondition == aStrBackgroundColor)
+ aColors = pList->maFilterEntries.getBackgroundColors();
+ else
+ return;
+
+ sal_Int32 i = 1;
+ maColorLbArr[nPos]->clear();
+ for (const auto& rColor : aColors)
+ {
+ OUString sId = rColor.AsRGBHexString();
+ if (rColor == COL_AUTO)
+ {
+ OUString sText = sSelectedCondition == aStrTextColor
+ ? ScResId(SCSTR_FILTER_AUTOMATIC_COLOR)
+ : ScResId(SCSTR_FILTER_NO_FILL);
+ maColorLbArr[nPos]->append(sId, sText);
+ }
+ else
+ {
+ VirtualDevice* pDev = lcl_getColorImage(rColor);
+ maColorLbArr[nPos]->append(sId, OUString(), *pDev);
+ }
+
+ auto aItem = rEntry.GetQueryItem();
+ if (aItem.maColor == rColor
+ && ((sSelectedCondition == aStrTextColor && aItem.meType == ScQueryEntry::ByTextColor)
+ || (sSelectedCondition == aStrBackgroundColor
+ && aItem.meType == ScQueryEntry::ByBackgroundColor)))
+ {
+ maColorLbArr[nPos]->set_active_id(sId);
+ }
+
+ i++;
+ }
+}
+
size_t ScFilterDlg::GetFieldSelPos( SCCOL nField )
{
if ( nField >= theQueryData.nCol1 && nField <= theQueryData.nCol2 )
@@ -665,6 +780,9 @@ IMPL_LINK( ScFilterDlg, BtnClearHdl, weld::Button&, rBtn, void )
m_xEdVal2->set_sensitive(false);
m_xEdVal3->set_sensitive(false);
m_xEdVal4->set_sensitive(false);
+ m_xLbColor2->set_sensitive(false);
+ m_xLbColor3->set_sensitive(false);
+ m_xLbColor4->set_sensitive(false);
m_xBtnRemove2->set_sensitive(false);
m_xBtnRemove3->set_sensitive(false);
m_xBtnRemove4->set_sensitive(false);
@@ -798,6 +916,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
m_xLbField4->set_sensitive(true);
m_xLbCond4->set_sensitive(true);
m_xEdVal4->set_sensitive(true);
+ m_xLbColor4->set_sensitive(true);
m_xBtnRemove4->set_sensitive(true);
const sal_Int32 nConnect4 = m_xLbConnect4->get_active();
@@ -837,6 +956,9 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
m_xEdVal2->set_sensitive(false);
m_xEdVal3->set_sensitive(false);
m_xEdVal4->set_sensitive(false);
+ m_xLbColor2->set_sensitive(false);
+ m_xLbColor3->set_sensitive(false);
+ m_xLbColor4->set_sensitive(false);
m_xBtnRemove2->set_sensitive(false);
m_xBtnRemove3->set_sensitive(false);
m_xBtnRemove4->set_sensitive(false);
@@ -854,6 +976,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
else
{
UpdateValueList( 1 );
+ UpdateColorList( 1 );
if ( !m_xLbConnect2->get_sensitive() )
{
m_xLbConnect2->set_sensitive(true);
@@ -885,6 +1008,8 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
m_xLbCond4->set_sensitive(false);
m_xEdVal3->set_sensitive(false);
m_xEdVal4->set_sensitive(false);
+ m_xLbColor3->set_sensitive(false);
+ m_xLbColor4->set_sensitive(false);
m_xBtnRemove3->set_sensitive(false);
m_xBtnRemove4->set_sensitive(false);
@@ -903,6 +1028,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
else
{
UpdateValueList( 2 );
+ UpdateColorList( 2 );
if ( !m_xLbConnect3->get_sensitive() )
{
m_xLbConnect3->set_sensitive(true);
@@ -927,6 +1053,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
m_xLbField4->set_sensitive(false);
m_xLbCond4->set_sensitive(false);
m_xEdVal4->set_sensitive(false);
+ m_xLbColor4->set_sensitive(false);
m_xBtnRemove4->set_sensitive(false);
sal_uInt16 nTemp=nOffset+2;
@@ -944,6 +1071,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
else
{
UpdateValueList( 3 );
+ UpdateColorList( 3 );
if ( !m_xLbConnect4->get_sensitive() )
{
m_xLbConnect4->set_sensitive(true);
@@ -976,6 +1104,7 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
else
{
UpdateValueList( 4 );
+ UpdateColorList( 4 );
const sal_Int32 nField = rLb.get_active();
sal_uInt16 nQ=3+nOffset;
theQueryData.GetEntry(nQ).bDoQuery = true;
@@ -983,24 +1112,89 @@ IMPL_LINK(ScFilterDlg, LbSelectHdl, weld::ComboBox&, rLb, void)
}
}
- else if ( &rLb == m_xLbCond1.get())
- {
- theQueryData.GetEntry(nOffset).eOp=static_cast<ScQueryOp>(rLb.get_active());
- }
- else if ( &rLb == m_xLbCond2.get())
- {
- sal_uInt16 nQ=1+nOffset;
- theQueryData.GetEntry(nQ).eOp=static_cast<ScQueryOp>(rLb.get_active());
- }
- else if ( &rLb == m_xLbCond3.get())
+ else if (&rLb == m_xLbCond1.get() || &rLb == m_xLbCond2.get() || &rLb == m_xLbCond3.get()
+ || &rLb == m_xLbCond4.get())
{
- sal_uInt16 nQ=2+nOffset;
- theQueryData.GetEntry(nQ).eOp=static_cast<ScQueryOp>(rLb.get_active());
+ ScQueryOp op;
+ sal_uInt16 nQ = 0;
+ bool bEnableColorLb = false;
+ if (rLb.get_active_text() == aStrTextColor || rLb.get_active_text() == aStrBackgroundColor)
+ {
+ bEnableColorLb = true;
+ op = SC_EQUAL;
+ }
+ else
+ {
+ op = static_cast<ScQueryOp>(rLb.get_active());
+ }
+
+ if (&rLb == m_xLbCond1.get())
+ {
+ nQ = nOffset;
+ m_xLbColor1->set_visible(bEnableColorLb);
+ m_xLbColor1->set_sensitive(bEnableColorLb);
+ m_xEdVal1->set_visible(!bEnableColorLb);
+ UpdateColorList(1);
+ }
+ else if (&rLb == m_xLbCond2.get())
+ {
+ nQ = 1 + nOffset;
+ m_xLbColor2->set_visible(bEnableColorLb);
+ m_xLbColor2->set_sensitive(bEnableColorLb);
+ m_xEdVal2->set_visible(!bEnableColorLb);
+ UpdateColorList(2);
+ }
+ else if (&rLb == m_xLbCond3.get())
+ {
+ nQ = 2 + nOffset;
+ m_xLbColor3->set_visible(bEnableColorLb);
+ m_xLbColor3->set_sensitive(bEnableColorLb);
+ m_xEdVal3->set_visible(!bEnableColorLb);
+ UpdateColorList(3);
+ }
+ else if (&rLb == m_xLbCond4.get())
+ {
+ nQ = 3 + nOffset;
+ m_xLbColor4->set_visible(bEnableColorLb);
+ m_xLbColor4->set_sensitive(bEnableColorLb);
+ m_xEdVal4->set_visible(!bEnableColorLb);
+ UpdateColorList(4);
+ }
+
+ auto aEntry = theQueryData.GetEntry(nQ);
+ aEntry.eOp = op;
}
- else
+ else if (&rLb == m_xLbColor1.get() || &rLb == m_xLbColor2.get() || &rLb == m_xLbColor3.get()
+ || &rLb == m_xLbColor4.get())
{
- sal_uInt16 nQ=3+nOffset;
- theQueryData.GetEntry(nQ).eOp=static_cast<ScQueryOp>(rLb.get_active());
+ sal_uInt16 nQ = 0;
+ if (&rLb == m_xLbColor1.get())
+ {
+ nQ = nOffset;
+ }
+ else if (&rLb == m_xLbColor2.get())
+ {
+ nQ = 1 + nOffset;
+ }
+ else if (&rLb == m_xLbColor3.get())
+ {
+ nQ = 2 + nOffset;
+ }
+ else if (&rLb == m_xLbColor4.get())
+ {
+ nQ = 3 + nOffset;
+ }
+
+ ScQueryEntry& aEntry = theQueryData.GetEntry(nQ);
+ Color aColor = Color::STRtoRGB(maColorLbArr[nQ]->get_active_id());
+ if (maCondLbArr[nQ]->get_active_text() == aStrTextColor)
+ {
+ aEntry.SetQueryByTextColor(aColor);
+ }
+ else if (maCondLbArr[nQ]->get_active_text() == aStrBackgroundColor)
+ {
+ aEntry.SetQueryByBackgroundColor(aColor);
+ }
}
}
@@ -1037,6 +1231,11 @@ IMPL_LINK( ScFilterDlg, CheckBoxHdl, weld::Toggleable&, rBox, void )
UpdateValueList( 2 );
UpdateValueList( 3 );
UpdateValueList( 4 );
+
+ UpdateColorList( 1 );
+ UpdateColorList( 2 );
+ UpdateColorList( 3 );
+ UpdateColorList( 4 );
}
}
@@ -1227,6 +1426,8 @@ void ScFilterDlg::RefreshEditRow( size_t nOffset )
size_t nFieldSelPos = 0;
size_t nQE = i + nOffset;
+ maColorLbArr[i]->set_visible(false);
+
if (maRefreshExceptQuery.size() < nQE + 1)
maRefreshExceptQuery.resize(nQE + 1, false);
@@ -1251,7 +1452,12 @@ void ScFilterDlg::RefreshEditRow( size_t nOffset )
}
else if (rEntry.IsQueryByTextColor() || rEntry.IsQueryByBackgroundColor())
{
- continue;
+ nCondPos = maCondLbArr[i]->find_text(
+ rEntry.IsQueryByTextColor() ? aStrTextColor : aStrBackgroundColor);
+
+ maValueEdArr[i]->set_visible(false);
+ maColorLbArr[i]->set_visible(true);
+ maColorLbArr[i]->set_sensitive(true);
}
else
{
@@ -1322,6 +1528,7 @@ void ScFilterDlg::RefreshEditRow( size_t nOffset )
maCondLbArr [i]->set_active( nCondPos );
maValueEdArr[i]->set_entry_text( aValStr );
UpdateValueList(i+1);
+ UpdateColorList(i+1);
}
}
diff --git a/sc/source/ui/inc/filtdlg.hxx b/sc/source/ui/inc/filtdlg.hxx
index ca11a0eb675d..ca43ed8bb01f 100644
--- a/sc/source/ui/inc/filtdlg.hxx
+++ b/sc/source/ui/inc/filtdlg.hxx
@@ -25,6 +25,8 @@
#include <filterentries.hxx>
#include <queryentry.hxx>
+#include <svx/colorbox.hxx>
+
#include <memory>
#include <deque>
#include <vector>
@@ -70,6 +72,8 @@ private:
const OUString aStrEmpty;
const OUString aStrNotEmpty;
const OUString aStrColumn;
+ const OUString aStrTextColor;
+ const OUString aStrBackgroundColor;
std::unique_ptr<ScFilterOptionsMgr> pOptionsMgr;
@@ -84,6 +88,7 @@ private:
std::vector<weld::ComboBox*> maFieldLbArr;
std::vector<weld::ComboBox*> maCondLbArr;
std::vector<weld::ComboBox*> maConnLbArr;
+ std::vector<weld::ComboBox*> maColorLbArr;
std::vector<weld::Button*> maRemoveBtnArr;
std::deque<bool> maHasDates;
@@ -99,24 +104,28 @@ private:
std::unique_ptr<weld::ComboBox> m_xLbField1;
std::unique_ptr<weld::ComboBox> m_xLbCond1;
std::unique_ptr<weld::ComboBox> m_xEdVal1;
+ std::unique_ptr<weld::ComboBox> m_xLbColor1;
std::unique_ptr<weld::Button> m_xBtnRemove1;
std::unique_ptr<weld::ComboBox> m_xLbConnect2;
std::unique_ptr<weld::ComboBox> m_xLbField2;
std::unique_ptr<weld::ComboBox> m_xLbCond2;
std::unique_ptr<weld::ComboBox> m_xEdVal2;
+ std::unique_ptr<weld::ComboBox> m_xLbColor2;
std::unique_ptr<weld::Button> m_xBtnRemove2;
std::unique_ptr<weld::ComboBox> m_xLbConnect3;
std::unique_ptr<weld::ComboBox> m_xLbField3;
std::unique_ptr<weld::ComboBox> m_xLbCond3;
std::unique_ptr<weld::ComboBox> m_xEdVal3;
+ std::unique_ptr<weld::ComboBox> m_xLbColor3;
std::unique_ptr<weld::Button> m_xBtnRemove3;
std::unique_ptr<weld::ComboBox> m_xLbConnect4;
std::unique_ptr<weld::ComboBox> m_xLbField4;
std::unique_ptr<weld::ComboBox> m_xLbCond4;
std::unique_ptr<weld::ComboBox> m_xEdVal4;
+ std::unique_ptr<weld::ComboBox> m_xLbColor4;
std::unique_ptr<weld::Button> m_xBtnRemove4;
std::unique_ptr<weld::Widget> m_xContents;
@@ -145,6 +154,7 @@ private:
void UpdateValueList ( size_t nList );
void UpdateHdrInValueList( size_t nList );
void ClearValueList ( size_t nList );
+ void UpdateColorList ( size_t nList );
size_t GetFieldSelPos ( SCCOL nField );
ScQueryItem* GetOutputItem ();
void SetValString ( const OUString& rQueryStr,
diff --git a/sc/uiconfig/scalc/ui/standardfilterdialog.ui b/sc/uiconfig/scalc/ui/standardfilterdialog.ui
index 4eb0b8d704c6..e36a8780d6a1 100644
--- a/sc/uiconfig/scalc/ui/standardfilterdialog.ui
+++ b/sc/uiconfig/scalc/ui/standardfilterdialog.ui
@@ -22,6 +22,54 @@
<property name="can-focus">False</property>
<property name="icon-name">cmd/sc_delete.png</property>
</object>
+ <object class="GtkListStore" id="liststore1">
+ <columns>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ <!-- column-name image -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name surface -->
+ <column type="CairoSurface"/>
+ </columns>
+ </object>
+ <object class="GtkListStore" id="liststore2">
+ <columns>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ <!-- column-name image -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name surface -->
+ <column type="CairoSurface"/>
+ </columns>
+ </object>
+ <object class="GtkListStore" id="liststore3">
+ <columns>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ <!-- column-name image -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name surface -->
+ <column type="CairoSurface"/>
+ </columns>
+ </object>
+ <object class="GtkListStore" id="liststore4">
+ <columns>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ <!-- column-name color -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name surface -->
+ <column type="CairoSurface"/>
+ </columns>
+ </object>
<object class="GtkDialog" id="StandardFilterDialog">
<property name="can-focus">False</property>
<property name="border-width">6</property>
@@ -382,6 +430,8 @@
<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>
+ <item translatable="yes" context="standardfilterdialog|cond1">Text color</item>
+ <item translatable="yes" context="standardfilterdialog|cond1">Background color</item>
</items>
<accessibility>
<relation type="labelled-by" target="label4"/>
@@ -419,6 +469,8 @@
<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>
+ <item translatable="yes" context="standardfilterdialog|cond2">Text color</item>
+ <item translatable="yes" context="standardfilterdialog|cond2">Background color</item>
</items>
<accessibility>
<relation type="labelled-by" target="label4"/>
@@ -456,6 +508,8 @@
<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>
+ <item translatable="yes" context="standardfilterdialog|cond3">Text color</item>
+ <item translatable="yes" context="standardfilterdialog|cond3">Background color</item>
</items>
<accessibility>
<relation type="labelled-by" target="label4"/>
@@ -493,6 +547,8 @@
<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>
+ <item translatable="yes" context="standardfilterdialog|cond4">Text color</item>
+ <item translatable="yes" context="standardfilterdialog|cond4">Background color</item>
</items>
<child internal-child="accessible">
<object class="AtkObject" id="cond4-atkobject">
@@ -506,114 +562,6 @@
</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>
- <property name="truncate-multiline">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>
- <property name="AtkObject::accessible-description" translatable="yes" context="standardfilterdialog|extended_tip|val1">Specifies a value to filter the field.</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>
- <property name="truncate-multiline">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>
- <property name="AtkObject::accessible-description" translatable="yes" context="standardfilterdialog|extended_tip|val2">Specifies a value to filter the field.</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>
- <property name="truncate-multiline">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>
- <property name="AtkObject::accessible-description" translatable="yes" context="standardfilterdialog|extended_tip|val3">Specifies a value to filter the field.</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>
- <property name="truncate-multiline">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>
- <child>
<object class="GtkButton" id="remove1">
<property name="visible">True</property>
<property name="can-focus">True</property>
@@ -670,6 +618,270 @@
</packing>
</child>
<child>
+ <!-- n-columns=2 n-rows=1 -->
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <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">
+ <property name="can-focus">True</property>
+ <property name="activates-default">True</property>
+ <property name="truncate-multiline">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|val1-atkobject">Value 1</property>
+ <property name="AtkObject::accessible-description" translatable="yes" context="standardfilterdialog|extended_tip|val1">Specifies a value to filter the field.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="color2">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="model">liststore2</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererPixbuf"/>
+ <attributes>
+ <attribute name="pixbuf">3</attribute>
+ </attributes>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label5"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">3</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <!-- n-columns=2 n-rows=1 -->
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <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">
+ <property name="can-focus">True</property>
+ <property name="activates-default">True</property>
+ <property name="truncate-multiline">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>
+ <property name="AtkObject::accessible-description" translatable="yes" context="standardfilterdialog|extended_tip|val1">Specifies a value to filter the field.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="color1">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="hexpand">False</property>
+ <property name="model">liststore1</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererPixbuf"/>
+ <attributes>
+ <attribute name="pixbuf">3</attribute>
+ </attributes>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label5"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">3</property>
+ <property name="top-attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <!-- n-columns=2 n-rows=1 -->
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <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">
+ <property name="can-focus">True</property>
+ <property name="activates-default">True</property>
+ <property name="truncate-multiline">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|val1-atkobject">Value 1</property>
+ <property name="AtkObject::accessible-description" translatable="yes" context="standardfilterdialog|extended_tip|val1">Specifies a value to filter the field.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="color3">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="model">liststore3</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererPixbuf"/>
+ <attributes>
+ <attribute name="pixbuf">3</attribute>
+ </attributes>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label5"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">3</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <!-- n-columns=2 n-rows=1 -->
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <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">
+ <property name="can-focus">True</property>
+ <property name="activates-default">True</property>
+ <property name="truncate-multiline">True</property>
+ </object>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label5"/>
+ </accessibility>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="val4-atkobject">
+ <property name="AtkObject::accessible-name" translatable="yes" context="standardfilterdialog|val1-atkobject">Value 1</property>
+ <property name="AtkObject::accessible-description" translatable="yes" context="standardfilterdialog|extended_tip|val1">Specifies a value to filter the field.</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="color4">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="model">liststore4</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererPixbuf"/>
+ <attributes>
+ <attribute name="pixbuf">3</attribute>
+ </attributes>
+ </child>
+ <accessibility>
+ <relation type="labelled-by" target="label5"/>
+ </accessibility>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">3</property>
+ <property name="top-attach">4</property>
+ </packing>
+ </child>
+ <child>
<placeholder/>
</child>
</object>