#include <boost/filesystem/operations.hpp>
+using namespace boost::filesystem;
+
#ifdef USE_PYTHON
-#include <boost/python.hpp>
-namespace py = boost::python;
+#include "py/python.hpp"
extern "C" void initmussa();
+//extern "C" void initmussaqui();
#endif
-using namespace boost::filesystem;
+#include "qui/MussaWindow.hpp"
+#include "qui/threading/ThreadManager.hpp"
+#include "qui/threading/InterpreterThread.hpp"
+#include "alg/parse_options.hpp"
+#include "mussa_exceptions.hpp"
#include <stdlib.h>
#include <iostream>
#include <QApplication>
-#include "qui/MussaWindow.hpp"
-#include "alg/parse_options.hpp"
-#include "mussa_exceptions.hpp"
+#if defined(Q_WS_MAC)
+#include <CoreFoundation/CoreFoundation.h>
+#endif
+
+std::string get_doc_dir()
+{
+#if defined(Q_WS_MAC)
+ CFURLRef pluginRef = CFBundleCopyBundleURL(CFBundleGetMainBundle());
+ CFStringRef macPath = CFURLCopyFileSystemPath(pluginRef,
+ kCFURLPOSIXPathStyle);
+ const char *pathPtr = CFStringGetCStringPtr(macPath,
+ CFStringGetSystemEncoding());
+ std::string doc_dir(pathPtr);
+ qDebug("Path = %s", pathPtr);
+ CFRelease(pluginRef);
+ CFRelease(macPath);
+#else
+ return std::string(".");
+#endif
+}
int main(int argc, char **argv)
{
std::clog << "DISPLAY not set, running in console mode only" << std::endl;
}
#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) {
- PyImport_AppendInittab("mussa", &initmussa);
- Py_Initialize();
- PyRun_InteractiveLoop(stdin, "mussa");
+ 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;
} catch (boost::filesystem::filesystem_error e) {
qFatal(e.what());
}
-#ifdef USE_PYTHON
- catch (py::error_already_set e) {
+#ifdef USE_PYTHON
+ catch( boost::python::error_already_set ) {
PyErr_Print();
}
-#endif /* USE_PYTHON */
+#endif
catch (std::runtime_error e) {
qFatal(e.what());
} catch (...) {