]> Creatis software - crea.git/commitdiff
Feature #1711
authorDaniel Gonzalez <daniel.gonzalez@creatis.insa-lyon.fr>
Wed, 19 Dec 2012 14:47:52 +0000 (15:47 +0100)
committerDaniel Gonzalez <daniel.gonzalez@creatis.insa-lyon.fr>
Wed, 19 Dec 2012 14:47:52 +0000 (15:47 +0100)
CreaDevManager application implementation

-Library, Application and Package creation completely implemented.
-Folder creation in Folder, Library and Application implemented.
-On Folder hierarchy refresh, the view is set back to the project's root.

17 files changed:
lib/creaDevManagerLib/creaDevManagerIds.h
lib/creaDevManagerLib/modelCDMAppli.cpp
lib/creaDevManagerLib/modelCDMApplication.cpp
lib/creaDevManagerLib/modelCDMApplication.h
lib/creaDevManagerLib/modelCDMFolder.cpp
lib/creaDevManagerLib/modelCDMFolder.h
lib/creaDevManagerLib/modelCDMLib.cpp
lib/creaDevManagerLib/modelCDMLibrary.cpp
lib/creaDevManagerLib/modelCDMLibrary.h
lib/creaDevManagerLib/modelCDMPackage.cpp
lib/creaDevManagerLib/wxCDMApplicationDescriptionPanel.cpp
lib/creaDevManagerLib/wxCDMApplicationDescriptionPanel.h
lib/creaDevManagerLib/wxCDMFolderDescriptionPanel.cpp
lib/creaDevManagerLib/wxCDMFolderDescriptionPanel.h
lib/creaDevManagerLib/wxCDMLibraryDescriptionPanel.cpp
lib/creaDevManagerLib/wxCDMLibraryDescriptionPanel.h
lib/creaDevManagerLib/wxCDMMainFrame.cpp

index 49193d9fde964ccf67dd648bf2d9b37a1cad2f35..ab662fa0d3d79f84cc9b655107ea9a9cfef907cf 100644 (file)
 #define ID_BUTTON_SET_BUILD_PATH        10319
 #define ID_BUTTON_SET_AUTHOR            10320
 #define ID_BUTTON_SET_DESCRIPTION       10321
+#define ID_BUTTON_SET_NAME              10322
 
 
-#define ID_BUTTON_BUILD_PROJECT         10322
-#define ID_BUTTON_CONFIGURE_BUILD       10323
-#define ID_BUTTON_CONNECT_PROJECT       10324
+#define ID_BUTTON_BUILD_PROJECT         10323
+#define ID_BUTTON_CONFIGURE_BUILD       10324
+#define ID_BUTTON_CONNECT_PROJECT       10325
 
-#define ID_BUTTON_GOTO_PACKAGE_MANAGER  10325
-#define ID_BUTTON_GOTO_APPLI_MANAGER    10326
-#define ID_BUTTON_GOTO_LIB_MANAGER      10327
+#define ID_BUTTON_GOTO_PACKAGE_MANAGER  10326
+#define ID_BUTTON_GOTO_APPLI_MANAGER    10327
+#define ID_BUTTON_GOTO_LIB_MANAGER      10328
 
-#define ID_LINK_SELECT_PACKAGE          10328
-#define ID_LINK_SELECT_LIBRARY          10329
-#define ID_LINK_SELECT_APPLICATION      10330
-#define ID_LINK_SELECT_BLACKBOX         10331
+#define ID_LINK_SELECT_PACKAGE          10329
+#define ID_LINK_SELECT_LIBRARY          10330
+#define ID_LINK_SELECT_APPLICATION      10331
+#define ID_LINK_SELECT_BLACKBOX         10332
 
 #endif /* CREADEVMANAGERIDS_H_ */
index ce3388e03d13722a4fc13102569990c566367635..ebd4de0170deefe08dd3e8d453bf5739a1325c44 100644 (file)
@@ -36,6 +36,7 @@
 
 #include <iostream>
 #include <fstream>
+#include <algorithm>
 
 #include "CDMUtilities.h"
 #include "creaWx.h"
@@ -140,6 +141,116 @@ modelCDMApplication* modelCDMAppli::CreateApplication(
 
 const bool modelCDMAppli::Refresh(std::string*& result)
 {
-  //TODO: implement method
+  std::cout << "refreshing appli" << std::endl;
+  this->type = wxDIR_DIRS;
+  this->name = "appli";
+  this->level = level;
+  this->path = path;
+
+
+
+  std::vector<bool> checked(this->children.size(), false);
+  std::vector<bool> checkedApplications(this->applications.size(), false);
+
+  //check all folders
+  wxDir dir(crea::std2wx((this->path).c_str()));
+  if (dir.IsOpened())
+    {
+      wxString fileName;
+      bool cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_DIRS);
+      while (cont)
+        {
+          std::string stdfileName = crea::wx2std(fileName);
+          std::string applicationName = stdfileName;
+          //check if they already exist
+          bool found = false;
+          for (int i = 0;!found && i < this->applications.size(); i++)
+            {
+              if (this->applications[i]->GetName() == applicationName)
+                {
+                  found = true;
+                  int pos = std::find(this->children.begin(), this->children.end(), this->applications[i]) - this->children.begin();
+                  checked[pos] = true;
+                  checkedApplications[i] = true;
+                  if(!this->applications[i]->Refresh(result))
+                    return false;
+                }
+            }
+          if(!found)
+            {
+              modelCDMApplication* application= new modelCDMApplication(this->path + "/" + stdfileName, this->level + 1);
+              this->applications.push_back(application);
+              this->children.push_back(application);
+            }
+          cont = dir.GetNext(&fileName);
+        }
+
+      cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_FILES);
+      while (cont)
+        {
+          std::string stdfileName = crea::wx2std(fileName);
+
+          //if CMakeLists, create CMakeLists
+          if(stdfileName == "CMakeLists.txt")
+            {
+              if (this->CMakeLists == NULL)
+                {
+                  this->CMakeLists = new modelCDMCMakeListsFile(this->path + "/" + stdfileName, this->level + 1);
+                  this->children.push_back(this->CMakeLists);
+                }
+              else
+                {
+                  int pos = std::find(this->children.begin(), this->children.end(), this->CMakeLists) - this->children.begin();
+                  checked[pos] = true;
+                  if(!this->CMakeLists->Refresh(result))
+                    return false;
+                }
+            }
+          //if is an unknown file, create file
+          else
+            {
+              bool found = false;
+              for (int i = 0; i <!found && this->children.size(); i++)
+                {
+                  if (this->children[i]->GetName() == stdfileName)
+                    {
+                      found = true;
+                      checked[i] = true;
+                      if(!this->children[i]->Refresh(result))
+                        return false;
+                    }
+                }
+
+              if(!found)
+                {
+                  modelCDMFile* file = new modelCDMFile(this->path + "/" + stdfileName, this->level + 1);
+                  this->children.push_back(file);
+                }
+            }
+
+          cont = dir.GetNext(&fileName);
+        }
+    }
+
+  for (int i = 0; i < checkedApplications.size(); i++)
+    {
+      if(!checkedApplications[i])
+        {
+          this->applications.erase(this->applications.begin()+i);
+          checkedApplications.erase(checkedApplications.begin()+i);
+          i--;
+        }
+    }
+  for (int i = 0; i < checked.size(); i++)
+    {
+      if(!checked[i])
+        {
+          delete this->children[i];
+          this->children.erase(this->children.begin()+i);
+          checked.erase(checked.begin()+i);
+          i--;
+        }
+    }
+  this->SortChildren();
   return true;
 }
index 35a731cd129c23133c28b822c5ad112639552dfc..c39b48d769677ca311727fe391180d14aa109244 100644 (file)
@@ -34,6 +34,9 @@
 
 #include "modelCDMApplication.h"
 
+#include <fstream>
+#include <algorithm>
+
 #include "CDMUtilities.h"
 #include "creaWx.h"
 #include "wx/dir.h"
@@ -44,19 +47,95 @@ modelCDMApplication::modelCDMApplication()
 
 modelCDMApplication::modelCDMApplication(const std::string& path, const int& level)
 {
+  //folder name
   std::vector<std::string> words;
   std::string delimiters;
   //TODO::fix for windows
   delimiters = "/";
   CDMUtilities::splitter::split(words, path, delimiters, CDMUtilities::splitter::no_empties);
-  this->name = this->nameApplication = words[words.size()-1];
+  this->name = words[words.size()-1];
 
-  this->path = path;
+  //path
+  this->path = CDMUtilities::fixPath(path);
+  //type
   this->type = wxDIR_DIRS;
+  //level
   this->level = level;
 
-  //TODO: open CMakeList
-  //TODO: get ApplicationName
+  //open CMakeList
+  std::string pathMakeLists = path + "/CMakeLists.txt";
+
+  std::ifstream confFile;
+  confFile.open((pathMakeLists).c_str());
+
+  std::string word;
+  while(confFile.is_open() && !confFile.eof())
+    {
+      //get sets
+      std::getline(confFile,word,'(');
+      std::vector<std::string> wordBits;
+      CDMUtilities::splitter::split(wordBits,word," (\n",CDMUtilities::splitter::no_empties);
+
+      if(wordBits[wordBits.size()-1] == "SET")
+        {
+          //get library name
+          std::getline(confFile,word,')');
+          CDMUtilities::splitter::split(wordBits, word, " ", CDMUtilities::splitter::no_empties);
+          if(wordBits[0] == "EXE_NAME")
+            {
+              word = wordBits[1];
+              for (int i = 2; i < wordBits.size(); i++)
+                {
+                  word += " " + wordBits[i];
+                }
+
+              this->nameApplication = this->executableName = word;
+            }
+        }
+    }
+  confFile.close();
+
+  //add library contents
+
+  this->children.clear();
+  wxDir dir(crea::std2wx((this->path).c_str()));
+  if (dir.IsOpened())
+    {
+      wxString fileName;
+      //folders
+      bool cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_DIRS);
+      while (cont)
+        {
+          std::string stdfileName = crea::wx2std(fileName);
+
+          modelCDMFolder* folder = new modelCDMFolder(this->path + "/" + stdfileName, this->level + 1);
+          this->folders.push_back(folder);
+          this->children.push_back(folder);
+
+          cont = dir.GetNext(&fileName);
+        }
+      //files
+      cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_FILES);
+      while (cont)
+        {
+          std::string stdfileName = crea::wx2std(fileName);
+
+          //if CMakeLists, create CMakeLists
+          if(stdfileName == "CMakeLists.txt")
+            {
+              this->CMakeLists = new modelCDMCMakeListsFile(this->path + "/" + stdfileName, this->level + 1);
+              this->children.push_back(this->CMakeLists);
+            }
+          //if is an unknown file, create file
+          else
+            {
+              this->children.push_back(new modelCDMFile(this->path + "/" + stdfileName, this->level + 1));
+            }
+
+          cont = dir.GetNext(&fileName);
+        }
+    }
+  this->SortChildren();
 }
 
 modelCDMApplication::~modelCDMApplication()
@@ -73,22 +152,210 @@ const std::string& modelCDMApplication::GetExecutableName() const
   return this->executableName;
 }
 
-void modelCDMApplication::SetMainFile(const std::string& fileName)
+bool modelCDMApplication::SetExecutableName(const std::string& fileName, std::string*& result)
 {
+  std::vector<std::string> words;
+  CDMUtilities::splitter::split(words, fileName, ", /\\\"", CDMUtilities::splitter::no_empties);
+  std::string fileNameReal = words[0];
+  for (int i = 1; i < words.size(); i++)
+    {
+      fileNameReal += "-" + words[i];
+    }
+
+  std::string line;
+  //opening original cmakelists
+  std::ifstream in((this->path + "/CMakeLists.txt").c_str());
+  if( !in.is_open())
+    {
+      result = new std::string("CMakeLists.txt file failed to open.");
+      return false;
+    }
+  //opening temporal cmakelists
+  std::ofstream out((this->path + "/CMakeLists.txt.tmp").c_str());
+  if( !out.is_open())
+    {
+      result = new std::string("CMakeLists.txt.tmp file failed to open.");
+      return false;
+    }
+  //copying contents from original to temporal and making changes
+  while (getline(in, line))
+    {
+      if(line.find("SET ( EXE_NAME") != std::string::npos)
+        line = "SET ( EXE_NAME  " + fileNameReal + "  )";
+      out << line << std::endl;
+    }
+  in.close();
+  out.close();
+  //delete old file and rename new file
+  std::string renameCommand = "mv " + this->path + "/CMakeLists.txt.tmp " + this->path + "/CMakeLists.txt";
+  if(system(renameCommand.c_str()))
+    {
+      result = new std::string("An error occurred while running '" + renameCommand + "'.");
+      return false;
+    }
+
+  this->executableName = this->nameApplication = fileNameReal;
+  return true;
 }
 
-bool modelCDMApplication::CreateFolder(
-    const std::string& name,
-    std::string*& result,
-    const std::string& path
-)
+modelCDMFolder* modelCDMApplication::CreateFolder(const std::string& name, std::string*& result)
 {
-  //TODO: implement method
-  return true;
+  //TODO:: mkdir depending on OS
+  std::string command = "mkdir " + path + "/" + name;
+  if(system(command.c_str()))
+    {
+      result = new std::string("Error executing: " + command + ".");
+      return NULL;
+    }
+  modelCDMFolder* folder = new modelCDMFolder(path + "/" + name, level + 1);
+  this->folders.push_back(folder);
+  this->children.push_back(folder);
+
+  return folder;
 }
 
 const bool modelCDMApplication::Refresh(std::string*& result)
 {
-  //TODO: implement method
+  //set attributes
+  this->type = wxDIR_DIRS;
+
+  //open CMakeList
+  std::string pathMakeLists = path + "/CMakeLists.txt";
+
+  std::ifstream confFile;
+  confFile.open((pathMakeLists).c_str());
+
+  std::string word;
+  while(confFile.is_open() && !confFile.eof())
+    {
+      //get sets
+      std::getline(confFile,word,'(');
+      std::vector<std::string> wordBits;
+      CDMUtilities::splitter::split(wordBits,word," (\n",CDMUtilities::splitter::no_empties);
+
+      if(wordBits[wordBits.size()-1] == "SET")
+        {
+          //get library name
+          std::getline(confFile,word,')');
+          CDMUtilities::splitter::split(wordBits, word, " ", CDMUtilities::splitter::no_empties);
+          if(wordBits[0] == "LIBRARY_NAME")
+            {
+              word = wordBits[1];
+              for (int i = 2; i < wordBits.size(); i++)
+                {
+                  word += " " + wordBits[i];
+                }
+
+              this->nameApplication = this->executableName = word;
+            }
+        }
+    }
+
+  confFile.close();
+
+  //check children
+  std::vector<bool> checked(this->children.size(), false);
+  std::vector<bool> checkedFolders(this->folders.size(), false);
+
+  //check all folders
+  wxDir dir(crea::std2wx((this->path).c_str()));
+  if (dir.IsOpened())
+    {
+      wxString fileName;
+      bool cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_DIRS);
+      while (cont)
+        {
+          std::string stdfileName = crea::wx2std(fileName);
+          std::string applicationName = stdfileName;
+          //check if they already exist
+          bool found = false;
+          for (int i = 0;!found && i < this->folders.size(); i++)
+            {
+              if (this->folders[i]->GetName() == applicationName)
+                {
+                  found = true;
+                  int pos = std::find(this->children.begin(), this->children.end(), this->folders[i]) - this->children.begin();
+                  checked[pos] = true;
+                  checkedFolders[i] = true;
+                  if(!this->folders[i]->Refresh(result))
+                    return false;
+                }
+            }
+          if(!found)
+            {
+              modelCDMFolder* folder = new modelCDMFolder(this->path + "/" + stdfileName, this->level + 1);
+              this->folders.push_back(folder);
+              this->children.push_back(folder);
+            }
+          cont = dir.GetNext(&fileName);
+        }
+
+      cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_FILES);
+      while (cont)
+        {
+          std::string stdfileName = crea::wx2std(fileName);
+
+          //if CMakeLists, create CMakeLists
+          if(stdfileName == "CMakeLists.txt")
+            {
+              if (this->CMakeLists == NULL)
+                {
+                  this->CMakeLists = new modelCDMCMakeListsFile(this->path + "/" + stdfileName, this->level + 1);
+                  this->children.push_back(this->CMakeLists);
+                }
+              else
+                {
+                  int pos = std::find(this->children.begin(), this->children.end(), this->CMakeLists) - this->children.begin();
+                  checked[pos] = true;
+                  if(!this->CMakeLists->Refresh(result))
+                    return false;
+                }
+            }
+          //if is an unknown file, create file
+          else
+            {
+              bool found = false;
+              for (int i = 0; i <!found && this->children.size(); i++)
+                {
+                  if (this->children[i]->GetName() == stdfileName)
+                    {
+                      found = true;
+                      checked[i] = true;
+                      if(!this->children[i]->Refresh(result))
+                        return false;
+                    }
+                }
+
+              if(!found)
+                {
+                  modelCDMFile* file = new modelCDMFile(this->path + "/" + stdfileName, this->level + 1);
+                  this->children.push_back(file);
+                }
+            }
+
+          cont = dir.GetNext(&fileName);
+        }
+    }
+
+  for (int i = 0; i < checkedFolders.size(); i++)
+    {
+      if(!checkedFolders[i])
+        {
+          this->folders.erase(this->folders.begin()+i);
+          checkedFolders.erase(checkedFolders.begin()+i);
+          i--;
+        }
+    }
+  for (int i = 0; i < checked.size(); i++)
+    {
+      if(!checked[i])
+        {
+          delete this->children[i];
+          this->children.erase(this->children.begin()+i);
+          checked.erase(checked.begin()+i);
+          i--;
+        }
+    }
+  this->SortChildren();
   return true;
 }
index 97d3a79e8f4ea69bc1128175d5d5348209ad91c7..af3cbadf5910b74b48c8b87d78c0e3eedf983552 100644 (file)
@@ -50,19 +50,16 @@ public:
   const std::string& GetNameApplication() const;
   const std::string& GetExecutableName() const;
 
-  void SetMainFile(const std::string& fileName);
+  bool SetExecutableName(const std::string& fileName, std::string*& result);
+
+  modelCDMFolder* CreateFolder(const std::string& name, std::string*& result);
 
-  bool CreateFolder(
-      const std::string& name,
-      std::string*& result,
-      const std::string& path = "/"
-  );
   virtual const bool Refresh(std::string*& result);
 
 private:
   std::string nameApplication;
   std::string executableName;
-  std::vector<modelCDMApplication*> applications;
+  std::vector<modelCDMFolder*> folders;
 };
 
 #endif /* MODELCDMAPPLICATION_H_ */
index 8122ebb063103d94cc23c4bf16b8008ab9e828db..28d7a9581e7a96479c013b2dc444e60012393c25 100644 (file)
@@ -34,6 +34,9 @@
 
 #include "modelCDMFolder.h"
 
+#include <fstream>
+#include <algorithm>
+
 #include <creaWx.h>
 #include <wx/dir.h>
 
@@ -117,11 +120,20 @@ modelCDMFolder::~modelCDMFolder()
   this->children.clear();
 }
 
-bool modelCDMFolder::CreateFolder(const std::string& name, std::string*& result,
-    const std::string& path)
+modelCDMFolder* modelCDMFolder::CreateFolder(const std::string& name, std::string*& result)
 {
-  //TODO: implement method
-  return true;
+  //TODO:: mkdir depending on OS
+  std::string command = "mkdir " + path + "/" + name;
+  if(system(command.c_str()))
+    {
+      result = new std::string("Error executing: " + command + ".");
+      return NULL;
+    }
+  modelCDMFolder* folder = new modelCDMFolder(path + "/" + name, level + 1);
+  this->folders.push_back(folder);
+  this->children.push_back(folder);
+
+  return folder;
 }
 
 bool modelCDMFolder::OpenCMakeListsFile(std::string*& result)
@@ -142,7 +154,113 @@ bool modelCDMFolder::OpenCMakeListsFile(std::string*& result)
 
 const bool modelCDMFolder::Refresh(std::string*& result)
 {
-  //TODO: implement method
+  //set attributes
+  this->type = wxDIR_DIRS;
+
+  //check children
+  std::vector<bool> checked(this->children.size(), false);
+  std::vector<bool> checkedFolders(this->folders.size(), false);
+
+  //check all folders
+  wxDir dir(crea::std2wx((this->path).c_str()));
+  if (dir.IsOpened())
+    {
+      wxString fileName;
+      bool cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_DIRS);
+      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++)
+            {
+              if (this->folders[i]->GetName() == folderName)
+                {
+                  found = true;
+                  int pos = std::find(this->children.begin(), this->children.end(), this->folders[i]) - this->children.begin();
+                  checked[pos] = true;
+                  checkedFolders[i] = true;
+                  if(!this->folders[i]->Refresh(result))
+                    return false;
+                }
+            }
+          if(!found)
+            {
+              modelCDMFolder* folder = new modelCDMFolder(this->path + "/" + stdfileName, this->level + 1);
+              this->folders.push_back(folder);
+              this->children.push_back(folder);
+            }
+          cont = dir.GetNext(&fileName);
+        }
+
+      cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_FILES);
+      while (cont)
+        {
+          std::string stdfileName = crea::wx2std(fileName);
+
+          //if CMakeLists, create CMakeLists
+          if(stdfileName == "CMakeLists.txt")
+            {
+              if (this->CMakeLists == NULL)
+                {
+                  this->CMakeLists = new modelCDMCMakeListsFile(this->path + "/" + stdfileName, this->level + 1);
+                  this->children.push_back(this->CMakeLists);
+                }
+              else
+                {
+                  int pos = std::find(this->children.begin(), this->children.end(), this->CMakeLists) - this->children.begin();
+                  checked[pos] = true;
+                  if(!this->CMakeLists->Refresh(result))
+                    return false;
+                }
+            }
+          //if is an unknown file, create file
+          else
+            {
+              bool found = false;
+              for (int i = 0; i <!found && this->children.size(); i++)
+                {
+                  if (this->children[i]->GetName() == stdfileName)
+                    {
+                      found = true;
+                      checked[i] = true;
+                      if(!this->children[i]->Refresh(result))
+                        return false;
+                    }
+                }
+
+              if(!found)
+                {
+                  modelCDMFile* file = new modelCDMFile(this->path + "/" + stdfileName, this->level + 1);
+                  this->children.push_back(file);
+                }
+            }
+
+          cont = dir.GetNext(&fileName);
+        }
+    }
+
+  for (int i = 0; i < checkedFolders.size(); i++)
+    {
+      if(!checkedFolders[i])
+        {
+          this->folders.erase(this->folders.begin()+i);
+          checkedFolders.erase(checkedFolders.begin()+i);
+          i--;
+        }
+    }
+  for (int i = 0; i < checked.size(); i++)
+    {
+      if(!checked[i])
+        {
+          delete this->children[i];
+          this->children.erase(this->children.begin()+i);
+          checked.erase(checked.begin()+i);
+          i--;
+        }
+    }
+  this->SortChildren();
   return true;
 }
 
index 383f89d5deb5be8e421b86f568fe241e1ca9449c..2bda7074de4cbeae6df0cb95868ed6b4a107cefd 100644 (file)
@@ -51,10 +51,9 @@ public:
   modelCDMCMakeListsFile* GetCMakeLists() const;
   std::vector<modelCDMFolder*> GetFolders() const;
 
-  bool CreateFolder(
+  modelCDMFolder* CreateFolder(
       const std::string& name,
-      std::string*& result,
-      const std::string& path = "/"
+      std::string*& result
   );
   bool OpenCMakeListsFile(std::string* & result);
   virtual const bool Refresh(std::string*& result);
index 11b5f370252efdb83e624303fc86286af871afb9..a0ece82362622b9caabf644a03420d571ae0d88e 100644 (file)
@@ -161,6 +161,7 @@ modelCDMLibrary* modelCDMLib::CreateLibrary(
 
 const bool modelCDMLib::Refresh(std::string*& result)
 {
+  std::cout << "refreshing lib" << std::endl;
   this->type = wxDIR_DIRS;
   this->name = "lib";
   this->level = level;
index d5b4efb8cd76e2df1f632e156e4652b2a3498139..560759e02a300eea0aeb851863020623b0ac2508 100644 (file)
@@ -34,6 +34,9 @@
 
 #include "modelCDMLibrary.h"
 
+#include <fstream>
+#include <algorithm>
+
 #include "CDMUtilities.h"
 #include "creaWx.h"
 #include "wx/dir.h"
@@ -44,19 +47,96 @@ modelCDMLibrary::modelCDMLibrary()
 
 modelCDMLibrary::modelCDMLibrary(const std::string& path, const int& level)
 {
+  //folder name
   std::vector<std::string> words;
   std::string delimiters;
   //TODO::fix for windows
   delimiters = "/";
   CDMUtilities::splitter::split(words, path, delimiters, CDMUtilities::splitter::no_empties);
-  this->name = this->nameLibrary = words[words.size()-1];
+  this->name = words[words.size()-1];
 
-  this->path = path;
+  //path
+  this->path = CDMUtilities::fixPath(path);
+  //type
   this->type = wxDIR_DIRS;
+  //level
   this->level = level;
 
-  //TODO: open CMakeList
-  //TODO: get libraryName
+  //open CMakeList
+  std::string pathMakeLists = path + "/CMakeLists.txt";
+
+  std::ifstream confFile;
+  confFile.open((pathMakeLists).c_str());
+
+  std::string word;
+  while(confFile.is_open() && !confFile.eof())
+    {
+      //get sets
+      std::getline(confFile,word,'(');
+      std::vector<std::string> wordBits;
+      CDMUtilities::splitter::split(wordBits,word," (\n",CDMUtilities::splitter::no_empties);
+
+      if(wordBits[wordBits.size()-1] == "SET")
+        {
+          //get library name
+          std::getline(confFile,word,')');
+          CDMUtilities::splitter::split(wordBits, word, " ", CDMUtilities::splitter::no_empties);
+          if(wordBits[0] == "LIBRARY_NAME")
+            {
+              word = wordBits[1];
+              for (int i = 2; i < wordBits.size(); i++)
+                {
+                  word += " " + wordBits[i];
+                }
+
+              this->nameLibrary = word;
+            }
+        }
+    }
+
+  confFile.close();
+
+  //add library contents
+
+  this->children.clear();
+  wxDir dir(crea::std2wx((this->path).c_str()));
+  if (dir.IsOpened())
+    {
+      wxString fileName;
+      //folders
+      bool cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_DIRS);
+      while (cont)
+        {
+          std::string stdfileName = crea::wx2std(fileName);
+
+          modelCDMFolder* folder = new modelCDMFolder(this->path + "/" + stdfileName, this->level + 1);
+          this->folders.push_back(folder);
+          this->children.push_back(folder);
+
+          cont = dir.GetNext(&fileName);
+        }
+      //files
+      cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_FILES);
+      while (cont)
+        {
+          std::string stdfileName = crea::wx2std(fileName);
+
+          //if CMakeLists, create CMakeLists
+          if(stdfileName == "CMakeLists.txt")
+            {
+              this->CMakeLists = new modelCDMCMakeListsFile(this->path + "/" + stdfileName, this->level + 1);
+              this->children.push_back(this->CMakeLists);
+            }
+          //if is an unknown file, create file
+          else
+            {
+              this->children.push_back(new modelCDMFile(this->path + "/" + stdfileName, this->level + 1));
+            }
+
+          cont = dir.GetNext(&fileName);
+        }
+    }
+  this->SortChildren();
 }
 
 modelCDMLibrary::~modelCDMLibrary()
@@ -68,17 +148,210 @@ const std::string& modelCDMLibrary::GetNameLibrary() const
   return this->nameLibrary;
 }
 
-bool modelCDMLibrary::CreateFolder(
-    const std::string& name,
-    std::string*& result,
-    const std::string& path)
+bool modelCDMLibrary::SetNameLibrary(const std::string& fileName, std::string*& result)
 {
-  //TODO: implement method
+  std::vector<std::string> words;
+  CDMUtilities::splitter::split(words, fileName, ", /\\\"", CDMUtilities::splitter::no_empties);
+  std::string fileNameReal = words[0];
+  for (int i = 1; i < words.size(); i++)
+    {
+      fileNameReal += "-" + words[i];
+    }
+
+  std::string line;
+  //opening original cmakelists
+  std::ifstream in((this->path + "/CMakeLists.txt").c_str());
+  if( !in.is_open())
+    {
+      result = new std::string("CMakeLists.txt file failed to open.");
+      return false;
+    }
+  //opening temporal cmakelists
+  std::ofstream out((this->path + "/CMakeLists.txt.tmp").c_str());
+  if( !out.is_open())
+    {
+      result = new std::string("CMakeLists.txt.tmp file failed to open.");
+      return false;
+    }
+  //copying contents from original to temporal and making changes
+  while (getline(in, line))
+    {
+      if(line.find("SET ( LIBRARY_NAME") != std::string::npos)
+        line = "SET ( LIBRARY_NAME  " + fileNameReal + "  )";
+      out << line << std::endl;
+    }
+  in.close();
+  out.close();
+  //delete old file and rename new file
+  std::string renameCommand = "mv " + this->path + "/CMakeLists.txt.tmp " + this->path + "/CMakeLists.txt";
+  if(system(renameCommand.c_str()))
+    {
+      result = new std::string("An error occurred while running '" + renameCommand + "'.");
+      return false;
+    }
+
+  this->nameLibrary = fileNameReal;
   return true;
 }
 
+modelCDMFolder* modelCDMLibrary::CreateFolder(const std::string& name, std::string*& result)
+{
+  //TODO:: mkdir depending on OS
+    std::string command = "mkdir " + path + "/" + name;
+    if(system(command.c_str()))
+      {
+        result = new std::string("Error executing: " + command + ".");
+        return NULL;
+      }
+    modelCDMFolder* folder = new modelCDMFolder(path + "/" + name, level + 1);
+    this->folders.push_back(folder);
+    this->children.push_back(folder);
+
+    return folder;
+}
+
 const bool modelCDMLibrary::Refresh(std::string*& result)
 {
-  //TODO: implement method
+  //set attributes
+  this->type = wxDIR_DIRS;
+
+  //open CMakeList
+  std::string pathMakeLists = path + "/CMakeLists.txt";
+
+  std::ifstream confFile;
+  confFile.open((pathMakeLists).c_str());
+
+  std::string word;
+  while(confFile.is_open() && !confFile.eof())
+    {
+      //get sets
+      std::getline(confFile,word,'(');
+      std::vector<std::string> wordBits;
+      CDMUtilities::splitter::split(wordBits,word," (\n",CDMUtilities::splitter::no_empties);
+
+      if(wordBits[wordBits.size()-1] == "SET")
+        {
+          //get library name
+          std::getline(confFile,word,')');
+          CDMUtilities::splitter::split(wordBits, word, " ", CDMUtilities::splitter::no_empties);
+          if(wordBits[0] == "LIBRARY_NAME")
+            {
+              word = wordBits[1];
+              for (int i = 2; i < wordBits.size(); i++)
+                {
+                  word += " " + wordBits[i];
+                }
+
+              this->nameLibrary = word;
+            }
+        }
+    }
+
+  confFile.close();
+
+  //check children
+  std::vector<bool> checked(this->children.size(), false);
+  std::vector<bool> checkedFolders(this->folders.size(), false);
+
+  //check all folders
+  wxDir dir(crea::std2wx((this->path).c_str()));
+  if (dir.IsOpened())
+    {
+      wxString fileName;
+      bool cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_DIRS);
+      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++)
+            {
+              if (this->folders[i]->GetName() == folderName)
+                {
+                  found = true;
+                  int pos = std::find(this->children.begin(), this->children.end(), this->folders[i]) - this->children.begin();
+                  checked[pos] = true;
+                  checkedFolders[i] = true;
+                  if(!this->folders[i]->Refresh(result))
+                    return false;
+                }
+            }
+          if(!found)
+            {
+              modelCDMFolder* folder = new modelCDMFolder(this->path + "/" + stdfileName, this->level + 1);
+              this->folders.push_back(folder);
+              this->children.push_back(folder);
+            }
+          cont = dir.GetNext(&fileName);
+        }
+
+      cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_FILES);
+      while (cont)
+        {
+          std::string stdfileName = crea::wx2std(fileName);
+
+          //if CMakeLists, create CMakeLists
+          if(stdfileName == "CMakeLists.txt")
+            {
+              if (this->CMakeLists == NULL)
+                {
+                  this->CMakeLists = new modelCDMCMakeListsFile(this->path + "/" + stdfileName, this->level + 1);
+                  this->children.push_back(this->CMakeLists);
+                }
+              else
+                {
+                  int pos = std::find(this->children.begin(), this->children.end(), this->CMakeLists) - this->children.begin();
+                  checked[pos] = true;
+                  if(!this->CMakeLists->Refresh(result))
+                    return false;
+                }
+            }
+          //if is an unknown file, create file
+          else
+            {
+              bool found = false;
+              for (int i = 0; i <!found && this->children.size(); i++)
+                {
+                  if (this->children[i]->GetName() == stdfileName)
+                    {
+                      found = true;
+                      checked[i] = true;
+                      if(!this->children[i]->Refresh(result))
+                        return false;
+                    }
+                }
+
+              if(!found)
+                {
+                  modelCDMFile* file = new modelCDMFile(this->path + "/" + stdfileName, this->level + 1);
+                  this->children.push_back(file);
+                }
+            }
+
+          cont = dir.GetNext(&fileName);
+        }
+    }
+
+  for (int i = 0; i < checkedFolders.size(); i++)
+    {
+      if(!checkedFolders[i])
+        {
+          this->folders.erase(this->folders.begin()+i);
+          checkedFolders.erase(checkedFolders.begin()+i);
+          i--;
+        }
+    }
+  for (int i = 0; i < checked.size(); i++)
+    {
+      if(!checked[i])
+        {
+          delete this->children[i];
+          this->children.erase(this->children.begin()+i);
+          checked.erase(checked.begin()+i);
+          i--;
+        }
+    }
+  this->SortChildren();
   return true;
 }
index 9f19defbcf01f41b462ebf8816ecb2eaa1d00859..6bcee75dea9ca3917e28c1d8736b0742971070ac 100644 (file)
@@ -48,17 +48,15 @@ public:
   ~modelCDMLibrary();
 
   const std::string& GetNameLibrary() const;
+  bool SetNameLibrary(const std::string& fileName, std::string*& result);
+
+  modelCDMFolder* CreateFolder(const std::string& name, std::string*& result);
 
-  bool CreateFolder(
-      const std::string& name,
-      std::string*& result,
-      const std::string& path = "/"
-  );
   virtual const bool Refresh(std::string*& result);
 
 private:
   std::string nameLibrary;
-  std::vector<modelCDMLibrary*> libraries;
+  std::vector<modelCDMFolder*> folders;
 };
 
 #endif /* MODELCDMLIBRARY_H_ */
index 9ec218a6817fd7fa3e59fc144d1bc8d71059d61e..82a514c3f0d354d32af72758108fd201ad364dad 100644 (file)
@@ -35,6 +35,7 @@
 #include "modelCDMPackage.h"
 
 #include <fstream>
+#include <algorithm>
 
 #include "creaWx.h"
 #include "wx/dir.h"
@@ -382,6 +383,229 @@ bool modelCDMPackage::CreateBlackBox(
 
 const bool modelCDMPackage::Refresh(std::string*& result)
 {
-  //TODO: implement method
+  std::cout << "refreshing package" << std::endl;
+  this->type = wxDIR_DIRS;
+  this->name = name;
+  this->level = level;
+  this->path = path;
+
+  //Get Package Name
+
+  //TODO: set pathMakeLists for windows
+  std::string pathMakeLists = path + "/CMakeLists.txt";
+
+  std::ifstream confFile;
+  confFile.open((pathMakeLists).c_str());
+
+  std::string word;
+  while(confFile.is_open() && !confFile.eof())
+    {
+      //get sets
+      std::getline(confFile,word,'(');
+      std::vector<std::string> wordBits;
+      CDMUtilities::splitter::split(wordBits,word," (\n",CDMUtilities::splitter::no_empties);
+
+      if(wordBits[wordBits.size()-1] == "SET")
+        {
+          //get package name
+          std::getline(confFile,word,')');
+          CDMUtilities::splitter::split(wordBits, word, " ", CDMUtilities::splitter::no_empties);
+          if(wordBits[0] == "BBTK_PACKAGE_NAME")
+            {
+              word = wordBits[1];
+              for (int i = 2; i < wordBits.size(); i++)
+                {
+                  word += " " + wordBits[i];
+                }
+              wordBits.clear();
+              CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
+
+              this->namePackage = wordBits[0];
+            }
+          else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_AUTHOR")
+            {
+              word = wordBits[1];
+              for (int i = 2; i < wordBits.size(); i++)
+                {
+                  word += " " + wordBits[i];
+                }
+              wordBits.clear();
+              CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
+
+              this->authors = wordBits[0];
+            }
+          else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_DESCRIPTION")
+            {
+              word = wordBits[1];
+              for (int i = 2; i < wordBits.size(); i++)
+                {
+                  word += " " + wordBits[i];
+                }
+              wordBits.clear();
+              CDMUtilities::splitter::split(wordBits, word, "\"", CDMUtilities::splitter::no_empties);
+
+              this->description = wordBits[0];
+            }
+          else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_MAJOR_VERSION")
+            {
+              this->version = wordBits[1];
+            }
+          else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_MINOR_VERSION")
+            {
+              this->version += "." + wordBits[1];
+            }
+          else if(wordBits[0] == "${BBTK_PACKAGE_NAME}_BUILD_VERSION")
+            {
+              this->version += "." + wordBits[1];
+            }
+        }
+    }
+
+
+
+  std::vector<bool> checked(this->children.size(), false);
+  std::vector<bool> checkedBlackBoxes(this->blackBoxes.size(), false);
+
+  //check all folders
+  wxDir dir(crea::std2wx((this->path).c_str()));
+  if (dir.IsOpened())
+    {
+      wxString fileName;
+      bool cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_DIRS);
+      while (cont)
+        {
+
+          std::string stdfileName = crea::wx2std(fileName);
+
+
+          if(stdfileName == "src")
+            {
+              wxDir srcF(crea::std2wx((path + "/" + "src").c_str()));
+              if (srcF.IsOpened())
+                {
+                  wxString srcName;
+                  bool innerCont = srcF.GetFirst(&srcName, wxT("*.h"), wxDIR_FILES);
+                  while (innerCont)
+                    {
+                      std::string blackBoxName = crea::wx2std(srcName);
+                      if(crea::wx2std(srcName.substr(0,2)) == "bb")
+                        {
+                          //check if box already exist
+                          bool found = false;
+                          for (int i = 0;!found && i < this->blackBoxes.size(); i++)
+                            {
+                              if (this->blackBoxes[i]->GetName() == blackBoxName)
+                                {
+                                  found = true;
+                                  int pos = std::find(this->children.begin(), this->children.end(), this->blackBoxes[i]) - this->children.begin();
+                                  checked[pos] = true;
+                                  checkedBlackBoxes[i] = true;
+                                  if(!this->blackBoxes[i]->Refresh(result))
+                                    return false;
+                                }
+                            }
+                          if(!found)
+                            {
+                              modelCDMBlackBox* blackBox = new modelCDMBlackBox(blackBoxName, path + "/" + "src", this->level +1);
+                              this->blackBoxes.push_back(blackBox);
+                              this->children.push_back(blackBox);
+                            }
+                        }
+                      innerCont = srcF.GetNext(&srcName);
+                    }
+                }
+
+            }
+          //if not src
+          else
+            {
+              //check if they already exist
+              bool found = false;
+              for (int i = 0;!found && i < this->children.size(); i++)
+                {
+                  if (this->children[i]->GetName() == stdfileName)
+                    {
+                      found = true;
+                      checked[i] = true;
+                      if(!this->children[i]->Refresh(result))
+                        return false;
+                    }
+                }
+              if(!found)
+                {
+                  modelCDMFolder* folder = new modelCDMFolder(this->path + "/" + stdfileName, this->level + 1);
+                  this->children.push_back(folder);
+                }
+              cont = dir.GetNext(&fileName);
+            }
+        }
+
+      cont = dir.GetFirst(&fileName, wxEmptyString, wxDIR_FILES);
+      while (cont)
+        {
+          std::string stdfileName = crea::wx2std(fileName);
+
+          //if CMakeLists, create CMakeLists
+          if(stdfileName == "CMakeLists.txt")
+            {
+              if (this->CMakeLists == NULL)
+                {
+                  this->CMakeLists = new modelCDMCMakeListsFile(this->path + "/" + stdfileName, this->level + 1);
+                  this->children.push_back(this->CMakeLists);
+                }
+              else
+                {
+                  int pos = std::find(this->children.begin(), this->children.end(), this->CMakeLists) - this->children.begin();
+                  checked[pos] = true;
+                  if(!this->CMakeLists->Refresh(result))
+                    return false;
+                }
+            }
+          //if is an unknown file, create file
+          else
+            {
+              bool found = false;
+              for (int i = 0; i <!found && this->children.size(); i++)
+                {
+                  if (this->children[i]->GetName() == stdfileName)
+                    {
+                      found = true;
+                      checked[i] = true;
+                      if(!this->children[i]->Refresh(result))
+                        return false;
+                    }
+                }
+
+              if(!found)
+                {
+                  modelCDMFile* file = new modelCDMFile(this->path + "/" + stdfileName, this->level + 1);
+                  this->children.push_back(file);
+                }
+            }
+
+          cont = dir.GetNext(&fileName);
+        }
+    }
+
+  for (int i = 0; i < checkedBlackBoxes.size(); i++)
+    {
+      if(!checkedBlackBoxes[i])
+        {
+          this->blackBoxes.erase(this->blackBoxes.begin()+i);
+          checkedBlackBoxes.erase(checkedBlackBoxes.begin()+i);
+          i--;
+        }
+    }
+  for (int i = 0; i < checked.size(); i++)
+    {
+      if(!checked[i])
+        {
+          delete this->children[i];
+          this->children.erase(this->children.begin()+i);
+          checked.erase(checked.begin()+i);
+          i--;
+        }
+    }
+  this->SortChildren();
   return true;
 }
index 44ee9b10a49b74095b82bc165fc2bf9d81da7999..ddb0da95b857ba904d4711c804a1857b028bf67b 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "wxCDMApplicationDescriptionPanel.h"
 
+#include "CDMUtilities.h"
 #include "wxCDMMainFrame.h"
 
 #include "creaDevManagerIds.h"
@@ -41,6 +42,7 @@
 
 BEGIN_EVENT_TABLE(wxCDMApplicationDescriptionPanel, wxPanel)
 EVT_BUTTON(ID_BUTTON_PREV, wxCDMApplicationDescriptionPanel::OnBtnReturn)
+EVT_BUTTON(ID_BUTTON_SET_NAME, wxCDMApplicationDescriptionPanel::OnBtnSetExeName)
 EVT_BUTTON(ID_BUTTON_CREATE_CLASS, wxCDMApplicationDescriptionPanel::OnBtnCreateClass)
 EVT_BUTTON(ID_BUTTON_CREATE_FOLDER, wxCDMApplicationDescriptionPanel::OnBtnCreateFolder)
 EVT_BUTTON(ID_BUTTON_EDIT_CMAKELISTSFILE, wxCDMApplicationDescriptionPanel::OnBtnEditCMakeLists)
@@ -89,16 +91,16 @@ void wxCDMApplicationDescriptionPanel::CreateControls()
   returnbt->SetToolTip(wxT("Return to the active project description."));
   sizer->Add(returnbt, 0, wxALIGN_CENTER | wxALL, 5);
 
-  //Welcome
+  //Title
   sizer->Add(new wxStaticText(this, -1, _("Application")),0, wxALIGN_CENTER, 0);
 
   //Image
   sizer->Add(new wxStaticBitmap(this, -1, wxBitmap(AIcon64)),0, wxALIGN_CENTER, 0);
 
-  //Project Name
-  sizer->Add(new wxStaticText(this, -1, crea::std2wx(this->application->GetNameApplication())),0, wxALIGN_CENTER, 0);
+  //Application Name
+  sizer->Add(new wxStaticText(this, -1, crea::std2wx(this->application->GetName())),0, wxALIGN_CENTER, 0);
 
-  //Project Properties
+  //Properties
   wxStaticBoxSizer* propertiesBox = new wxStaticBoxSizer(wxVERTICAL, this, wxT("&Properties"));
   wxPanel* propertiesPanel = new wxPanel(this);
   wxBoxSizer* propertiesPanelSizer = new wxBoxSizer(wxVERTICAL);
@@ -107,10 +109,10 @@ void wxCDMApplicationDescriptionPanel::CreateControls()
 
   wxStaticText *pMainFile = new wxStaticText(propertiesPanel, -1, wxT("Executable Name"));
   wxBoxSizer* pMainFilesz = new wxBoxSizer(wxHORIZONTAL);
-  wxStaticText* pMainFiletc = new wxStaticText(propertiesPanel, wxID_ANY, crea::std2wx(this->application->GetExecutableName()));
-  wxButton* pMainFilebt = new wxButton(propertiesPanel, ID_BUTTON_SET_VERSION, wxT("Set"));
+  this->executableNametc = new wxStaticText(propertiesPanel, wxID_ANY, crea::std2wx(this->application->GetExecutableName()));
+  wxButton* pMainFilebt = new wxButton(propertiesPanel, ID_BUTTON_SET_NAME, wxT("Set"));
   pMainFilebt->SetToolTip(wxT("Set the name of the executable file for the application."));
-  pMainFilesz->Add(pMainFiletc, 0, wxALIGN_CENTER_VERTICAL, 0);
+  pMainFilesz->Add(this->executableNametc, 0, wxALIGN_CENTER_VERTICAL, 0);
   pMainFilesz->Add(pMainFilebt, 0, wxALIGN_CENTER | wxLEFT, 10);
 
   propertiesGridSizer->Add(pMainFile, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
@@ -169,6 +171,30 @@ void wxCDMApplicationDescriptionPanel::OnBtnReturn(wxCommandEvent& event)
   wxPostEvent(this->GetParent(), *newEvent);
 }
 
+void wxCDMApplicationDescriptionPanel::OnBtnSetExeName(wxCommandEvent& event)
+{
+  //get name
+  wxString versionWx = wxGetTextFromUser(
+      wxT("Enter the new executable name"),
+      wxT("Change Application Executable Name - creaDevManager"),
+      crea::std2wx(this->application->GetExecutableName())
+  );
+  //check name
+  std::vector<std::string> parts;
+  CDMUtilities::splitter::split(parts, crea::wx2std(versionWx), " .", CDMUtilities::splitter::no_empties);
+  if(parts.size() > 0)
+    {
+      std::string* result;
+      if(!this->application->SetExecutableName(crea::wx2std(versionWx), result))
+        wxMessageBox(crea::std2wx(*result),_T("Change Application Executable Name - Error!"),wxOK | wxICON_ERROR);
+    }
+  else
+    {
+      wxMessageBox(crea::std2wx("No name specified"),_T("Set Application Executable Name - Error!"),wxOK | wxICON_ERROR);
+    }
+  this->executableNametc->SetLabel(crea::std2wx(this->application->GetExecutableName()));
+}
+
 void wxCDMApplicationDescriptionPanel::OnBtnCreateClass(wxCommandEvent& event)
 {
   //TODO: implement method
@@ -178,9 +204,33 @@ void wxCDMApplicationDescriptionPanel::OnBtnCreateClass(wxCommandEvent& event)
 
 void wxCDMApplicationDescriptionPanel::OnBtnCreateFolder(wxCommandEvent& event)
 {
-  //TODO: implement method
-  std::cerr << "Event OnBtnCreateFolder not implemented" << std::endl;
-  event.Skip();
+  //get name
+  wxString folderName = wxGetTextFromUser(
+      wxT("Enter the name of the new folder:"),
+      wxT("Create Folder - creaDevManager")
+  );
+  //check name
+  std::vector<std::string> parts;
+  CDMUtilities::splitter::split(parts, crea::wx2std(folderName), " /\\\"", CDMUtilities::splitter::no_empties);
+  if(parts.size() > 0)
+    {
+      std::string* result;
+      modelCDMFolder* folderC = this->application->CreateFolder(crea::wx2std(folderName), result);
+      if(folderC == NULL)
+        {
+          wxMessageBox(crea::std2wx(*result),_T("Create Folder - Error!"),wxOK | wxICON_ERROR);
+          return;
+        }
+      ((wxCDMMainFrame*)this->GetParent())->RefreshProject();
+      wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_DISPLAY_CHANGED);
+      newEvent->SetInt(folderC->GetId());
+      wxPostEvent(this->GetParent(), *newEvent);
+      wxMessageBox(crea::std2wx("The folder was successfully created"),_T("Create Folder - Success"),wxOK | wxICON_INFORMATION);
+    }
+  else
+    {
+      wxMessageBox(crea::std2wx("No name specified"),_T("Create Folder - Error!"),wxOK | wxICON_ERROR);
+    }
 }
 
 void wxCDMApplicationDescriptionPanel::OnBtnEditCMakeLists(wxCommandEvent& event)
index fbb0a24675a1295b9be1c70e3ec107a5c43d6e4e..0aa79fa1a89517c09fba8498cc2ab310fd00f5a6 100644 (file)
@@ -70,10 +70,12 @@ public:
 
 private:
   modelCDMApplication* application;
+  wxStaticText* executableNametc;
 
   //handlers
 protected:
   void OnBtnReturn(wxCommandEvent& event);
+  void OnBtnSetExeName(wxCommandEvent& event);
   void OnBtnCreateClass(wxCommandEvent& event);
   void OnBtnCreateFolder(wxCommandEvent& event);
   void OnBtnEditCMakeLists(wxCommandEvent& event);
index 7ac3841eaaea595c32c52fe6485a2fd981a5a5ab..9db89c4bad481323853cc2ac700e1bbb17106c8e 100644 (file)
@@ -35,6 +35,7 @@
 #include "wxCDMFolderDescriptionPanel.h"
 
 #include "wxCDMMainFrame.h"
+#include "CDMUtilities.h"
 
 #include "creaDevManagerIds.h"
 #include "images/FdIcon64.xpm"
@@ -43,6 +44,7 @@ BEGIN_EVENT_TABLE(wxCDMFolderDescriptionPanel, wxPanel)
 EVT_BUTTON(ID_BUTTON_PREV, wxCDMFolderDescriptionPanel::OnBtnReturn)
 EVT_BUTTON(ID_BUTTON_OPEN_FOLDER, wxCDMFolderDescriptionPanel::OnBtnOpenInExplorer)
 EVT_BUTTON(ID_BUTTON_EDIT_CMAKELISTSFILE, wxCDMFolderDescriptionPanel::OnBtnEditCMakeLists)
+EVT_BUTTON(ID_BUTTON_CREATE_FOLDER, wxCDMFolderDescriptionPanel::OnBtnCreateFolder)
 END_EVENT_TABLE()
 
 wxCDMFolderDescriptionPanel::wxCDMFolderDescriptionPanel(
@@ -114,6 +116,10 @@ void wxCDMFolderDescriptionPanel::CreateControls()
       actionsPanelSizer->Add(editCMakebt, 0, wxALL, 5);
     }
 
+  wxButton* createFolderbt = new wxButton(actionsPanel, ID_BUTTON_CREATE_FOLDER, _T("Create Folder"));
+  createFolderbt->SetToolTip(wxT("Create a new folder inside this folder."));
+  actionsPanelSizer->Add(createFolderbt, 0, wxALL, 5);
+
   actionsPanel->SetSizer(actionsPanelSizer);
   actionsPanelSizer->Fit(actionsPanel);
   actionsBox->Add(actionsPanel, 0, wxEXPAND);
@@ -135,8 +141,8 @@ void wxCDMFolderDescriptionPanel::OnBtnReturn(wxCommandEvent& event)
 void wxCDMFolderDescriptionPanel::OnBtnOpenInExplorer(wxCommandEvent& event)
 {
   std::string* result;
-    if(!this->folder->OpenInFileExplorer(result))
-      wxMessageBox(crea::std2wx(*result),_T("Open Folder - Error!"),wxOK | wxICON_ERROR);
+  if(!this->folder->OpenInFileExplorer(result))
+    wxMessageBox(crea::std2wx(*result),_T("Open Folder - Error!"),wxOK | wxICON_ERROR);
 }
 
 void wxCDMFolderDescriptionPanel::OnBtnEditCMakeLists(wxCommandEvent& event)
@@ -156,6 +162,37 @@ void wxCDMFolderDescriptionPanel::OnBtnEditCMakeLists(wxCommandEvent& event)
     }
 }
 
+void wxCDMFolderDescriptionPanel::OnBtnCreateFolder(wxCommandEvent& event)
+{
+  //get name
+  wxString folderName = wxGetTextFromUser(
+      wxT("Enter the name of the new folder:"),
+      wxT("Create Folder - creaDevManager")
+  );
+  //check name
+  std::vector<std::string> parts;
+  CDMUtilities::splitter::split(parts, crea::wx2std(folderName), " /\\\"", CDMUtilities::splitter::no_empties);
+  if(parts.size() > 0)
+    {
+      std::string* result;
+      modelCDMFolder* folderC = this->folder->CreateFolder(crea::wx2std(folderName), result);
+      if(folderC == NULL)
+        {
+          wxMessageBox(crea::std2wx(*result),_T("Create Folder - Error!"),wxOK | wxICON_ERROR);
+          return;
+        }
+      ((wxCDMMainFrame*)this->GetParent())->RefreshProject();
+      wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_DISPLAY_CHANGED);
+      newEvent->SetInt(folderC->GetId());
+      wxPostEvent(this->GetParent(), *newEvent);
+      wxMessageBox(crea::std2wx("The folder was successfully created"),_T("Create Folder - Success"),wxOK | wxICON_INFORMATION);
+    }
+  else
+    {
+      wxMessageBox(crea::std2wx("No name specified"),_T("Create Folder - Error!"),wxOK | wxICON_ERROR);
+    }
+}
+
 void wxCDMFolderDescriptionPanel::OnCMakeMouseEnter(wxMouseEvent& event)
 {
   wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LIST_ITEM_SELECTED);
index 514984e3258e02db41a75ddc92960a4caf4dcd09..ecf47ff12a3718d802259600269d8e264840feb7 100644 (file)
@@ -75,6 +75,7 @@ private:
 protected:
   void OnBtnReturn(wxCommandEvent& event);
   void OnBtnEditCMakeLists(wxCommandEvent& event);
+  void OnBtnCreateFolder(wxCommandEvent& event);
   void OnBtnOpenInExplorer(wxCommandEvent& event);
 
   void OnCMakeMouseEnter(wxMouseEvent& event);
index 61cec4d23a81460d13fd152cdcee4518460c4516..1c14b74cba6c48f405c6f22a89b0e364c1603115 100644 (file)
@@ -34,6 +34,7 @@
 
 #include "wxCDMLibraryDescriptionPanel.h"
 
+#include "CDMUtilities.h"
 #include "wxCDMMainFrame.h"
 
 #include "creaDevManagerIds.h"
@@ -41,6 +42,7 @@
 
 BEGIN_EVENT_TABLE(wxCDMLibraryDescriptionPanel, wxPanel)
 EVT_BUTTON(ID_BUTTON_PREV, wxCDMLibraryDescriptionPanel::OnBtnReturn)
+EVT_BUTTON(ID_BUTTON_SET_NAME, wxCDMLibraryDescriptionPanel::OnBtnSetExeName)
 EVT_BUTTON(ID_BUTTON_CREATE_CLASS, wxCDMLibraryDescriptionPanel::OnBtnCreateClass)
 EVT_BUTTON(ID_BUTTON_CREATE_FOLDER, wxCDMLibraryDescriptionPanel::OnBtnCreateFolder)
 EVT_BUTTON(ID_BUTTON_EDIT_CMAKELISTSFILE, wxCDMLibraryDescriptionPanel::OnBtnEditCMakeLists)
@@ -95,8 +97,34 @@ void wxCDMLibraryDescriptionPanel::CreateControls()
   //Image
   sizer->Add(new wxStaticBitmap(this, -1, wxBitmap(LIcon64)),0, wxALIGN_CENTER, 0);
 
-  //Project Name
-  sizer->Add(new wxStaticText(this, -1, crea::std2wx(this->library->GetNameLibrary())),0, wxALIGN_CENTER, 0);
+  //Application Name
+  sizer->Add(new wxStaticText(this, -1, crea::std2wx(this->library->GetName())),0, wxALIGN_CENTER, 0);
+
+  //Properties
+  wxStaticBoxSizer* propertiesBox = new wxStaticBoxSizer(wxVERTICAL, this, wxT("&Properties"));
+  wxPanel* propertiesPanel = new wxPanel(this);
+  wxBoxSizer* propertiesPanelSizer = new wxBoxSizer(wxVERTICAL);
+
+  wxFlexGridSizer* propertiesGridSizer = new wxFlexGridSizer(4, 2, 9, 15);
+
+  wxStaticText *pMainFile = new wxStaticText(propertiesPanel, -1, wxT("Library Name"));
+  wxBoxSizer* pMainFilesz = new wxBoxSizer(wxHORIZONTAL);
+  this->libraryNametc = new wxStaticText(propertiesPanel, wxID_ANY, crea::std2wx(this->library->GetNameLibrary()));
+  wxButton* pMainFilebt = new wxButton(propertiesPanel, ID_BUTTON_SET_NAME, wxT("Set"));
+  pMainFilebt->SetToolTip(wxT("Set the name of the library for the project."));
+  pMainFilesz->Add(this->libraryNametc, 0, wxALIGN_CENTER_VERTICAL, 0);
+  pMainFilesz->Add(pMainFilebt, 0, wxALIGN_CENTER | wxLEFT, 10);
+
+  propertiesGridSizer->Add(pMainFile, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
+  propertiesGridSizer->Add(pMainFilesz, 1, wxEXPAND);
+
+  propertiesGridSizer->AddGrowableCol(1,1);
+
+  propertiesPanelSizer->Add(propertiesGridSizer, 0, wxEXPAND);
+  propertiesPanel->SetSizer(propertiesPanelSizer);
+  propertiesPanelSizer->Fit(propertiesPanel);
+  propertiesBox->Add(propertiesPanel, 0, wxEXPAND);
+  sizer->Add(propertiesBox, 0, wxEXPAND | wxALL, 10);
 
   //Actions
   wxStaticBoxSizer* actionsBox = new wxStaticBoxSizer(wxHORIZONTAL, this, wxT("&Actions"));
@@ -136,6 +164,30 @@ void wxCDMLibraryDescriptionPanel::OnBtnReturn(wxCommandEvent& event)
   wxPostEvent(this->GetParent(), *newEvent);
 }
 
+void wxCDMLibraryDescriptionPanel::OnBtnSetExeName(wxCommandEvent& event)
+{
+  //get name
+  wxString versionWx = wxGetTextFromUser(
+      wxT("Enter the new executable name"),
+      wxT("Change Library Name - creaDevManager"),
+      crea::std2wx(this->library->GetNameLibrary())
+  );
+  //check name
+  std::vector<std::string> parts;
+  CDMUtilities::splitter::split(parts, crea::wx2std(versionWx), " .", CDMUtilities::splitter::no_empties);
+  if(parts.size() > 0)
+    {
+      std::string* result;
+      if(!this->library->SetNameLibrary(crea::wx2std(versionWx), result))
+        wxMessageBox(crea::std2wx(*result),_T("Change Library Name - Error!"),wxOK | wxICON_ERROR);
+    }
+  else
+    {
+      wxMessageBox(crea::std2wx("No name specified"),_T("Set Library Name - Error!"),wxOK | wxICON_ERROR);
+    }
+  this->libraryNametc->SetLabel(crea::std2wx(this->library->GetNameLibrary()));
+}
+
 void wxCDMLibraryDescriptionPanel::OnBtnCreateClass(wxCommandEvent& event)
 {
   //TODO: implement method
@@ -145,28 +197,52 @@ void wxCDMLibraryDescriptionPanel::OnBtnCreateClass(wxCommandEvent& event)
 
 void wxCDMLibraryDescriptionPanel::OnBtnCreateFolder(wxCommandEvent& event)
 {
-  //TODO: implement method
-  std::cerr << "Event OnBtnCreateFolder not implemented" << std::endl;
-  event.Skip();
+  //get name
+  wxString folderName = wxGetTextFromUser(
+      wxT("Enter the name of the new folder:"),
+      wxT("Create Folder - creaDevManager")
+  );
+  //check name
+  std::vector<std::string> parts;
+  CDMUtilities::splitter::split(parts, crea::wx2std(folderName), " /\\\"", CDMUtilities::splitter::no_empties);
+  if(parts.size() > 0)
+    {
+      std::string* result;
+      modelCDMFolder* folderC = this->library->CreateFolder(crea::wx2std(folderName), result);
+      if(folderC == NULL)
+        {
+          wxMessageBox(crea::std2wx(*result),_T("Create Folder - Error!"),wxOK | wxICON_ERROR);
+          return;
+        }
+      ((wxCDMMainFrame*)this->GetParent())->RefreshProject();
+      wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_DISPLAY_CHANGED);
+      newEvent->SetInt(folderC->GetId());
+      wxPostEvent(this->GetParent(), *newEvent);
+      wxMessageBox(crea::std2wx("The folder was successfully created"),_T("Create Folder - Success"),wxOK | wxICON_INFORMATION);
+    }
+  else
+    {
+      wxMessageBox(crea::std2wx("No name specified"),_T("Create Folder - Error!"),wxOK | wxICON_ERROR);
+    }
 }
 
 void wxCDMLibraryDescriptionPanel::OnBtnEditCMakeLists(wxCommandEvent& event)
 {
   std::string* result;
-    if(!this->library->OpenCMakeListsFile(result))
-      wxMessageBox(crea::std2wx(*result),_T("Open CMakeLists File - Error!"),wxOK | wxICON_ERROR);
+  if(!this->library->OpenCMakeListsFile(result))
+    wxMessageBox(crea::std2wx(*result),_T("Open CMakeLists File - Error!"),wxOK | wxICON_ERROR);
 
-    wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LIST_ITEM_DESELECTED);
+  wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_COMMAND_LIST_ITEM_DESELECTED);
 
-    if(this->library->GetCMakeLists() != NULL)
-      {
-        int CMId = this->library->GetCMakeLists()->GetId();
-        newEvent->SetInt(CMId);
-        newEvent->SetId(0);
-        wxPostEvent(this->GetParent(), *newEvent);
-      }
+  if(this->library->GetCMakeLists() != NULL)
+    {
+      int CMId = this->library->GetCMakeLists()->GetId();
+      newEvent->SetInt(CMId);
+      newEvent->SetId(0);
+      wxPostEvent(this->GetParent(), *newEvent);
+    }
 
-    event.Skip();
+  event.Skip();
 }
 
 void wxCDMLibraryDescriptionPanel::OnBtnOpenFolder(wxCommandEvent& event)
index 37c0ff241bb0aa3c163a137c5bec682a9a8e19b5..c6c60e3ae7f5c78e8c977f561e045aa36259af30 100644 (file)
@@ -70,10 +70,12 @@ public:
 
 private:
   modelCDMLibrary* library;
+  wxStaticText* libraryNametc;
 
   //handlers
 protected:
   void OnBtnReturn(wxCommandEvent& event);
+  void OnBtnSetExeName(wxCommandEvent& event);
   void OnBtnCreateClass(wxCommandEvent& event);
   void OnBtnCreateFolder(wxCommandEvent& event);
   void OnBtnEditCMakeLists(wxCommandEvent& event);
index dc2843edbed71b79d5c1465ac4ce1dc099358041..414d88b2791d24f16a586cf98e09791e4b54484e 100755 (executable)
@@ -534,7 +534,12 @@ void wxCDMMainFrame::OnMenuRefreshProject(wxCommandEvent& event)
       wxMessageBox( crea::std2wx(result->c_str()), wxT("Refresh Project - Error"), wxICON_ERROR);
     }
   this->tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject());
+
   this->auiManager.Update();
+
+  this->tree_Projects->SelectItem(this->model->GetProject()->GetId(), false);
+  this->tree_Projects->SelectItem(this->model->GetProject()->GetId(), true);
+
   //TODO: Show possible problems in CMakeLists files
   event.Skip();
 }