sc/inc/globstr.hrc | 11 ++- sc/source/filter/xml/xmlstyli.cxx | 1 sc/source/ui/condformat/condformatdlg.cxx | 8 ++ sc/source/ui/condformat/condformatdlgentry.cxx | 17 ++--- sc/source/ui/src/globstr.src | 4 + sc/source/ui/view/cellsh1.cxx | 71 ++++++++++++++++++++++--- 6 files changed, 87 insertions(+), 25 deletions(-)
New commits: commit 89872cc04d8c7053c35eee21509706fd4ee53c5a Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Dec 14 16:50:09 2012 +0100 no need for this using statement Change-Id: Ie956d5368560d6851f3bcb5174d712e35f09c368 diff --git a/sc/source/filter/xml/xmlstyli.cxx b/sc/source/filter/xml/xmlstyli.cxx index dae4aa9..a479283 100644 --- a/sc/source/filter/xml/xmlstyli.cxx +++ b/sc/source/filter/xml/xmlstyli.cxx @@ -70,7 +70,6 @@ using namespace ::com::sun::star::container; using namespace xmloff::token; using namespace ::formula; -using rtl::OUString; using com::sun::star::uno::Reference; using com::sun::star::uno::UNO_QUERY; commit 4578832a84b1818943da907c4e292af64c49beee Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Dec 14 10:29:48 2012 +0100 use correct cond format dlg setUp for colorscales, fdo#58232 Change-Id: Ib119b09b110d6563bc0abd304f60031a8592d7f1 diff --git a/sc/source/ui/condformat/condformatdlg.cxx b/sc/source/ui/condformat/condformatdlg.cxx index 6236432..c9667ce 100644 --- a/sc/source/ui/condformat/condformatdlg.cxx +++ b/sc/source/ui/condformat/condformatdlg.cxx @@ -84,7 +84,13 @@ ScCondFormatList::ScCondFormatList(Window* pParent, const ResId& rResId, ScDocum } break; case condformat::COLORSCALE: - maEntries.push_back(new ScColorScale3FrmtEntry( this, mpDoc, maPos, static_cast<const ScColorScaleFormat*>( pEntry ) ) ); + { + const ScColorScaleFormat* pColorScale = static_cast<const ScColorScaleFormat*>( pEntry ); + if( pColorScale->size() == 2 ) + maEntries.push_back(new ScColorScale2FrmtEntry( this, mpDoc, maPos, pColorScale ) ); + else + maEntries.push_back(new ScColorScale3FrmtEntry( this, mpDoc, maPos, pColorScale ) ); + } break; case condformat::DATABAR: maEntries.push_back(new ScDataBarFrmtEntry( this, mpDoc, maPos, static_cast<const ScDataBarFormat*>( pEntry ) ) ); diff --git a/sc/source/ui/condformat/condformatdlgentry.cxx b/sc/source/ui/condformat/condformatdlgentry.cxx index 96c9bda..3c27da6 100644 --- a/sc/source/ui/condformat/condformatdlgentry.cxx +++ b/sc/source/ui/condformat/condformatdlgentry.cxx @@ -582,7 +582,10 @@ namespace { void SetColorScaleEntryTypes( const ScColorScaleEntry& rEntry, ListBox& rLbType, Edit& rEdit, ColorListBox& rLbCol ) { - rLbType.SelectEntryPos(rEntry.GetType()); + // entry Automatic is not available for color scales + sal_Int32 nIndex = static_cast<sal_Int32>(rEntry.GetType()); + assert(nIndex > 0); + rLbType.SelectEntryPos(nIndex - 1); switch(rEntry.GetType()) { case COLORSCALE_MIN: @@ -818,17 +821,11 @@ ScColorScale3FrmtEntry::ScColorScale3FrmtEntry( Window* pParent, ScDocument* pDo maLbType.SelectEntryPos(0); if(pFormat) { - if(pFormat->size() == 2) - maLbColorFormat.SelectEntryPos(0); - else - maLbColorFormat.SelectEntryPos(1); ScColorScaleFormat::const_iterator itr = pFormat->begin(); SetColorScaleEntryTypes(*itr, maLbEntryTypeMin, maEdMin, maLbColMin); - if(pFormat->size() == 3) - { - ++itr; - SetColorScaleEntryTypes(*itr, maLbEntryTypeMiddle, maEdMiddle, maLbColMiddle); - } + assert(pFormat->size() == 3); + ++itr; + SetColorScaleEntryTypes(*itr, maLbEntryTypeMiddle, maEdMiddle, maLbColMiddle); ++itr; SetColorScaleEntryTypes(*itr, maLbEntryTypeMax, maEdMax, maLbColMax); } commit 7073310431becb1a69af0c7187b9844ce7901cd5 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Dec 14 10:03:05 2012 +0100 make editing conditional formats more obvious, related fdo#57895 Change-Id: I2ea95a204fbbd0d36a8fb1374e41aa5aae3cf410 diff --git a/sc/inc/globstr.hrc b/sc/inc/globstr.hrc index c1873b5..e860a6b 100644 --- a/sc/inc/globstr.hrc +++ b/sc/inc/globstr.hrc @@ -615,12 +615,13 @@ #define STR_COND_DATE 490 #define STR_ERR_CONDFORMAT_PROTECTED 491 +#define STR_EDIT_EXISTING_COND_FORMATS 492 -#define STR_QUERY_FORMULA_RECALC_ONLOAD_ODS 492 -#define STR_QUERY_FORMULA_RECALC_ONLOAD_XLS 493 -#define STR_ALWAYS 494 -#define STR_NEVER 495 +#define STR_QUERY_FORMULA_RECALC_ONLOAD_ODS 493 +#define STR_QUERY_FORMULA_RECALC_ONLOAD_XLS 494 +#define STR_ALWAYS 495 +#define STR_NEVER 496 -#define STR_COUNT 496 +#define STR_COUNT 497 #endif diff --git a/sc/source/ui/src/globstr.src b/sc/source/ui/src/globstr.src index 88cb11c..955dcb5 100644 --- a/sc/source/ui/src/globstr.src +++ b/sc/source/ui/src/globstr.src @@ -1946,6 +1946,10 @@ Resource RID_GLOBSTR { Text [ en-US ] = "Conditional Formats can not be created, deleted or changed in protected sheets!"; }; + String STR_EDIT_EXISTING_COND_FORMATS + { + Text [ en-US ] = "The selected cell already contains conditional formatting. You can either edit the existing conditional format or you define a new overlapping conditional format.\n\n Do you want to edit the existing conditional format?"; + }; String STR_QUERY_FORMULA_RECALC_ONLOAD_ODS { diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index fd8fd81..0fc5dfc 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -75,6 +75,7 @@ #include "markdata.hxx" #include "docpool.hxx" #include "condformatdlg.hxx" +#include "attrib.hxx" #include "globstr.hrc" #include "scui_def.hxx" @@ -1761,8 +1762,6 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) case SID_OPENDLG_COLORSCALE: case SID_OPENDLG_DATABAR: { - sal_uInt16 nId = 1; - pScMod->SetRefDialog( nId, true ); ScRangeList aRangeList; ScViewData* pData = GetViewData(); @@ -1783,15 +1782,67 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) } sal_Int32 nKey = 0; - const ScConditionalFormat* pCondFormat = pDoc->GetCondFormat(aPos.Col(), aPos.Row(), aPos.Tab()); + const ScPatternAttr* pPattern = pDoc->GetPattern(aPos.Col(), aPos.Row(), aPos.Tab()); + const std::vector<sal_uInt32>& rCondFormats = static_cast<const ScCondFormatItem&>(pPattern->GetItem(ATTR_CONDITIONAL)).GetCondFormatData(); + bool bContainsCondFormat = !rCondFormats.empty(); boost::scoped_ptr<ScCondFormatDlg> pCondFormatDlg; - if(pCondFormat) + if(bContainsCondFormat) { - const ScRangeList& rCondFormatRange = pCondFormat->GetRange(); - if(rCondFormatRange == aRangeList) + ScConditionalFormatList* pList = pDoc->GetCondFormList(aPos.Tab()); + for (std::vector<sal_uInt32>::const_iterator itr = rCondFormats.begin(), itrEnd = rCondFormats.end(); + itr != itrEnd; ++itr) { - nKey = pCondFormat->GetKey(); - pCondFormatDlg.reset( new ScCondFormatDlg( pTabViewShell->GetDialogParent(), pDoc, pCondFormat, rCondFormatRange, aPos, condformat::dialog::NONE ) ); + // check if at least one existing conditional format has the same range + const ScConditionalFormat* pCondFormat = pList->GetFormat(*itr); + const ScRangeList& rCondFormatRange = pCondFormat->GetRange(); + if(rCondFormatRange == aRangeList) + { + // found a matching range, edit this conditional format + nKey = pCondFormat->GetKey(); + pCondFormatDlg.reset( new ScCondFormatDlg( pTabViewShell->GetDialogParent(), pDoc, pCondFormat, rCondFormatRange, aPos, condformat::dialog::NONE ) ); + } + } + + // if not found a conditional format ask whether we should edit one of the existing + // or should create a new overlapping conditional format + + if(!pCondFormatDlg) + { + QueryBox aBox( pTabViewShell->GetDialogParent(), WinBits( WB_YES_NO | WB_DEF_YES ), + 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) + { + const ScConditionalFormat* pCondFormat = pList->GetFormat(rCondFormats[0]); + assert(pCondFormat); + const ScRangeList& rCondFormatRange = pCondFormat->GetRange(); + pCondFormatDlg.reset( new ScCondFormatDlg( pTabViewShell->GetDialogParent(), pDoc, pCondFormat, rCondFormatRange, aPos, condformat::dialog::NONE ) ); + } + else + { + ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); + boost::scoped_ptr<AbstractScCondFormatManagerDlg> pDlg(pFact->CreateScCondFormatMgrDlg( pTabViewShell->GetDialogParent(), pDoc, pList, aPos, RID_SCDLG_COND_FORMAT_MANAGER)); + if(pDlg->Execute() == RET_OK && pDlg->CondFormatsChanged()) + { + ScConditionalFormatList* pCondFormatList = pDlg->GetConditionalFormatList(); + pData->GetDocShell()->GetDocFunc().SetConditionalFormatList(pCondFormatList, aPos.Tab()); + } + // we need step out here because we don't want to open the normal dialog + break; + } + } + else + { + // define an overlapping conditional format + // does not need to be handled here + } + } } @@ -1814,6 +1865,10 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) } pCondFormatDlg.reset( new ScCondFormatDlg( pTabViewShell->GetDialogParent(), pDoc, NULL, aRangeList, aRangeList.GetTopLeftCorner(), eType ) ); } + + sal_uInt16 nId = 1; + pScMod->SetRefDialog( nId, true ); + if( pCondFormatDlg->Execute() == RET_OK ) { ScConditionalFormat* pFormat = pCondFormatDlg->GetConditionalFormat(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits