]> Creatis software - crea.git/blob - appli/creaNewProject/creaNewProject.cpp
avoid crash if no environment variable for bbtk not defined
[crea.git] / appli / creaNewProject / creaNewProject.cpp
1 #include <creaWx.h>
2 #include <wx/dirdlg.h>
3 #include <stdlib.h> // for getenv
4
5 class myApp : public wxApp
6 {
7 public:
8   bool OnInit( );
9   int  OnExit() { return true; }
10 };
11
12 IMPLEMENT_APP(myApp);
13 CREA_WXMAIN_WITH_CONSOLE
14
15 bool myApp::OnInit( )
16 {
17   wxApp::OnInit();
18 #ifdef __WXGTK__
19   //See http://www.wxwindows.org/faqgtk.htm#locale
20   setlocale(LC_NUMERIC, "C");
21 #endif
22    wxInitAllImageHandlers();
23
24    wxString dir = wxDirSelector(_T("Select directory in which to create the project"), _T(""), wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST );
25
26    if (dir.IsEmpty()) return false;
27
28    wxString name = wxGetTextFromUser(_T("Enter project name"),
29                                      _T("creaNewProject"),
30                                      _T("New"));
31    if (name.IsEmpty()) return false;
32    
33    wxString description = wxGetTextFromUser(_T("Enter Package Description (html format)"),
34                                      _T("create New Package"),
35                                      _T("NO_DESCRIPTION"));
36    if (description.IsEmpty()) return false;
37
38 #if(_WIN32)
39      
40         std::string command("creaNewProject.bat ");
41         std::string command1("creaSed.exe ");
42         std::string command2("del ");
43
44         command  += "\"" + crea::wx2std(dir) + "\" \"" + crea::wx2std(name) + "\"";
45         command1 += "\"" + crea::wx2std(dir)+"\\"+crea::wx2std(name)+"\\CMakeLists.txt.in\" " + "NameOfTheProject " + crea::wx2std(name) + "> \"" + crea::wx2std(dir)+"\\"+crea::wx2std(name)+"\\CMakeLists.txt\"";
46         command2 += "\"" + crea::wx2std(dir)+"\\"+crea::wx2std(name)+"\\CMakeLists.txt.in\"";
47         if ( ! system ( command.c_str() ) )
48         {
49                 system ( command1.c_str() );
50                 system ( command2.c_str() );
51                 wxMessageBox(_T("New Project created !"),_T("creaNewProject"),
52                                 wxOK | wxICON_INFORMATION);
53
54                 // Create a Package at the same time.   JPR
55                 
56                 /// \TODO rewrite, according to new trick // JPR
57                                    // \TODO rewrite, according to new trick // JPR
58                                         char * install_Dir = getenv("bbtk_DIR");
59                                                 if(install_Dir != NULL) // variable not always defined
60                                                 {
61                                                         std::string execGUICreateNewPackage(install_Dir);
62                                                         execGUICreateNewPackage = "bbi " + execGUICreateNewPackage;
63                                         execGUICreateNewPackage += "\..\..\..\share\bbtk\bbs\toolsbbtk\appli\GUICreatePackage.bbs";
64                                                         system(execGUICreateNewPackage.c_str());
65                                                 }
66         }
67         else 
68         {
69                 wxString err(_T("An error occured while running '"));
70                 err +=  crea::std2wx(command) + _T("'");
71                 wxMessageBox(err,_T("creaNewProject"),wxOK | wxICON_ERROR);
72         }
73
74 // ------ LINUX / MacOS
75
76 #else
77         std::string command("creaNewProject.sh ");
78         command += "\"" + crea::wx2std(dir) + "\"" +" " + crea::wx2std(name);
79         
80         if ( ! system ( command.c_str() ) )
81         {
82                 wxMessageBox(_T("New Project created !"),_T("creaNewProject"),
83                                         wxOK | wxICON_INFORMATION);
84
85                 // Create a Package at the same time.   JPR
86                 
87                 //execGUICreateNewPackage += "/../../../share/bbtk/bbs/toolsbbtk/appli/GUICreatePackage.bbs";
88                 //system(execGUICreateNewPackage.c_str());
89                 
90                 // or, better, new trick :
91                 // bbCreatePackage nomDirectory nomPackage author Description
92    
93                 char *author = getenv("USER");
94                 std::string nomDirectory = crea::wx2std(dir) + "/" + crea::wx2std(name);
95                 std::string nomPackageDirectory = nomDirectory + "/" + "bbtk_" + crea::wx2std(name) + "_PKG";
96
97                 std::string bbCreatePackage("bbCreatePackage ");
98                 bbCreatePackage += nomDirectory + " " + crea::wx2std(name) + " " + author + " " + crea::wx2std(description);
99                 system (bbCreatePackage.c_str());
100                 
101                 std::string add;
102                 add = "echo 'ADD_SUBDIRECTORY(bbtk_" + crea::wx2std(name)  + "_PKG)' >> " + nomDirectory + "/CMakeLists.txt";
103                 //std::cout << add << std::endl;
104                 system(add.c_str());
105                 
106         }
107         else
108         {       
109                 wxString err(_T("An error occured while running '"));
110                 err +=  crea::std2wx(command) + _T("'");
111                 wxMessageBox(err,_T("creaNewProject"),wxOK | wxICON_ERROR);
112         }
113
114 #endif
115
116    return false;
117 }
118