Hi guys, These three together (worked on by Markus & myself) improve some of the ergonomics around the conditional formatting dialog, and fix a minor sizing issue.
I'd love to get them into -3-6 - review/sign-off appreciated; the slightly larger fix is a squash of three from master. Thanks, Michael. -- michael.me...@suse.com <><, Pseudo Engineer, itinerant idiot
>From ab905f6398df6655645eb43aab49fa3519ad4dd9 Mon Sep 17 00:00:00 2001 From: Michael Meeks <michael.me...@suse.com> Date: Fri, 28 Sep 2012 11:50:31 +0100 Subject: [PATCH 1/3] improve conditional formatting height calculations. Change-Id: If5080892b820d268ffef22111d0caee217586b56 --- sc/source/ui/condformat/condformatdlg.cxx | 37 +++++++++++++---------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/sc/source/ui/condformat/condformatdlg.cxx b/sc/source/ui/condformat/condformatdlg.cxx index 5c6d0f2..9fe983f 100644 --- a/sc/source/ui/condformat/condformatdlg.cxx +++ b/sc/source/ui/condformat/condformatdlg.cxx @@ -494,30 +494,25 @@ void ScCondFrmtEntry::HideColorScaleElements() void ScCondFrmtEntry::SetHeight() { - if(mbActive) + long nPad = LogicToPixel(Size(42,2), MapMode(MAP_APPFONT)).getHeight(); + + // Calculate maximum height we need from visible widgets + sal_uInt16 nChildren = GetChildCount(); + + long nMaxHeight = 0; + for(sal_uInt16 i = 0; i < nChildren; i++) { - Size aSize = GetSizePixel(); - switch (meType) - { - case CONDITION: - case FORMULA: - aSize.Height() = 120; - break; - case COLORSCALE: - aSize.Height() = 200; - break; - case DATABAR: - aSize.Height() = 200; - break; - default: - break; - } - SetSizePixel(aSize); + Window *pChild = GetChild(i); + if(!pChild || !pChild->IsVisible()) + continue; + Point aPos = pChild->GetPosPixel(); + Size aSize = pChild->GetSizePixel(); + nMaxHeight = std::max(aPos.Y() + aSize.Height(), nMaxHeight); } - else + Size aSize = GetSizePixel(); + if(nMaxHeight > 0) { - Size aSize = GetSizePixel(); - aSize.Height() = 40; + aSize.Height() = nMaxHeight + nPad; SetSizePixel(aSize); } } -- 1.7.10.4
>From e493b5f51347c9104c3c3d7ed238ba7919669dbb Mon Sep 17 00:00:00 2001 From: Michael Meeks <michael.me...@suse.com> Date: Fri, 28 Sep 2012 12:43:47 +0100 Subject: [PATCH 2/3] auto-expand the first conditional format in the list. Change-Id: I65280d39b560b4b7eed3e21a6e6c7b02c124f10a --- sc/source/ui/condformat/condformatdlg.cxx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sc/source/ui/condformat/condformatdlg.cxx b/sc/source/ui/condformat/condformatdlg.cxx index 9fe983f..6b877de 100644 --- a/sc/source/ui/condformat/condformatdlg.cxx +++ b/sc/source/ui/condformat/condformatdlg.cxx @@ -979,6 +979,8 @@ ScCondFormatList::ScCondFormatList(Window* pParent, const ResId& rResId, ScDocum { maEntries.push_back(new ScCondFrmtEntry( this, mpDoc, pFormat->GetEntry(nIndex), maPos )); } + if (nCount > 0) + maEntries.begin()->Select(); } RecalcAll(); -- 1.7.10.4
>From 88b1cb2b5379ffdc3f7ee9d623520d42b3d1f292 Mon Sep 17 00:00:00 2001 From: Michael Meeks <michael.me...@suse.com> Date: Fri, 28 Sep 2012 13:40:47 +0100 Subject: [PATCH 3/3] fdo#54940 - make editing relative refs more intuitive to me --- sc/inc/rangelst.hxx | 1 + sc/source/core/tool/rangelst.cxx | 15 +++++++++++++++ sc/source/ui/condformat/condformatmgr.cxx | 5 +++-- sc/source/ui/view/cellsh1.cxx | 2 +- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/sc/inc/rangelst.hxx b/sc/inc/rangelst.hxx index 74bb7be..8bf3bed 100644 --- a/sc/inc/rangelst.hxx +++ b/sc/inc/rangelst.hxx @@ -81,6 +81,7 @@ public: bool Intersects( const ScRange& ) const; bool In( const ScRange& ) const; size_t GetCellCount() const; + ScAddress GetTopLeftCorner() const; ScRange* Remove(size_t nPos); void RemoveAll(); diff --git a/sc/source/core/tool/rangelst.cxx b/sc/source/core/tool/rangelst.cxx index 8214c50..19321b5 100644 --- a/sc/source/core/tool/rangelst.cxx +++ b/sc/source/core/tool/rangelst.cxx @@ -1135,6 +1135,21 @@ void ScRangeList::push_back(ScRange* p) maRanges.push_back(p); } +ScAddress ScRangeList::GetTopLeftCorner() const +{ + if(empty()) + return ScAddress(); + + ScAddress aAddr = maRanges[0]->aStart; + for(size_t i = 1, n = size(); i < n; ++i) + { + if(maRanges[i]->aStart < aAddr) + aAddr = maRanges[i]->aStart; + } + + return aAddr; +} + // === ScRangePairList ======================================================== ScRangePairList::~ScRangePairList() diff --git a/sc/source/ui/condformat/condformatmgr.cxx b/sc/source/ui/condformat/condformatmgr.cxx index aee8b6f..03fbeb3 100644 --- a/sc/source/ui/condformat/condformatmgr.cxx +++ b/sc/source/ui/condformat/condformatmgr.cxx @@ -77,7 +77,7 @@ String ScCondFormatManagerWindow::createEntryString(const ScConditionalFormat& r String aStr; aRange.Format(aStr, SCA_VALID, mpDoc, mpDoc->GetAddressConvention()); aStr += '\t'; - aStr += ScCondFormatHelper::GetExpression(rFormat, mrPos); + aStr += ScCondFormatHelper::GetExpression(rFormat, aRange.GetTopLeftCorner()); return aStr; } @@ -209,7 +209,8 @@ IMPL_LINK_NOARG(ScCondFormatManagerDlg, EditBtnHdl) if(!pFormat) return 0; - ScCondFormatDlg* pDlg = new ScCondFormatDlg(this, mpDoc, pFormat, pFormat->GetRange(), maPos); + ScCondFormatDlg* pDlg = new ScCondFormatDlg(this, mpDoc, pFormat, pFormat->GetRange(), + pFormat->GetRange().GetTopLeftCorner()); if(pDlg->Execute() == RET_OK) { sal_Int32 nKey = pFormat->GetKey(); diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index 14ed86b..c532945 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -2075,7 +2075,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) } else { - pDlg = pFact->CreateScCondFormatDlg( pTabViewShell->GetDialogParent(), pDoc, NULL, aRangeList, aPos, RID_SCDLG_CONDFORMAT ); + pDlg = pFact->CreateScCondFormatDlg( pTabViewShell->GetDialogParent(), pDoc, NULL, aRangeList, aRangeList.GetTopLeftCorner(), RID_SCDLG_CONDFORMAT ); } if(pDlg->Execute() == RET_OK) -- 1.7.10.4
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice