[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.0' - desktop/source sc/inc sc/sdi sc/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Fri Oct 12 07:51:59 UTC 2018
desktop/source/lib/init.cxx | 2
sc/inc/colorscale.hxx | 6 +-
sc/sdi/scalc.sdi | 2
sc/source/core/data/colorscale.cxx | 4 -
sc/source/ui/view/cellsh1.cxx | 92 ++++++++++++++++++++++++++-----------
5 files changed, 73 insertions(+), 33 deletions(-)
New commits:
commit 9c20b03783ae07f40891422c1e8a943384b6f96d
Author: Jan Holesovsky <kendy at collabora.com>
AuthorDate: Mon Jun 25 22:58:30 2018 +0200
Commit: Miklos Vajna <vmiklos at collabora.co.uk>
CommitDate: Fri Oct 12 09:51:33 2018 +0200
Conditional formatting: Allow to set the icon set CF via .uno: command.
When .uno:IconSetFormatDialog gets a parameter, it directly creates the
icon set conditional formatting with pre-selected values.
Change-Id: I75dda90e5ea9c191254acc24c564cda7b27243a5
Reviewed-on: https://gerrit.libreoffice.org/56429
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
Tested-by: Miklos Vajna <vmiklos at collabora.co.uk>
Reviewed-on: https://gerrit.libreoffice.org/61660
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 9d5f43108672..a7c2790150ee 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -322,6 +322,8 @@ std::vector<beans::PropertyValue> desktop::jsonToPropertyValuesVector(const char
aValue.Value <<= OString(rValue.c_str()).toFloat();
else if (rType == "long")
aValue.Value <<= OString(rValue.c_str()).toInt32();
+ else if (rType == "short")
+ aValue.Value <<= static_cast<sal_Int16>(OString(rValue.c_str()).toInt32());
else if (rType == "unsigned short")
aValue.Value <<= static_cast<sal_uInt16>(OString(rValue.c_str()).toUInt32());
else if (rType == "[]any")
diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx
index 19f00d7087e8..0adde0e30585 100644
--- a/sc/inc/colorscale.hxx
+++ b/sc/inc/colorscale.hxx
@@ -52,7 +52,7 @@ private:
ScConditionalFormat* mpFormat;
public:
- ScColorScaleEntry(double nVal, const Color& rCol);
+ ScColorScaleEntry(double nVal, const Color& rCol, ScColorScaleEntryType eType = COLORSCALE_VALUE);
ScColorScaleEntry();
ScColorScaleEntry(const ScColorScaleEntry& rEntry);
ScColorScaleEntry(ScDocument* pDoc, const ScColorScaleEntry& rEntry);
@@ -343,8 +343,8 @@ struct ScIconSetFormatData
// std..pair::second == -1 means no image
std::vector<std::pair<ScIconSetType, sal_Int32> > maCustomVector;
- ScIconSetFormatData():
- eIconSetType(IconSet_3Arrows),
+ ScIconSetFormatData(ScIconSetType eType = IconSet_3Arrows):
+ eIconSetType(eType),
mbShowValue(true),
mbReverse(false),
mbCustom(false)
diff --git a/sc/sdi/scalc.sdi b/sc/sdi/scalc.sdi
index 3fc0f38cc92d..a1d176603e8b 100644
--- a/sc/sdi/scalc.sdi
+++ b/sc/sdi/scalc.sdi
@@ -739,7 +739,7 @@ SfxVoidItem DataBarFormatDialog SID_OPENDLG_DATABAR
SfxVoidItem IconSetFormatDialog SID_OPENDLG_ICONSET
-()
+(SfxInt16Item IconSet FN_PARAM_1)
[
AutoUpdate = FALSE,
FastCall = FALSE,
diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx
index df484f328c58..fedbb4230dc8 100644
--- a/sc/source/core/data/colorscale.cxx
+++ b/sc/source/core/data/colorscale.cxx
@@ -136,10 +136,10 @@ ScColorScaleEntry::ScColorScaleEntry():
{
}
-ScColorScaleEntry::ScColorScaleEntry(double nVal, const Color& rCol):
+ScColorScaleEntry::ScColorScaleEntry(double nVal, const Color& rCol, ScColorScaleEntryType eType):
mnVal(nVal),
maColor(rCol),
- meType(COLORSCALE_VALUE),
+ meType(eType),
mpFormat(nullptr)
{
}
diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx
index 7a8710634b3b..622db89acb67 100644
--- a/sc/source/ui/view/cellsh1.cxx
+++ b/sc/source/ui/view/cellsh1.cxx
@@ -51,6 +51,7 @@
#include <svtools/cliplistener.hxx>
#include <cellsh.hxx>
+#include <ftools.hxx>
#include <sc.hrc>
#include <document.hxx>
#include <patattr.hxx>
@@ -80,6 +81,7 @@
#include <cliputil.hxx>
#include <markdata.hxx>
#include <docpool.hxx>
+#include <colorscale.hxx>
#include <condformatdlg.hxx>
#include <attrib.hxx>
#include <condformatdlgitem.hxx>
@@ -101,6 +103,7 @@
#include <com/sun/star/beans/XPropertySet.hpp>
#include <cppuhelper/bootstrap.hxx>
+#include <o3tl/make_unique.hxx>
#include <memory>
using namespace ::com::sun::star;
@@ -2007,15 +2010,16 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
aRangeList.push_back(pRange);
}
+ // try to find an existing conditional format
const ScConditionalFormat* pCondFormat = nullptr;
const ScPatternAttr* pPattern = pDoc->GetPattern(aPos.Col(), aPos.Row(), aPos.Tab());
+ ScConditionalFormatList* pList = pDoc->GetCondFormList(aPos.Tab());
const std::vector<sal_uInt32>& rCondFormats = pPattern->GetItem(ATTR_CONDITIONAL).GetCondFormatData();
bool bContainsCondFormat = !rCondFormats.empty();
bool bCondFormatDlg = false;
+ bool bContainsExistingCondFormat = false;
if(bContainsCondFormat)
{
- bool bContainsExistingCondFormat = false;
- ScConditionalFormatList* pList = pDoc->GetCondFormList(aPos.Tab());
for (std::vector<sal_uInt32>::const_iterator itr = rCondFormats.begin(), itrEnd = rCondFormats.end();
itr != itrEnd; ++itr)
{
@@ -2034,39 +2038,73 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
break;
}
}
+ }
+
+ // do we have a parameter with the conditional formatting type?
+ const SfxInt16Item* pParam = rReq.GetArg<SfxInt16Item>(FN_PARAM_1);
+ if (pParam && nSlot == SID_OPENDLG_ICONSET)
+ {
+ ScConditionalFormat* pFormat = new ScConditionalFormat(0, pDoc);
+ pFormat->SetRange(aRangeList);
+
+ ScIconSetType eIconSetType = limit_cast<ScIconSetType>(pParam->GetValue(), IconSet_3Arrows, IconSet_5Boxes);
+ int nSteps = 3;
+ if (eIconSetType >= IconSet_4Arrows && eIconSetType < IconSet_5Arrows)
+ nSteps = 4;
+ else if (eIconSetType >= IconSet_5Arrows)
+ nSteps = 5;
+
+ ScIconSetFormat* pEntry = new ScIconSetFormat(pDoc);
+ ScIconSetFormatData* pIconSetFormatData = new ScIconSetFormatData(eIconSetType);
+
+ pIconSetFormatData->m_Entries.push_back(o3tl::make_unique<ScColorScaleEntry>(0, COL_RED, COLORSCALE_PERCENT));
+ pIconSetFormatData->m_Entries.push_back(o3tl::make_unique<ScColorScaleEntry>(round(100. / nSteps), COL_BROWN, COLORSCALE_PERCENT));
+ pIconSetFormatData->m_Entries.push_back(o3tl::make_unique<ScColorScaleEntry>(round(200. / nSteps), COL_YELLOW, COLORSCALE_PERCENT));
+ if (nSteps > 3)
+ pIconSetFormatData->m_Entries.push_back(o3tl::make_unique<ScColorScaleEntry>(round(300. / nSteps), COL_WHITE, COLORSCALE_PERCENT));
+ if (nSteps > 4)
+ pIconSetFormatData->m_Entries.push_back(o3tl::make_unique<ScColorScaleEntry>(round(400. / nSteps), COL_GREEN, COLORSCALE_PERCENT));
- // if not found a conditional format ask whether we should edit one of the existing
- // or should create a new overlapping conditional format
- if(!bCondFormatDlg && bContainsExistingCondFormat)
+ pEntry->SetIconSetData(pIconSetFormatData);
+ pFormat->AddEntry(pEntry);
+
+ // use the new conditional formatting
+ GetViewData()->GetDocShell()->GetDocFunc().ReplaceConditionalFormat(nIndex, pFormat, aPos.Tab(), aRangeList);
+
+ break;
+ }
+
+ // if not found a conditional format ask whether we should edit one of the existing
+ // or should create a new overlapping conditional format
+ if(bContainsCondFormat && !bCondFormatDlg && bContainsExistingCondFormat)
+ {
+ ScopedVclPtrInstance<QueryBox> aBox(pTabViewShell->GetDialogParent(), MessBoxStyle::YesNo | MessBoxStyle::DefaultYes,
+ ScGlobal::GetRscString(STR_EDIT_EXISTING_COND_FORMATS));
+ bool bEditExisting = aBox->Execute() == RET_YES;
+ if (bEditExisting)
{
- ScopedVclPtrInstance<QueryBox> aBox( pTabViewShell->GetDialogParent(), MessBoxStyle::YesNo | MessBoxStyle::DefaultYes,
- ScGlobal::GetRscString(STR_EDIT_EXISTING_COND_FORMATS) );
- bool bEditExisting = aBox->Execute() == RET_YES;
- if(bEditExisting)
+ // differentiate between ranges where one conditional format is defined
+ // and several formats are defined
+ // if we have only one => open the cond format dlg to edit it
+ // otherwise open the manage cond format dlg
+ if (rCondFormats.size() == 1)
{
- // differentiate between ranges where one conditional format is defined
- // and several formats are defined
- // if we have only one => open the cond format dlg to edit it
- // otherwise open the manage cond format dlg
- if(rCondFormats.size() == 1)
- {
- pCondFormat = pList->GetFormat(rCondFormats[0]);
- assert(pCondFormat);
- bCondFormatDlg = true;
- }
- else
- {
- // Queue message to open Conditional Format Manager Dialog.
- GetViewData()->GetDispatcher().Execute( SID_OPENDLG_CONDFRMT_MANAGER, SfxCallMode::ASYNCHRON );
- break;
- }
+ pCondFormat = pList->GetFormat(rCondFormats[0]);
+ assert(pCondFormat);
+ bCondFormatDlg = true;
}
else
{
- // define an overlapping conditional format
- // does not need to be handled here
+ // Queue message to open Conditional Format Manager Dialog.
+ GetViewData()->GetDispatcher().Execute( SID_OPENDLG_CONDFRMT_MANAGER, SfxCallMode::ASYNCHRON );
+ break;
}
}
+ else
+ {
+ // define an overlapping conditional format
+ // does not need to be handled here
+ }
}
condformat::dialog::ScCondFormatDialogType eType = condformat::dialog::NONE;
More information about the Libreoffice-commits
mailing list