From e6e6b4c89fc7cbc291070613b6ab0fbe5a8efa28 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Sat, 3 Nov 2012 17:05:51 +0100 Subject: [PATCH] [DEV] set the file access back with the new file system mode --- Sources/libetk/etk/os/FSNode.cpp | 7 +- .../libewol/ewol/widget/ListFileSystem.cpp | 83 ++++++++++++++----- 2 files changed, 65 insertions(+), 25 deletions(-) diff --git a/Sources/libetk/etk/os/FSNode.cpp b/Sources/libetk/etk/os/FSNode.cpp index bb883200..08717163 100644 --- a/Sources/libetk/etk/os/FSNode.cpp +++ b/Sources/libetk/etk/os/FSNode.cpp @@ -369,8 +369,9 @@ static void SortElementList(etk::Vector &list) -//#define TK_DBG_MODE TK_VERBOSE -#define TK_DBG_MODE TK_DEBUG +#define TK_DBG_MODE TK_VERBOSE +//#define TK_DBG_MODE TK_DEBUG + void etk::FSNode::PrivateSetName(etk::UString& newName) { if( NULL != m_PointerFile @@ -945,7 +946,7 @@ etk::Vector etk::FSNode::FolderGetSubList(bool showHidenFile, boo // for each element in the drectory... while ((ent = readdir(dir)) != NULL) { etk::UString tmpName(ent->d_name); - TK_DEBUG(" search in folder\"" << tmpName << "\""); + TK_VERBOSE(" search in folder\"" << tmpName << "\""); if( tmpName=="." || tmpName==".." ) { // do nothing ... diff --git a/Sources/libewol/ewol/widget/ListFileSystem.cpp b/Sources/libewol/ewol/widget/ListFileSystem.cpp index 9ae3dd26..43dba1e2 100644 --- a/Sources/libewol/ewol/widget/ListFileSystem.cpp +++ b/Sources/libewol/ewol/widget/ListFileSystem.cpp @@ -35,8 +35,6 @@ extern const char * const ewolEventFSFolderSelect = "ewol-event-file-system-fo extern const char * const ewolEventFSFolderValidate = "ewol-event-file-system-folder-validate"; - - ewol::ListFileSystem::ListFileSystem(void) { m_selectedLine = -1; @@ -166,14 +164,35 @@ bool ewol::ListFileSystem::GetTitle(int32_t colomn, etk::UString &myTitle, draw: myTitle = "title"; return true; }; -uint32_t ewol::ListFileSystem::GetNuberOfRaw(void) { - return m_list.Size(); +uint32_t ewol::ListFileSystem::GetNuberOfRaw(void) +{ + int32_t offset = 0; + if (true == m_showFolder) { + offset = 2; + } + return m_list.Size() + offset; }; -bool ewol::ListFileSystem::GetElement(int32_t colomn, int32_t raw, etk::UString &myTextToWrite, draw::Color &fg, draw::Color &bg) { - if (raw >= 0 && raw < m_list.Size() && NULL != m_list[raw]) { - myTextToWrite = m_list[raw]->GetNameFile(); - } else { - myTextToWrite = "ERROR"; +bool ewol::ListFileSystem::GetElement(int32_t colomn, int32_t raw, etk::UString &myTextToWrite, draw::Color &fg, draw::Color &bg) +{ + int32_t offset = 0; + if (true == m_showFolder) { + offset = 2; + if (raw==0) { + myTextToWrite = "."; + } else if (raw==1) { + myTextToWrite = ".."; + } + } + if( raw-offset >= 0 + && raw-offset < m_list.Size() + && NULL != m_list[raw-offset]) { + /*if (etk::FSN_FILE == m_list[raw-offset]->GetNodeType()) { + myTextToWrite = m_list[raw-offset]->GetRight().GetRight(); + myTextToWrite += " "; + myTextToWrite += m_list[raw-offset]->GetNameFile(); + } else */{ + myTextToWrite = m_list[raw-offset]->GetNameFile(); + } } fg = draw::color::black; if (raw % 2) { @@ -190,27 +209,39 @@ bool ewol::ListFileSystem::GetElement(int32_t colomn, int32_t raw, etk::UString bool ewol::ListFileSystem::OnItemEvent(int32_t IdInput, ewol::eventInputType_te typeEvent, int32_t colomn, int32_t raw, float x, float y) { + int32_t offset = 0; + if (true == m_showFolder) { + offset = 2; + } if (typeEvent == ewol::EVENT_INPUT_TYPE_SINGLE) { EWOL_INFO("Event on List : IdInput=" << IdInput << " colomn=" << colomn << " raw=" << raw ); if (1 == IdInput) { int32_t previousRaw = m_selectedLine; - if (raw > m_list.Size() ) { + if (raw > m_list.Size()+offset ) { m_selectedLine = -1; } else { m_selectedLine = raw; } if (previousRaw != m_selectedLine) { - if( m_selectedLine >=0 - && m_selectedLine < m_list.Size() - && NULL != m_list[m_selectedLine] ) { + if( true == m_showFolder + && m_selectedLine ==0) { + // "." folder + GenerateEventId(ewolEventFSFolderSelect, "."); + } else if ( true == m_showFolder + && m_selectedLine ==1) { + // ".." folder + GenerateEventId(ewolEventFSFolderSelect, ".."); + } else if( m_selectedLine-offset >=0 + && m_selectedLine-offset < m_list.Size() + && NULL != m_list[m_selectedLine-offset] ) { // generate event extern : - switch(m_list[m_selectedLine]->GetNodeType()) + switch(m_list[m_selectedLine-offset]->GetNodeType()) { case etk::FSN_FILE : - GenerateEventId(ewolEventFSFileSelect, m_list[m_selectedLine]->GetNameFile()); + GenerateEventId(ewolEventFSFileSelect, m_list[m_selectedLine-offset]->GetNameFile()); break; case etk::FSN_FOLDER : - GenerateEventId(ewolEventFSFolderSelect, m_list[m_selectedLine]->GetNameFile()); + GenerateEventId(ewolEventFSFolderSelect, m_list[m_selectedLine-offset]->GetNameFile()); break; default: EWOL_ERROR("Can not generate event on an unknow type"); @@ -218,16 +249,24 @@ bool ewol::ListFileSystem::OnItemEvent(int32_t IdInput, ewol::eventInputType_te } } } else { - if( m_selectedLine >=0 - && m_selectedLine < m_list.Size() - && NULL != m_list[m_selectedLine] ) { - switch(m_list[m_selectedLine]->GetNodeType()) + if( true == m_showFolder + && m_selectedLine ==0) { + // "." folder + GenerateEventId(ewolEventFSFolderValidate, "."); + } else if ( true == m_showFolder + && m_selectedLine ==1) { + // ".." folder + GenerateEventId(ewolEventFSFolderValidate, ".."); + } else if( m_selectedLine-offset >=0 + && m_selectedLine-offset < m_list.Size() + && NULL != m_list[m_selectedLine-offset] ) { + switch(m_list[m_selectedLine-offset]->GetNodeType()) { case etk::FSN_FILE : - GenerateEventId(ewolEventFSFileValidate, m_list[m_selectedLine]->GetNameFile()); + GenerateEventId(ewolEventFSFileValidate, m_list[m_selectedLine-offset]->GetNameFile()); break; case etk::FSN_FOLDER : - GenerateEventId(ewolEventFSFolderValidate, m_list[m_selectedLine]->GetNameFile()); + GenerateEventId(ewolEventFSFolderValidate, m_list[m_selectedLine-offset]->GetNameFile()); break; default: EWOL_ERROR("Can not generate event on an unknow type");