[DEV] try to have a correct display on treeview

This commit is contained in:
Edouard DUPIN 2018-08-29 23:45:57 +02:00
parent 962da14ed1
commit 8b5a8c83dc
2 changed files with 42 additions and 9 deletions

View File

@ -98,21 +98,37 @@ void appl::widget::BufferTree::generateFlatTree() {
// Now we have the root path...
// Need to feed all elements needed.
etk::FSNode nodeRoot = upperParent;
m_tree = etk::TreeNode<appl::TreeElement>::create(TreeElement(etk::FSNode(upperParent).getFileName(), true, true));
etk::Vector<etk::FSNode*> child = nodeRoot.folderGetSubList(false, true, true, false);
m_tree = etk::TreeNode<appl::TreeElement>::create(TreeElement(upperParent, etk::FSNode(upperParent).getFileName(), true, true));
populateNodeIfNeeded(m_tree);
updateFlatTree();
}
void appl::widget::BufferTree::populateNodeIfNeeded(ememory::SharedPtr<etk::TreeNode<appl::TreeElement>> _node) {
if (_node == null) {
return;
}
appl::TreeElement& value = _node->getData();
if (value.m_isFolder == false) {
// nothing to expand...
return;
}
if (_node->haveChild() == true) {
// already populated...
return;
}
etk::Vector<etk::FSNode*> child = etk::FSNode(value.m_path).folderGetSubList(false, true, true, false);
APPL_ERROR(" nbChilds: " << child.size());
for (auto& it: child) {
APPL_ERROR("add element: " << *it);
if (it->getNodeType() == etk::typeNode_folder) {
auto elem = etk::TreeNode<appl::TreeElement>::create(TreeElement(it->getNameFile(), true, false));
auto elem = etk::TreeNode<appl::TreeElement>::create(TreeElement(it->getFileSystemName(), it->getNameFile(), true, false));
m_tree->addChild(elem);
} else {
auto elem = etk::TreeNode<appl::TreeElement>::create(TreeElement(it->getNameFile(), false, false));
auto elem = etk::TreeNode<appl::TreeElement>::create(TreeElement(it->getFileSystemName(), it->getNameFile(), false, false));
m_tree->addChild(elem);
}
// TODO: ETK_FREE(etk::FSNode, it);
}
updateFlatTree();
}
void appl::widget::BufferTree::updateFlatTree() {
@ -300,9 +316,24 @@ bool appl::widget::BufferTree::onItemEvent(const ewol::event::Input& _event, con
if (ewol::widget::TreeView::onItemEvent(_event, _pos, _mousePosition) == true) {
return true;
}
if ( _event.getId() == 1
&& _event.getStatus() == gale::key::status::pressSingle) {
APPL_INFO("Event on List: " << _event << " pos=" << _pos );
auto elem = m_flatTree[_pos.y()];
appl::TreeElement& value = elem->getData();
if (_event.getId() == 1) {
if (_event.getStatus() == gale::key::status::pressDouble) {
if (value.m_isFolder == true) {
populateNodeIfNeeded(m_flatTree[_pos.y()]);
return true;
} else if (value.m_buffer == null) {
// TODO: Open the file...
return true
}
}
if (_event.getStatus() == gale::key::status::pressSingle) {
APPL_INFO("Event on List: " << _event << " pos=" << _pos );
if (value.m_buffer != null) {
// TODO: Display the current buffer...
return true
}
/*
if( _pos.y() >= 0
&& _pos.y() < (int64_t)m_list.size()) {

View File

@ -15,7 +15,8 @@
namespace appl {
class TreeElement {
public:
TreeElement(const etk::String& _nodeName, bool _isFolder = false, bool _isExpand=false):
TreeElement(const etk::String& _path,const etk::String& _nodeName, bool _isFolder = false, bool _isExpand=false):
m_path(_path),
m_nodeName(_nodeName),
m_isFolder(_isFolder),
m_buffer(null),
@ -23,6 +24,7 @@ namespace appl {
m_isExpand(_isExpand) {
}
etk::String m_path;
etk::String m_nodeName; // must be here ==> the buffer is optionnal..
bool m_isFolder;
ememory::SharedPtr<appl::Buffer> m_buffer;