246 lines
5.9 KiB
C++
246 lines
5.9 KiB
C++
/**
|
|
*******************************************************************************
|
|
* @file ewol/widget/ListFile.cpp
|
|
* @brief ewol File lister widget system (Sources)
|
|
* @author Edouard DUPIN
|
|
* @date 12/07/2012
|
|
* @par Project
|
|
* ewol
|
|
*
|
|
* @par Copyright
|
|
* Copyright 2011 Edouard DUPIN, all right reserved
|
|
*
|
|
* This software is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY.
|
|
*
|
|
* Licence summary :
|
|
* You can modify and redistribute the sources code and binaries.
|
|
* You can send me the bug-fix
|
|
*
|
|
* Term of the licence in in the file licence.txt.
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
|
|
#include <ewol/widget/ListFileSystem.h>
|
|
#include <etk/tool.h>
|
|
|
|
|
|
#undef __class__
|
|
#define __class__ "ListFileSystem"
|
|
|
|
extern const char * const ewolEventFSFileSelect = "ewol-event-file-system-file-select";
|
|
extern const char * const ewolEventFSFileValidate = "ewol-event-file-system-file-validate";
|
|
extern const char * const ewolEventFSFolderSelect = "ewol-event-file-system-folder-select";
|
|
extern const char * const ewolEventFSFolderValidate = "ewol-event-file-system-folder-validate";
|
|
|
|
|
|
|
|
|
|
ewol::ListFileSystem::ListFileSystem(void)
|
|
{
|
|
m_selectedLine = -1;
|
|
m_showFile = true;
|
|
m_showTemporaryFile = true;
|
|
m_showHidden = true;
|
|
m_showFolder = true;
|
|
#if defined(__TARGET_OS__Windows)
|
|
m_folder = "c:/";
|
|
#else
|
|
m_folder = "/";
|
|
#endif
|
|
AddEventId(ewolEventFSFileSelect);
|
|
AddEventId(ewolEventFSFileValidate);
|
|
AddEventId(ewolEventFSFolderSelect);
|
|
AddEventId(ewolEventFSFolderValidate);
|
|
SetMouseLimit(1);
|
|
};
|
|
|
|
ewol::ListFileSystem::~ListFileSystem(void)
|
|
{
|
|
for (int32_t iii=0; iii<m_list.Size(); iii++) {
|
|
if (NULL != m_list[iii]) {
|
|
delete(m_list[iii]);
|
|
m_list[iii] = NULL;
|
|
}
|
|
}
|
|
};
|
|
|
|
draw::Color ewol::ListFileSystem::GetBasicBG(void) {
|
|
draw::Color bg(0x00000010);
|
|
return bg;
|
|
}
|
|
|
|
|
|
void ewol::ListFileSystem::RegenerateView(void)
|
|
{
|
|
// clean the list of files :
|
|
for (int32_t iii=0; iii<m_list.Size(); iii++) {
|
|
if (NULL != m_list[iii]) {
|
|
delete(m_list[iii]);
|
|
m_list[iii] = NULL;
|
|
}
|
|
}
|
|
|
|
m_selectedLine = -1;
|
|
m_list.Clear();
|
|
m_originScrooled.x = 0;
|
|
m_originScrooled.y = 0;
|
|
etk::FSNode tmpFolder(m_folder);
|
|
// Get the new list :
|
|
m_list = tmpFolder.FolderGetSubList(m_showHidden, m_showFolder, m_showFile, m_showTemporaryFile);
|
|
// request a redraw ...
|
|
MarkToRedraw();
|
|
}
|
|
|
|
void ewol::ListFileSystem::SetShowHiddenFiles(bool state)
|
|
{
|
|
m_showHidden = state;
|
|
RegenerateView();
|
|
}
|
|
|
|
void ewol::ListFileSystem::SetShowTemporaryFiles(bool state)
|
|
{
|
|
m_showTemporaryFile = state;
|
|
RegenerateView();
|
|
}
|
|
|
|
void ewol::ListFileSystem::SetShowFiles(bool state)
|
|
{
|
|
m_showFile = state;
|
|
RegenerateView();
|
|
}
|
|
|
|
void ewol::ListFileSystem::SetShowFolder(bool state)
|
|
{
|
|
m_showFolder = state;
|
|
RegenerateView();
|
|
}
|
|
|
|
|
|
void ewol::ListFileSystem::SetFolder(etk::UString newFolder)
|
|
{
|
|
m_folder = newFolder;
|
|
RegenerateView();
|
|
}
|
|
|
|
|
|
etk::UString ewol::ListFileSystem::GetFolder(void)
|
|
{
|
|
return m_folder;
|
|
}
|
|
|
|
|
|
etk::UString ewol::ListFileSystem::GetSelect(void)
|
|
{
|
|
etk::UString tmpVal = "";
|
|
if (m_selectedLine >= 0) {
|
|
if (m_list[m_selectedLine] != NULL) {
|
|
tmpVal = m_list[m_selectedLine]->GetNameFile();
|
|
}
|
|
}
|
|
return tmpVal;
|
|
}
|
|
|
|
// select the specific file
|
|
void ewol::ListFileSystem::SetSelect( etk::UString data) {
|
|
// remove selected line
|
|
m_selectedLine = -1;
|
|
// search the coresponding file :
|
|
for (int32_t iii=0; iii<m_list.Size(); iii++) {
|
|
if (NULL!=m_list[iii]) {
|
|
if (m_list[iii]->GetNameFile() == data) {
|
|
// we find the line :
|
|
m_selectedLine = iii;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
MarkToRedraw();
|
|
}
|
|
|
|
uint32_t ewol::ListFileSystem::GetNuberOfColomn(void) {
|
|
return 1;
|
|
};
|
|
bool ewol::ListFileSystem::GetTitle(int32_t colomn, etk::UString &myTitle, draw::Color &fg, draw::Color &bg) {
|
|
myTitle = "title";
|
|
return true;
|
|
};
|
|
uint32_t ewol::ListFileSystem::GetNuberOfRaw(void) {
|
|
return m_list.Size();
|
|
};
|
|
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";
|
|
}
|
|
fg = draw::color::black;
|
|
if (raw % 2) {
|
|
bg = 0xFFFFFF00;
|
|
} else {
|
|
bg = 0xBFBFBFFF;
|
|
}
|
|
if (m_selectedLine == raw) {
|
|
bg = 0x8F8FFFFF;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
|
|
bool ewol::ListFileSystem::OnItemEvent(int32_t IdInput, ewol::eventInputType_te typeEvent, int32_t colomn, int32_t raw, float x, float y)
|
|
{
|
|
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() ) {
|
|
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] ) {
|
|
// generate event extern :
|
|
switch(m_list[m_selectedLine]->GetNodeType())
|
|
{
|
|
case etk::FSN_FILE :
|
|
GenerateEventId(ewolEventFSFileSelect, m_list[m_selectedLine]->GetNameFile());
|
|
break;
|
|
case etk::FSN_FOLDER :
|
|
GenerateEventId(ewolEventFSFolderSelect, m_list[m_selectedLine]->GetNameFile());
|
|
break;
|
|
default:
|
|
EWOL_ERROR("Can not generate event on an unknow type");
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
if( m_selectedLine >=0
|
|
&& m_selectedLine < m_list.Size()
|
|
&& NULL != m_list[m_selectedLine] ) {
|
|
switch(m_list[m_selectedLine]->GetNodeType())
|
|
{
|
|
case etk::FSN_FILE :
|
|
GenerateEventId(ewolEventFSFileValidate, m_list[m_selectedLine]->GetNameFile());
|
|
break;
|
|
case etk::FSN_FOLDER :
|
|
GenerateEventId(ewolEventFSFolderValidate, m_list[m_selectedLine]->GetNameFile());
|
|
break;
|
|
default:
|
|
EWOL_ERROR("Can not generate event on an unknow type");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
// need to regenerate the display of the list :
|
|
MarkToRedraw();
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|