Author: zhangjf
Date: Thu Jun 21 08:19:34 2012
New Revision: 1352444

URL: http://svn.apache.org/viewvc?rev=1352444&view=rev
Log:
#120017#, fix the problem that filter button is not shown in merged cell

Patch by: zhao shao zhi, [email protected]
Found by: Yan Ji,<[email protected]>
Review by: zhangjf

Modified:
    incubator/ooo/trunk/main/sc/source/ui/view/gridwin.cxx
    incubator/ooo/trunk/main/sc/source/ui/view/gridwin2.cxx
    incubator/ooo/trunk/main/sc/source/ui/view/gridwin4.cxx

Modified: incubator/ooo/trunk/main/sc/source/ui/view/gridwin.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sc/source/ui/view/gridwin.cxx?rev=1352444&r1=1352443&r2=1352444&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sc/source/ui/view/gridwin.cxx (original)
+++ incubator/ooo/trunk/main/sc/source/ui/view/gridwin.cxx Thu Jun 21 08:19:34 
2012
@@ -880,6 +880,8 @@ void ScGridWindow::DoAutoFilterMenue( SC
        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;
@@ -1674,12 +1676,23 @@ void ScGridWindow::HandleMouseButtonDown
 
     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 (pAttr->HasAutoFilter())
+               if( pRealPosAttr->HasAutoFilter() )
+               {
+                       SC_MOD()->InputEnterHandler();  
+                       if (DoAutoFilterButton( nRealPosX, nRealPosY, rMEvt))
+                return;
+               }
+               if( pAttr->HasAutoFilter() )
                {
                        SC_MOD()->InputEnterHandler();  //Add for i85305
-                       if (DoAutoFilterButton(nPosX, nPosY, rMEvt))
+                       if (DoAutoFilterButton( nPosX, nPosY, rMEvt))
                 return;
                }
                if (pAttr->HasButton())

Modified: incubator/ooo/trunk/main/sc/source/ui/view/gridwin2.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sc/source/ui/view/gridwin2.cxx?rev=1352444&r1=1352443&r2=1352444&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sc/source/ui/view/gridwin2.cxx (original)
+++ incubator/ooo/trunk/main/sc/source/ui/view/gridwin2.cxx Thu Jun 21 08:19:34 
2012
@@ -137,6 +137,8 @@ bool ScGridWindow::DoAutoFilterButton( S
 
     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.

Modified: incubator/ooo/trunk/main/sc/source/ui/view/gridwin4.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/sc/source/ui/view/gridwin4.cxx?rev=1352444&r1=1352443&r2=1352444&view=diff
==============================================================================
--- incubator/ooo/trunk/main/sc/source/ui/view/gridwin4.cxx (original)
+++ incubator/ooo/trunk/main/sc/source/ui/view/gridwin4.cxx Thu Jun 21 08:19:34 
2012
@@ -1236,7 +1236,9 @@ void ScGridWindow::DrawButtons( SCCOL nX
                        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;
@@ -1288,7 +1290,13 @@ void ScGridWindow::DrawButtons( SCCOL nX
                     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);


Reply via email to