Correction of the sorting list in the file Chooser and compare unicode String with no A < a < B < b ...

This commit is contained in:
Edouard Dupin 2012-02-16 10:07:47 +01:00
parent be4970ecc6
commit ed7eff92f8
5 changed files with 109 additions and 20 deletions

View File

@ -30,6 +30,7 @@
#include <typeinfo>
#include <string.h>
#include <pthread.h>
#include <etk/Types.h>
#if defined(__PLATFORM__Android)
# include <android/log.h>
@ -73,6 +74,13 @@ namespace etk{
strncat(m_tmpChar, tmp, MAX_LOG_SIZE);
return *this;
}
/*
CCout& operator << (uniChar_t t) {
snprintf(tmp, MAX_LOG_SIZE_TMP, "%c", t);
strncat(m_tmpChar, tmp, MAX_LOG_SIZE);
return *this;
}
*/
CCout& operator << (long t) {
snprintf(tmp, MAX_LOG_SIZE_TMP, "%ld", t);
strncat(m_tmpChar, tmp, MAX_LOG_SIZE);

View File

@ -315,13 +315,36 @@ const etk::UString& etk::UString::operator= (etk::VectorType<uniChar_t> inputDat
}
uniChar_t changeOrder(uniChar_t elemA)
{
if (elemA >= 'A' && elemA <= 'Z') {
return (elemA - (uniChar_t)'A')*2 + 'A';
}
if (elemA >= 'a' && elemA <= 'z') {
return (elemA - (uniChar_t)'a')*2 + 'A' + 1;
}
if (elemA >= ':' && elemA <= '@') {
return elemA + 52;
}
if (elemA >= '[' && elemA <= '`') {
return elemA +26;
}
return elemA;
}
bool etk::UString::operator> (const etk::UString& etkS) const
{
if( this != &etkS ) {
for (int32_t iii=0; iii < m_data.Size() && iii < etkS.m_data.Size(); iii++) {
if (m_data[iii] > etkS.m_data[iii] ) {
return true;
//TK_DEBUG(" compare : '" << (char)m_data[iii] << "'>'" << (char)etkS.m_data[iii] << "' ==> " << changeOrder(m_data[iii]) << ">" << changeOrder(etkS.m_data[iii]) << "");
uniChar_t elemA = changeOrder(m_data[iii]);
uniChar_t elemB = changeOrder(etkS.m_data[iii]);
if (elemA != elemB) {
if (elemA > elemB) {
return true;
}
return false;
}
}
if (m_data.Size() > etkS.m_data.Size()) {
@ -331,6 +354,66 @@ bool etk::UString::operator> (const etk::UString& etkS) const
return false;
}
bool etk::UString::operator>= (const etk::UString& etkS) const
{
if( this != &etkS ) {
for (int32_t iii=0; iii < m_data.Size() && iii < etkS.m_data.Size(); iii++) {
uniChar_t elemA = changeOrder(m_data[iii]);
uniChar_t elemB = changeOrder(etkS.m_data[iii]);
if (elemA != elemB) {
if (elemA > elemB) {
return true;
}
return false;
}
}
if (m_data.Size() >= etkS.m_data.Size()) {
return true;
}
}
return false;
}
bool etk::UString::operator< (const etk::UString& etkS) const
{
if( this != &etkS ) {
for (int32_t iii=0; iii < m_data.Size() && iii < etkS.m_data.Size(); iii++) {
uniChar_t elemA = changeOrder(m_data[iii]);
uniChar_t elemB = changeOrder(etkS.m_data[iii]);
if (elemA != elemB) {
if (elemA < elemB) {
return true;
}
return false;
}
}
if (m_data.Size() < etkS.m_data.Size()) {
return true;
}
}
return false;
}
bool etk::UString::operator<= (const etk::UString& etkS) const
{
if( this != &etkS ) {
for (int32_t iii=0; iii < m_data.Size() && iii < etkS.m_data.Size(); iii++) {
uniChar_t elemA = changeOrder(m_data[iii]);
uniChar_t elemB = changeOrder(etkS.m_data[iii]);
if (elemA != elemB) {
if (elemA < elemB) {
return true;
}
return false;
}
}
if (m_data.Size() <= etkS.m_data.Size()) {
return true;
}
}
return false;
}
/**
* @brief

View File

@ -67,9 +67,12 @@ namespace etk
bool operator!= (const uniChar_t * inputData) const;
bool operator!= (const char * inputData) const;
/*****************************************************
* > operator
* > < >= <= operator
*****************************************************/
bool operator> (const etk::UString& etkS) const;
bool operator> (const etk::UString& etkS) const;
bool operator>= (const etk::UString& etkS) const;
bool operator< (const etk::UString& etkS) const;
bool operator<= (const etk::UString& etkS) const;
/*****************************************************
* += operator
*****************************************************/

View File

@ -152,9 +152,10 @@ void ewol::Button::OnRegenerateDisplay(void)
ewol::OObject2DColored * tmpOObjects = new ewol::OObject2DColored;
tmpOObjects->SetColor(m_textColorBg);
tmpOObjects->Rectangle( tmpOriginX, tmpOriginY, tmpSizeX, tmpSizeY);
/*
tmpOObjects->SetColor(m_textColorFg);
tmpOObjects->RectangleBorder( tmpOriginX, tmpOriginY, tmpSizeX, tmpSizeY, borderSize);
*/
AddOObject(tmpOObjects, "BouttonDecoration");
AddOObject(tmpText, "BouttonText");

View File

@ -52,8 +52,9 @@ void SortList(etk::VectorType<etk::UString *> &m_listDirectory)
int32_t findPos = 0;
for(int32_t jjj=0; jjj<m_listDirectory.Size(); jjj++) {
//EWOL_DEBUG("compare : \""<<*tmpList[iii] << "\" and \"" << *m_listDirectory[jjj] << "\"");
if (*tmpList[iii] > *m_listDirectory[jjj]) {
findPos = jjj;
findPos = jjj+1;
}
}
//EWOL_DEBUG("position="<<findPos);
@ -86,6 +87,10 @@ class FileChooserFolderList : public ewol::List
{
etk::UString* tmpEmement = new etk::UString(element);
m_listDirectory.PushBack(tmpEmement);
}
void EndGenerating(void)
{
SortList(m_listDirectory);
MarkToReedraw();
}
@ -222,21 +227,9 @@ class FileChooserFileList : public ewol::List
etk::UString* tmpEmement = new etk::UString(element);
m_listFile.PushBack(tmpEmement);
}
void endGenerating(void)
void EndGenerating(void)
{
/*
EWOL_DEBUG("list before");
for (int32_t iii=0; iii<m_listFile.Size(); iii++) {
EWOL_DEBUG(" " << *m_listFile[iii] );
}
*/
SortList(m_listFile);
/*
EWOL_DEBUG("list after");
for (int32_t iii=0; iii<m_listFile.Size(); iii++) {
EWOL_DEBUG(" " << *m_listFile[iii] );
}
*/
MarkToReedraw();
}
void ClearElements(void) {
@ -616,7 +609,8 @@ void ewol::FileChooser::UpdateCurrentFolder(void)
} else {
EWOL_ERROR("could not open directory : \"" << m_folder << "\"");
}
myListFile->endGenerating();
myListFile->EndGenerating();
myListFolder->EndGenerating();
MarkToReedraw();
}