mirror of https://github.com/vitalif/openscad
First version of automatic updates for Mac
parent
03be37d16b
commit
fa00547507
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle">
|
||||||
|
<channel>
|
||||||
|
<title>OpenSCAD Development Snapshots</title>
|
||||||
|
<link>http://openscad.org/appcast-snapshots.xml</link>
|
||||||
|
<language>en</language>
|
||||||
|
<item>
|
||||||
|
<title>OpenSCAD @VERSION@</title>
|
||||||
|
<pubDate>@VERSIONDATE@</pubDate>
|
||||||
|
<sparkle:releaseNotesLink>https://raw.github.com/openscad/openscad/master/RELEASE_NOTES</sparkle:releaseNotesLink>
|
||||||
|
<enclosure url="https://openscad.googlecode.com/files/OpenSCAD-@VERSION@.dmg"
|
||||||
|
sparkle:version="@VERSIONDATE@"
|
||||||
|
sparkle:shortVersionString="@VERSION@"
|
||||||
|
length="@FILESIZE@"
|
||||||
|
type="application/octet-stream"/>
|
||||||
|
</item>
|
||||||
|
</channel>
|
||||||
|
</rss>
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle">
|
||||||
|
<channel>
|
||||||
|
<title>OpenSCAD Updates</title>
|
||||||
|
<link>http://openscad.org/appcast.xml</link>
|
||||||
|
<language>en</language>
|
||||||
|
<item>
|
||||||
|
<title>OpenSCAD @VERSION@</title>
|
||||||
|
<pubDate>@VERSIONDATE@</pubDate>
|
||||||
|
<sparkle:releaseNotesLink>https://raw.github.com/openscad/openscad/openscad-@VERSION@/RELEASE_NOTES</sparkle:releaseNotesLink>
|
||||||
|
<enclosure url="https://openscad.googlecode.com/files/OpenSCAD-@VERSION@.dmg"
|
||||||
|
sparkle:version="@VERSIONDATE@"
|
||||||
|
sparkle:shortVersionString="@VERSION@"
|
||||||
|
length="@FILESIZE@"
|
||||||
|
type="application/octet-stream"/>
|
||||||
|
</item>
|
||||||
|
</channel>
|
||||||
|
</rss>
|
|
@ -44,7 +44,8 @@ o Notify package managers
|
||||||
Build and Upload Release Binaries
|
Build and Upload Release Binaries
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
$ export VERSION=<openscad version, e.g. 2013.01>
|
$ export VERSIONDATE=<date of release in YYYY.MM.DD format, e.g. 2013.01.17>
|
||||||
|
$ export VERSION=<openscad version, e.g. 2013.01> # If development snapshot, you don't need version is the same as VERSIONDATE
|
||||||
$ tar xzf openscad-$VERSION.src.tar.gz
|
$ tar xzf openscad-$VERSION.src.tar.gz
|
||||||
$ cd openscad-$VERSION
|
$ cd openscad-$VERSION
|
||||||
|
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
1
mjau.gdb
1
mjau.gdb
|
@ -1 +1,2 @@
|
||||||
set environment DYLD_LIBRARY_PATH=/Users/kintel/code/OpenSCAD/libraries/install/lib
|
set environment DYLD_LIBRARY_PATH=/Users/kintel/code/OpenSCAD/libraries/install/lib
|
||||||
|
set environment DYLD_FRAMEWORK_PATH=/Users/kintel/code/OpenSCAD/libraries/install/lib
|
||||||
|
|
12
openscad.pro
12
openscad.pro
|
@ -68,7 +68,7 @@ macx {
|
||||||
APP_RESOURCES.path = Contents/Resources
|
APP_RESOURCES.path = Contents/Resources
|
||||||
APP_RESOURCES.files = OpenSCAD.sdef
|
APP_RESOURCES.files = OpenSCAD.sdef
|
||||||
QMAKE_BUNDLE_DATA += APP_RESOURCES
|
QMAKE_BUNDLE_DATA += APP_RESOURCES
|
||||||
LIBS += -framework Carbon
|
LIBS += -framework Cocoa -framework Sparkle
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
TARGET = openscad
|
TARGET = openscad
|
||||||
|
@ -320,8 +320,14 @@ SOURCES += src/cgalutils.cc \
|
||||||
|
|
||||||
macx {
|
macx {
|
||||||
HEADERS += src/AppleEvents.h \
|
HEADERS += src/AppleEvents.h \
|
||||||
src/EventFilter.h
|
src/EventFilter.h \
|
||||||
SOURCES += src/AppleEvents.cc
|
src/AutoUpdater.h \
|
||||||
|
src/SparkleAutoUpdater.h \
|
||||||
|
src/CocoaInitializer.h
|
||||||
|
SOURCES += src/AppleEvents.cc \
|
||||||
|
src/AutoUpdater.cc
|
||||||
|
OBJECTIVE_SOURCES += src/SparkleAutoUpdater.mm \
|
||||||
|
src/CocoaInitializer.mm
|
||||||
}
|
}
|
||||||
|
|
||||||
isEmpty(PREFIX):PREFIX = /usr/local
|
isEmpty(PREFIX):PREFIX = /usr/local
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
<file>icons/prefsAdvanced.png</file>
|
<file>icons/prefsAdvanced.png</file>
|
||||||
<file>icons/prefs3DView.png</file>
|
<file>icons/prefs3DView.png</file>
|
||||||
<file>icons/prefsEditor.png</file>
|
<file>icons/prefsEditor.png</file>
|
||||||
|
<file>icons/prefsUpdate.png</file>
|
||||||
<file>icons/flattr.png</file>
|
<file>icons/flattr.png</file>
|
||||||
<file>src/AboutDialog.html</file>
|
<file>src/AboutDialog.html</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# NB! To build a release build, the VERSION environment variable needs to be set.
|
# NB! To build a release build, the VERSION and VERSIONDATE environment variables needs to be set.
|
||||||
# See doc/release-checklist.txt
|
# See doc/release-checklist.txt
|
||||||
|
|
||||||
|
if test -z "$VERSIONDATE"; then
|
||||||
|
VERSIONDATE=`date "+%Y.%m.%d"`
|
||||||
|
fi
|
||||||
if test -z "$VERSION"; then
|
if test -z "$VERSION"; then
|
||||||
VERSION=`date "+%Y.%m.%d"`
|
VERSION=$VERSIONDATE
|
||||||
COMMIT=-c
|
COMMIT=-c
|
||||||
SNAPSHOT=true
|
SNAPSHOT=true
|
||||||
fi
|
fi
|
||||||
|
@ -18,21 +21,33 @@ export OPENSCAD_LIBRARIES=$PWD/../libraries/install
|
||||||
# Make sure that the correct Qt tools are used
|
# Make sure that the correct Qt tools are used
|
||||||
export PATH=$OPENSCAD_LIBRARIES/bin:$PATH
|
export PATH=$OPENSCAD_LIBRARIES/bin:$PATH
|
||||||
|
|
||||||
`dirname $0`/release-common.sh -v $VERSION $COMMIT
|
#`dirname $0`/release-common.sh -v $VERSION $COMMIT
|
||||||
if [[ $? != 0 ]]; then
|
#if [[ $? != 0 ]]; then
|
||||||
exit 1
|
# exit 1
|
||||||
fi
|
#fi
|
||||||
|
|
||||||
echo "Sanity check of the app bundle..."
|
echo "Sanity check of the app bundle..."
|
||||||
`dirname $0`/macosx-sanity-check.py OpenSCAD.app/Contents/MacOS/OpenSCAD
|
#`dirname $0`/macosx-sanity-check.py OpenSCAD.app/Contents/MacOS/OpenSCAD
|
||||||
if [[ $? != 0 ]]; then
|
#if [[ $? != 0 ]]; then
|
||||||
exit 1
|
# exit 1
|
||||||
|
#fi
|
||||||
|
|
||||||
|
if [[ $VERSION == $VERSIONDATE ]]; then
|
||||||
|
APPCASTFILE=appcast-snapshots.xml
|
||||||
|
else
|
||||||
|
APPCASTFILE=appcast.xml
|
||||||
|
fi
|
||||||
|
echo "Creating appcast $APPCASTFILE..."
|
||||||
|
sed -e "s,@VERSION@,$VERSION,g" -e "s,@VERSIONDATE@,$VERSIONDATE,g" -e "s,@FILESIZE@,$(stat -f "%z" OpenSCAD-$VERSION.dmg),g" $APPCASTFILE.in > $APPCASTFILE
|
||||||
|
cp $APPCASTFILE ../openscad.github.com
|
||||||
|
if [[ $VERSION == $VERSIONDATE ]]; then
|
||||||
|
cp $APPCASTFILE ../openscad.github.com/appcast-snapshots.xml
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Uploading..."
|
echo "Uploading..."
|
||||||
LABELS=OpSys-OSX,Type-Executable
|
#LABELS=OpSys-OSX,Type-Executable
|
||||||
if ! $SNAPSHOT; then LABELS=$LABELS,Featured; fi
|
#if ! $SNAPSHOT; then LABELS=$LABELS,Featured; fi
|
||||||
`dirname $0`/googlecode_upload.py -s 'Mac OS X Snapshot' -p openscad OpenSCAD-$VERSION.dmg -l $LABELS
|
#`dirname $0`/googlecode_upload.py -s 'Mac OS X Snapshot' -p openscad OpenSCAD-$VERSION.dmg -l $LABELS
|
||||||
|
|
||||||
# Update snapshot filename on wab page
|
# Update snapshot filename on wab page
|
||||||
`dirname $0`/update-web.sh OpenSCAD-$VERSION.dmg
|
#`dirname $0`/update-web.sh OpenSCAD-$VERSION.dmg
|
||||||
|
|
|
@ -9,10 +9,12 @@
|
||||||
#
|
#
|
||||||
# Usage: release-common.sh [-v <versionstring>] [-c] [-x32]
|
# Usage: release-common.sh [-v <versionstring>] [-c] [-x32]
|
||||||
# -v Version string (e.g. -v 2010.01)
|
# -v Version string (e.g. -v 2010.01)
|
||||||
|
# -d Version date (e.g. -d 2010.01.23)
|
||||||
# -c Build with commit info
|
# -c Build with commit info
|
||||||
# -mingw32 Cross-compile for win32 using MXE
|
# -mingw32 Cross-compile for win32 using MXE
|
||||||
#
|
#
|
||||||
# If no version string is given, todays date will be used (YYYY-MM-DD)
|
# If no version string or version date is given, todays date will be used (YYYY-MM-DD)
|
||||||
|
# If only verion date is given, it will be used also as version string.
|
||||||
# If no make target is given, release will be used on Windows, none one Mac OS X
|
# If no make target is given, release will be used on Windows, none one Mac OS X
|
||||||
#
|
#
|
||||||
# The commit info will extracted from git and be passed to qmake as OPENSCAD_COMMIT
|
# The commit info will extracted from git and be passed to qmake as OPENSCAD_COMMIT
|
||||||
|
@ -23,7 +25,7 @@
|
||||||
|
|
||||||
printUsage()
|
printUsage()
|
||||||
{
|
{
|
||||||
echo "Usage: $0 -v <versionstring> -c -mingw32
|
echo "Usage: $0 -v <versionstring> -d <versiondate> -c -mingw32
|
||||||
echo
|
echo
|
||||||
echo " Example: $0 -v 2010.01
|
echo " Example: $0 -v 2010.01
|
||||||
}
|
}
|
||||||
|
@ -59,16 +61,20 @@ else
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
while getopts 'v:c' c
|
while getopts 'v:d:c' c
|
||||||
do
|
do
|
||||||
case $c in
|
case $c in
|
||||||
v) VERSION=$OPTARG;;
|
v) VERSION=$OPTARG;;
|
||||||
|
d) VERSIONDATE=$OPTARG;;
|
||||||
c) OPENSCAD_COMMIT=`git log -1 --pretty=format:"%h"`
|
c) OPENSCAD_COMMIT=`git log -1 --pretty=format:"%h"`
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if test -z "$VERSIONDATE"; then
|
||||||
|
VERSIONDATE=`date "+%Y.%m.%d"`
|
||||||
|
fi
|
||||||
if test -z "$VERSION"; then
|
if test -z "$VERSION"; then
|
||||||
VERSION=`date "+%Y.%m.%d"`
|
VERSION=$VERSIONDATE
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
@ -102,7 +108,7 @@ if [ -d .git ]; then
|
||||||
git submodule update
|
git submodule update
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Building openscad-$VERSION $CONFIGURATION..."
|
echo "Building openscad-$VERSION ($VERSIONDATE) $CONFIGURATION..."
|
||||||
|
|
||||||
case $OS in
|
case $OS in
|
||||||
LINUX|MACOSX)
|
LINUX|MACOSX)
|
||||||
|
@ -230,6 +236,7 @@ echo "Creating archive.."
|
||||||
|
|
||||||
case $OS in
|
case $OS in
|
||||||
MACOSX)
|
MACOSX)
|
||||||
|
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $VERSIONDATE" OpenSCAD.app/Contents/Info.plist
|
||||||
macdeployqt OpenSCAD.app -dmg -no-strip
|
macdeployqt OpenSCAD.app -dmg -no-strip
|
||||||
mv OpenSCAD.dmg OpenSCAD-$VERSION.dmg
|
mv OpenSCAD.dmg OpenSCAD-$VERSION.dmg
|
||||||
hdiutil internet-enable -yes -quiet OpenSCAD-$VERSION.dmg
|
hdiutil internet-enable -yes -quiet OpenSCAD-$VERSION.dmg
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
export OPENSCAD_LIBRARIES=$PWD/../libraries/install
|
export OPENSCAD_LIBRARIES=$PWD/../libraries/install
|
||||||
export DYLD_LIBRARY_PATH=$OPENSCAD_LIBRARIES/lib
|
export DYLD_LIBRARY_PATH=$OPENSCAD_LIBRARIES/lib
|
||||||
|
export DYLD_FRAMEWORK_PATH=$OPENSCAD_LIBRARIES/lib
|
||||||
export QMAKESPEC=macx-g++
|
export QMAKESPEC=macx-g++
|
||||||
|
|
||||||
#export OPENCSGDIR=$PWD/../OpenCSG-1.3.0
|
#export OPENCSGDIR=$PWD/../OpenCSG-1.3.0
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
#include "AutoUpdater.h"
|
||||||
|
|
||||||
|
AutoUpdater *AutoUpdater::updater_instance = NULL;
|
|
@ -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
|
|
@ -91,6 +91,7 @@ private:
|
||||||
class QMessageBox *openglbox;
|
class QMessageBox *openglbox;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void actionUpdateCheck();
|
||||||
void actionNew();
|
void actionNew();
|
||||||
void actionOpen();
|
void actionOpen();
|
||||||
void actionOpenRecent();
|
void actionOpenRecent();
|
||||||
|
|
|
@ -223,6 +223,7 @@
|
||||||
<addaction name="helpActionHomepage"/>
|
<addaction name="helpActionHomepage"/>
|
||||||
<addaction name="helpActionManual"/>
|
<addaction name="helpActionManual"/>
|
||||||
<addaction name="helpActionLibraryInfo"/>
|
<addaction name="helpActionLibraryInfo"/>
|
||||||
|
<addaction name="appActionUpdateCheck"/>
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="menu_File"/>
|
<addaction name="menu_File"/>
|
||||||
<addaction name="menu_Edit"/>
|
<addaction name="menu_Edit"/>
|
||||||
|
@ -611,6 +612,9 @@
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="helpActionAbout">
|
<action name="helpActionAbout">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>About</string>
|
<string>About</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -676,6 +680,14 @@
|
||||||
<string>Library info</string>
|
<string>Library info</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="appActionUpdateCheck">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Check for Update..</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
|
|
|
@ -29,7 +29,9 @@
|
||||||
#include <QFontDatabase>
|
#include <QFontDatabase>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
#include <QStatusBar>
|
||||||
#include "PolySetCache.h"
|
#include "PolySetCache.h"
|
||||||
|
#include "AutoUpdater.h"
|
||||||
#ifdef ENABLE_CGAL
|
#ifdef ENABLE_CGAL
|
||||||
#include "CGALCache.h"
|
#include "CGALCache.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -88,6 +90,7 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent)
|
||||||
QActionGroup *group = new QActionGroup(this);
|
QActionGroup *group = new QActionGroup(this);
|
||||||
group->addAction(prefsAction3DView);
|
group->addAction(prefsAction3DView);
|
||||||
group->addAction(prefsActionEditor);
|
group->addAction(prefsActionEditor);
|
||||||
|
group->addAction(prefsActionUpdate);
|
||||||
group->addAction(prefsActionAdvanced);
|
group->addAction(prefsActionAdvanced);
|
||||||
connect(group, SIGNAL(triggered(QAction*)), this, SLOT(actionTriggered(QAction*)));
|
connect(group, SIGNAL(triggered(QAction*)), this, SLOT(actionTriggered(QAction*)));
|
||||||
|
|
||||||
|
@ -155,6 +158,9 @@ Preferences::actionTriggered(QAction *action)
|
||||||
else if (action == this->prefsActionEditor) {
|
else if (action == this->prefsActionEditor) {
|
||||||
this->stackedWidget->setCurrentWidget(this->pageEditor);
|
this->stackedWidget->setCurrentWidget(this->pageEditor);
|
||||||
}
|
}
|
||||||
|
else if (action == this->prefsActionUpdate) {
|
||||||
|
this->stackedWidget->setCurrentWidget(this->pageUpdate);
|
||||||
|
}
|
||||||
else if (action == this->prefsActionAdvanced) {
|
else if (action == this->prefsActionAdvanced) {
|
||||||
this->stackedWidget->setCurrentWidget(this->pageAdvanced);
|
this->stackedWidget->setCurrentWidget(this->pageAdvanced);
|
||||||
}
|
}
|
||||||
|
@ -186,6 +192,27 @@ void Preferences::on_fontSize_editTextChanged(const QString &size)
|
||||||
emit fontChanged(getValue("editor/fontfamily").toString(), intsize);
|
emit fontChanged(getValue("editor/fontfamily").toString(), intsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Preferences::on_updateCheckBox_toggled(bool on)
|
||||||
|
{
|
||||||
|
if (AutoUpdater *updater =AutoUpdater::updater()) {
|
||||||
|
updater->setAutomaticallyChecksForUpdates(on);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Preferences::on_snapshotCheckBox_toggled(bool on)
|
||||||
|
{
|
||||||
|
if (AutoUpdater *updater =AutoUpdater::updater()) {
|
||||||
|
updater->setEnableSnapshots(on);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Preferences::on_checkNowButton_clicked()
|
||||||
|
{
|
||||||
|
if (AutoUpdater *updater =AutoUpdater::updater()) {
|
||||||
|
updater->checkForUpdates();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Preferences::on_openCSGWarningBox_toggled(bool state)
|
Preferences::on_openCSGWarningBox_toggled(bool state)
|
||||||
{
|
{
|
||||||
|
@ -289,6 +316,12 @@ void Preferences::updateGUI()
|
||||||
this->fontSize->setEditText(fontsize);
|
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->openCSGWarningBox->setChecked(getValue("advanced/opencsg_show_warning").toBool());
|
||||||
this->enableOpenCSGBox->setChecked(getValue("advanced/enable_opencsg_opengl1x").toBool());
|
this->enableOpenCSGBox->setChecked(getValue("advanced/enable_opencsg_opengl1x").toBool());
|
||||||
this->cgalCacheSizeEdit->setText(getValue("advanced/cgalCacheSize").toString());
|
this->cgalCacheSizeEdit->setText(getValue("advanced/cgalCacheSize").toString());
|
||||||
|
|
|
@ -30,6 +30,9 @@ public slots:
|
||||||
void on_polysetCacheSizeEdit_textChanged(const QString &);
|
void on_polysetCacheSizeEdit_textChanged(const QString &);
|
||||||
void on_opencsgLimitEdit_textChanged(const QString &);
|
void on_opencsgLimitEdit_textChanged(const QString &);
|
||||||
void on_forceGoldfeatherBox_toggled(bool);
|
void on_forceGoldfeatherBox_toggled(bool);
|
||||||
|
void on_updateCheckBox_toggled(bool);
|
||||||
|
void on_snapshotCheckBox_toggled(bool);
|
||||||
|
void on_checkNowButton_clicked();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void requestRedraw() const;
|
void requestRedraw() const;
|
||||||
|
|
|
@ -6,10 +6,16 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>531</width>
|
<width>473</width>
|
||||||
<height>418</height>
|
<height>320</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Preferences</string>
|
<string>Preferences</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -173,6 +179,150 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</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">
|
<widget class="QWidget" name="pageAdvanced">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
<item>
|
<item>
|
||||||
|
@ -227,9 +377,6 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
<zorder>openCSGWarningBox</zorder>
|
|
||||||
<zorder>enableOpenCSGBox</zorder>
|
|
||||||
<zorder>forceGoldfeatherBox</zorder>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -317,6 +464,7 @@
|
||||||
</attribute>
|
</attribute>
|
||||||
<addaction name="prefsAction3DView"/>
|
<addaction name="prefsAction3DView"/>
|
||||||
<addaction name="prefsActionEditor"/>
|
<addaction name="prefsActionEditor"/>
|
||||||
|
<addaction name="prefsActionUpdate"/>
|
||||||
<addaction name="prefsActionAdvanced"/>
|
<addaction name="prefsActionAdvanced"/>
|
||||||
</widget>
|
</widget>
|
||||||
<action name="prefsAction3DView">
|
<action name="prefsAction3DView">
|
||||||
|
@ -355,6 +503,18 @@
|
||||||
<string>Editor</string>
|
<string>Editor</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</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>
|
</widget>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="../openscad.qrc"/>
|
<include location="../openscad.qrc"/>
|
||||||
|
|
|
@ -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
|
|
@ -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()
|
||||||
|
{
|
||||||
|
NSString *datestring = [NSString stringWithFormat:@"Last checked: %@",
|
||||||
|
[d->updater lastUpdateCheckDate]];
|
||||||
|
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]];
|
||||||
|
}
|
|
@ -48,6 +48,7 @@
|
||||||
#include "ProgressWidget.h"
|
#include "ProgressWidget.h"
|
||||||
#include "ThrownTogetherRenderer.h"
|
#include "ThrownTogetherRenderer.h"
|
||||||
#include "csgtermnormalizer.h"
|
#include "csgtermnormalizer.h"
|
||||||
|
#include "AutoUpdater.h"
|
||||||
|
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QTime>
|
#include <QTime>
|
||||||
|
@ -205,6 +206,16 @@ MainWindow::MainWindow(const QString &filename)
|
||||||
|
|
||||||
animate_panel->hide();
|
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
|
// File menu
|
||||||
connect(this->fileActionNew, SIGNAL(triggered()), this, SLOT(actionNew()));
|
connect(this->fileActionNew, SIGNAL(triggered()), this, SLOT(actionNew()));
|
||||||
connect(this->fileActionOpen, SIGNAL(triggered()), this, SLOT(actionOpen()));
|
connect(this->fileActionOpen, SIGNAL(triggered()), this, SLOT(actionOpen()));
|
||||||
|
@ -781,6 +792,13 @@ void MainWindow::compileCSG(bool procevents)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::actionUpdateCheck()
|
||||||
|
{
|
||||||
|
if (AutoUpdater *updater =AutoUpdater::updater()) {
|
||||||
|
updater->checkForUpdates();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::actionNew()
|
void MainWindow::actionNew()
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_MDI
|
#ifdef ENABLE_MDI
|
||||||
|
|
|
@ -54,6 +54,7 @@
|
||||||
#ifdef Q_WS_MAC
|
#ifdef Q_WS_MAC
|
||||||
#include "EventFilter.h"
|
#include "EventFilter.h"
|
||||||
#include "AppleEvents.h"
|
#include "AppleEvents.h"
|
||||||
|
#include "SparkleAutoUpdater.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <boost/program_options.hpp>
|
#include <boost/program_options.hpp>
|
||||||
|
@ -386,6 +387,14 @@ int main(int argc, char **argv)
|
||||||
installAppleEventHandlers();
|
installAppleEventHandlers();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef DEBUG
|
||||||
|
#ifdef Q_WS_MAC
|
||||||
|
AutoUpdater *updater = new SparkleAutoUpdater;
|
||||||
|
AutoUpdater::setUpdater(updater);
|
||||||
|
if (updater->automaticallyChecksForUpdates()) updater->checkForUpdates();
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
QString qfilename;
|
QString qfilename;
|
||||||
if (filename) qfilename = QString::fromStdString(boosty::stringy(boosty::absolute(filename)));
|
if (filename) qfilename = QString::fromStdString(boosty::stringy(boosty::absolute(filename)));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue