Index: /trunk/src/defaults.h
===================================================================
--- /trunk/src/defaults.h	(revision 138)
+++ /trunk/src/defaults.h	(revision 139)
@@ -42,5 +42,5 @@
  * \brief Default for "Use native file dialog".
  */
-#ifdef Q_OS_WINCE
+#ifdef Q_OS_WINCE_WM
 	#define DEF_USE_NATIVE_DIALOGS false
 #else
@@ -51,4 +51,8 @@
 //! Default for "Use translucency effects in Vista/7"
 #define DEF_USE_TRANSLUCENCY true
+//! Default for "Check for updates"
+#define DEF_CHECK_FOR_UPDATES false
+//! Default update check interval (in days)
+#define DEF_UPDATE_CHECK_INTERVAL 30
 
 //////// TASK
Index: /trunk/src/globals.h
===================================================================
--- /trunk/src/globals.h	(revision 138)
+++ /trunk/src/globals.h	(revision 139)
@@ -114,4 +114,19 @@
 }
 
+/*!
+ * \brief Checks whether the updater app is installed/available.
+ * \return \c true if updater app is available, oherwise \c false.
+ * \note The updater app is only available under Windows at this moment.
+ *  On other systems this function always returns \c false.
+ */
+inline bool hasUpdater()
+{
+#ifdef Q_OS_WIN32
+	return QFile::exists("updater/Update.exe");
+#else // Q_OS_WIN32
+	return false;
+#endif // Q_OS_WIN32
+}
+
 #ifdef Q_OS_WIN32
 /*!
Index: /trunk/src/main.cpp
===================================================================
--- /trunk/src/main.cpp	(revision 138)
+++ /trunk/src/main.cpp	(revision 139)
@@ -37,6 +37,4 @@
 //		Q_IMPORT_PLUGIN(qsvgicon)
 //	#endif
-//	Q_IMPORT_PLUGIN(qjpeg)
-//	Q_IMPORT_PLUGIN(qtiff)
 //#endif
 
Index: /trunk/src/mainwindow.cpp
===================================================================
--- /trunk/src/mainwindow.cpp	(revision 138)
+++ /trunk/src/mainwindow.cpp	(revision 139)
@@ -81,7 +81,6 @@
 #endif // HANDHELD
 	connect(actionSettingsPreferences, SIGNAL(triggered()), SLOT(actionSettingsPreferencesTriggered()));
-#ifdef Q_OS_WIN32
-	connect(actionHelpCheck4Updates, SIGNAL(triggered()), SLOT(actionHelpCheck4UpdatesTriggered()));
-#endif // Q_OS_WIN32
+	if (actionHelpCheck4Updates != NULL)
+		connect(actionHelpCheck4Updates, SIGNAL(triggered()), SLOT(actionHelpCheck4UpdatesTriggered()));
 	connect(actionSettingsLanguageAutodetect, SIGNAL(triggered(bool)), SLOT(actionSettingsLanguageAutodetectTriggered(bool)));
 	connect(groupSettingsLanguageList, SIGNAL(triggered(QAction *)), SLOT(groupSettingsLanguageListTriggered(QAction *)));
@@ -123,4 +122,10 @@
 	}
 	setWindowModified(false);
+
+	if ((actionHelpCheck4Updates != NULL)
+		&& (settings->value("Check4Updates/Enabled", DEF_CHECK_FOR_UPDATES).toBool())
+		&& (QDate(qvariant_cast<QDate>(settings->value("Check4Updates/LastAttempt"))).daysTo(QDate::currentDate()) >= settings->value("Check4Updates/Interval", DEF_UPDATE_CHECK_INTERVAL).toInt())) {
+		check4Updates(true);
+	}
 }
 
@@ -430,5 +435,4 @@
 #endif // HANDHELD
 
-#ifdef Q_OS_WIN32
 void MainWindow::actionHelpCheck4UpdatesTriggered()
 {
@@ -438,9 +442,6 @@
 	}
 
-	QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-	QProcess::execute("updater/Update.exe -name=\"TSPSG: TSP Solver and Generator\" -check=\"freeupdate\"");
-	QApplication::restoreOverrideCursor();
-}
-#endif // Q_OS_WIN32
+	check4Updates();
+}
 
 void MainWindow::actionHelpAboutTriggered()
@@ -1040,4 +1041,18 @@
 }
 
+void MainWindow::check4Updates(bool silent)
+{
+#ifdef Q_OS_WIN32
+	if (silent)
+		QProcess::startDetached("updater/Update.exe -name=\"TSPSG: TSP Solver and Generator\" -check=\"freeupdate\" -silentcheck");
+	else {
+		QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+		QProcess::execute("updater/Update.exe -name=\"TSPSG: TSP Solver and Generator\" -check=\"freeupdate\"");
+		QApplication::restoreOverrideCursor();
+	}
+#endif
+	settings->setValue("Check4Updates/LastAttempt", QDate::currentDate().toString(Qt::ISODate));
+}
+
 void MainWindow::closeEvent(QCloseEvent *ev)
 {
@@ -1141,13 +1156,4 @@
 		ev->accept();
 	}
-}
-
-bool MainWindow::hasUpdater() const
-{
-#ifdef Q_OS_WIN32
-	return QFile::exists("updater/Update.exe");
-#else // Q_OS_WIN32
-	return false;
-#endif // Q_OS_WIN32
 }
 
@@ -1444,10 +1450,10 @@
 #endif // HANDHELD
 
-#ifdef Q_OS_WIN32
-	actionHelpCheck4Updates->setText(tr("Check for &Updates..."));
+	if (actionHelpCheck4Updates != NULL) {
+		actionHelpCheck4Updates->setText(tr("Check for &Updates..."));
 #ifndef QT_NO_STATUSTIP
-	actionHelpCheck4Updates->setStatusTip(tr("Check for %1 updates").arg(QApplication::applicationName()));
+		actionHelpCheck4Updates->setStatusTip(tr("Check for %1 updates").arg(QApplication::applicationName()));
 #endif // QT_NO_STATUSTIP
-#endif // Q_OS_WIN32
+	}
 }
 
@@ -1593,11 +1599,12 @@
 #endif // HANDHELD
 
-#ifdef Q_OS_WIN32
-	actionHelpCheck4Updates = new QAction(this);
-	actionHelpCheck4Updates->setIcon(GET_ICON("system-software-update"));
-	actionHelpCheck4Updates->setEnabled(hasUpdater());
-	menuHelp->insertAction(actionHelpAboutQt, actionHelpCheck4Updates);
-	menuHelp->insertSeparator(actionHelpAboutQt);
-#endif // Q_OS_WIN32
+	if (hasUpdater()) {
+		actionHelpCheck4Updates = new QAction(this);
+		actionHelpCheck4Updates->setIcon(GET_ICON("system-software-update"));
+		actionHelpCheck4Updates->setEnabled(hasUpdater());
+		menuHelp->insertAction(actionHelpAboutQt, actionHelpCheck4Updates);
+		menuHelp->insertSeparator(actionHelpAboutQt);
+	} else
+		actionHelpCheck4Updates = NULL;
 
 	spinCities->setMaximum(MAX_NUM_CITIES);
Index: /trunk/src/mainwindow.h
===================================================================
--- /trunk/src/mainwindow.h	(revision 138)
+++ /trunk/src/mainwindow.h	(revision 139)
@@ -74,7 +74,5 @@
 	void actionSettingsToolbarsConfigureTriggered();
 #endif // HANDHELD
-#ifdef Q_OS_WIN32
 	void actionHelpCheck4UpdatesTriggered();
-#endif // Q_OS_WIN32
 	void actionHelpAboutTriggered();
 // Buttons
@@ -111,7 +109,5 @@
 	QAction *actionFilePrint;
 #endif // QT_NO_PRINTER
-#ifdef Q_OS_WIN32
 	QAction *actionHelpCheck4Updates;
-#endif // Q_OS_WIN32
 	QSettings *settings;
 	CTSPModel *tspmodel;
@@ -136,9 +132,9 @@
 		fmt_altlist;
 
+	void check4Updates(bool silent = false);
 	void closeEvent(QCloseEvent *ev);
 	void dragEnterEvent(QDragEnterEvent *ev);
 	void drawNode(QPainter &pic, int nstep, bool left = false, SStep *step = NULL);
 	void dropEvent(QDropEvent *ev);
-	bool hasUpdater() const;
 	void initDocStyleSheet();
 	void loadLangList();
Index: /trunk/src/settingsdialog.cpp
===================================================================
--- /trunk/src/settingsdialog.cpp	(revision 138)
+++ /trunk/src/settingsdialog.cpp	(revision 139)
@@ -72,4 +72,34 @@
 	connect(cbShowGraph, SIGNAL(toggled(bool)), cbHQGraph, SLOT(setEnabled(bool)));
 #endif
+
+	if (hasUpdater()) {
+		cbCheck4Updates = new QCheckBox(bgWhite);
+		cbCheck4Updates->setObjectName("cbCheck4Updates");
+#ifndef QT_NO_STATUSTIP
+		cbCheck4Updates->setStatusTip(tr("Automatically check for updates at the given interval"));
+#endif // QT_NO_STATUSTIP
+		cbCheck4Updates->setText(tr("Check for updates every"));
+		cbCheck4Updates->setCursor(QCursor(Qt::PointingHandCursor));
+
+		spinUpdateCheckInterval = new QSpinBox(bgWhite);
+		spinUpdateCheckInterval->setObjectName("spinUpdateCheckInterval");
+#ifndef QT_NO_STATUSTIP
+		spinUpdateCheckInterval->setStatusTip(tr("Minimal interval at which to check for updates"));
+#endif // QT_NO_STATUSTIP
+		spinUpdateCheckInterval->setSuffix(tr(" days", "Don't forget a space at the beginning!"));
+		spinUpdateCheckInterval->setRange(1, 365);
+		spinUpdateCheckInterval->setCursor(QCursor(Qt::PointingHandCursor));
+
+		connect(cbCheck4Updates, SIGNAL(toggled(bool)), spinUpdateCheckInterval, SLOT(setEnabled(bool)));
+
+		box = static_cast<QBoxLayout *>(tabGeneral->layout());
+		hbox1 = new QHBoxLayout();
+		hbox1->setSpacing(0);
+		hbox1->addWidget(cbCheck4Updates);
+		hbox1->addWidget(spinUpdateCheckInterval);
+		hbox1->addStretch();
+		box->insertLayout(box->indexOf(cbUseNativeDialogs) + 1, hbox1);
+	} else
+		cbCheck4Updates = NULL;
 
 #ifdef HANDHELD
@@ -209,4 +239,11 @@
 	cbSaveState->setChecked(settings->value("SavePos", DEF_SAVEPOS).toBool());
 #endif // HANDHELD
+	if (cbCheck4Updates != NULL) {
+		settings->beginGroup("Check4Updates");
+		cbCheck4Updates->setChecked(settings->value("Enabled", DEF_CHECK_FOR_UPDATES).toBool());
+		spinUpdateCheckInterval->setValue(settings->value("Interval", DEF_UPDATE_CHECK_INTERVAL).toInt());
+		settings->endGroup();
+		spinUpdateCheckInterval->setEnabled(cbCheck4Updates->isChecked());
+	}
 
 	settings->beginGroup("Task");
@@ -231,7 +268,7 @@
 	comboGraphImageFormat->addItem("svg");
 #endif // NOSVG && QT_VERSION >= 0x040500
-// We create a whitelist of formats, supported by the most popular web browsers according to
-//  http://en.wikipedia.org/wiki/Comparison_of_web_browsers#Image_format_support
-//  + TIFF format (there are plugins to support it).
+	// We create whitelist of formats, supported by the most popular web browsers according to
+	//  http://en.wikipedia.org/wiki/Comparison_of_web_browsers#Image_format_support
+	//  + TIFF format (there are plugins to support it).
 QStringList whitelist;
 	whitelist << "bmp" << "jpeg" << "png" << "tiff" << "xbm";
@@ -327,4 +364,11 @@
 	settings->setValue("SavePos", cbSaveState->isChecked());
 #endif // HANDHELD
+	if (cbCheck4Updates != NULL) {
+		settings->beginGroup("Check4Updates");
+		settings->setValue("Enabled", cbCheck4Updates->isChecked());
+		if (cbCheck4Updates->isChecked())
+			settings->setValue("Interval", spinUpdateCheckInterval->value());
+		settings->endGroup();
+	}
 
 	settings->beginGroup("Task");
Index: /trunk/src/settingsdialog.h
===================================================================
--- /trunk/src/settingsdialog.h	(revision 138)
+++ /trunk/src/settingsdialog.h	(revision 139)
@@ -59,4 +59,6 @@
 	QCheckBox *cbUseTranslucency;
 #endif // Q_OS_WIN32
+	QCheckBox *cbCheck4Updates;
+	QSpinBox *spinUpdateCheckInterval;
 #ifndef QT_NO_PRINTER
 	QCheckBox *cbHQGraph;
Index: /trunk/tspsg.pri
===================================================================
--- /trunk/tspsg.pri	(revision 138)
+++ /trunk/tspsg.pri	(revision 139)
@@ -4,6 +4,6 @@
 #  Copyright (C) 2007-2010 Lёppa <contacts[at]oleksii[dot]name>
 #
-#  $Id$
-#  $URL$
+#  $Id: tspsg.pri 137 2010-09-15 14:57:37Z laleppa $
+#  $URL: https://svn.tspsg.info/svnroot/tspsg/trunk/tspsg.pri $
 #
 #  This file is part of TSPSG.
@@ -46,4 +46,8 @@
 }
 
+win* {
+	RC_FILE = resources/tspsg.rc
+}
+
 #Translations
 CODECFORTR = UTF-8
@@ -60,2 +64,3 @@
 	HEADERS += src/_.h
 }
+
Index: /trunk/tspsg.pro
===================================================================
--- /trunk/tspsg.pro	(revision 138)
+++ /trunk/tspsg.pro	(revision 139)
@@ -20,4 +20,10 @@
 
 # QMAKE_MAC_SDK = /Developer/SDKs/MacOSX10.5.sdk
+
+# Version information
+QMAKE_TARGET_COMPANY = Oleksii "Lёppa" Serdiuk
+QMAKE_TARGET_PRODUCT = TSP Solver and Generator
+QMAKE_TARGET_DESCRIPTION = TSPSG: TSP Solver and Generator
+QMAKE_TARGET_COPYRIGHT = Copyright © 2007-2010 Oleksii "Lёppa" Serdiuk <contacts[at]oleksii[dot]name>
 
 # Versioning
@@ -64,5 +70,4 @@
 	# We "embed" SVG icon, JPEG and TIFF support on static build
 	DEFINES += STATIC_BUILD
-#	QTPLUGIN += qjpeg qtiff
 #	!nosvg:QTPLUGIN += qsvgicon
 }
