add prototype wrapping of the qt sequence browser
[mussa.git] / qui / mussagl.cpp
index 04418d2a655a5f3e0d41cfcbae394825b5ad9e0b..d0df4c6c05dfc5e56c0e9ed73e6f8ade53c71176 100644 (file)
@@ -3,9 +3,13 @@ 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"
 
@@ -47,24 +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);
-  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;