[Libreoffice-commits] core.git: sc/source

Jian Fang Zhang zhangjf at apache.org
Mon Mar 11 21:56:11 PDT 2013


 sc/source/ui/view/gridwin.cxx  |   13 +++++++++++++
 sc/source/ui/view/gridwin2.cxx |    2 ++
 sc/source/ui/view/gridwin4.cxx |   12 ++++++++++--
 3 files changed, 25 insertions(+), 2 deletions(-)

New commits:
commit aaab3a79dfd762a64fa4c1d19dd29ae46c0b9dd0
Author: Jian Fang Zhang <zhangjf at apache.org>
Date:   Thu Jun 21 07:19:34 2012 +0000

    Resolves: #i120017, filter button is not shown in merged cell
    
    Patch by: zhao shao zhi, aoo.zhaoshzh at gmail.com
    Found by: Yan Ji,<yanji.yj at gmail.com>
    Review by: zhangjf
    (cherry picked from commit bcf01fd794ec169aaf2a3f8b86f986ec60e5beb8)
    
    Signed-off-by: Fridrich Å trba <fridrich.strba at bluewin.ch>
    
    Conflicts:
    	sc/source/ui/view/gridwin.cxx
    
    Change-Id: Ie8a529c697979cf75c303bddcaddd2776f5b8047

diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 4663fa4..1ce833a 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -936,6 +936,8 @@ void ScGridWindow::DoScenarioMenu( const ScRange& rScenRange )
     long nSizeY  = 0;
     long nHeight = 0;
     pViewData->GetMergeSizePixel( nCol, nRow, nSizeX, nSizeY );
+    // The button height should not use the merged cell height, should still use single row height
+    nSizeY = pViewData->ToPixel(pDoc->GetRowHeight(nRow, nTab), pViewData->GetPPTY());
     Point aPos = pViewData->GetScrPos( nCol, nRow, eWhich );
     if ( bLayoutRTL )
         aPos.X() -= nSizeX;
@@ -1820,8 +1822,19 @@ void ScGridWindow::HandleMouseButtonDown( const MouseEvent& rMEvt, MouseEventSta
 
     if ( !bDouble && !bFormulaMode && rMEvt.IsLeft() )
     {
+        SCsCOL nRealPosX;
+        SCsROW nRealPosY;
+        pViewData->GetPosFromPixel( aPos.X(), aPos.Y(), eWhich, nRealPosX, nRealPosY, false );//the real row/col
+        ScMergeFlagAttr* pRealPosAttr = (ScMergeFlagAttr*)
+                                    pDoc->GetAttr( nRealPosX, nRealPosY, nTab, ATTR_MERGE_FLAG );
         ScMergeFlagAttr* pAttr = (ScMergeFlagAttr*)
                                     pDoc->GetAttr( nPosX, nPosY, nTab, ATTR_MERGE_FLAG );
+        if( pRealPosAttr->HasAutoFilter() )
+        {
+            SC_MOD()->InputEnterHandler();
+            if (DoAutoFilterButton( nRealPosX, nRealPosY, rMEvt))
+                return;
+        }
         if (pAttr->HasAutoFilter())
         {
             if (DoAutoFilterButton(nPosX, nPosY, rMEvt))
diff --git a/sc/source/ui/view/gridwin2.cxx b/sc/source/ui/view/gridwin2.cxx
index 94ed3e7..79f2f08 100644
--- a/sc/source/ui/view/gridwin2.cxx
+++ b/sc/source/ui/view/gridwin2.cxx
@@ -125,6 +125,8 @@ bool ScGridWindow::DoAutoFilterButton( SCCOL nCol, SCROW nRow, const MouseEvent&
 
     long nSizeX, nSizeY;
     pViewData->GetMergeSizePixel( nCol, nRow, nSizeX, nSizeY );
+    // The button height should not use the merged cell height, should still use single row height
+    nSizeY = pViewData->ToPixel(pDoc->GetRowHeight(nRow, nTab), pViewData->GetPPTY());
     Size aScrSize(nSizeX-1, nSizeY-1);
 
     // Check if the mouse cursor is clicking on the popup arrow box.
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index f2b3ba1..1103e5c 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -1144,7 +1144,9 @@ void ScGridWindow::DrawButtons( SCCOL nX1, SCCOL nX2, ScTableInfo& rTabInfo, Out
             for (nCol=nX1; nCol<=nX2; nCol++)
             {
                 CellInfo* pInfo = &pThisRowInfo->pCellInfo[nCol+1];
-                if ( pInfo->bAutoFilter && !pInfo->bHOverlapped && !pInfo->bVOverlapped )
+                //if several columns merged on a row, there should be only one auto button at the end of the columns.
+                //if several rows merged on a column, the button may be in the middle, so "!pInfo->bVOverlapped" should not be used
+                if ( pInfo->bAutoFilter && !pInfo->bHOverlapped )
                 {
                     if (!pQueryParam)
                         pQueryParam = new ScQueryParam;
@@ -1197,7 +1199,13 @@ void ScGridWindow::DrawButtons( SCCOL nX1, SCCOL nX2, ScTableInfo& rTabInfo, Out
                     bool bArrowState = bSimpleQuery && bColumnFound;
                     long    nSizeX;
                     long    nSizeY;
-                    pViewData->GetMergeSizePixel( nCol, nRow, nSizeX, nSizeY );
+                    SCCOL nStartCol= nCol;
+                    SCROW nStartRow = nRow;
+                    //if address(nCol,nRow) is not the start pos of the merge area, the value of the nSizeX will be incorrect, it will be the length of the cell.
+                    //should first get the start pos of the merge area, then get the nSizeX through the start pos.
+                    pDoc->ExtendOverlapped(nStartCol, nStartRow,nCol, nRow, nTab);//get nStartCol,nStartRow
+                    pViewData->GetMergeSizePixel( nStartCol, nStartRow, nSizeX, nSizeY );//get nSizeX
+                    nSizeY = pViewData->ToPixel(pDoc->GetRowHeight(nRow, nTab), pViewData->GetPPTY());
                     Point aScrPos = pViewData->GetScrPos( nCol, nRow, eWhich );
 
                     aCellBtn.setBoundingBox(aScrPos, Size(nSizeX-1, nSizeY-1), bLayoutRTL);


More information about the Libreoffice-commits mailing list