modelCDMApplication* modelCDMAppli::CreateApplication(
const std::string& namein,
+ const int& type,
std::string*& result
)
{
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)
/**
* 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
);
/**
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;
}
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;
*/
modelCDMIProjectTreeNode* CreateApplication(
const std::string& name,
+ const int& type,
std::string*& result,
const std::string& path = "/appli"
);
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();
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)
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);
//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];
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
#include "wxCDMTreeItemId.h"
-wxCDMTreeItemId::wxCDMTreeItemId(){}
+wxCDMTreeItemId::wxCDMTreeItemId(){
+ this->_id = this->_idWx.m_pItem;
+}
wxCDMTreeItemId::wxCDMTreeItemId(const wxTreeItemId& id)
{