]> Creatis software - crea.git/commitdiff
Feature #1711
authorDaniel Gonzalez <daniel.gonzalez@creatis.insa-lyon.fr>
Thu, 31 Jan 2013 15:45:37 +0000 (16:45 +0100)
committerDaniel Gonzalez <daniel.gonzalez@creatis.insa-lyon.fr>
Thu, 31 Jan 2013 15:45:37 +0000 (16:45 +0100)
CreaDevManager application implementation

- Changes for windows compatibility. project open had stopped working in fedora.
- Graphical Application creation enabled.

lib/creaDevManagerLib/modelCDMAppli.cpp
lib/creaDevManagerLib/modelCDMAppli.h
lib/creaDevManagerLib/modelCDMApplication.cpp
lib/creaDevManagerLib/modelCDMProject.cpp
lib/creaDevManagerLib/modelCDMProject.h
lib/creaDevManagerLib/wxCDMAppliDescriptionPanel.cpp
lib/creaDevManagerLib/wxCDMMainFrame.cpp
lib/creaDevManagerLib/wxCDMProjectActionsPanel.cpp
lib/creaDevManagerLib/wxCDMTreeItemId.cpp

index be0852a35a7ea5a13ee43e360cc85dcec9aa28e5..bcb0876ae6fcef9063820a0f535a8206ecb3875a 100644 (file)
@@ -122,6 +122,7 @@ const std::vector<modelCDMApplication*>& modelCDMAppli::GetApplications() const
 
 modelCDMApplication* modelCDMAppli::CreateApplication(
     const std::string& namein,
+    const int& type,
     std::string*& result
 )
 {
@@ -130,64 +131,131 @@ modelCDMApplication* modelCDMAppli::CreateApplication(
   std::string name;
   for (int i = 0; i < (int)(words.size()); i++)
     {
-         name += words[i];
+      name += words[i];
     }
   if (name == "")
     {
       result = new std::string("The given name is not valid:  '/\\*\"% are forbidden.");
-         return NULL;
+      return NULL;
     }
-  //copy template application folder with new name
+
+  if (type == 0)
+    {
+      //copy template application folder with new name
 #ifdef _WIN32
-  std::string copyCommand = "xcopy \"" + this->path + CDMUtilities::SLASH + "template_appli\" \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "\" /Y";
+      std::string copyCommand = "xcopy \"" + this->path + CDMUtilities::SLASH + "template_appli\" \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "\" /Y";
 #else
-  std::string copyCommand = "cp -r \"" + this->path + CDMUtilities::SLASH + "template_appli\" \"" + this->path + CDMUtilities::SLASH + name + "\"";
+      std::string copyCommand = "cp -r \"" + this->path + CDMUtilities::SLASH + "template_appli\" \"" + this->path + CDMUtilities::SLASH + name + "\"";
 #endif
 
-  if(system(copyCommand.c_str()))
-    {
-      result = new std::string("An error occurred while running '" + copyCommand + "'.");
-      return NULL;
-    }
-  //set name of library in CMakeLists inside copied folder
-  std::string line;
-  std::ifstream in((this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt").c_str());
-  if( !in.is_open())
-    {
-      result = new std::string("CMakeLists.txt file failed to open.");
-      return NULL;
+      if(system(copyCommand.c_str()))
+        {
+          result = new std::string("An error occurred while running '" + copyCommand + "'.");
+          return NULL;
+        }
+      //set name of library in CMakeLists inside copied folder
+      std::string line;
+      std::ifstream in((this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt").c_str());
+      if( !in.is_open())
+        {
+          result = new std::string("CMakeLists.txt file failed to open.");
+          return NULL;
+        }
+      std::ofstream out((this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.tmp").c_str());
+      while (getline(in, line))
+        {
+          if(line == "SET ( EXE_NAME   MyExe  )")
+            line = "SET ( EXE_NAME   " + name + "  )";
+          out << line << std::endl;
+        }
+      in.close();
+      out.close();
+      //delete old file and rename new file
+#ifdef _WIN32
+      std::string renameCommand = "move /Y \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt\"";
+#else
+      std::string renameCommand = "mv \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt\"";
+#endif
+
+      if(system(renameCommand.c_str()))
+        {
+          result = new std::string("An error occurred while running '" + renameCommand + "'.");
+          return NULL;
+        }
+
+      //add application to model
+      modelCDMApplication* application = new modelCDMApplication(this, this->path + CDMUtilities::SLASH + name, name, this->level + 1);
+      this->applications.push_back(application);
+      this->children.push_back(application);
+
+      this->SortChildren();
+
+      result = new std::string(this->path + CDMUtilities::SLASH + name);
+      return application;
     }
-  std::ofstream out((this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.tmp").c_str());
-  while (getline(in, line))
+  else if(type == 1)
     {
-      if(line == "SET ( EXE_NAME   MyExe  )")
-        line = "SET ( EXE_NAME   " + name + "  )";
-      out << line << std::endl;
-    }
-  in.close();
-  out.close();
-  //delete old file and rename new file
+      //copy template application folder with new name
 #ifdef _WIN32
-  std::string renameCommand = "move /Y \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt\"";
+      std::string copyCommand = "xcopy \"" + this->path + CDMUtilities::SLASH + "template_wx_appli\" \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "\" /Y";
 #else
-  std::string renameCommand = "mv \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt\"";
+      std::string copyCommand = "cp -r \"" + this->path + CDMUtilities::SLASH + "template_wx_appli\" \"" + this->path + CDMUtilities::SLASH + name + "\"";
 #endif
 
-  if(system(renameCommand.c_str()))
-    {
-      result = new std::string("An error occurred while running '" + renameCommand + "'.");
-      return NULL;
-    }
+      if(system(copyCommand.c_str()))
+        {
+          result = new std::string("An error occurred while running '" + copyCommand + "'.");
+          return NULL;
+        }
+      //set name of library in CMakeLists inside copied folder
+      std::string line;
+      std::ifstream in((this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt").c_str());
+      if( !in.is_open())
+        {
+          result = new std::string("CMakeLists.txt file failed to open.");
+          return NULL;
+        }
+      std::ofstream out((this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.tmp").c_str());
+      while (getline(in, line))
+        {
+          if(line == "SET ( EXE_NAME   MyExeWx  )")
+            line = "SET ( EXE_NAME   " + name + "  )";
+          out << line << std::endl;
+        }
+      in.close();
+      out.close();
+      //delete old file and rename new file
+#ifdef _WIN32
+      std::string renameCommand = "move /Y \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt\"";
+#else
+      std::string renameCommand = "mv \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt.tmp\" \"" + this->path + CDMUtilities::SLASH + name + CDMUtilities::SLASH + "CMakeLists.txt\"";
+#endif
+
+      if(system(renameCommand.c_str()))
+        {
+          result = new std::string("An error occurred while running '" + renameCommand + "'.");
+          return NULL;
+        }
 
-  //add application to model
-  modelCDMApplication* application = new modelCDMApplication(this, this->path + CDMUtilities::SLASH + name, name, this->level + 1);
-  this->applications.push_back(application);
-  this->children.push_back(application);
+      //add application to model
+      modelCDMApplication* application = new modelCDMApplication(this, this->path + CDMUtilities::SLASH + name, name, this->level + 1);
+      this->applications.push_back(application);
+      this->children.push_back(application);
 
-  this->SortChildren();
+      this->SortChildren();
 
-  result = new std::string(this->path + CDMUtilities::SLASH + name);
-  return application;
+      result = new std::string(this->path + CDMUtilities::SLASH + name);
+      return application;
+    }
+  else
+    {
+      std::string res = "Invalid application type: ";
+      res += type;
+      res += std::string(".\n0:Console application.\n1:GUI Application (wxWidgets).");
+      result = new std::string(res);
+
+      return NULL;
+    }
 }
 
 const bool modelCDMAppli::Refresh(std::string*& result)
index 5a85580dd4dcf615c914f322e2a961e6a5810697..579f12a2105e859710a5898c6e6cda0b783466ce 100644 (file)
@@ -74,11 +74,13 @@ public:
   /**
    * Creates a new application in the system and creates an application node. This node is stored in the applications attribute and returned.
    * @param name Name of the new application.
+   * @param type 0=console application, 1=GUI Application (wxWidgets).
    * @param result Result message of the operation.
    * @return Reference to the created application or NULL.
    */
   modelCDMApplication* CreateApplication(
       const std::string& name,
+      const int& type,
       std::string*& result
   );
   /**
index c77f3be7f9471511b915aafb9aebc6a0b6f5251e..dcfb21e84ff0d86df300b3964e0183dff3946e92 100644 (file)
@@ -140,7 +140,7 @@ modelCDMApplication::modelCDMApplication(modelCDMIProjectTreeNode* parent, const
                       std::getline(fileStream,word,'(');
                       std::vector<std::string> wordBits;
                       CDMUtilities::splitter::split(wordBits,word," \n",CDMUtilities::splitter::no_empties);
-                      if (wordBits[wordBits.size() - 1] == "main")
+                      if (wordBits[wordBits.size() - 1] == "main" || wordBits[wordBits.size() - 1] == "IMPLEMENT_APP")
                         {
                           this->mainFile = file;
                         }
index 8b93e189a2f3decab2cad2de0d9906fe3332d5bb..520fc0e8d822c92d637a3e1b0e21920ff9df9729 100644 (file)
@@ -416,13 +416,14 @@ modelCDMIProjectTreeNode* modelCDMProject::CreateLibrary(
 
 modelCDMIProjectTreeNode* modelCDMProject::CreateApplication(
     const std::string& name,
+    const int& type,
     std::string*& result,
     const std::string& path
 )
 {
   if(this->appli != NULL)
     {
-      return this->appli->CreateApplication(name, result);
+      return this->appli->CreateApplication(name, type, result);
     }
   result = new std::string("there is no appli folder in this project.");
   return NULL;
index 60a5ad59dc98c7eb13276b41b8d4d1f7ae7b5b98..085d9e4f6e75dd2b2de966e697e6f4bee9c9e25f 100644 (file)
@@ -182,6 +182,7 @@ public:
    */
   modelCDMIProjectTreeNode* CreateApplication(
       const std::string& name,
+      const int& type,
       std::string*& result,
       const std::string& path = "/appli"
   );
index 1378f60efb7da213b4c938143d1c0fac8b876f3d..94f0d0037d0740ba622763237dda98cda0d30fbe 100644 (file)
@@ -126,7 +126,7 @@ void wxCDMAppliDescriptionPanel::CreateControls()
   std::vector<modelCDMApplication*> applications = this->appli->GetApplications();
   for (int i = 0; i < (int)(applications.size()); i++)
     {
-               wxHyperlinkCtrl* pApplicationlk = new wxHyperlinkCtrl(propertiesPanel,ID_LINK_SELECT_APPLICATION, crea::std2wx(applications[i]->GetName().c_str()), crea::std2wx(applications[i]->GetName().c_str()), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
+      wxHyperlinkCtrl* pApplicationlk = new wxHyperlinkCtrl(propertiesPanel,ID_LINK_SELECT_APPLICATION, crea::std2wx(applications[i]->GetName().c_str()), crea::std2wx(applications[i]->GetName().c_str()), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
       pApplicationlk->SetWindowStyle(wxALIGN_LEFT | wxNO_BORDER);
       std::string tt = "Name: " + applications[i]->GetName() + "\n";
       tt += "Location: " + applications[i]->GetPath();
@@ -184,36 +184,59 @@ void wxCDMAppliDescriptionPanel::CreateControls()
 void wxCDMAppliDescriptionPanel::OnBtnCreateApplication(wxCommandEvent& event)
 {
   //get name
-  wxString applicationName = wxGetTextFromUser(
-      _T("Enter the new application name"),
-      _T("New Application - creaDevManager"),
-      _T("")
-  );
-  //check name
-  if(applicationName.Len() > 0)
-    {
-      std::string* result;
-      //create library
-      modelCDMIProjectTreeNode* application = this->appli->CreateApplication(crea::wx2std(applicationName),result);
-      //check library created
-      if(application == NULL)
-        {
-          wxMessageBox(crea::std2wx(*result),_T("New Application - Error!"),wxOK | wxICON_ERROR);
-          event.Skip();
-          return;
-        }
-      wxMessageBox(crea::std2wx("Application successfully created."),_T("New Application - Success!"),wxOK | wxICON_INFORMATION);
-
-      //refreshing tree and description
-      //send event instead of calling parent to avoid crashing
-
-      ((wxCDMMainFrame*)this->GetParent())->RefreshProject();
-
-      wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_DISPLAY_CHANGED);
-      newEvent->SetClientData(application);
-      wxPostEvent(this->GetParent(), *newEvent);
-      event.Skip();
-    }
+  wxTextEntryDialog* appDlg = new wxTextEntryDialog(
+        this,
+        wxT("Enter the new application name (NO white spaces)"),
+        wxT("New Application - creaDevManager"),
+        wxT(""),
+        wxOK | wxCANCEL
+    );
+
+    if (appDlg->ShowModal() == wxID_OK)
+      {
+        std::string applicationName = crea::wx2std(appDlg->GetValue());
+        //check name
+        if(applicationName.size() > 0)
+          {
+            wxArrayString types;
+            types.Add(wxT("Console Application"));
+            types.Add(wxT("GUI Application (wxWidgets)"));
+            int applicationType = wxGetSingleChoiceIndex(
+                wxT("Select the application type"),
+                wxT("New Application - creaDevManager"),
+                types
+            );
+
+            if (applicationType != -1)
+              {
+                std::string* result;
+                //create library
+                modelCDMIProjectTreeNode* application = this->appli->CreateApplication(applicationName, applicationType ,result);
+                //check library created
+                if(application == NULL)
+                  {
+                    wxMessageBox(crea::std2wx(*result),_T("New Application - Error!"),wxOK | wxICON_ERROR);
+                    event.Skip();
+                    return;
+                  }
+                wxMessageBox(crea::std2wx("Application successfully created."),_T("New Application - Success!"),wxOK | wxICON_INFORMATION);
+
+                //refreshing tree and description
+                //send event instead of calling parent to avoid crashing
+
+                ((wxCDMMainFrame*)this->GetParent())->RefreshProject();
+
+                wxCommandEvent* newEvent = new wxCommandEvent(wxEVT_DISPLAY_CHANGED);
+                newEvent->SetClientData(application);
+                wxPostEvent(this->GetParent(), *newEvent);
+                event.Skip();
+              }
+          }
+        else
+          {
+            wxMessageBox(crea::std2wx("Invalid application name, please try again with a valid name."),_T("New Application - Error!"),wxOK | wxICON_INFORMATION);
+          }
+      }
 }
 
 void wxCDMAppliDescriptionPanel::OnBtnEditCMakeLists(wxCommandEvent& event)
index e5e1eaad1fcc57558984390659224d65f171823d..1b80f28ac7e938366333e0e7095b3b2a58503b3d 100755 (executable)
@@ -346,9 +346,9 @@ void wxCDMMainFrame::OnMenuOpenProject(wxCommandEvent& event)
       std::cout << "building ui" << std::endl;
 
       //populate tree control
-         tree_Projects->Unselect();
-         this->actualTreeItem.Unset();
-      tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject());
+          tree_Projects->BuildTree(this->model->GetModelElements(), this->model->GetProject());
+          tree_Projects->Unselect();
+          this->actualTreeItem.Unset();
          tree_Projects->SelectItem(this->model->GetProject()->GetId().GetWxId(), true);
 
 
@@ -587,11 +587,12 @@ void wxCDMMainFrame::OnTreeSelectionChanged(wxTreeEvent& event)
 
   //get selected element
   wxTreeItemId elementId = event.GetItem();
+  std::cout << "Tree Selection id: " << elementId.m_pItem << this->actualTreeItem.m_pItem << std::endl;
   //elementId.IsOk() && this->tree_Projects->IsSelected(elementId)
   if(elementId.IsOk() && this->actualTreeItem != elementId)
     {
       
-      std::cout << "Tree Selection id: " << elementId.m_pItem << std::endl;
+      std::cout << "Valid tree selection id: " << elementId.m_pItem << std::endl;
       //get element from model
       modelCDMIProjectTreeNode* element = this->model->GetModelElements()[elementId];
 
index ddfe262e867ed7271cd971e5045e3903be2843e8..676e1b2b96b38ceef2acb89db307f0e9c39ce776 100755 (executable)
@@ -170,10 +170,14 @@ void wxCDMProjectActionsPanel::OnBtnConnectProject(wxCommandEvent& event)
     wxT("Please select the folder containing the bbtkPackage file you want to use. Usually it is where you built your project."),
     crea::std2wx(this->project->GetBuildPath())
   );
+  std::cout << crea::wx2std(file) << std::endl;
+  std::cout.flush();
 
-  if(file.IsEmpty() || !this->project->Connect(result, crea::wx2std(file)))
+  if(crea::wx2std(file) == "" || !this->project->Connect(result, crea::wx2std(file)))
     {
-      wxMessageBox(crea::std2wx(result->c_str()), wxT("Plug Packages - Error!"));
+      if (crea::wx2std(file) == "")
+        result = new std::string("Folder not specified.");
+      wxMessageBox(crea::std2wx(result->c_str()), wxT("Plug BBTK Packages - Error!"), wxICON_ERROR);
       return;
     }
 #ifdef _WIN32
index 635ec07cd37f81759a2d9f4e74c998fc97b3ca83..0818c011761fdabee50f36adb3f65908a782b7d6 100644 (file)
@@ -35,7 +35,9 @@
 
 #include "wxCDMTreeItemId.h"
 
-wxCDMTreeItemId::wxCDMTreeItemId(){}
+wxCDMTreeItemId::wxCDMTreeItemId(){
+  this->_id = this->_idWx.m_pItem;
+}
 
 wxCDMTreeItemId::wxCDMTreeItemId(const wxTreeItemId& id)
 {