diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2012-03-20 11:01:12 +0100 |
---|---|---|
committer | Petr Mladek <pmladek@suse.cz> | 2012-03-20 12:39:30 +0100 |
commit | 7e0be5ebd688a5e8c2faa8f097f104c89139efeb (patch) | |
tree | 64759818868d9e864f62be523bf31b662fd7dd71 | |
parent | c7524ab32f801910673da5c9c68669ada7c98769 (diff) |
fdo#47370 properly duplicate (invisible) out-of-order sort columns
Keep track of position of previous sorting column and use it to decide whether to duplicate invisible new sort column
Signed-off-by: Petr Mladek <pmladek@suse.cz>
-rw-r--r-- | dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx | 12 | ||||
-rw-r--r-- | dbaccess/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 d13d5f98a7df..177313ccfd1e 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 35b666fbc315..50c0244278ab 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; |