[DEV] better treeview with select buffer
This commit is contained in:
parent
e575ec6116
commit
1d65639191
@ -122,7 +122,7 @@ appl::Buffer::Buffer() :
|
|||||||
m_highlight(null) {
|
m_highlight(null) {
|
||||||
addObjectType("appl::Buffer");
|
addObjectType("appl::Buffer");
|
||||||
static int32_t bufferBaseId = 0;
|
static int32_t bufferBaseId = 0;
|
||||||
m_fileName = "REL:No Name " + etk::toString(bufferBaseId);
|
m_fileName = etk::FSNode("REL:No Name " + etk::toString(bufferBaseId)).getFileSystemName();
|
||||||
bufferBaseId++;
|
bufferBaseId++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ bool appl::Buffer::loadFile(const etk::String& _name) {
|
|||||||
etk::FSNode file(_name);
|
etk::FSNode file(_name);
|
||||||
etk::String name = file.getName();
|
etk::String name = file.getName();
|
||||||
APPL_INFO("Load file : '" << name << "'");
|
APPL_INFO("Load file : '" << name << "'");
|
||||||
m_fileName = name;
|
m_fileName = file.getFileSystemName();
|
||||||
m_hasFileName = true;
|
m_hasFileName = true;
|
||||||
m_isModify = true;
|
m_isModify = true;
|
||||||
m_cursorPos = 0;
|
m_cursorPos = 0;
|
||||||
@ -158,10 +158,10 @@ void appl::Buffer::setFileName(const etk::String& _name) {
|
|||||||
APPL_DEBUG("Convert filename :'" << _name << "'");
|
APPL_DEBUG("Convert filename :'" << _name << "'");
|
||||||
etk::FSNode file(_name);
|
etk::FSNode file(_name);
|
||||||
etk::String name = file.getName();
|
etk::String name = file.getName();
|
||||||
if (m_fileName == name) {
|
if (m_fileName == file.getFileSystemName()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_fileName = name;
|
m_fileName = file.getFileSystemName();
|
||||||
m_hasFileName = true;
|
m_hasFileName = true;
|
||||||
signalChangeName.emit();
|
signalChangeName.emit();
|
||||||
setModification(true);
|
setModification(true);
|
||||||
|
@ -75,30 +75,11 @@ static etk::String getCommonPathPart(const etk::String& _left, const etk::String
|
|||||||
|
|
||||||
void appl::widget::BufferTree::generateFlatTree() {
|
void appl::widget::BufferTree::generateFlatTree() {
|
||||||
// Brut Force Mode...
|
// Brut Force Mode...
|
||||||
etk::String upperParent = "";
|
etk::String upperParent = getRootPath();
|
||||||
etk::Vector<appl::BufferShared> tmpNewBuffer;
|
|
||||||
for (auto& it : *m_bufferManager) {
|
|
||||||
if (it == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (it->hasFileName() == false) {
|
|
||||||
tmpNewBuffer.pushBack(it);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
etk::FSNode nodeName = it->getFileName();
|
|
||||||
if (upperParent == "") {
|
|
||||||
upperParent = nodeName.getNameFolder();
|
|
||||||
APPL_ERROR("init root: " << nodeName.getFileSystemName() << " root=" << upperParent);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
upperParent = getCommonPathPart(upperParent, nodeName.getNameFolder());
|
|
||||||
APPL_ERROR("Update: " << nodeName.getFileSystemName() << " " << nodeName.getNameFolder() << " root=" << upperParent);
|
|
||||||
}
|
|
||||||
APPL_ERROR("update tree: " << upperParent);
|
|
||||||
// Now we have the root path...
|
// Now we have the root path...
|
||||||
// Need to feed all elements needed.
|
// Need to feed all elements needed.
|
||||||
etk::FSNode nodeRoot = upperParent;
|
etk::FSNode nodeRoot = upperParent;
|
||||||
m_tree = etk::TreeNode<appl::TreeElement>::create(TreeElement(upperParent, etk::FSNode(upperParent).getFileName(), true, true));
|
m_tree = etk::TreeNode<appl::TreeElement>::create(TreeElement(nodeRoot, true));
|
||||||
populateNodeIfNeeded(m_tree);
|
populateNodeIfNeeded(m_tree);
|
||||||
updateFlatTree();
|
updateFlatTree();
|
||||||
}
|
}
|
||||||
@ -117,20 +98,39 @@ void appl::widget::BufferTree::populateNodeIfNeeded(ememory::SharedPtr<etk::Tree
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
etk::Vector<etk::FSNode*> child = etk::FSNode(value.m_path).folderGetSubList(false, true, true, false);
|
etk::Vector<etk::FSNode*> child = etk::FSNode(value.m_path).folderGetSubList(false, true, true, false);
|
||||||
APPL_ERROR(" nbChilds: " << child.size());
|
APPL_ERROR(" nbChilds: " << child.size() << " for path: " << value.m_path);
|
||||||
for (auto& it: child) {
|
for (auto& it: child) {
|
||||||
APPL_ERROR("add element: " << *it);
|
APPL_ERROR("add element: " << *it);
|
||||||
if (it->getNodeType() == etk::typeNode_folder) {
|
auto elem = etk::TreeNode<appl::TreeElement>::create(TreeElement(*it, false));
|
||||||
auto elem = etk::TreeNode<appl::TreeElement>::create(TreeElement(it->getFileSystemName(), it->getNameFile(), true, false));
|
_node->addChild(elem);
|
||||||
m_tree->addChild(elem);
|
|
||||||
} else {
|
|
||||||
auto elem = etk::TreeNode<appl::TreeElement>::create(TreeElement(it->getFileSystemName(), it->getNameFile(), false, false));
|
|
||||||
m_tree->addChild(elem);
|
|
||||||
}
|
|
||||||
// TODO: ETK_FREE(etk::FSNode, it);
|
// TODO: ETK_FREE(etk::FSNode, it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void appl::widget::BufferTree::goUpper() {
|
||||||
|
APPL_ERROR("Go upper ...");
|
||||||
|
if (m_tree == null) {
|
||||||
|
generateFlatTree();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// generate new futur root node ...
|
||||||
|
etk::FSNode node = etk::FSNode(m_tree->getData().m_path).folderGetParent();
|
||||||
|
auto treeElement = etk::TreeNode<appl::TreeElement>::create(TreeElement(node, true));
|
||||||
|
// Add all sub-items
|
||||||
|
populateNodeIfNeeded(treeElement);
|
||||||
|
// find old root node in the sublist:
|
||||||
|
for (auto& it: treeElement->getChilds()) {
|
||||||
|
if (it->getData().m_nodeName == m_tree->getData().m_nodeName) {
|
||||||
|
it = m_tree;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// set new root node:
|
||||||
|
m_tree = treeElement;
|
||||||
|
// update display:
|
||||||
|
updateFlatTree();
|
||||||
|
}
|
||||||
|
|
||||||
void appl::widget::BufferTree::updateFlatTree() {
|
void appl::widget::BufferTree::updateFlatTree() {
|
||||||
m_flatTree.setRoot(m_tree,
|
m_flatTree.setRoot(m_tree,
|
||||||
[&](const TreeElement& _value){
|
[&](const TreeElement& _value){
|
||||||
@ -163,8 +163,58 @@ void appl::widget::BufferTree::removeAllElement() {
|
|||||||
//m_list.clear();
|
//m_list.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
etk::String appl::widget::BufferTree::getRootPath() {
|
||||||
|
etk::String upperParent = "";
|
||||||
|
etk::Vector<appl::BufferShared> tmpNewBuffer;
|
||||||
|
for (auto& it : *m_bufferManager) {
|
||||||
|
if (it == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (it->hasFileName() == false) {
|
||||||
|
tmpNewBuffer.pushBack(it);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
etk::FSNode nodeName = it->getFileName();
|
||||||
|
if (upperParent == "") {
|
||||||
|
upperParent = nodeName.getNameFolder();
|
||||||
|
APPL_ERROR("init root: " << nodeName.getFileSystemName() << " root=" << upperParent);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
upperParent = getCommonPathPart(upperParent, nodeName.getNameFolder());
|
||||||
|
APPL_ERROR("Update: " << nodeName.getFileSystemName() << " " << nodeName.getNameFolder() << " root=" << upperParent);
|
||||||
|
}
|
||||||
|
if (upperParent == "") {
|
||||||
|
APPL_ERROR("Nothing find ==> get home path...");
|
||||||
|
upperParent = etk::FSNodeGetHomePath();
|
||||||
|
}
|
||||||
|
APPL_ERROR("update tree: " << upperParent);
|
||||||
|
return upperParent;
|
||||||
|
}
|
||||||
|
|
||||||
void appl::widget::BufferTree::onNewBuffer(const ememory::SharedPtr<appl::Buffer>& _buffer) {
|
void appl::widget::BufferTree::onNewBuffer(const ememory::SharedPtr<appl::Buffer>& _buffer) {
|
||||||
generateFlatTree();
|
APPL_ERROR("New Buffer open: '" << _buffer->getFileName() << "'");
|
||||||
|
if (m_tree == null) {
|
||||||
|
generateFlatTree();
|
||||||
|
} else {
|
||||||
|
etk::String rootPath = getRootPath();
|
||||||
|
while (rootPath != m_tree->getData().m_path ) {
|
||||||
|
goUpper();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
auto listElements = m_tree->findIf([&](const etk::TreeNode<TreeElement>& _node) {
|
||||||
|
APPL_WARNING("Compare : '" << _node.getData().m_path << "' =?= '" << _buffer->getFileName() << "'");
|
||||||
|
if (_node.getData().m_path == _buffer->getFileName()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
if (listElements.size() == 0) {
|
||||||
|
APPL_ERROR(" ==> Can not find BUFFER ...");
|
||||||
|
} else {
|
||||||
|
listElements[0]->getData().m_buffer = _buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
updateFlatTree();
|
||||||
/*
|
/*
|
||||||
ememory::SharedPtr<appl::Buffer> buffer = m_bufferManager->get(_value);
|
ememory::SharedPtr<appl::Buffer> buffer = m_bufferManager->get(_value);
|
||||||
if (buffer == null) {
|
if (buffer == null) {
|
||||||
@ -327,18 +377,20 @@ bool appl::widget::BufferTree::onItemEvent(const ewol::event::Input& _event, con
|
|||||||
} else {
|
} else {
|
||||||
value.m_isExpand = true;
|
value.m_isExpand = true;
|
||||||
}
|
}
|
||||||
|
updateFlatTree();
|
||||||
return true;
|
return true;
|
||||||
} else if (value.m_buffer == null) {
|
} else if (value.m_buffer == null) {
|
||||||
// TODO: Open the file...
|
// TODO: Open the file...
|
||||||
return true
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_event.getStatus() == gale::key::status::pressSingle) {
|
if (_event.getStatus() == gale::key::status::pressSingle) {
|
||||||
APPL_INFO("Event on List: " << _event << " pos=" << _pos );
|
APPL_INFO("Event on List: " << _event << " pos=" << _pos );
|
||||||
if (value.m_buffer != null) {
|
if (value.m_buffer != null) {
|
||||||
// TODO: Display the current buffer...
|
// TODO: Display the current buffer...
|
||||||
return true
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
if( _pos.y() >= 0
|
if( _pos.y() >= 0
|
||||||
&& _pos.y() < (int64_t)m_list.size()) {
|
&& _pos.y() < (int64_t)m_list.size()) {
|
||||||
|
@ -15,10 +15,10 @@
|
|||||||
namespace appl {
|
namespace appl {
|
||||||
class TreeElement {
|
class TreeElement {
|
||||||
public:
|
public:
|
||||||
TreeElement(const etk::String& _path,const etk::String& _nodeName, bool _isFolder = false, bool _isExpand=false):
|
TreeElement(const etk::FSNode& _node, bool _isExpand=false):
|
||||||
m_path(_path),
|
m_path(_node.getFileSystemName()),
|
||||||
m_nodeName(_nodeName),
|
m_nodeName(_node.getNameFile()),
|
||||||
m_isFolder(_isFolder),
|
m_isFolder(_node.getNodeType() == etk::typeNode_folder),
|
||||||
m_buffer(null),
|
m_buffer(null),
|
||||||
m_isSelected(false),
|
m_isSelected(false),
|
||||||
m_isExpand(_isExpand) {
|
m_isExpand(_isExpand) {
|
||||||
@ -54,6 +54,9 @@ namespace appl {
|
|||||||
int32_t m_selectedID;
|
int32_t m_selectedID;
|
||||||
void updateFlatTree();
|
void updateFlatTree();
|
||||||
void generateFlatTree();
|
void generateFlatTree();
|
||||||
|
etk::String getRootPath();
|
||||||
|
void populateNodeIfNeeded(ememory::SharedPtr<etk::TreeNode<appl::TreeElement>> _node);
|
||||||
|
void goUpper();
|
||||||
ememory::SharedPtr<etk::TreeNode<TreeElement>> m_tree;
|
ememory::SharedPtr<etk::TreeNode<TreeElement>> m_tree;
|
||||||
etk::FlatTree<TreeElement> m_flatTree;
|
etk::FlatTree<TreeElement> m_flatTree;
|
||||||
ememory::SharedPtr<appl::Buffer> m_selection;
|
ememory::SharedPtr<appl::Buffer> m_selection;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user