#include <boost/filesystem/operations.hpp>
using namespace boost::filesystem;
+#ifdef USE_PYTHON
#include "py/python.hpp"
+extern "C" void initmussa();
+//extern "C" void initmussaqui();
+#endif
+
#include "qui/MussaWindow.hpp"
+#include "qui/threading/ThreadManager.hpp"
+#include "qui/threading/InterpreterThread.hpp"
#include "alg/parse_options.hpp"
#include "mussa_exceptions.hpp"
#endif
//opts.doc_dir = get_doc_dir();
QApplication app(argc, argv, opts.useGUI);
- Q_INIT_RESOURCE(icons);
- const QIcon mussa_icon(":/icons/mussa.png");
- app.setWindowIcon(mussa_icon);
initialize_mussa(opts, argc, argv);
if (opts.analysis == 0) {
return 1;
}
-
+
try {
#ifdef USE_PYTHON
if (opts.runAsPythonInterpeter) {
- get_py().interpreter();
+ ThreadManager &thread = ThreadManagerFactory();
+ // allow the user to keep the interpreter open even after
+ // closing all the windows
+ app.setQuitOnLastWindowClosed(false);
+ InterpreterThread *interp = thread.create_interpreter();
+ if (!interp) {
+ std::cerr << "Unable to initialize interpeter thread" << std::endl;
+ return 1;
+ }
+ MussaPython *py = interp->get_py_ptr();
+ if (!py) {
+ std::cerr << "Unable to initialize python interpreter" << std::endl;
+ return 1;
+ }
+ py->add_module("mussa", &initmussa);
+ //py->add_module("mussaqui", &initmussaqui);
+ // quit when the interpreter exits
+ QObject::connect(interp, SIGNAL(finished()),
+ &app, SLOT(quit()));
+ interp->start();
+ app.exec();
} else
#endif /* USE_PYTHON */
if (opts.useGUI) {
- MussaWindow win(opts.analysis);
- win.show();
+ MussaWindow *win = new MussaWindow(opts.analysis);
+ win->show();
app.exec();
}
return 0;
qFatal(e.what());
} catch (boost::filesystem::filesystem_error e) {
qFatal(e.what());
- } catch( boost::python::error_already_set ) {
+ }
+#ifdef USE_PYTHON
+ catch( boost::python::error_already_set ) {
PyErr_Print();
- } catch (std::runtime_error e) {
+ }
+#endif
+ catch (std::runtime_error e) {
qFatal(e.what());
} catch (...) {
qFatal("unrecognized exception");