2 # ---------------------------------------------------------------------
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
10 # This software is governed by the CeCILL-B license under French law and
11 # abiding by the rules of distribution of free software. You can use,
12 # modify and/ or redistribute the software under the terms of the CeCILL-B
13 # license as circulated by CEA, CNRS and INRIA at the following URL
14 # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
15 # or in the file LICENSE.txt.
17 # As a counterpart to the access to the source code and rights to copy,
18 # modify and redistribute granted by the license, users are provided only
19 # with a limited warranty and the software's author, the holder of the
20 # economic rights, and the successive licensors have only limited
23 # The fact that you are presently reading this means that you have had
24 # knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------ */
28 #ifdef _USE_WXWIDGETS_
32 //==========================================================================
34 //==========================================================================
35 #include "bbtkObject.h"
36 #include "bbtkInterpreter.h"
37 #include "bbtkWxBlackBox.h"
38 #include "bbtkWxGUIConsole.h"
40 #include <wx/cmdline.h>
44 //==========================================================================
46 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
47 #if wxMAJOR_VERSION <= 2
48 // Command line options definition
49 static const wxCmdLineEntryDesc cmdLineDesc[] =
51 { wxCMD_LINE_SWITCH, _T("h"), _T("help"), _T("print this help or help on the application defined in input bbs file if any") },
52 { wxCMD_LINE_SWITCH, _T("g"), _T("graphical-dialog"), _T("prompt the input parameter values using graphical dialog") },
53 { wxCMD_LINE_SWITCH, _T("t"), _T("text-dialog"), _T("prompt the input parameter values in text mode") },
54 { wxCMD_LINE_SWITCH, _T("c"), _T("console"), _T("open bbi console") },
55 { wxCMD_LINE_SWITCH, _T("N"), _T("no-console"), _T("never open bbi console even on error") },
56 { wxCMD_LINE_SWITCH, _T("q"), _T("quiet"), _T("be quiet (='message max 0')") },
57 { wxCMD_LINE_SWITCH, _T("d"), _T("debug"), _T("turn all messages on (='message all 9')") },
58 { wxCMD_LINE_SWITCH, _T("D"), _T("Debug"), _T("memory debug on exit (='debug -D')") },
59 { wxCMD_LINE_PARAM, NULL, NULL, _T("file [file [...]]"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE },
63 // Command line options definition
64 static const wxCmdLineEntryDesc cmdLineDesc[] =
66 { wxCMD_LINE_SWITCH, "h", "help", "print this help or help on the application defined in input bbs file if any" },
67 { wxCMD_LINE_SWITCH, "g", "graphical-dialog", "prompt the input parameter values using graphical dialog" },
68 { wxCMD_LINE_SWITCH, "t", "text-dialog", "prompt the input parameter values in text mode" },
69 { wxCMD_LINE_SWITCH, "c", "console", "open bbi console" },
70 { wxCMD_LINE_SWITCH, "N", "no-console", "never open bbi console even on error" },
71 { wxCMD_LINE_SWITCH, "q", "quiet", "be quiet (='message max 0')" },
72 { wxCMD_LINE_SWITCH, "d", "debug", "turn all messages on (='message all 9')" },
73 { wxCMD_LINE_SWITCH, "D", "Debug", "memory debug on exit (='debug -D')" },
74 { wxCMD_LINE_PARAM, NULL, NULL, "file [file [...]]", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE },
82 //==========================================================================
84 //==========================================================================
85 // Processes the command line parsing result
86 struct WxProcessCmdLine
89 void Process(wxCmdLineParser& parser);
92 std::vector<std::string> argv;
97 bool graphical_dialog;
101 std::map<std::string,std::string> param_map;
102 std::vector<std::string> input_file;
105 //==========================================================================
107 //==========================================================================
108 void WxProcessCmdLine::Process(wxCmdLineParser& parser)
111 if (parser.Found(_T("D")))
113 bbtk::StaticInitTime::PrintObjectListInfo = true;
116 debug = ( parser.Found(_T("d")) );
117 quiet = ( parser.Found(_T("q")) );
118 help = ( parser.Found(_T("h")) );
120 //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0
121 #if wxMAJOR_VERSION <= 2
122 graphical_dialog = ( parser.Found(_T("wxcommandlineg")) );
124 printf("EED Warnning. WxProcessCmdLine::Process g wxcommandlineg ");
125 graphical_dialog = ( parser.Found(_T("g")) );
128 text_dialog = ( parser.Found(_T("t")) );
129 no_console = ( parser.Found(_T("N")) );
130 if (quiet) bbtk::MessageManager::SetMessageLevel("max",0);
131 if (debug) bbtk::MessageManager::SetMessageLevel("all",9);
133 // parse the arguments and consider those which contain a "="
134 // as set input commands, other as files
135 int pargc = parser.GetParamCount();
136 for (int i=0; i<pargc; ++i)
138 std::string s = bbtk::wx2std(parser.GetParam(i));
139 std::string::size_type pos = s.find_first_of("=");
140 if (std::string::npos != pos)
142 std::string left = s.substr(0,pos);
143 std::string right = s.substr(pos+1,s.size());
144 param_map[left]=right;
148 input_file.push_back(s);
152 bool usage = (help && (input_file.size()==0));
154 std::cout << "BBI (The Black Box Interpreter) - bbtk "
155 << bbtk::GetVersion() << " - (c) Creatis 2007-2008"
161 console = ( parser.Found(_T("c")) ||
162 ((input_file.size() == 0) &&
167 //==========================================================================
170 //==========================================================================
171 class wxBBIApp : public wxApp
176 // std::cout << "wxBBIApp::OnExit()"<<std::endl;
177 // bbtk::Object::PrintObjectListInfo();
179 void OnInitCmdLine(wxCmdLineParser& parser);
180 bool OnCmdLineParsed(wxCmdLineParser& parser);
182 WxProcessCmdLine cmd;
184 //==========================================================================
187 //==========================================================================
188 void wxBBIApp::OnInitCmdLine(wxCmdLineParser& parser)
190 parser.SetDesc(cmdLineDesc);
192 //==========================================================================
194 //==========================================================================
195 bool wxBBIApp::OnCmdLineParsed(wxCmdLineParser& parser)
198 // if (!cmd.proceed) return false;
201 //==========================================================================
208 //==========================================================================
209 // The `main program' equivalent, creating the windows and returning the
211 bool wxBBIApp::OnInit( )
213 printf("EED wxBBIApp::OnInit 1\n");
215 //FILE *ff; ff = fopen ("/tmp/wt.log","a+"); fprintf(ff,"EED wxBBIApp::OnInit\n"); fclose(ff);
217 // std::cout << "OnInit"<<std::endl;
220 //See http://www.wxwindows.org/faqgtk.htm#locale
221 setlocale(LC_NUMERIC, "C");
224 printf("EED wxBBIApp::OnInit 2\n");
226 if (cmd.quiet) bbtk::MessageManager::SetMessageLevel("max",0);
227 if (cmd.debug) bbtk::MessageManager::SetMessageLevel("all",9);
231 //printf ("EED bbi wxBBIApp::OnInit .....................\n");
232 //cmd.input_file.push_back("/home/davila/Borrame/testwt.bbs");
234 printf("EED wxBBIApp::OnInit 2.1\n");
236 bbtk::WxGUIConsole *I = new bbtk::WxGUIConsole(0,_T("bbi"),wxSize(800,600));
237 printf("EED wxBBIApp::OnInit 2.2\n");
239 printf("EED wxBBIApp::OnInit 2.3\n");
240 if (cmd.console) I->Show(true);
242 printf("EED wxBBIApp::OnInit 3\n");
244 I->SetInputs(cmd.param_map);
246 bool help_on_script = cmd.help && (cmd.input_file.size() > 0);
247 if (help_on_script) I->SetNoExecMode(true);
248 if (cmd.graphical_dialog) I->SetDialogMode(bbtk::VirtualExec::GraphicalDialog);
249 if (cmd.text_dialog) I->SetDialogMode(bbtk::VirtualExec::TextDialog);
251 std::vector<std::string>::const_iterator i;
254 printf("EED wxBBIApp::OnInit 4\n");
256 for (i=cmd.input_file.begin(); i!=cmd.input_file.end(); ++i)
258 error = ! I->InterpretFile(*i);
261 bool show_on_error = error && ! cmd.no_console;
262 if (show_on_error) I->Show();
264 I->SetNoExecMode(false);
269 I->GetInterpreter()->GetExecuter()->GetFactory()->PrintHelpDescriptor("workspace",package,false);
272 printf("EED wxBBIApp::OnInit 5\n");
275 std::cout << "soe="<<show_on_error <<std::endl;
276 std::cout << "con="<<console<<std::endl;
277 std::cout << "iws="<<bbtk::Wx::IsSomeWindowShown()<<std::endl;
279 if (!(show_on_error || cmd.console || bbtk::Wx::IsSomeWindowAlive() ))
281 printf("EED wxBBIApp::OnInit 6\n");
283 // std::cout << "I->Close"<<std::endl;
287 // std::cout << "!I->Close"<<std::endl;
290 // std::cout << "EO OnInit"<<std::endl;
291 printf("EED wxBBIApp::OnInit 7\n");
296 //==========================================================================
300 //==========================================================================
302 //==========================================================================
303 IMPLEMENT_APP(wxBBIApp);
305 // How to have a Console and wxWidgets
306 // http://www.wxwidgets.org/wiki/index.php/MSVC_Setup_Guide
307 // In Visual C++ 6 (7 should be similar), to create an application that is both a console application
308 // (cout's to the console are visible) and has a wxWidgets GUI,
309 // you need to use the linker option "/subsystem:console" and the following code:
310 int main(int argc, char* argv[])
312 printf("EED main cccc\n ");
314 //FILE *ff; ff = fopen ("/tmp/wt.log","a+"); fprintf(ff,"EED main C\n"); fclose(ff);
318 wcstombs(buffer , ::GetCommandLine() , 1500 );
319 printf("EED main cc%scc\n ",buffer);
320 return WinMain(::GetModuleHandle(NULL), NULL, buffer , SW_SHOWNORMAL);
321 // return WinMain(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), SW_SHOWNORMAL);
326 //==========================================================================
327 // OTHER ( Linux... )
328 //==========================================================================
330 IMPLEMENT_APP_NO_MAIN(wxBBIApp);
333 int main(int argc, char* argv[])
335 printf("EED bbi main BBBB\n");
338 //FILE *ff; ff = fopen ("/tmp/wt.log","a+"); fprintf(ff,"EED main A\n"); fclose(ff);
340 wxMessageOutput::Set( new wxMessageOutputBest );
342 wxCmdLineParser parser(cmdLineDesc,argc,argv);
343 int val = parser.Parse(false);
349 WxProcessCmdLine cmdline;
350 cmdline.Process(parser);
352 if (!cmdline.proceed) return 0;
354 if (cmdline.no_console)
356 // std::cout << "main NC"<<std::endl;
358 bbtk::Interpreter::Pointer I = bbtk::Interpreter::New();
359 I->SetInputs(cmdline.param_map);
360 bool help_on_script = cmdline.help && (cmdline.input_file.size() > 0);
361 if (help_on_script) I->SetNoExecMode(true);
362 if (cmdline.text_dialog) I->SetDialogMode(bbtk::VirtualExec::TextDialog);
363 std::vector<std::string>::const_iterator i;
365 for (i=cmdline.input_file.begin();
366 i!=cmdline.input_file.end(); ++i)
368 error = ! I->InterpretFile(*i);
373 I->SetNoExecMode(false);
375 I->GetExecuter()->GetFactory()->PrintHelpDescriptor("workspace",
379 if (cmdline.input_file.size()==0)
381 I->CommandLineInterpreter();
382 } // if cmdline.input_file.size
386 } // if cmdline.no_console
391 #endif // defined(_WIN32)
392 //==========================================================================
402 //==========================================================================
404 //==========================================================================
406 #include "bbtkInterpreter.h"
408 // Processes the command line parsing result
409 struct ProcessCmdLine
412 void Process(int argc_, char *argv_[]);
413 bool Found(std::string value);
416 std::vector<std::string> argv;
421 bool graphical_dialog;
425 std::map<std::string,std::string> param_map;
426 std::vector<std::string> input_file;
430 bool ProcessCmdLine::Found(std::string value)
433 for (int i=1; i<argc; ++i)
443 void ProcessCmdLine::Process(int argc_, char *argv_[])
446 for (int i=0; i<argc; ++i)
448 argv.push_back(argv_[i]);
451 //EED proceed = true;
454 bbtk::StaticInitTime::PrintObjectListInfo = true;
457 debug = ( Found("d") );
458 quiet = ( Found("q") );
459 help = ( Found("h") );
460 graphical_dialog = ( Found("g") );
461 text_dialog = ( Found("t") );
462 no_console = ( Found("N") );
464 if (quiet) bbtk::MessageManager::SetMessageLevel("max",0);
465 if (debug) bbtk::MessageManager::SetMessageLevel("all",9);
467 // parse the arguments and consider those which contain a "="
468 // as set input commands, other as files
469 //EED int pargc = parser.GetParamCount();
470 for (int i=1; i<argc; ++i)
472 std::string s = argv[i];
473 std::string::size_type pos = s.find_first_of("=");
474 if (std::string::npos != pos)
476 std::string left = s.substr(0,pos);
477 std::string right = s.substr(pos+1,s.size());
478 param_map[left]=right;
482 input_file.push_back(s);
486 bool usage = (help && (input_file.size()==0));
488 std::cout << "BBI (The Black Box Interpreter) - bbtk "
489 << bbtk::GetVersion() << " - (c) Creatis 2007-2008"
491 //EED parser.Usage();
495 console = ( Found("c") ||
496 ((input_file.size() == 0) &&
501 //==========================================================================
505 int main(int argc, char* argv[])
507 printf("EED bbi main AA\n");
511 // std::cout << "usage : "<<argv[0]<<" [filename]"<<std::endl;
515 std::cout << "BBI (Black Box Interpreter) - bbtk "
516 << bbtk::GetVersion()<< " - (c) Creatis 2007"
519 //FILE *ff; ff = fopen ("/tmp/wt.log","a+"); fprintf(ff,"EED main B\n"); fclose(ff);
521 bbtk::Interpreter::Pointer I = bbtk::Interpreter::New();
524 I->CommandLineInterpreter();
528 cmd.Process(argc,argv);
529 I->SetInputs(cmd.param_map);
531 std::string f(argv[1]);
535 // bbtk::Wx::LoopUntilAllWindowsClose();
542 #endif //#ifdef _USE_WXWIDGETS_