bool FileBrowser::addInTree(generic_string rootPath, generic_string addItemFullPath, HTREEITEM node, vector<generic_string> linarPathArray) { if (node == nullptr) // it's a root. Search the right root with rootPath { // Search if ((node = getRootFromFullPath(rootPath)) == nullptr) return false; } if (linarPathArray.size() == 1) { // Of course item to add should be exist on the disk if (not::PathFileExists(addItemFullPath.c_str())) return false; // Search : if no found, add HTREEITEM childNodeFound = findChildNodeFromName(node, linarPathArray[0]); if (childNodeFound != nullptr) return false; // No found, good - Action if (::PathIsDirectory(addItemFullPath.c_str())) { _treeView.addItem(linarPathArray[0].c_str(), node, INDEX_CLOSED_NODE); } else { _treeView.addItem(linarPathArray[0].c_str(), node, INDEX_LEAF); } return true; } else { HTREEITEM childNodeFound = nullptr; for (HTREEITEM hItemNode = _treeView.getChildFrom(node); hItemNode != NULL && childNodeFound == nullptr; hItemNode = _treeView.getNextSibling(hItemNode)) { TCHAR textBuffer[MAX_PATH]; TVITEM tvItem; tvItem.mask = TVIF_TEXT; tvItem.pszText = textBuffer; tvItem.cchTextMax = MAX_PATH; tvItem.hItem = hItemNode; SendMessage(_treeView.getHSelf(), TVM_GETITEM, 0, (LPARAM)&tvItem); if (linarPathArray[0] == tvItem.pszText) { // search recursively the node for an action linarPathArray.erase(linarPathArray.begin()); return addInTree(rootPath, addItemFullPath, hItemNode, linarPathArray); } } return false; } }
bool FileBrowser::renameInTree(generic_string rootPath, HTREEITEM node, std::vector<generic_string> linarPathArrayFrom, std::vector<generic_string> linarPathArrayTo) { if (node == nullptr) // it's a root. Search the right root with rootPath { // Search if ((node = getRootFromFullPath(rootPath)) == nullptr) return false; } if (linarPathArrayFrom.size() == 1) { // Search HTREEITEM childNodeFound = findChildNodeFromName(node, linarPathArrayFrom[0]); if (childNodeFound == nullptr) return false; // found it, rename it _treeView.renameItem(childNodeFound, linarPathArrayTo[0].c_str()); return true; } else { HTREEITEM childNodeFound = nullptr; for (HTREEITEM hItemNode = _treeView.getChildFrom(node); hItemNode != NULL && childNodeFound == nullptr; hItemNode = _treeView.getNextSibling(hItemNode)) { TCHAR textBuffer[MAX_PATH]; TVITEM tvItem; tvItem.mask = TVIF_TEXT; tvItem.pszText = textBuffer; tvItem.cchTextMax = MAX_PATH; tvItem.hItem = hItemNode; SendMessage(_treeView.getHSelf(), TVM_GETITEM, 0, (LPARAM)&tvItem); if (linarPathArrayFrom[0] == tvItem.pszText) { // search recursively the node for an action linarPathArrayFrom.erase(linarPathArrayFrom.begin()); linarPathArrayTo.erase(linarPathArrayTo.begin()); return renameInTree(rootPath, hItemNode, linarPathArrayFrom, linarPathArrayTo); } } return false; } }
void FileBrowser::popupMenuCmd(int cmdID) { // get selected item handle HTREEITEM selectedNode = _treeView.getSelection(); switch (cmdID) { // // Toolbar menu commands // case IDM_FILEBROWSER_REMOVEROOTFOLDER: { if (not selectedNode) return; generic_string *rootPath = (generic_string *)_treeView.getItemParam(selectedNode); if (_treeView.getParent(selectedNode) != nullptr || rootPath == nullptr) return; size_t nbFolderUpdaters = _folderUpdaters.size(); for (size_t i = 0; i < nbFolderUpdaters; ++i) { if (_folderUpdaters[i]->_rootFolder._rootPath == *rootPath) { _folderUpdaters[i]->stopWatcher(); _folderUpdaters.erase(_folderUpdaters.begin() + i); _treeView.removeItem(selectedNode); break; } } } break; case IDM_FILEBROWSER_EXPLORERHERE: { if (not selectedNode) return; generic_string path = getNodePath(selectedNode); if (::PathFileExists(path.c_str())) { TCHAR cmdStr[1024]; wsprintf(cmdStr, TEXT("explorer /select,%s"), path.c_str()); Command cmd(cmdStr); cmd.run(nullptr); } } break; case IDM_FILEBROWSER_CMDHERE: { if (not selectedNode) return; if (getNodeType(selectedNode) == browserNodeType_file) selectedNode = _treeView.getParent(selectedNode); generic_string path = getNodePath(selectedNode); if (::PathFileExists(path.c_str())) { TCHAR cmdStr[1024]; wsprintf(cmdStr, TEXT("cmd /K cd /d %s"), path.c_str()); Command cmd(cmdStr); cmd.run(nullptr); } } break; case IDM_FILEBROWSER_COPYEPATH: { if (not selectedNode) return; generic_string path = getNodePath(selectedNode); str2Clipboard(path, _hParent); } break; case IDM_FILEBROWSER_OPENINNPP: { openSelectFile(); } break; case IDM_FILEBROWSER_REMOVEALLROOTS: { for (int i = _folderUpdaters.size() - 1; i >= 0; --i) { _folderUpdaters[i]->stopWatcher(); HTREEITEM root = getRootFromFullPath(_folderUpdaters[i]->_rootFolder._rootPath); if (root) _treeView.removeItem(root); _folderUpdaters.erase(_folderUpdaters.begin() + i); } } break; case IDM_FILEBROWSER_ADDROOT: { generic_string folderPath = folderBrowser(_hParent, TEXT("Select a folder to add in Folder as Workspace panel")); if (not folderPath.empty()) { addRootFolder(folderPath); } } break; case IDM_FILEBROWSER_SHELLEXECUTE: { if (not selectedNode) return; generic_string path = getNodePath(selectedNode); if (::PathFileExists(path.c_str())) ::ShellExecute(NULL, TEXT("open"), path.c_str(), NULL, NULL, SW_SHOWNORMAL); } break; /* case IDM_FILEBROWSER_RENAME : TreeView_EditLabel(_treeView.getHSelf(), hTreeItem); break; case IDM_FILEBROWSER_DELETEFOLDER : { HTREEITEM parent = _treeView.getParent(hTreeItem); if (_treeView.getChildFrom(hTreeItem) != NULL) { TCHAR str2display[MAX_PATH] = TEXT("All the sub-items will be removed.\rAre you sure you want to remove this folder from the project?"); if (::MessageBox(_hSelf, str2display, TEXT("Remove folder from project"), MB_YESNO) == IDYES) { _treeView.removeItem(hTreeItem); //_folderUpdaters[0].stopWatcher(); } } else { _treeView.removeItem(hTreeItem); } if (getNodeType(parent) == browserNodeType_folder) _treeView.setItemImage(parent, INDEX_CLOSED_NODE, INDEX_CLOSED_NODE); } break; case IDM_FILEBROWSER_DELETEFILE : { HTREEITEM parent = _treeView.getParent(hTreeItem); TCHAR str2display[MAX_PATH] = TEXT("Are you sure you want to remove this file from the project?"); if (::MessageBox(_hSelf, str2display, TEXT("Remove file from project"), MB_YESNO) == IDYES) { _treeView.removeItem(hTreeItem); if (getNodeType(parent) == browserNodeType_folder) _treeView.setItemImage(parent, INDEX_CLOSED_NODE, INDEX_CLOSED_NODE); } } break; */ } }