Kaydet (Commit) ef6ddb36 authored tarafından Sahas's avatar Sahas Kaydeden (comit) Eike Rathke

tdf#79983 - Fix to make calc sort lists case sensitive

Change-Id: I9d4aec8ccb395f8bf59f08d0f5ed461e99c9ea64
Reviewed-on: https://gerrit.libreoffice.org/19433Reviewed-by: 's avatarEike Rathke <erack@redhat.com>
Tested-by: 's avatarEike Rathke <erack@redhat.com>
üst 8299b8b8
......@@ -51,7 +51,7 @@ public:
const OUString& GetString() const { return aStr; }
void SetString(const OUString& rStr);
size_t GetSubCount() const;
bool GetSubIndex(const OUString& rSubStr, sal_uInt16& rIndex) const;
bool GetSubIndex(const OUString& rSubStr, sal_uInt16& rIndex, bool& bMatchCase) const;
OUString GetSubStr(sal_uInt16 nIndex) const;
sal_Int32 Compare(const OUString& rSubStr1, const OUString& rSubStr2) const;
sal_Int32 ICompare(const OUString& rSubStr1, const OUString& rSubStr2) const;
......
......@@ -362,13 +362,14 @@ void ScTable::FillAnalyse( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
rListData = const_cast<ScUserListData*>(ScGlobal::GetUserList()->GetData(aStr));
if (rListData)
{
(void)rListData->GetSubIndex(aStr, rListIndex);
bool bMatchCase = false;
(void)rListData->GetSubIndex(aStr, rListIndex, bMatchCase);
nCol = sal::static_int_cast<SCCOL>( nCol + nAddX );
nRow = sal::static_int_cast<SCROW>( nRow + nAddY );
for (sal_uInt16 i=1; i<nCount && rListData; i++)
{
(void)GetString(nCol, nRow, aStr);
if (!rListData->GetSubIndex(aStr, rListIndex))
if (!rListData->GetSubIndex(aStr, rListIndex, bMatchCase))
rListData = NULL;
nCol = sal::static_int_cast<SCCOL>( nCol + nAddX );
nRow = sal::static_int_cast<SCROW>( nRow + nAddY );
......
......@@ -111,7 +111,7 @@ size_t ScUserListData::GetSubCount() const
return maSubStrings.size();
}
bool ScUserListData::GetSubIndex(const OUString& rSubStr, sal_uInt16& rIndex) const
bool ScUserListData::GetSubIndex(const OUString& rSubStr, sal_uInt16& rIndex, bool& bMatchCase) const
{
// First, case sensitive search.
SubStringsType::const_iterator itr = ::std::find_if(
......@@ -119,6 +119,7 @@ bool ScUserListData::GetSubIndex(const OUString& rSubStr, sal_uInt16& rIndex) co
if (itr != maSubStrings.end())
{
rIndex = ::std::distance(maSubStrings.begin(), itr);
bMatchCase = true;
return true;
}
......@@ -130,8 +131,10 @@ bool ScUserListData::GetSubIndex(const OUString& rSubStr, sal_uInt16& rIndex) co
if (itr != maSubStrings.end())
{
rIndex = ::std::distance(maSubStrings.begin(), itr);
bMatchCase = false;
return true;
}
bMatchCase = false;
return false;
}
......@@ -146,8 +149,9 @@ OUString ScUserListData::GetSubStr(sal_uInt16 nIndex) const
sal_Int32 ScUserListData::Compare(const OUString& rSubStr1, const OUString& rSubStr2) const
{
sal_uInt16 nIndex1, nIndex2;
bool bFound1 = GetSubIndex(rSubStr1, nIndex1);
bool bFound2 = GetSubIndex(rSubStr2, nIndex2);
bool bMatchCase;
bool bFound1 = GetSubIndex(rSubStr1, nIndex1, bMatchCase);
bool bFound2 = GetSubIndex(rSubStr2, nIndex2, bMatchCase);
if (bFound1)
{
if (bFound2)
......@@ -171,8 +175,9 @@ sal_Int32 ScUserListData::Compare(const OUString& rSubStr1, const OUString& rSub
sal_Int32 ScUserListData::ICompare(const OUString& rSubStr1, const OUString& rSubStr2) const
{
sal_uInt16 nIndex1, nIndex2;
bool bFound1 = GetSubIndex(rSubStr1, nIndex1);
bool bFound2 = GetSubIndex(rSubStr2, nIndex2);
bool bMatchCase;
bool bFound1 = GetSubIndex(rSubStr1, nIndex1, bMatchCase);
bool bFound2 = GetSubIndex(rSubStr2, nIndex2, bMatchCase);
if (bFound1)
{
if (bFound2)
......@@ -269,14 +274,26 @@ ScUserList::ScUserList(const ScUserList& r) :
const ScUserListData* ScUserList::GetData(const OUString& rSubStr) const
{
std::vector<DataType::const_iterator> matchData;
DataType::const_iterator itr = maData.begin(), itrEnd = maData.end();
sal_uInt16 nIndex;
bool bMatchCase = false;
for (; itr != itrEnd; ++itr)
{
sal_uInt16 nIndex;
if (itr->GetSubIndex(rSubStr, nIndex))
return &(*itr);
if (itr->GetSubIndex(rSubStr, nIndex, bMatchCase))
{
if (bMatchCase)
return &(*itr);
matchData.push_back(itr);
}
}
if (matchData.empty())
{
return NULL;
}
return NULL;
return &(**matchData.begin());
}
const ScUserListData& ScUserList::operator[](size_t nIndex) const
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment