[PATCH 1/2] fdo#47370 properly duplicate (invisible) out-of-order sort columns

Lionel Elie Mamane lionel at mamane.lu
Tue Mar 20 03:01:12 PDT 2012


Keep track of position of previous sorting column and use it to decide whether to duplicate invisible new sort column
---
 .../source/ui/querydesign/SelectionBrowseBox.cxx   |   12 ++++++++++--
 .../source/ui/querydesign/SelectionBrowseBox.hxx   |    1 +
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
index d13d5f9..177313c 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
@@ -68,6 +68,7 @@ const String g_strZero = String::CreateFromAscii("0");
 #define CHECKBOX_SIZE       10
 #define HANDLE_ID            0
 #define HANDLE_COLUMN_WITDH 70
+#define SORT_COLUMN_NONE    0xFFFFFFFF
 
 // -----------------------------------------------------------------------------
 namespace
@@ -113,6 +114,7 @@ OSelectionBrowseBox::OSelectionBrowseBox( Window* pParent )
                                   BROWSER_HIDECURSOR | BROWSER_HLINESFULL | BROWSER_VLINESFULL )
                    ,m_aFunctionStrings(ModuleRes(STR_QUERY_FUNCTIONS))
                    ,m_nVisibleCount(0)
+                   ,m_nLastSortColumn(SORT_COLUMN_NONE)
                    ,m_bOrderByUnRelated(sal_True)
                    ,m_bGroupByUnRelated(sal_True)
                    ,m_bStopTimer(sal_False)
@@ -418,6 +420,7 @@ void OSelectionBrowseBox::ClearAll()
             aIter = getFields().rbegin();
         }
     }
+    m_nLastSortColumn = SORT_COLUMN_NONE;
     SetUpdateMode(sal_True);
 }
 //------------------------------------------------------------------------------
@@ -1873,11 +1876,14 @@ void OSelectionBrowseBox::AddCondition( const OTableFieldDescRef& rInfo, const S
 //------------------------------------------------------------------------------
 void OSelectionBrowseBox::AddOrder( const OTableFieldDescRef& rInfo, const EOrderDir eDir, sal_uInt32 _nCurrentPos)
 {
+    if (_nCurrentPos == 0)
+        m_nLastSortColumn = SORT_COLUMN_NONE;
+
     Reference< XConnection> xConnection = static_cast<OQueryController&>(getDesignView()->getController()).getConnection();
     if(!xConnection.is())
         return;
     DBG_CHKTHIS(OSelectionBrowseBox,NULL);
-    OSL_ENSURE(!rInfo->IsEmpty(),"AddOrder:: OTableFieldDescRef sollte nicht Empty sein!");
+    OSL_ENSURE(!rInfo->IsEmpty(),"AddOrder:: OTableFieldDescRef should not be Empty!");
     OTableFieldDescRef pEntry;
     Reference<XDatabaseMetaData> xMeta = xConnection->getMetaData();
     ::comphelper::UStringMixEqual bCase(xMeta.is() && xMeta->supportsMixedCaseQuotedIdentifiers());
@@ -1896,7 +1902,7 @@ void OSelectionBrowseBox::AddOrder( const OTableFieldDescRef& rInfo, const EOrde
             bCase(aAlias,rInfo->GetAlias()))
         {
             sal_uInt32 nPos = aIter - rFields.begin();
-            bAppend = _nCurrentPos > nPos;
+            bAppend = (m_nLastSortColumn != SORT_COLUMN_NONE) && (nPos <= m_nLastSortColumn);
             if ( bAppend )
                 aIter = rFields.end();
             else
@@ -1904,6 +1910,7 @@ void OSelectionBrowseBox::AddOrder( const OTableFieldDescRef& rInfo, const EOrde
                 if ( !m_bOrderByUnRelated )
                     pEntry->SetVisible(sal_True);
                 pEntry->SetOrderDir( eDir );
+                m_nLastSortColumn = nPos;
             }
             break;
         }
@@ -1914,6 +1921,7 @@ void OSelectionBrowseBox::AddOrder( const OTableFieldDescRef& rInfo, const EOrde
         OTableFieldDescRef pTmp = InsertField(rInfo, BROWSER_INVALIDID, sal_False, sal_False );
         if(pTmp.is())
         {
+            m_nLastSortColumn = pTmp->GetColumnId() - 1;
             if ( !m_bOrderByUnRelated && !bAppend )
                 pTmp->SetVisible(sal_True);
             pTmp->SetOrderDir( eDir );
diff --git a/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx b/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx
index 35b666f..50c0244 100644
--- a/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx
+++ b/dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx
@@ -87,6 +87,7 @@ namespace dbaui
 
         String                              m_aFunctionStrings;
         sal_uInt16                          m_nVisibleCount;                // Anzahl der max sichtbaren Zeilen
+        sal_uInt32                          m_nLastSortColumn;              // index of last (highest) sort column
         sal_Bool                            m_bOrderByUnRelated;
         sal_Bool                            m_bGroupByUnRelated;
         sal_Bool                            m_bStopTimer;
-- 
1.7.7.3


--wac7ysb48OaltWcw
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="0002-fdo-47560-properly-separate-each-new-sorting-column.patch"



More information about the LibreOffice mailing list