summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordon bright <hugh.m.bright@gmail.com>2013-02-24 03:54:53 (GMT)
committerdon bright <hugh.m.bright@gmail.com>2013-02-24 03:54:53 (GMT)
commitca41979ee514f642c506e4f4d81461f19b587bf2 (patch)
treef31feb004d0b724d5240c8a227c7f0c886939a1b /src
parenteff16283358217b43b310269a72e0cb47357a8b3 (diff)
parentabc9da96c89b337377ee62ac29ee54e4e7b0a514 (diff)
Merge branch 'master' of github.com:openscad/openscad into issue11_2
Conflicts: RELEASE_NOTES openscad.pro src/mainwin.cc
Diffstat (limited to 'src')
-rw-r--r--src/AutoUpdater.cc3
-rw-r--r--src/AutoUpdater.h25
-rw-r--r--src/CocoaUtils.h13
-rw-r--r--src/CocoaUtils.mm15
-rw-r--r--src/GLView.cc23
-rw-r--r--src/GLView.h6
-rw-r--r--src/MainWindow.h1
-rw-r--r--src/MainWindow.ui12
-rw-r--r--src/OffscreenView.cc16
-rw-r--r--src/OffscreenView.h15
-rw-r--r--src/Preferences.cc47
-rw-r--r--src/Preferences.h3
-rw-r--r--src/Preferences.ui170
-rw-r--r--src/QGLView.h7
-rw-r--r--src/SparkleAutoUpdater.h32
-rw-r--r--src/SparkleAutoUpdater.mm72
-rw-r--r--src/mainwin.cc24
-rw-r--r--src/openscad.cc9
-rw-r--r--src/parsersettings.cc23
-rw-r--r--src/qglview.cc19
20 files changed, 467 insertions, 68 deletions
diff --git a/src/AutoUpdater.cc b/src/AutoUpdater.cc
new file mode 100644
index 0000000..b64cc82
--- /dev/null
+++ b/src/AutoUpdater.cc
@@ -0,0 +1,3 @@
+#include "AutoUpdater.h"
+
+AutoUpdater *AutoUpdater::updater_instance = NULL;
diff --git a/src/AutoUpdater.h b/src/AutoUpdater.h
new file mode 100644
index 0000000..18527c8
--- /dev/null
+++ b/src/AutoUpdater.h
@@ -0,0 +1,25 @@
+#ifndef AUTOUPDATER_H_
+#define AUTOUPDATER_H_
+
+#include <QString>
+
+class AutoUpdater
+{
+public:
+ virtual ~AutoUpdater() {}
+
+ virtual void checkForUpdates() = 0;
+ virtual void setAutomaticallyChecksForUpdates(bool on) = 0;
+ virtual bool automaticallyChecksForUpdates() = 0;
+ virtual void setEnableSnapshots(bool on) = 0;
+ virtual bool enableSnapshots() = 0;
+ virtual QString lastUpdateCheckDate() = 0;
+
+ static AutoUpdater *updater() { return updater_instance; }
+ static void setUpdater(AutoUpdater *updater) { updater_instance = updater; }
+
+protected:
+ static AutoUpdater *updater_instance;
+};
+
+#endif
diff --git a/src/CocoaUtils.h b/src/CocoaUtils.h
new file mode 100644
index 0000000..ad5518b
--- /dev/null
+++ b/src/CocoaUtils.h
@@ -0,0 +1,13 @@
+#ifndef COCOAUTILS_H_
+#define COCOAUTILS_H_
+
+#include <string>
+
+class CocoaUtils
+{
+public:
+ static void endApplication();
+ static std::string documentsPath();
+};
+
+#endif
diff --git a/src/CocoaUtils.mm b/src/CocoaUtils.mm
new file mode 100644
index 0000000..295ceb9
--- /dev/null
+++ b/src/CocoaUtils.mm
@@ -0,0 +1,15 @@
+#include "CocoaUtils.h"
+#import <Foundation/Foundation.h>
+#include <stdio.h>
+
+void CocoaUtils::endApplication()
+{
+ [[NSNotificationCenter defaultCenter]
+ postNotificationName:@"NSApplicationWillTerminateNotification"
+ object:nil];
+}
+
+std::string CocoaUtils::documentsPath()
+{
+ return std::string([[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] UTF8String]);
+}
diff --git a/src/GLView.cc b/src/GLView.cc
index c851497..2f6d69f 100644
--- a/src/GLView.cc
+++ b/src/GLView.cc
@@ -5,14 +5,29 @@
GLView::GLView()
{
- std::cout << "glview();" << std::endl;
- this->renderer = NULL;
+ viewer_distance = 500;
+ object_trans << 0, 0, 0;
+ camera_eye << 0, 0, 0;
+ camera_center << 0, 0, 0;
+ showedges = false;
+ showfaces = true;
+ orthomode = false;
+ showaxes = false;
+ showcrosshairs = false;
+ renderer = NULL;
+#ifdef ENABLE_OPENCSG
+ is_opencsg_capable = false;
+ has_shaders = false;
+ opencsg_support = true;
+ static int sId = 0;
+ this->opencsg_id = sId++;
+ for (int i = 0; i < 10; i++) this->shaderinfo[i] = 0;
+#endif
}
void GLView::setRenderer(Renderer* r)
{
- std::cout << "setr " << r << "\n" << std::endl;
- this->renderer = r;
+ renderer = r;
}
void GLView::resizeGL(int w, int h)
diff --git a/src/GLView.h b/src/GLView.h
index 39ec0a6..f7ae5a7 100644
--- a/src/GLView.h
+++ b/src/GLView.h
@@ -54,6 +54,7 @@ public:
bool showaxes;
bool showfaces;
bool showedges;
+ bool showcrosshairs;
Eigen::Vector3d object_trans;
Eigen::Vector3d object_rot;
Eigen::Vector3d camera_eye;
@@ -61,6 +62,11 @@ public:
#ifdef ENABLE_OPENCSG
GLint shaderinfo[11];
+ bool is_opencsg_capable;
+ bool has_shaders;
+// void enable_opencsg_shaders();
+ bool opencsg_support;
+ int opencsg_id;
#endif
/*
void paintGL(); //
diff --git a/src/MainWindow.h b/src/MainWindow.h
index 4848db6..8745b8b 100644
--- a/src/MainWindow.h
+++ b/src/MainWindow.h
@@ -90,6 +90,7 @@ private:
class QMessageBox *openglbox;
private slots:
+ void actionUpdateCheck();
void actionNew();
void actionOpen();
void actionOpenRecent();
diff --git a/src/MainWindow.ui b/src/MainWindow.ui
index 9dfc5dc..8e995cd 100644
--- a/src/MainWindow.ui
+++ b/src/MainWindow.ui
@@ -223,6 +223,7 @@
<addaction name="helpActionHomepage"/>
<addaction name="helpActionManual"/>
<addaction name="helpActionLibraryInfo"/>
+ <addaction name="appActionUpdateCheck"/>
</widget>
<addaction name="menu_File"/>
<addaction name="menu_Edit"/>
@@ -611,6 +612,9 @@
</property>
</action>
<action name="helpActionAbout">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
<property name="text">
<string>About</string>
</property>
@@ -676,6 +680,14 @@
<string>Library info</string>
</property>
</action>
+ <action name="appActionUpdateCheck">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Check for Update..</string>
+ </property>
+ </action>
</widget>
<customwidgets>
<customwidget>
diff --git a/src/OffscreenView.cc b/src/OffscreenView.cc
index b7d1deb..aa8570e 100644
--- a/src/OffscreenView.cc
+++ b/src/OffscreenView.cc
@@ -16,25 +16,9 @@
OffscreenView::OffscreenView(size_t width, size_t height)
{
- orthomode = false;
- showaxes = false;
- showfaces = true;
- showedges = false;
object_rot << 35, 0, 25;
- camera_eye << 0, 0, 0;
- camera_center << 0, 0, 0;
-
-#ifdef ENABLE_OPENCSG
- is_opencsg_capable = false;
- has_shaders = false;
- opencsg_support = true;
- static int sId = 0;
- this->opencsg_id = sId++;
- for (int i = 0; i < 10; i++) this->shaderinfo[i] = 0;
-#endif
this->ctx = create_offscreen_context(width, height);
if ( this->ctx == NULL ) throw -1;
-
initializeGL();
GLView::resizeGL(width, height);
}
diff --git a/src/OffscreenView.h b/src/OffscreenView.h
index 69bda4c..81fa88d 100644
--- a/src/OffscreenView.h
+++ b/src/OffscreenView.h
@@ -17,22 +17,15 @@ class OffscreenView : public GLView
public:
OffscreenView(size_t width, size_t height); // not
~OffscreenView(); // not
-
+ void enable_opencsg_shaders();
void initializeGL(); //
void paintGL(); //
-
- bool save(const char *filename);
bool save(std::ostream &output);
- std::string getRendererInfo() const;
OffscreenContext *ctx; // not
-#ifdef ENABLE_OPENCSG
- bool is_opencsg_capable;
- bool has_shaders;
- void enable_opencsg_shaders();
- bool opencsg_support;
- int opencsg_id;
-#endif
+ // overrides
+ bool save(const char *filename);
+ std::string getRendererInfo() const;
};
#endif
diff --git a/src/Preferences.cc b/src/Preferences.cc
index ec66094..7c7aee4 100644
--- a/src/Preferences.cc
+++ b/src/Preferences.cc
@@ -26,10 +26,13 @@
#include "Preferences.h"
+#include <QMessageBox>
#include <QFontDatabase>
#include <QKeyEvent>
#include <QSettings>
+#include <QStatusBar>
#include "PolySetCache.h"
+#include "AutoUpdater.h"
#ifdef ENABLE_CGAL
#include "CGALCache.h"
#endif
@@ -88,6 +91,7 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent)
QActionGroup *group = new QActionGroup(this);
group->addAction(prefsAction3DView);
group->addAction(prefsActionEditor);
+ group->addAction(prefsActionUpdate);
group->addAction(prefsActionAdvanced);
connect(group, SIGNAL(triggered(QAction*)), this, SLOT(actionTriggered(QAction*)));
@@ -155,6 +159,9 @@ Preferences::actionTriggered(QAction *action)
else if (action == this->prefsActionEditor) {
this->stackedWidget->setCurrentWidget(this->pageEditor);
}
+ else if (action == this->prefsActionUpdate) {
+ this->stackedWidget->setCurrentWidget(this->pageUpdate);
+ }
else if (action == this->prefsActionAdvanced) {
this->stackedWidget->setCurrentWidget(this->pageAdvanced);
}
@@ -186,6 +193,40 @@ void Preferences::on_fontSize_editTextChanged(const QString &size)
emit fontChanged(getValue("editor/fontfamily").toString(), intsize);
}
+void unimplemented_msg()
+{
+ QMessageBox mbox;
+ mbox.setText("Sorry, this feature is not implemented on your Operating System");
+ mbox.exec();
+}
+
+void Preferences::on_updateCheckBox_toggled(bool on)
+{
+ if (AutoUpdater *updater =AutoUpdater::updater()) {
+ updater->setAutomaticallyChecksForUpdates(on);
+ } else {
+ unimplemented_msg();
+ }
+}
+
+void Preferences::on_snapshotCheckBox_toggled(bool on)
+{
+ if (AutoUpdater *updater =AutoUpdater::updater()) {
+ updater->setEnableSnapshots(on);
+ } else {
+ unimplemented_msg();
+ }
+}
+
+void Preferences::on_checkNowButton_clicked()
+{
+ if (AutoUpdater *updater =AutoUpdater::updater()) {
+ updater->checkForUpdates();
+ } else {
+ unimplemented_msg();
+ }
+}
+
void
Preferences::on_openCSGWarningBox_toggled(bool state)
{
@@ -289,6 +330,12 @@ void Preferences::updateGUI()
this->fontSize->setEditText(fontsize);
}
+ if (AutoUpdater *updater = AutoUpdater::updater()) {
+ this->updateCheckBox->setChecked(updater->automaticallyChecksForUpdates());
+ this->snapshotCheckBox->setChecked(updater->enableSnapshots());
+ this->lastCheckedLabel->setText(updater->lastUpdateCheckDate());
+ }
+
this->openCSGWarningBox->setChecked(getValue("advanced/opencsg_show_warning").toBool());
this->enableOpenCSGBox->setChecked(getValue("advanced/enable_opencsg_opengl1x").toBool());
this->cgalCacheSizeEdit->setText(getValue("advanced/cgalCacheSize").toString());
diff --git a/src/Preferences.h b/src/Preferences.h
index 48e07b4..4656793 100644
--- a/src/Preferences.h
+++ b/src/Preferences.h
@@ -30,6 +30,9 @@ public slots:
void on_polysetCacheSizeEdit_textChanged(const QString &);
void on_opencsgLimitEdit_textChanged(const QString &);
void on_forceGoldfeatherBox_toggled(bool);
+ void on_updateCheckBox_toggled(bool);
+ void on_snapshotCheckBox_toggled(bool);
+ void on_checkNowButton_clicked();
signals:
void requestRedraw() const;
diff --git a/src/Preferences.ui b/src/Preferences.ui
index 9b4671a..d67db6a 100644
--- a/src/Preferences.ui
+++ b/src/Preferences.ui
@@ -6,10 +6,16 @@
<rect>
<x>0</x>
<y>0</y>
- <width>531</width>
- <height>418</height>
+ <width>473</width>
+ <height>320</height>
</rect>
</property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<property name="windowTitle">
<string>Preferences</string>
</property>
@@ -173,6 +179,150 @@
</item>
</layout>
</widget>
+ <widget class="QWidget" name="pageUpdate">
+ <layout class="QVBoxLayout" name="verticalLayout_16">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_9">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_8">
+ <item>
+ <widget class="QCheckBox" name="updateCheckBox">
+ <property name="text">
+ <string>Automatically check for updates</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="snapshotCheckBox">
+ <property name="text">
+ <string>Include development snapshots</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_11">
+ <item>
+ <spacer name="horizontalSpacer_10">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="checkNowButton">
+ <property name="text">
+ <string>Check Now</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_9">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_10">
+ <item>
+ <spacer name="horizontalSpacer_11">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="lastCheckedLabel">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>11</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Last checked: </string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_12">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_7">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>89</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
<widget class="QWidget" name="pageAdvanced">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
@@ -227,9 +377,6 @@
</widget>
</item>
</layout>
- <zorder>openCSGWarningBox</zorder>
- <zorder>enableOpenCSGBox</zorder>
- <zorder>forceGoldfeatherBox</zorder>
</widget>
</item>
<item>
@@ -317,6 +464,7 @@
</attribute>
<addaction name="prefsAction3DView"/>
<addaction name="prefsActionEditor"/>
+ <addaction name="prefsActionUpdate"/>
<addaction name="prefsActionAdvanced"/>
</widget>
<action name="prefsAction3DView">
@@ -355,6 +503,18 @@
<string>Editor</string>
</property>
</action>
+ <action name="prefsActionUpdate">
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="icon">
+ <iconset resource="../openscad.qrc">
+ <normaloff>:/icons/prefsUpdate.png</normaloff>:/icons/prefsUpdate.png</iconset>
+ </property>
+ <property name="text">
+ <string>Update</string>
+ </property>
+ </action>
</widget>
<resources>
<include location="../openscad.qrc"/>
diff --git a/src/QGLView.h b/src/QGLView.h
index 77c5baf..5cb1872 100644
--- a/src/QGLView.h
+++ b/src/QGLView.h
@@ -43,11 +43,6 @@ public:
public:
QLabel *statusLabel;
-#ifdef ENABLE_OPENCSG
- bool opencsg_support;
- int opencsg_id;
-#endif
-
private:
void init();
@@ -71,8 +66,6 @@ private:
void normalizeAngle(GLdouble& angle);
#ifdef ENABLE_OPENCSG
- bool is_opencsg_capable;
- bool has_shaders;
private slots:
void display_opencsg_warning();
#endif
diff --git a/src/SparkleAutoUpdater.h b/src/SparkleAutoUpdater.h
new file mode 100644
index 0000000..786a190
--- /dev/null
+++ b/src/SparkleAutoUpdater.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2008 Remko Troncon. BSD license
+ * Copyright (C) 2013 Marius Kintel. BSD license
+ */
+#ifndef SPARKLEAUTOUPDATER_H
+#define SPARKLEAUTOUPDATER_H
+
+#include <QString>
+
+#include "AutoUpdater.h"
+
+class SparkleAutoUpdater : public AutoUpdater
+{
+public:
+ SparkleAutoUpdater();
+ ~SparkleAutoUpdater();
+
+ void checkForUpdates();
+ void setAutomaticallyChecksForUpdates(bool on);
+ bool automaticallyChecksForUpdates();
+ void setEnableSnapshots(bool on);
+ bool enableSnapshots();
+ QString lastUpdateCheckDate();
+
+private:
+ void updateFeed();
+
+ class Private;
+ Private *d;
+};
+
+#endif
diff --git a/src/SparkleAutoUpdater.mm b/src/SparkleAutoUpdater.mm
new file mode 100644
index 0000000..c52e2bb
--- /dev/null
+++ b/src/SparkleAutoUpdater.mm
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2008 Remko Troncon. BSD license
+ * Copyright (C) 2013 Marius Kintel. BSD license
+ */
+
+#include "SparkleAutoUpdater.h"
+
+#include <Cocoa/Cocoa.h>
+#include <Sparkle/Sparkle.h>
+
+NSString *const SUEnableSnapshotsKey = @"SUEnableSnapshots";
+
+class SparkleAutoUpdater::Private
+{
+public:
+ SUUpdater* updater;
+};
+
+SparkleAutoUpdater::SparkleAutoUpdater()
+{
+ d = new Private;
+
+ d->updater = [SUUpdater sharedUpdater];
+ [d->updater retain];
+
+ updateFeed();
+}
+
+SparkleAutoUpdater::~SparkleAutoUpdater()
+{
+ [d->updater release];
+ delete d;
+}
+
+void SparkleAutoUpdater::checkForUpdates()
+{
+ [d->updater checkForUpdatesInBackground];
+}
+
+void SparkleAutoUpdater::setAutomaticallyChecksForUpdates(bool on)
+{
+ [d->updater setAutomaticallyChecksForUpdates:on];
+}
+
+bool SparkleAutoUpdater::automaticallyChecksForUpdates()
+{
+ return [d->updater automaticallyChecksForUpdates];
+}
+
+void SparkleAutoUpdater::setEnableSnapshots(bool on)
+{
+ [[NSUserDefaults standardUserDefaults] setBool:on forKey:SUEnableSnapshotsKey];
+ updateFeed();
+}
+
+bool SparkleAutoUpdater::enableSnapshots()
+{
+ return [[NSUserDefaults standardUserDefaults] boolForKey:SUEnableSnapshotsKey];
+}
+
+QString SparkleAutoUpdater::lastUpdateCheckDate()
+{
+ NSDate *date = [d->updater lastUpdateCheckDate];
+ NSString *datestring = date ? [NSString stringWithFormat:@"Last checked: %@", date] : @"";
+ return QString::fromUtf8([datestring UTF8String]);
+}
+
+void SparkleAutoUpdater::updateFeed()
+{
+ NSString *urlstring = [NSString stringWithFormat:@"http://openscad.org/appcast%@.xml", enableSnapshots() ? @"-snapshots" : @""];
+ [d->updater setFeedURL:[NSURL URLWithString:urlstring]];
+}
diff --git a/src/mainwin.cc b/src/mainwin.cc
index b603113..0280bbe 100644
--- a/src/mainwin.cc
+++ b/src/mainwin.cc
@@ -49,6 +49,10 @@
#include "ThrownTogetherRenderer.h"
#include "csgtermnormalizer.h"
#include "QGLView.h"
+#include "AutoUpdater.h"
+#ifdef Q_OS_MAC
+#include "CocoaUtils.h"
+#endif
#include <QMenu>
#include <QTime>
@@ -206,6 +210,16 @@ MainWindow::MainWindow(const QString &filename)
animate_panel->hide();
+ // Application menu
+#ifdef DEBUG
+ this->appActionUpdateCheck->setEnabled(false);
+#else
+#ifdef Q_OS_MAC
+ this->appActionUpdateCheck->setMenuRole(QAction::ApplicationSpecificRole);
+ this->appActionUpdateCheck->setEnabled(true);
+ connect(this->appActionUpdateCheck, SIGNAL(triggered()), this, SLOT(actionUpdateCheck()));
+#endif
+#endif
// File menu
connect(this->fileActionNew, SIGNAL(triggered()), this, SLOT(actionNew()));
connect(this->fileActionOpen, SIGNAL(triggered()), this, SLOT(actionOpen()));
@@ -773,6 +787,13 @@ void MainWindow::compileCSG(bool procevents)
}
}
+void MainWindow::actionUpdateCheck()
+{
+ if (AutoUpdater *updater =AutoUpdater::updater()) {
+ updater->checkForUpdates();
+ }
+}
+
void MainWindow::actionNew()
{
#ifdef ENABLE_MDI
@@ -1815,6 +1836,9 @@ void MainWindow::quit()
QApplication::sendEvent(QApplication::instance(), &ev);
if (ev.isAccepted()) QApplication::instance()->quit();
// FIXME: Cancel any CGAL calculations
+#ifdef Q_OS_MAC
+ CocoaUtils::endApplication();
+#endif
}
void MainWindow::consoleOutput(const std::string &msg, void *userdata)
diff --git a/src/openscad.cc b/src/openscad.cc
index 0baba24..0b5466e 100644
--- a/src/openscad.cc
+++ b/src/openscad.cc
@@ -54,6 +54,7 @@
#ifdef Q_WS_MAC
#include "EventFilter.h"
#include "AppleEvents.h"
+#include "SparkleAutoUpdater.h"
#endif
#include <boost/program_options.hpp>
@@ -412,6 +413,14 @@ int main(int argc, char **argv)
installAppleEventHandlers();
#endif
+#ifndef DEBUG
+#ifdef Q_WS_MAC
+ AutoUpdater *updater = new SparkleAutoUpdater;
+ AutoUpdater::setUpdater(updater);
+ if (updater->automaticallyChecksForUpdates()) updater->checkForUpdates();
+#endif
+#endif
+
QString qfilename;
if (filename) qfilename = QString::fromStdString(boosty::stringy(boosty::absolute(filename)));
diff --git a/src/parsersettings.cc b/src/parsersettings.cc
index 3dda132..54f9713 100644
--- a/src/parsersettings.cc
+++ b/src/parsersettings.cc
@@ -2,7 +2,9 @@
#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>
#include "boosty.h"
+#include <boost/algorithm/string.hpp>
#include <qglobal.h> // Needed for Q_ defines - move the offending code somewhere else
+#include "CocoaUtils.h"
namespace fs = boost::filesystem;
@@ -28,15 +30,24 @@ std::string locate_file(const std::string &filename)
void parser_init(const std::string &applicationpath)
{
- // Add path from OPENSCADPATH before adding built-in paths
- const char *openscadpath = getenv("OPENSCADPATH");
- if (openscadpath) {
- add_librarydir(boosty::absolute(fs::path(openscadpath)).string());
+ // Add paths from OPENSCADPATH before adding built-in paths
+ const char *openscadpaths = getenv("OPENSCADPATH");
+ if (openscadpaths) {
+ std::string paths(openscadpaths);
+ typedef boost::split_iterator<std::string::iterator> string_split_iterator;
+ for (string_split_iterator it =
+ make_split_iterator(paths, first_finder(":", boost::is_iequal()));
+ it != string_split_iterator();
+ ++it) {
+ add_librarydir(boosty::absolute(fs::path(boost::copy_range<std::string>(*it))).string());
+ }
}
- // FIXME: Support specifying more than one path in OPENSCADPATH
// FIXME: Add ~/.openscad/libraries
- // FIXME: Add ~/Documents/OpenSCAD/libraries on Mac?
+#ifdef __APPLE__
+ fs::path docdir(CocoaUtils::documentsPath());
+ add_librarydir(boosty::stringy(docdir / "OpenSCAD" / "libraries"));
+#endif
std::string librarydir;
fs::path libdir(applicationpath);
diff --git a/src/qglview.cc b/src/qglview.cc
index 0e07b52..8e228e4 100644
--- a/src/qglview.cc
+++ b/src/qglview.cc
@@ -71,31 +71,12 @@ static bool running_under_wine = false;
void QGLView::init()
{
- this->viewer_distance = 500;
this->object_rot << 35, 0, -25;
- this->object_trans << 0, 0, 0;
this->mouse_drag_active = false;
-
- this->showedges = false;
- this->showfaces = true;
- this->orthomode = false;
- this->showaxes = false;
- this->showcrosshairs = false;
-
- for (int i = 0; i < 10; i++)
- this->shaderinfo[i] = 0;
-
this->statusLabel = NULL;
setMouseTracking(true);
-#ifdef ENABLE_OPENCSG
- this->is_opencsg_capable = false;
- this->has_shaders = false;
- this->opencsg_support = true;
- static int sId = 0;
- this->opencsg_id = sId++;
-#endif
// see paintGL() + issue160 + wine FAQ
#ifdef _WIN32
contact: Jan Huwald // Impressum