X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcreaDevManagerLib%2FmodelCDMFolder.cpp;h=6195892450508190751bd6c2d9f46d64227594d9;hb=f10df58dfa9c4d8489fe35f57f796bcf37e5f9b4;hp=28d7a9581e7a96479c013b2dc444e60012393c25;hpb=2b6788596bc21c7942df4b0d6917eaf5b5d72277;p=crea.git diff --git a/lib/creaDevManagerLib/modelCDMFolder.cpp b/lib/creaDevManagerLib/modelCDMFolder.cpp index 28d7a95..6195892 100644 --- a/lib/creaDevManagerLib/modelCDMFolder.cpp +++ b/lib/creaDevManagerLib/modelCDMFolder.cpp @@ -47,21 +47,16 @@ modelCDMFolder::modelCDMFolder() this->CMakeLists = NULL; } -modelCDMFolder::modelCDMFolder(const std::string& path, const int& level) +modelCDMFolder::modelCDMFolder(modelCDMIProjectTreeNode* parent, const std::string& path, const std::string& name, const int& level) { + std::cout << "creating folder: " + path + "\n"; //set attributes + this->parent = parent; this->children.clear(); this->level = level; this->CMakeLists = NULL; this->length = 0; - - std::vector words; - std::string delimiters; - //TODO::fix for windows - delimiters = "/"; - CDMUtilities::splitter::split(words, path, delimiters, CDMUtilities::splitter::no_empties); - this->name = words[words.size()-1]; - + this->name = name; this->path = path; this->type = wxDIR_DIRS; @@ -77,7 +72,9 @@ modelCDMFolder::modelCDMFolder(const std::string& path, const int& level) std::string stdfileName = crea::wx2std(fileName); //if is an unknown folder, create folder - this->children.push_back(new modelCDMFolder(pathFixed + "/" + stdfileName, this->level + 1)); + modelCDMFolder* folder = new modelCDMFolder(this, pathFixed + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1); + this->children.push_back(folder); + this->folders.push_back(folder); cont = dir.GetNext(&fileName); } @@ -86,30 +83,63 @@ modelCDMFolder::modelCDMFolder(const std::string& path, const int& level) while (cont) { std::string stdfileName = crea::wx2std(fileName); + std::cout << "analyzing " << stdfileName << std::endl; + std::size_t fileTypePos = stdfileName.find_last_of("."); + std::string fileType; + if(fileTypePos != std::string::npos) + fileType = stdfileName.substr(fileTypePos); + else + fileType = ""; + std::cout << "fileType: " << fileType <CMakeLists = new modelCDMCMakeListsFile(pathFixed + "/" + stdfileName, this->level + 1); + this->CMakeLists = new modelCDMCMakeListsFile(this, pathFixed + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1); this->children.push_back(this->CMakeLists); } - else + //if is a code file, create code file + else if(fileType == ".c" || + fileType == ".cxx" || + fileType == ".h" || + fileType == ".cpp" || + fileType == ".txx" || + fileType == ".cmake" ) { - this->children.push_back(new modelCDMFile(pathFixed + "/" + stdfileName, this->level + 1)); + modelCDMCodeFile* file = new modelCDMCodeFile(this, pathFixed + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1); + this->children.push_back(file); + } + //if is a bbs file, create bbs file + else if(fileType == ".bbs") + { + modelCDMBBSFile* file = new modelCDMBBSFile(this, pathFixed + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1); + this->children.push_back(file); + } + //if is a bbg file, create bbg file + else if(fileType == ".bbg") + { + modelCDMBBGFile* file = new modelCDMBBGFile(this, pathFixed + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1); + this->children.push_back(file); } //if is an unknown file, create file + else + { + this->children.push_back(new modelCDMFile(this, pathFixed + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1)); + } + cont = dir.GetNext(&fileName); } } this->SortChildren(); + std::sort(this->folders.begin(), this->folders.end(), CompareNodeItem); } modelCDMFolder::~modelCDMFolder() { this->folders.clear(); this->CMakeLists = NULL; - for (int i = 0; i < this->children.size(); i++) + for (int i = 0; i < (int)(this->children.size()); i++) { if(this->children[i] != NULL) { @@ -120,16 +150,31 @@ modelCDMFolder::~modelCDMFolder() this->children.clear(); } +bool modelCDMFolder::CreateClass(const std::string& name) +{ + if (!CDMUtilities::createEmptyClass(name, this->path)) + { + return false; + } + else + { + this->children.push_back(new modelCDMFile(this, this->path + CDMUtilities::SLASH + name + ".h", name + ".h", this->level + 1)); + this->children.push_back(new modelCDMFile(this, this->path + CDMUtilities::SLASH + name + ".cpp", name + ".cpp", this->level + 1)); + this->SortChildren(); + return true; + } +} + modelCDMFolder* modelCDMFolder::CreateFolder(const std::string& name, std::string*& result) { //TODO:: mkdir depending on OS - std::string command = "mkdir " + path + "/" + name; + std::string command = "mkdir \"" + path + CDMUtilities::SLASH + name + "\""; if(system(command.c_str())) { result = new std::string("Error executing: " + command + "."); return NULL; } - modelCDMFolder* folder = new modelCDMFolder(path + "/" + name, level + 1); + modelCDMFolder* folder = new modelCDMFolder(this, path + CDMUtilities::SLASH + name, name, level + 1); this->folders.push_back(folder); this->children.push_back(folder); @@ -154,6 +199,7 @@ bool modelCDMFolder::OpenCMakeListsFile(std::string*& result) const bool modelCDMFolder::Refresh(std::string*& result) { + //std::cout << "refreshing folder " << this->name << std::endl; //set attributes this->type = wxDIR_DIRS; @@ -170,12 +216,11 @@ const bool modelCDMFolder::Refresh(std::string*& result) while (cont) { std::string stdfileName = crea::wx2std(fileName); - std::string folderName = stdfileName; //check if they already exist bool found = false; - for (int i = 0;!found && i < this->folders.size(); i++) + for (int i = 0; !found && i < (int)(this->folders.size()); i++) { - if (this->folders[i]->GetName() == folderName) + if (this->folders[i]->GetName() == stdfileName) { found = true; int pos = std::find(this->children.begin(), this->children.end(), this->folders[i]) - this->children.begin(); @@ -187,7 +232,7 @@ const bool modelCDMFolder::Refresh(std::string*& result) } if(!found) { - modelCDMFolder* folder = new modelCDMFolder(this->path + "/" + stdfileName, this->level + 1); + modelCDMFolder* folder = new modelCDMFolder(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1); this->folders.push_back(folder); this->children.push_back(folder); } @@ -198,13 +243,19 @@ const bool modelCDMFolder::Refresh(std::string*& result) while (cont) { std::string stdfileName = crea::wx2std(fileName); + std::size_t fileTypePos = stdfileName.find_last_of("."); + std::string fileType; + if(fileTypePos != std::string::npos) + fileType = stdfileName.substr(fileTypePos); + else + fileType = ""; //if CMakeLists, create CMakeLists if(stdfileName == "CMakeLists.txt") { if (this->CMakeLists == NULL) { - this->CMakeLists = new modelCDMCMakeListsFile(this->path + "/" + stdfileName, this->level + 1); + this->CMakeLists = new modelCDMCMakeListsFile(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1); this->children.push_back(this->CMakeLists); } else @@ -215,11 +266,12 @@ const bool modelCDMFolder::Refresh(std::string*& result) return false; } } + //if is an unknown file, create file else { bool found = false; - for (int i = 0; i children.size(); i++) + for (int i = 0;!found && i < (int)(this->children.size()); i++) { if (this->children[i]->GetName() == stdfileName) { @@ -232,8 +284,33 @@ const bool modelCDMFolder::Refresh(std::string*& result) if(!found) { - modelCDMFile* file = new modelCDMFile(this->path + "/" + stdfileName, this->level + 1); - this->children.push_back(file); + //if is a code file, create modelCDMCodeFile + if( + fileType == ".c" || + fileType == ".cxx" || + fileType == ".h" || + fileType == ".cpp" || + fileType == ".txx" || + fileType == ".cmake" ) + { + this->children.push_back(new modelCDMCodeFile(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1)); + } + //if is a bbs file, create modelCDMBBSFile + else if(fileType == ".bbs") + { + this->children.push_back(new modelCDMBBSFile(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1)); + } + //if is a bbg file, create modelCDMBBGFile + else if(fileType == ".bbg") + { + this->children.push_back(new modelCDMBBGFile(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1)); + } + //if is an unknown file, create modelCDMFile + else + { + modelCDMFile* file = new modelCDMFile(this, this->path + CDMUtilities::SLASH + stdfileName, stdfileName, this->level + 1); + this->children.push_back(file); + } } } @@ -241,7 +318,7 @@ const bool modelCDMFolder::Refresh(std::string*& result) } } - for (int i = 0; i < checkedFolders.size(); i++) + for (int i = 0; i < (int)(checkedFolders.size()); i++) { if(!checkedFolders[i]) { @@ -250,7 +327,7 @@ const bool modelCDMFolder::Refresh(std::string*& result) i--; } } - for (int i = 0; i < checked.size(); i++) + for (int i = 0; i < (int)(checked.size()); i++) { if(!checked[i]) { @@ -261,6 +338,7 @@ const bool modelCDMFolder::Refresh(std::string*& result) } } this->SortChildren(); + std::sort(this->folders.begin(), this->folders.end(), CompareNodeItem); return true; }