summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLionel Elie Mamane <lionel@mamane.lu>2012-03-20 11:01:12 +0100
committerPetr Mladek <pmladek@suse.cz>2012-03-20 12:39:30 +0100
commit7e0be5ebd688a5e8c2faa8f097f104c89139efeb (patch)
tree64759818868d9e864f62be523bf31b662fd7dd71
parentc7524ab32f801910673da5c9c68669ada7c98769 (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.cxx12
-rw-r--r--dbaccess/source/ui/querydesign/SelectionBrowseBox.hxx1
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;