X-Git-Url: http://woldlab.caltech.edu/gitweb/?a=blobdiff_plain;f=qui%2Fmussagl.cpp;h=d0df4c6c05dfc5e56c0e9ed73e6f8ade53c71176;hb=02fc4144044a430f8bee6617c0c9871d4ebe5e4d;hp=60f14f904720fcbe9ff38a18ceaf046c6e5b0ff1;hpb=f97f88c1efa04ed70e8df6b0e7521f3824d76368;p=mussa.git diff --git a/qui/mussagl.cpp b/qui/mussagl.cpp index 60f14f9..d0df4c6 100644 --- a/qui/mussagl.cpp +++ b/qui/mussagl.cpp @@ -1,8 +1,15 @@ #include 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" @@ -44,22 +51,41 @@ int main(int argc, char **argv) #endif //opts.doc_dir = get_doc_dir(); QApplication app(argc, argv, opts.useGUI); - Q_INIT_RESOURCE(icons); 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; @@ -67,9 +93,13 @@ int main(int argc, char **argv) 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");