diff options
-rw-r--r-- | src/MainWindow.h | 1 | ||||
-rw-r--r-- | src/lexer.l | 7 | ||||
-rw-r--r-- | src/mainwin.cc | 16 | ||||
-rw-r--r-- | src/openscad.cc | 21 | ||||
-rw-r--r-- | src/openscad.h | 3 |
5 files changed, 33 insertions, 15 deletions
diff --git a/src/MainWindow.h b/src/MainWindow.h index 3c966b7..de738ca 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -50,7 +50,6 @@ public: static const int maxRecentFiles = 10; QAction *actionRecentFile[maxRecentFiles]; - QString examplesdir; MainWindow(const char *filename = 0); ~MainWindow(); diff --git a/src/lexer.l b/src/lexer.l index 5820107..b051a5d 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -70,8 +70,11 @@ extern const char *parser_source_path; "<"[^ \t\n>]+">" { char *filename = strdup(yytext+1); filename[strlen(filename)-1] = 0; - QFileInfo finfo(QDir(parser_source_path), filename); - + QFileInfo finfo(QDir(parser_source_path), filename); + if (!finfo.exists()) { + finfo = QFileInfo(QDir(librarydir), filename); + } + handle_dep(finfo.absoluteFilePath()); yyin = fopen(finfo.absoluteFilePath().toLocal8Bit(), "r"); if (!yyin) { diff --git a/src/mainwin.cc b/src/mainwin.cc index a0ce9b0..296c417 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -24,6 +24,7 @@ */ #include "MainWindow.h" +#include "openscad.h" // examplesdir #include "Preferences.h" #include "printutils.h" #include "node.h" @@ -188,16 +189,9 @@ MainWindow::MainWindow(const char *filename) connect(this->fileActionClearRecent, SIGNAL(triggered()), this, SLOT(clearRecentFiles())); - QDir examplesdir(QApplication::instance()->applicationDirPath()); -#ifdef Q_WS_MAC - examplesdir.cd("../Resources"); // Examples can be bundled - if (!examplesdir.exists("examples")) examplesdir.cd("../../.."); -#endif - if (examplesdir.cd("examples")) { - this->examplesdir = examplesdir.path(); - - QStringList examples = examplesdir.entryList(QStringList("*.scad"), - QDir::Files | QDir::Readable, QDir::Name); + if (!examplesdir.isEmpty()) { + QStringList examples = QDir(examplesdir).entryList(QStringList("*.scad"), + QDir::Files | QDir::Readable, QDir::Name); foreach (const QString &ex, examples) { this->menuExamples->addAction(ex, this, SLOT(actionOpenExample())); } @@ -757,7 +751,7 @@ void MainWindow::actionOpenExample() { QAction *action = qobject_cast<QAction *>(sender()); if (action) { - openFile(this->examplesdir + QDir::separator() + action->text()); + openFile(examplesdir + QDir::separator() + action->text()); } } diff --git a/src/openscad.cc b/src/openscad.cc index 0cd7455..44c4e3c 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -59,6 +59,8 @@ static void help(const char *progname) QString commandline_commands; const char *make_command = NULL; QSet<QString> dependencies; +QString examplesdir; +QString librarydir; void handle_dep(QString filename) { @@ -97,7 +99,6 @@ int main(int argc, char **argv) #endif QApplication app(argc, argv, useGUI); #ifdef Q_WS_MAC - app.setLibraryPaths(QStringList(app.applicationDirPath() + "/../PlugIns")); app.installEventFilter(new EventFilter(&app)); #endif @@ -160,6 +161,24 @@ int main(int argc, char **argv) help(argv[0]); #endif + QDir exdir(QApplication::instance()->applicationDirPath()); +#ifdef Q_WS_MAC + exdir.cd("../Resources"); // Examples can be bundled + if (!exdir.exists("examples")) exdir.cd("../../.."); +#endif + if (exdir.cd("examples")) { + examplesdir = exdir.path(); + } + + QDir libdir(QApplication::instance()->applicationDirPath()); +#ifdef Q_WS_MAC + libdir.cd("../Resources"); // Libraries can be bundled + if (!libdir.exists("libraries")) libdir.cd("../../.."); +#endif + if (libdir.cd("libraries")) { + librarydir = libdir.path(); + } + if (stl_output_file || off_output_file || dxf_output_file) { if (!filename) diff --git a/src/openscad.h b/src/openscad.h index e256433..125cc0c 100644 --- a/src/openscad.h +++ b/src/openscad.h @@ -46,5 +46,8 @@ extern int parser_error_pos; extern void handle_dep(QString filename); +extern QString examplesdir; +extern QString librarydir; + #endif |