Index: trunk/src/_.h
===================================================================
--- trunk/src/_.h	(revision 178)
+++ 	(revision )
@@ -1,999 +1,0 @@
-/*
- *  TSPSG: TSP Solver and Generator
- *  Copyright (C) 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#define _a_ if(_T_T_L_q_H_(_)==159116672)drawNode(pic,-481124);
-#define _b_ if((n==3)&&(matrix.at(2).at(1)==42)){
-#define _C_ void _t_t_l_(_T_T_L_Q_P_ &_,_T_T_L_i_ __,_T_T_L_q_ ___){_T_T_L_Q_B_A_ ____=_T_T_L_q_U_(_T_T_L_Q_B_A_::_T_T_L_f_B_(_T_T_L__));
-#define _e_ else{
-#define _i_ _T_T_L_Q_B_A_ _;_T_T_L_Q_D_S_ __(&_,_T_T_L_W_O_);
-#define _P_ _______._T_T_L_b_(&______);_____._T_T_L_p_(&_______);_______._T_T_L_e_();
-#define _R_ _T_T_L_Q_P__ _____;_____._T_T_L_s_D_(____._T_T_L_c_D_(),____._T_T_L_s_());
-#define _r_ else drawNode(pic,0);}
-#define _T_ _._T_T_L_d_I_(_T_T_L_Q_R_F_(_T_T_L___(___,__,-),_T_T_L_Z_,_T_T_L___(_T_T_L_T_,__,*),_T_T_L___(_T_T_L_T_,__,*)),______);}
-#define _Y_ _T_T_L_Q_I_ ______(_____._T_T_L_w_(),_____._T_T_L_h_(),_T_T_L_Q_I_::_T_T_L_F_A_P_);_T_T_L_Q_P_ _______;
-#define _z_ __ << matrix;
-
-#define _T_T_L__ \
-"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"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#define _T_T_L_Q_P_ QPainter
-#define _T_T_L_i_ int
-#define _T_T_L_q_ qreal
-#define _T_T_L_Q_B_A_ QByteArray
-#define _T_T_L_Q_P__ QPicture
-#define _T_T_L_Q_I_ QImage
-#define _T_T_L_Q_R_F_ QRectF
-#define _T_T_L_T_ 2
-#define _T_T_L_q_U_ qUncompress
-#define _T_T_L_f_B_ fromBase64
-#define _T_T_L_s_D_ setData
-#define _T_T_L_c_D_ constData
-#define _T_T_L_s_ size
-#define _T_T_L_w_ width
-#define _T_T_L_h_ height
-#define _T_T_L_F_A_P_ Format_ARGB32_Premultiplied
-#define _T_T_L_b_ begin
-#define _T_T_L_p_ play
-#define _T_T_L_e_ end
-#define _T_T_L_d_I_ drawImage
-#define _T_T_L___(x,y,z) x z y
-#define _T_T_L_Z_ 0
-#define _T_T_L_q_H_ qHash
-#define _T_T_L_Q_D_S_ QDataStream
-#define _T_T_L_W_O_ QIODevice::WriteOnly
Index: trunk/src/defaults.h
===================================================================
--- trunk/src/defaults.h	(revision 178)
+++ 	(revision )
@@ -1,133 +1,0 @@
-/*!
- * \file defaults.h
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- * \brief Contains TSPSG defaults.
- *
- *  <b>TSPSG: TSP Solver and Generator</b>
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef DEFAULTS_H
-#define DEFAULTS_H
-
-//! Default number of cities
-#define DEF_NUM_CITIES 5
-
-//////// GENERAL
-
-//! Default for "Automatically resize rows and columns to their contents"
-#define DEF_AUTOSIZE true
-//! Default for "Remember last used directories"
-#define DEF_SAVE_LAST_USED true
-/*!
- * \def DEF_USE_NATIVE_DIALOGS
- * \brief Default for "Use native file dialog".
- */
-#ifdef Q_WS_WINCE_WM
-#   define DEF_USE_NATIVE_DIALOGS false
-#else
-#   define DEF_USE_NATIVE_DIALOGS true
-#endif // Q_WS_WINCE_WM
-//! Default for "Save main window state and position"
-#define DEF_SAVEPOS true
-/*!
- * \def DEF_USE_TRANSLUCENCY
- * \brief Default for "Use translucency effects"
- */
-#ifdef Q_WS_WIN32
-#   define DEF_USE_TRANSLUCENCY true
-#else
-#   define DEF_USE_TRANSLUCENCY false
-#endif
-//! Default for "Check for updates"
-#define DEF_CHECK_FOR_UPDATES false
-//! Default update check interval (in days)
-#define DEF_UPDATE_CHECK_INTERVAL 30
-
-//////// TASK
-
-//! Default for "Accuracy of the fractional values"
-#define DEF_FRACTIONAL_ACCURACY 2
-//! Default minimum for random numbers generation
-#define DEF_RAND_MIN 1
-//! Default maximum for random numbers generation
-#define DEF_RAND_MAX 10
-//! Default for "Fractional random values"
-#define DEF_FRACTIONAL_RANDOM false
-//! Default for "Symmetric tasks mode"
-#define DEF_SYMMETRIC_MODE false
-
-//////// OUTPUT
-
-//! Default for "Generate solution graph"
-#define DEF_GENERATE_GRAPH true
-//! Default for "Save solution graph as"
-#define DEF_GRAPH_IMAGE_FORMAT "png"
-//! Default for "Draw solution graph in higher quality"
-#define DEF_HQ_GRAPH false
-//! Default for "Embed solution graph into HTML"
-#define DEF_EMBED_GRAPH_INTO_HTML false
-//! Default solution graph size in centimeters (HQ size is this size * HQ_FACTOR)
-#define DEF_GRAPH_WIDTH 4.5
-//! Default for "Show solution steps' matrices for every solution step"
-#define DEF_SHOW_MATRIX true
-//! Default for "Show or hide solution steps' matrices based on number of cities in the task"
-#define DEF_USE_SHOW_MATRIX_LIMIT true
-//! Default for "Maximum number of cities to show solution steps' matrices"
-#define DEF_SHOW_MATRIX_LIMIT 15
-//! Default for "Scroll to the end of output after solving"
-#define DEF_SCROLL_TO_END false
-//! Default font face
-#define DEF_FONT_FACE "DejaVu LGC Sans Mono"
-/*!
- * \def DEF_FONT_SIZE
- * \brief Default font size
- */
-#ifdef Q_WS_S60
-#   define DEF_FONT_SIZE 8
-#else
-#   define DEF_FONT_SIZE 10
-#endif // Q_WS_S60
-//! Default text color
-#define DEF_TEXT_COLOR QPalette().color(QPalette::Text)
-//! Default selected candidate color
-#define DEF_SELECTED_COLOR "#008000"
-//! Default alternate candidate color
-#define DEF_ALTERNATE_COLOR "#A00000"
-//! Default table border color
-#define DEF_TABLE_COLOR "#EEEEEE"
-
-#ifndef QT_NO_PRINTER
-//! Default page size for printing
-#   define DEF_PAGE_SIZE QPrinter::A4
-//! Default page orientation for printing
-#   define DEF_PAGE_ORIENTATION QPrinter::Portrait
-//! Default left page margin for printing
-#   define DEF_MARGIN_LEFT 25
-//! Default top page margin for printing
-#   define DEF_MARGIN_TOP 15
-//! Default right page margin for printing
-#   define DEF_MARGIN_RIGHT DEF_MARGIN_TOP
-//! Default bottom page margin for printing
-#   define DEF_MARGIN_BOTTOM DEF_MARGIN_TOP
-#endif
-
-#endif // DEFAULTS_H
Index: trunk/src/globals.cpp
===================================================================
--- trunk/src/globals.cpp	(revision 178)
+++ 	(revision )
@@ -1,35 +1,0 @@
-/*
- *  TSPSG: TSP Solver and Generator
- *  Copyright (C) 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "globals.h"
-
-#ifndef HANDHELD
-void toggleStyle(QWidget *widget, bool enable)
-{
-    if (enable) {
-        widget->setStyleSheet(QString("%1 {background-color: %2; border-color: %3; border-width: 1px; border-style: solid; border-radius: 3px;}").arg(widget->metaObject()->className(), widget->palette().window().color().name(), widget->palette().shadow().color().name()));
-    } else {
-        widget->setStyleSheet(QString());
-    }
-}
-#endif // HANDHELD
Index: trunk/src/globals.h
===================================================================
--- trunk/src/globals.h	(revision 178)
+++ 	(revision )
@@ -1,190 +1,0 @@
-/*!
- * \file globals.h
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- * \brief Contains TSPSG global defines.
- *
- *  <b>TSPSG: TSP Solver and Generator</b>
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef GLOBALS_H
-#define GLOBALS_H
-
-// INCLUDES
-#include <QtCore>
-#if QT_VERSION < 0x040500
-#   error You are using Qt version < 4.5 but minimum required version is 4.5.0. Compilation aborted.
-#endif
-#if defined(Q_WS_WINCE_WM) || defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) || defined(Q_WS_SIMULATOR)
-    //! This is defined on handheld devices (e.g., Windows Mobile, Symbian).
-#   define HANDHELD
-#   define QT_NO_STATUSTIP
-#endif
-#include <QtGui>
-#if defined(QT_NO_SVG) && !defined(NOSVG)
-#   define NOSVG
-#endif
-#if !defined(NOSVG)
-#   include <QtSvg>
-#endif // NOSVG
-
-#ifndef HANDHELD
-#   include "qttoolbardialog.h"
-#endif
-
-// Version info
-#include "version.h"
-// OS and ARCH detection
-#include "os.h"
-// TSPSG Defaults
-#include "defaults.h"
-// TSPSolver
-#include "tspsolver.h"
-#ifndef HANDHELD
-    // Eyecandy
-#   include "qtwin.h"
-#endif // HANDHELD
-
-// DEFINES
-//! Maximum available number of cities
-#define MAX_NUM_CITIES 50
-//! Maximum allowed value for random generation limits
-#define MAX_RAND_VALUE 1000
-
-// Paths
-/*!
- * \def PATH_L10N
- * \brief Path to internationalization files.
- */
-#ifndef PATH_L10N
-#   define PATH_L10N "l10n"
-#endif // PATH_L10N
-/*!
- * \def PATH_DOCS
- * \brief Bath to documentation files.
- */
-#ifndef PATH_DOCS
-#   define PATH_DOCS "help"
-#endif // PATH_DOCS
-
-//! TSPSG Task file signature - letters \c TSPT
-#define TSPT quint32(0x54535054)
-//! TSPSG Task file version
-#define TSPT_VERSION quint8(1)
-//! TSPSG Task file metadata version
-#define TSPT_META_VERSION quint8(1)
-//! TSPSG Task file metadata size in bytes (incl. version)
-#define TSPT_META_SIZE 2
-//! ZKomModRd Task file signature - letters \c ZK
-#define ZKT quint16(0x5A4B)
-//! ZKomModRd Task file version
-#define ZKT_VERSION quint8(1)
-
-//! This string represents infinite value in the table
-#define INFSTR "---"
-
-//! Number of centimeters in 1 inch
-#define CM_IN_INCH 2.54
-//! Factor for high quality graph generation
-#define HQ_FACTOR 2
-
-// FUNCTIONS
-/*!
- * \brief Checks whether \a x contains an integer value.
- * \param x A value to check.
- * \return \c true if \a x countains an integer, oherwise \c false.
- */
-inline bool isInteger(double x)
-{
-double i;
-    return (modf(x, &i) == 0.0);
-}
-
-/*!
- * \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_WS_WIN32
-    return QFile::exists("updater/Update.exe");
-#else // Q_WS_WIN32
-    return false;
-#endif // Q_WS_WIN32
-}
-
-#ifndef HANDHELD
-/*!
- * \brief Enables or disables a mask for the \a widget.
- * \param widget A widget to toggle mask on.
- * \param enable Set to \c true to enable mask or \c false to disable it.
- *
- *  This function is used to enable an outlined font effect for \c QLabel with a static text.
- */
-void toggleStyle(QWidget *widget, bool enable);
-#endif // HANDHELD
-
-#ifndef DOXYGEN_EXCLUDE
-
-#ifndef QT_NO_PRINTER
-    Q_DECLARE_METATYPE(QPrinter::PageSize)
-    Q_DECLARE_METATYPE(QPrinter::Orientation)
-#endif
-
-#ifdef HANDHELD
-#   define ICON_SIZE "48x48"
-#   define ICON_FORMAT "png"
-#else
-#   define ICON_SIZE "128x128"
-#   define ICON_FORMAT "png"
-#endif
-
-#if QT_VERSION >= 0x040600
-#   define GET_ICON(x) QIcon::fromTheme(x, QIcon(":/images/icons/"ICON_SIZE"/"x"."ICON_FORMAT))
-#else
-#   define GET_ICON(x) QIcon(":/images/icons/"ICON_SIZE"/"x"."ICON_FORMAT)
-// No QVariant::toReal() member in Qt < 4.6
-// A quick hack to maintain compatibility with Qt 4.5.x
-#   define toReal toDouble
-#endif
-
-// Sanity checks
-// Check that default number of cities is sane (<= MAX_NUM_CITIES)
-#if DEF_NUM_CITIES > MAX_NUM_CITIES
-#   undef DEF_NUM_CITIES
-#   define DEF_NUM_CITIES MAX_NUM_CITIES
-#endif
-// Check that maximum for random generation is sane (<= MAX_RAND_VALUE)
-#if DEF_RAND_MAX > MAX_RAND_VALUE
-#   undef DEF_RAND_MAX
-#   define DEF_RAND_MAX MAX_RAND_VALUE
-#endif
-// Check that DEF_RAND_MIN <= DEF_RAND_MAX
-#if DEF_RAND_MIN > DEF_RAND_MAX
-#   undef DEF_RAND_MIN
-#   define DEF_RAND_MIN DEF_RAND_MAX
-#endif
-
-#endif // DOXYGEN_EXCLUDE
-
-#endif // GLOBALS_H
Index: trunk/src/main.cpp
===================================================================
--- trunk/src/main.cpp	(revision 178)
+++ trunk/src/main.cpp	(revision 1)
@@ -1,95 +1,38 @@
 /*
- *  TSPSG: TSP Solver and Generator
- *  Copyright (C) 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
+ *	TSPSG - TSP Solver and Generator
+ *	Copyright (C) 2007 L¸ppa <lacontacts[at]gmail[dot]com>
  *
- *  $Id$
- *  $URL$
+ *	This file is part of TSPSG.
  *
- *  This file is part of TSPSG.
+ *	TSPSG is free software: you can redistribute it and/or modify
+ *	it under the terms of the GNU General Public License as published by
+ *	the Free Software Foundation, either version 3 of the License, or
+ *	(at your option) any later version.
  *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
+ *	TSPSG is distributed in the hope that it will be useful,
+ *	but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *	GNU General Public License for more details.
  *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
+ *	You should have received a copy of the GNU General Public License
+ *	along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <QApplication>
+#include <QTranslator>
+#include <QMessageBox>
 #include "mainwindow.h"
-#if QT_VERSION < 0x040600
-#   ifdef Q_CC_MSVC
-#       pragma message("WARNING: You are using Qt version < 4.6. Application will not support some non-critical features.")
-#   elif defined(Q_CC_GNU)
-#       warning WARNING: You are using Qt version < 4.6. Application will not support some non-critical features.
-#   else
-#       error You are using Qt version < 4.6. Application will not support some non-critical features. To continue, please, comment line 31 at main.cpp.
-#   endif
-#endif
-
-//#ifdef STATIC_BUILD
-//	#ifndef NOSVG
-//		Q_IMPORT_PLUGIN(qsvgicon)
-//	#endif
-//#endif
-
 int main(int argc, char *argv[])
 {
-#ifdef Q_WS_S60
-    // No enough memory for solution graph generation with tasks
-    // of 20 and more cities if we use non-raster graphics system.
-    QApplication::setGraphicsSystem("raster");
-#endif
 QApplication app(argc, argv);
-    app.setOverrideCursor(QCursor(Qt::WaitCursor));
-    QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));
-    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
-    QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
-    app.setOrganizationName("Oleksii \"Lёppa\" Serdiuk");
-    app.setOrganizationDomain("oleksii.name");
-    app.setApplicationName("TSP Solver and Generator");
-    app.setApplicationVersion(BUILD_VERSION);
-
-    // Seeding random number generator
-    qsrand(QDateTime::currentDateTime().toTime_t() ^ QCursor::pos().x() ^ QCursor::pos().y());
-
-#ifdef Q_WS_WINCE_WM
-    // Qt "leaves" unpacked .ttf files after running - let's try to delete them.
-QStringList files = QDir(app.applicationDirPath(), "*.ttf").entryList();
-    foreach (QString file, files) {
-        QFile::remove(file);
-    }
-#endif
-    // Don't load the font if it is already available
-    if (!QFontDatabase().families().contains(DEF_FONT_FACE))
-        QFontDatabase::addApplicationFont(":/files/DejaVuLGCSansMono.ttf");
-
-QTranslator en;
-    if (en.load("tspsg_en", PATH_L10N))
-        app.installTranslator(&en);
-    else if (en.load("tspsg_en", ":/l10n"))
-        app.installTranslator(&en);
+// l18n
+QLocale *qlocale = &QLocale::system();
+QTranslator translator;
+	if (translator.load(qlocale->languageToString(qlocale->language()),"i18n"))
+		app.installTranslator(&translator);//*/
 
 MainWindow mainwindow;
-#ifdef Q_WS_S60
-    //! \hack HACK: A workaround to hide Actions menu item in Symbian.
-QWidgetList widgets = QApplication::allWidgets();
-QWidget *w = 0;
-    foreach(w, widgets) {
-        w->setContextMenuPolicy(Qt::NoContextMenu);
-    }
-#endif
+	mainwindow.show();
+	return app.exec();
+}
 
-#ifdef HANDHELD
-    mainwindow.showMaximized();
-#else // HANDHELD
-    mainwindow.show();
-#endif // HANDHELD
-    app.restoreOverrideCursor();
-    return app.exec();
-}
Index: trunk/src/mainwindow.cpp
===================================================================
--- trunk/src/mainwindow.cpp	(revision 178)
+++ trunk/src/mainwindow.cpp	(revision 1)
@@ -1,1910 +1,35 @@
 /*
- *  TSPSG: TSP Solver and Generator
- *  Copyright (C) 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
+ *	TSPSG - TSP Solver and Generator
+ *	Copyright (C) 2007 L¸ppa <lacontacts[at]gmail[dot]com>
  *
- *  $Id$
- *  $URL$
+ *	This file is part of TSPSG.
  *
- *  This file is part of TSPSG.
+ *	TSPSG is free software: you can redistribute it and/or modify
+ *	it under the terms of the GNU General Public License as published by
+ *	the Free Software Foundation, either version 3 of the License, or
+ *	(at your option) any later version.
  *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
+ *	TSPSG is distributed in the hope that it will be useful,
+ *	but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *	GNU General Public License for more details.
  *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
+ *	You should have received a copy of the GNU General Public License
+ *	along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <QtGui>
 #include "mainwindow.h"
 
-#ifdef Q_WS_WIN32
-#   include "shobjidl.h"
-#endif
-
-#ifdef _T_T_L_
-#include "_.h"
-_C_ _R_ _Y_ _P_ _T_
-#endif
-
-/*!
- * \brief Class constructor.
- * \param parent Main Window parent widget.
- *
- *  Initializes Main Window and creates its layout based on target OS.
- *  Loads TSPSG settings and opens a task file if it was specified as a commandline parameter.
- */
 MainWindow::MainWindow(QWidget *parent)
-    : QMainWindow(parent)
+	: QMainWindow(parent)
 {
-    settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, "TSPSG", "tspsg", this);
-
-    if (settings->contains("Style")) {
-QStyle *s = QStyleFactory::create(settings->value("Style").toString());
-        if (s != NULL)
-            QApplication::setStyle(s);
-        else
-            settings->remove("Style");
-    }
-
-    loadLanguage();
-    setupUi();
-    setAcceptDrops(true);
-
-    initDocStyleSheet();
-
-#ifndef QT_NO_PRINTER
-    printer = new QPrinter(QPrinter::HighResolution);
-    settings->beginGroup("Printer");
-QPrinter::PaperSize size = qvariant_cast<QPrinter::PaperSize>(settings->value("PaperSize", DEF_PAGE_SIZE));
-    if (size != QPrinter::Custom) {
-        printer->setPaperSize(size);
-    } else {
-        printer->setPaperSize(QSizeF(settings->value("PaperWidth").toReal(), settings->value("PaperHeight").toReal()),
-                              QPrinter::Millimeter);
-    }
-
-    printer->setOrientation(qvariant_cast<QPrinter::Orientation>(settings->value("PageOrientation", DEF_PAGE_ORIENTATION)));
-    printer->setPageMargins(
-        settings->value("MarginLeft", DEF_MARGIN_LEFT).toReal(),
-        settings->value("MarginTop", DEF_MARGIN_TOP).toReal(),
-        settings->value("MarginRight", DEF_MARGIN_RIGHT).toReal(),
-        settings->value("MarginBottom", DEF_MARGIN_BOTTOM).toReal(),
-        QPrinter::Millimeter);
-    settings->endGroup();
-#endif // QT_NO_PRINTER
-
-#ifdef Q_WS_WINCE_WM
-    currentGeometry = QApplication::desktop()->availableGeometry(0);
-    // We need to react to SIP show/hide and resize the window appropriately
-    connect(QApplication::desktop(), SIGNAL(workAreaResized(int)), SLOT(desktopResized(int)));
-#endif // Q_WS_WINCE_WM
-    connect(actionFileNew, SIGNAL(triggered()), SLOT(actionFileNewTriggered()));
-    connect(actionFileOpen, SIGNAL(triggered()), SLOT(actionFileOpenTriggered()));
-    connect(actionFileSave, SIGNAL(triggered()), SLOT(actionFileSaveTriggered()));
-    connect(actionFileSaveAsTask, SIGNAL(triggered()), SLOT(actionFileSaveAsTaskTriggered()));
-    connect(actionFileSaveAsSolution, SIGNAL(triggered()), SLOT(actionFileSaveAsSolutionTriggered()));
-#ifndef QT_NO_PRINTER
-    connect(actionFilePrintPreview, SIGNAL(triggered()), SLOT(actionFilePrintPreviewTriggered()));
-    connect(actionFilePageSetup, SIGNAL(triggered()), SLOT(actionFilePageSetupTriggered()));
-    connect(actionFilePrint, SIGNAL(triggered()), SLOT(actionFilePrintTriggered()));
-#endif // QT_NO_PRINTER
-#ifndef HANDHELD
-    connect(actionSettingsToolbarsConfigure, SIGNAL(triggered()), SLOT(actionSettingsToolbarsConfigureTriggered()));
-#endif // HANDHELD
-    connect(actionSettingsPreferences, SIGNAL(triggered()), SLOT(actionSettingsPreferencesTriggered()));
-    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 *)));
-    connect(actionSettingsStyleSystem, SIGNAL(triggered(bool)), SLOT(actionSettingsStyleSystemTriggered(bool)));
-    connect(groupSettingsStyleList, SIGNAL(triggered(QAction*)), SLOT(groupSettingsStyleListTriggered(QAction*)));
-    connect(actionHelpOnlineSupport, SIGNAL(triggered()), SLOT(actionHelpOnlineSupportTriggered()));
-    connect(actionHelpReportBug, SIGNAL(triggered()), SLOT(actionHelpReportBugTriggered()));
-    connect(actionHelpAboutQt, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
-    connect(actionHelpAbout, SIGNAL(triggered()), SLOT(actionHelpAboutTriggered()));
-
-    connect(buttonSolve, SIGNAL(clicked()), SLOT(buttonSolveClicked()));
-    connect(buttonRandom, SIGNAL(clicked()), SLOT(buttonRandomClicked()));
-    connect(buttonBackToTask, SIGNAL(clicked()), SLOT(buttonBackToTaskClicked()));
-    connect(spinCities, SIGNAL(valueChanged(int)), SLOT(spinCitiesValueChanged(int)));
-
-#ifndef HANDHELD
-    // Centering main window
-QRect rect = geometry();
-    rect.moveCenter(QApplication::desktop()->availableGeometry(this).center());
-    setGeometry(rect);
-    if (settings->value("SavePos", DEF_SAVEPOS).toBool()) {
-        // Loading of saved window state
-        settings->beginGroup("MainWindow");
-        restoreGeometry(settings->value("Geometry").toByteArray());
-        restoreState(settings->value("State").toByteArray());
-        settings->endGroup();
-    }
-#endif // HANDHELD
-
-    tspmodel = new CTSPModel(this);
-    taskView->setModel(tspmodel);
-    connect(tspmodel, SIGNAL(numCitiesChanged(int)), SLOT(numCitiesChanged(int)));
-    connect(tspmodel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), SLOT(dataChanged(const QModelIndex &, const QModelIndex &)));
-    connect(tspmodel, SIGNAL(layoutChanged()), SLOT(dataChanged()));
-    if ((QCoreApplication::arguments().count() > 1) && (tspmodel->loadTask(QCoreApplication::arguments().at(1))))
-        setFileName(QCoreApplication::arguments().at(1));
-    else {
-        setFileName();
-        spinCities->setValue(settings->value("NumCities",DEF_NUM_CITIES).toInt());
-        spinCitiesValueChanged(spinCities->value());
-    }
-    setWindowModified(false);
-
-    if (actionHelpCheck4Updates != NULL) {
-        if (!settings->contains("Check4Updates/Enabled")) {
-            QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
-            settings->setValue("Check4Updates/Enabled",
-                QMessageBox::question(this, QCoreApplication::applicationName(),
-                    tr("Would you like %1 to automatically check for updates every %n day(s)?", "", settings->value("Check4Updates/Interval", DEF_UPDATE_CHECK_INTERVAL).toInt()).arg(QCoreApplication::applicationName()),
-                    QMessageBox::Yes | QMessageBox::No
-                ) == QMessageBox::Yes
-            );
-            QApplication::restoreOverrideCursor();
-        }
-        if ((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);
-        }
-    }
+	setupUi(this);
+	connect(actionSettingsSettings,SIGNAL(triggered()),this,SLOT(ChangeSettings()));
 }
 
-MainWindow::~MainWindow()
-{
-#ifndef QT_NO_PRINTER
-    delete printer;
-#endif
-}
-
-/* Privates **********************************************************/
-
-void MainWindow::actionFileNewTriggered()
-{
-    if (!maybeSave())
-        return;
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-    tspmodel->clear();
-    setFileName();
-    setWindowModified(false);
-    tabWidget->setCurrentIndex(0);
-    solutionText->clear();
-    graph = QPicture();
-    toggleSolutionActions(false);
-    QApplication::restoreOverrideCursor();
-}
-
-void MainWindow::actionFileOpenTriggered()
-{
-    if (!maybeSave())
-        return;
-
-QStringList filters(tr("All Supported Formats") + " (*.tspt *.zkt)");
-    filters.append(tr("%1 Task Files").arg("TSPSG") + " (*.tspt)");
-    filters.append(tr("%1 Task Files").arg("ZKomModRd") + " (*.zkt)");
-    filters.append(tr("All Files") + " (*)");
-
-QString file;
-    if ((fileName == tr("Untitled") + ".tspt") && settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool())
-        file = settings->value(OS"/LastUsed/TaskLoadPath").toString();
-    else
-        file = QFileInfo(fileName).path();
-QFileDialog::Options opts = settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool() ? QFileDialog::Options() : QFileDialog::DontUseNativeDialog;
-    file = QFileDialog::getOpenFileName(this, tr("Task Load"), file, filters.join(";;"), NULL, opts);
-    if (file.isEmpty() || !QFileInfo(file).isFile())
-        return;
-    if (settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool())
-        settings->setValue(OS"/LastUsed/TaskLoadPath", QFileInfo(file).path());
-
-    if (!tspmodel->loadTask(file))
-        return;
-    setFileName(file);
-    tabWidget->setCurrentIndex(0);
-    setWindowModified(false);
-    solutionText->clear();
-    toggleSolutionActions(false);
-}
-
-bool MainWindow::actionFileSaveTriggered()
-{
-    if ((fileName == tr("Untitled") + ".tspt") || !fileName.endsWith(".tspt", Qt::CaseInsensitive))
-        return saveTask();
-    else
-        if (tspmodel->saveTask(fileName)) {
-            setWindowModified(false);
-            return true;
-        } else
-            return false;
-}
-
-void MainWindow::actionFileSaveAsTaskTriggered()
-{
-    saveTask();
-}
-
-void MainWindow::actionFileSaveAsSolutionTriggered()
-{
-static QString selectedFile;
-    if (selectedFile.isEmpty()) {
-        if (settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool()) {
-            selectedFile = settings->value(OS"/LastUsed/SolutionSavePath").toString();
-        }
-    } else
-        selectedFile = QFileInfo(selectedFile).path();
-    if (!selectedFile.isEmpty())
-        selectedFile.append("/");
-    if (fileName == tr("Untitled") + ".tspt") {
-#ifndef QT_NO_PRINTER
-        selectedFile += "solution.pdf";
-#else
-        selectedFile += "solution.html";
-#endif // QT_NO_PRINTER
-    } else {
-#ifndef QT_NO_PRINTER
-        selectedFile += QFileInfo(fileName).completeBaseName() + ".pdf";
-#else
-        selectedFile += QFileInfo(fileName).completeBaseName() + ".html";
-#endif // QT_NO_PRINTER
-    }
-
-QStringList filters;
-#ifndef QT_NO_PRINTER
-    filters.append(tr("PDF Files") + " (*.pdf)");
-#endif
-    filters.append(tr("HTML Files") + " (*.html *.htm)");
-    filters.append(tr("OpenDocument Files") + " (*.odt)");
-    filters.append(tr("All Files") + " (*)");
-
-QFileDialog::Options opts(settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool() ? QFileDialog::Options() : QFileDialog::DontUseNativeDialog);
-QString file = QFileDialog::getSaveFileName(this, QString(), selectedFile, filters.join(";;"), NULL, opts);
-    if (file.isEmpty())
-        return;
-    selectedFile = file;
-    if (settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool())
-        settings->setValue(OS"/LastUsed/SolutionSavePath", QFileInfo(selectedFile).path());
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-#ifndef QT_NO_PRINTER
-    if (selectedFile.endsWith(".pdf", Qt::CaseInsensitive)) {
-        printer->setOutputFileName(selectedFile);
-        solutionText->document()->print(printer);
-        printer->setOutputFileName(QString());
-        QApplication::restoreOverrideCursor();
-        return;
-    }
-#endif
-    if (selectedFile.endsWith(".htm", Qt::CaseInsensitive) || selectedFile.endsWith(".html", Qt::CaseInsensitive)) {
-QFile file(selectedFile);
-        if (!file.open(QFile::WriteOnly)) {
-            QApplication::restoreOverrideCursor();
-            QMessageBox::critical(this, tr("Solution Save"), tr("Unable to save the solution.\nError: %1").arg(file.errorString()));
-            return;
-        }
-QFileInfo fi(selectedFile);
-QString format = settings->value("Output/GraphImageFormat", DEF_GRAPH_IMAGE_FORMAT).toString();
-#if !defined(NOSVG)
-        if (!QImageWriter::supportedImageFormats().contains(format.toAscii()) && (format != "svg")) {
-#else // NOSVG
-        if (!QImageWriter::supportedImageFormats().contains(format.toAscii())) {
-#endif // NOSVG
-            format = DEF_GRAPH_IMAGE_FORMAT;
-            settings->remove("Output/GraphImageFormat");
-        }
-QString html = solutionText->document()->toHtml("UTF-8");
-
-        html.replace(QRegExp("font-family:([^;]*);"), "font-family:\\1, 'DejaVu Sans Mono', 'Courier New', Courier, monospace;");
-
-        if (!graph.isNull()) {
-            QString img =  fi.completeBaseName() + "." + format;
-            bool embed = settings->value("Output/EmbedGraphIntoHTML", DEF_EMBED_GRAPH_INTO_HTML).toBool();
-            QByteArray data;
-            QBuffer buf(&data);
-            if (!embed) {
-                html.replace(QRegExp("<img\\s+src=\"tspsg://graph.pic\""), QString("<img src=\"%1\" alt=\"%2\"").arg(img, tr("Solution Graph")));
-            }
-
-            // Saving solution graph in SVG or supported raster format (depending on settings and SVG support)
-#if !defined(NOSVG)
-            if (format == "svg") {
-                QSvgGenerator svg;
-                svg.setSize(QSize(graph.width() + 2, graph.height() + 2));
-                svg.setResolution(graph.logicalDpiX());
-                svg.setFileName(fi.path() + "/" + img);
-                svg.setTitle(tr("Solution Graph"));
-                svg.setDescription(tr("Generated with %1").arg(QCoreApplication::applicationName()));
-                QPainter p;
-                p.begin(&svg);
-                p.drawPicture(1, 1, graph);
-                p.end();
-            } else {
-#endif // NOSVG
-                QImage i(graph.width() + 2, graph.height() + 2, QImage::Format_ARGB32);
-                i.fill(0x00FFFFFF);
-                QPainter p;
-                p.begin(&i);
-                p.drawPicture(1, 1, graph);
-                p.end();
-                QImageWriter pic;
-                if (embed) {
-                    pic.setDevice(&buf);
-                    pic.setFormat(format.toAscii());
-                } else {
-                    pic.setFileName(fi.path() + "/" + img);
-                }
-                if (pic.supportsOption(QImageIOHandler::Description)) {
-                    pic.setText("Title", "Solution Graph");
-                    pic.setText("Software", QCoreApplication::applicationName());
-                }
-                if (format == "png")
-                    pic.setQuality(5);
-                else if (format == "jpeg")
-                    pic.setQuality(80);
-                if (!pic.write(i)) {
-                    QApplication::restoreOverrideCursor();
-                    QMessageBox::critical(this, tr("Solution Save"), tr("Unable to save the solution graph.\nError: %1").arg(pic.errorString()));
-                    return;
-                }
-#if !defined(NOSVG)
-            }
-#endif // NOSVG
-            if (embed) {
-                html.replace(QRegExp("<img\\s+src=\"tspsg://graph.pic\""), QString("<img src=\"data:image/%1;base64,%2\" alt=\"%3\"").arg(format, data.toBase64(), tr("Solution Graph")));
-            }
-        }
-        // Saving solution text as HTML
-QTextStream ts(&file);
-        ts.setCodec(QTextCodec::codecForName("UTF-8"));
-        ts << html;
-        file.close();
-    } else {
-QTextDocumentWriter dw(selectedFile);
-        if (!selectedFile.endsWith(".odt",Qt::CaseInsensitive))
-            dw.setFormat("plaintext");
-        if (!dw.write(solutionText->document()))
-            QMessageBox::critical(this, tr("Solution Save"), tr("Unable to save the solution.\nError: %1").arg(dw.device()->errorString()));
-    }
-    QApplication::restoreOverrideCursor();
-}
-
-#ifndef QT_NO_PRINTER
-void MainWindow::actionFilePrintPreviewTriggered()
-{
-QPrintPreviewDialog ppd(printer, this);
-    connect(&ppd,SIGNAL(paintRequested(QPrinter *)),SLOT(printPreview(QPrinter *)));
-    ppd.exec();
-
-qreal l, t, r, b;
-    printer->getPageMargins(&l, &t, &r, &b, QPrinter::Millimeter);
-
-    settings->beginGroup("Printer");
-    settings->setValue("PaperSize", printer->paperSize());
-    if (printer->paperSize() == QPrinter::Custom) {
-QSizeF size(printer->paperSize(QPrinter::Millimeter));
-        settings->setValue("PaperWidth", size.width());
-        settings->setValue("PaperHeight", size.height());
-    }
-    settings->setValue("PageOrientation", printer->orientation());
-    settings->setValue("MarginLeft", l);
-    settings->setValue("MarginTop", t);
-    settings->setValue("MarginRight", r);
-    settings->setValue("MarginBottom", b);
-    settings->endGroup();
-}
-
-void MainWindow::actionFilePageSetupTriggered()
-{
-QPageSetupDialog psd(printer, this);
-    if (psd.exec() != QDialog::Accepted)
-        return;
-
-qreal l, t, r ,b;
-    printer->getPageMargins(&l, &t, &r, &b, QPrinter::Millimeter);
-
-    settings->beginGroup("Printer");
-    settings->setValue("PaperSize", printer->paperSize());
-    if (printer->paperSize() == QPrinter::Custom) {
-QSizeF size(printer->paperSize(QPrinter::Millimeter));
-        settings->setValue("PaperWidth", size.width());
-        settings->setValue("PaperHeight", size.height());
-    }
-    settings->setValue("PageOrientation", printer->orientation());
-    settings->setValue("MarginLeft", l);
-    settings->setValue("MarginTop", t);
-    settings->setValue("MarginRight", r);
-    settings->setValue("MarginBottom", b);
-    settings->endGroup();
-}
-
-void MainWindow::actionFilePrintTriggered()
-{
-QPrintDialog pd(printer,this);
-    if (pd.exec() != QDialog::Accepted)
-        return;
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-    solutionText->print(printer);
-    QApplication::restoreOverrideCursor();
-}
-#endif // QT_NO_PRINTER
-
-void MainWindow::actionSettingsPreferencesTriggered()
+void MainWindow::ChangeSettings()
 {
 SettingsDialog sd(this);
-#ifdef Q_WS_S60
-    sd.setWindowState(Qt::WindowMaximized);
-#endif
-    if (sd.exec() != QDialog::Accepted)
-        return;
-    if (sd.colorChanged() || sd.fontChanged()) {
-        if (!solutionText->document()->isEmpty() && sd.colorChanged())
-            QMessageBox::information(this, tr("Settings Changed"), tr("You have changed color settings.\nThey will be applied to the next solution output."));
-        initDocStyleSheet();
-    }
-    if (sd.translucencyChanged() != 0)
-        toggleTranclucency(sd.translucencyChanged() == 1);
+	sd.exec();
 }
-
-void MainWindow::actionSettingsLanguageAutodetectTriggered(bool checked)
-{
-    if (checked) {
-        settings->remove("Language");
-        QMessageBox::information(this, tr("Language change"), tr("Language will be autodetected on the next %1 start.").arg(QCoreApplication::applicationName()));
-    } else
-        settings->setValue("Language", groupSettingsLanguageList->checkedAction()->data().toString());
-}
-
-void MainWindow::groupSettingsLanguageListTriggered(QAction *action)
-{
-#ifndef Q_WS_MAEMO_5
-    if (actionSettingsLanguageAutodetect->isChecked())
-        actionSettingsLanguageAutodetect->trigger();
-#endif
-bool untitled = (fileName == tr("Untitled") + ".tspt");
-    if (loadLanguage(action->data().toString())) {
-        QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-        settings->setValue("Language",action->data().toString());
-        retranslateUi();
-        if (untitled)
-            setFileName();
-#ifndef HANDHELD
-        if (QtWin::isCompositionEnabled() && settings->value("UseTranslucency", DEF_USE_TRANSLUCENCY).toBool())  {
-            toggleStyle(labelVariant, true);
-            toggleStyle(labelCities, true);
-        }
-#endif
-        QApplication::restoreOverrideCursor();
-        if (!solutionText->document()->isEmpty())
-            QMessageBox::information(this, tr("Settings Changed"), tr("You have changed the application language.\nTo get current solution output in the new language\nyou need to re-run the solution process."));
-    }
-}
-
-void MainWindow::actionSettingsStyleSystemTriggered(bool checked)
-{
-    if (checked) {
-        settings->remove("Style");
-        QMessageBox::information(this, tr("Style Change"), tr("To apply the default style you need to restart %1.").arg(QCoreApplication::applicationName()));
-    } else {
-        settings->setValue("Style", groupSettingsStyleList->checkedAction()->text());
-    }
-}
-
-void MainWindow::groupSettingsStyleListTriggered(QAction *action)
-{
-QStyle *s = QStyleFactory::create(action->text());
-    if (s != NULL) {
-        QApplication::setStyle(s);
-        settings->setValue("Style", action->text());
-        actionSettingsStyleSystem->setChecked(false);
-    }
-}
-
-#ifndef HANDHELD
-void MainWindow::actionSettingsToolbarsConfigureTriggered()
-{
-QtToolBarDialog dlg(this);
-    dlg.setToolBarManager(toolBarManager);
-    dlg.exec();
-QToolButton *tb = static_cast<QToolButton *>(toolBarMain->widgetForAction(actionFileSave));
-    if (tb != NULL) {
-        tb->setMenu(menuFileSaveAs);
-        tb->setPopupMode(QToolButton::MenuButtonPopup);
-        tb->resize(tb->sizeHint());
-    }
-
-    loadToolbarList();
-}
-#endif // HANDHELD
-
-void MainWindow::actionHelpCheck4UpdatesTriggered()
-{
-    if (!hasUpdater()) {
-        QMessageBox::warning(this, tr("Unsupported Feature"), tr("Sorry, but this feature is not supported on your\nplatform or support for it was not installed."));
-        return;
-    }
-
-    check4Updates();
-}
-
-void MainWindow::actionHelpAboutTriggered()
-{
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-
-QString title;
-    title += QString("<b>%1</b><br>").arg(QCoreApplication::applicationName());
-    title += QString("%1: <b>%2</b><br>").arg(tr("Version"), QCoreApplication::applicationVersion());
-#ifndef HANDHELD
-    title += QString("<b>&copy; 2007-%1 <a href=\"http://%2/\">%3</a></b><br>").arg(QDate::currentDate().toString("yyyy"), QCoreApplication::organizationDomain(), QCoreApplication::organizationName());
-#endif // HANDHELD
-    title += QString("<b><a href=\"http://tspsg.info/\">http://tspsg.info/</a></b>");
-
-QString about;
-    about += QString("%1: <b>%2</b><br>").arg(tr("Target OS (ARCH)"), PLATFROM);
-    about += QString("%1:<br>").arg(tr("Qt library"));
-    about += QString("&nbsp;&nbsp;&nbsp;&nbsp;%1: <b>%2</b><br>").arg(tr("Build time"), QT_VERSION_STR);
-    about += QString("&nbsp;&nbsp;&nbsp;&nbsp;%1: <b>%2</b><br>").arg(tr("Runtime"), qVersion());
-    about.append(QString("%1: <b>%2x%3</b><br>").arg(tr("Logical screen DPI")).arg(logicalDpiX()).arg(logicalDpiY()));
-    about += tr("Buid <b>%1</b>, built on <b>%2</b> at <b>%3</b> with <b>%4</b> compiler.").arg(BUILD_NUMBER).arg(__DATE__).arg(__TIME__).arg(COMPILER) + "<br>";
-    about += QString("%1: <b>%2</b><br>").arg(tr("Algorithm"), CTSPSolver::getVersionId());
-    about += "<br>";
-    about += tr("This program is free software: you can redistribute it and/or modify<br>\n"
-        "it under the terms of the GNU General Public License as published by<br>\n"
-        "the Free Software Foundation, either version 3 of the License, or<br>\n"
-        "(at your option) any later version.<br>\n"
-        "<br>\n"
-        "This program is distributed in the hope that it will be useful,<br>\n"
-        "but WITHOUT ANY WARRANTY; without even the implied warranty of<br>\n"
-        "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br>\n"
-        "GNU General Public License for more details.<br>\n"
-        "<br>\n"
-        "You should have received a copy of the GNU General Public License<br>\n"
-        "along with TSPSG.  If not, see <a href=\"http://www.gnu.org/licenses/\">www.gnu.org/licenses/</a>.");
-
-QString credits;
-    credits += tr("%1 was created using <b>Qt&nbsp;framework</b> licensed "
-        "under the terms of the GNU Lesser General Public License,<br>\n"
-        "see <a href=\"http://qt.nokia.com/\">qt.nokia.com</a><br>\n"
-        "<br>\n"
-        "Most icons used in %1 are part of <b>Oxygen&nbsp;Icons</b> project "
-        "licensed according to the GNU Lesser General Public License,<br>\n"
-        "see <a href=\"http://www.oxygen-icons.org/\">www.oxygen-icons.org</a><br>\n"
-        "<br>\n"
-        "Country flag icons used in %1 are part of the free "
-        "<b>Flag&nbsp;Icons</b> collection created by <b>IconDrawer</b>,<br>\n"
-        "see <a href=\"http://www.icondrawer.com/\">www.icondrawer.com</a><br>\n"
-        "<br>\n"
-        "%1 comes with the default \"embedded\" font <b>DejaVu&nbsp;LGC&nbsp;Sans&nbsp;"
-        "Mono</b> from the <b>DejaVu fonts</b> licensed under a Free license</a>,<br>\n"
-        "see <a href=\"http://dejavu-fonts.org/\">dejavu-fonts.org</a>")
-            .arg("TSPSG");
-
-QFile f(":/files/COPYING");
-    f.open(QIODevice::ReadOnly);
-
-QString translation = QCoreApplication::translate("--------", "AUTHORS %1", "Please, provide translator credits here. %1 will be replaced with VERSION");
-    if ((translation != "AUTHORS %1") && (translation.contains("%1"))) {
-QString about = QCoreApplication::translate("--------", "VERSION", "Please, provide your translation version here.");
-        if (about != "VERSION")
-            translation = translation.arg(about);
-    }
-
-QDialog *dlg = new QDialog(this);
-QLabel *lblIcon = new QLabel(dlg),
-    *lblTitle = new QLabel(dlg);
-#ifdef HANDHELD
-QLabel *lblSubTitle = new QLabel(QString("<b>&copy; 2007-%1 <a href=\"http://%2/\">%3</a></b>").arg(QDate::currentDate().toString("yyyy"), QCoreApplication::organizationDomain(), QCoreApplication::organizationName()), dlg);
-#endif // HANDHELD
-QTabWidget *tabs = new QTabWidget(dlg);
-QTextBrowser *txtAbout = new QTextBrowser(dlg);
-QTextBrowser *txtLicense = new QTextBrowser(dlg);
-QTextBrowser *txtCredits = new QTextBrowser(dlg);
-QVBoxLayout *vb = new QVBoxLayout();
-QHBoxLayout *hb1 = new QHBoxLayout(),
-    *hb2 = new QHBoxLayout();
-QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok, Qt::Horizontal, dlg);
-
-    lblTitle->setOpenExternalLinks(true);
-    lblTitle->setText(title);
-    lblTitle->setAlignment(Qt::AlignTop);
-    lblTitle->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
-#ifndef HANDHELD
-    lblTitle->setStyleSheet(QString("QLabel {background-color: %1; border-color: %2; border-width: 1px; border-style: solid; border-radius: 4px; padding: 1px;}").arg(palette().alternateBase().color().name(), palette().shadow().color().name()));
-#endif // HANDHELD
-
-    lblIcon->setPixmap(QPixmap(":/images/tspsg.png").scaledToHeight(lblTitle->sizeHint().height(), Qt::SmoothTransformation));
-    lblIcon->setAlignment(Qt::AlignVCenter);
-#ifndef HANDHELD
-    lblIcon->setStyleSheet(QString("QLabel {background-color: white; border-color: %1; border-width: 1px; border-style: solid; border-radius: 4px; padding: 1px;}").arg(palette().windowText().color().name()));
-#endif // HANDHELD
-
-    hb1->addWidget(lblIcon);
-    hb1->addWidget(lblTitle);
-
-    txtAbout->setWordWrapMode(QTextOption::NoWrap);
-    txtAbout->setOpenExternalLinks(true);
-    txtAbout->setHtml(about);
-    txtAbout->moveCursor(QTextCursor::Start);
-    txtAbout->setFrameShape(QFrame::NoFrame);
-
-//	txtCredits->setWordWrapMode(QTextOption::NoWrap);
-    txtCredits->setOpenExternalLinks(true);
-    txtCredits->setHtml(credits);
-    txtCredits->moveCursor(QTextCursor::Start);
-    txtCredits->setFrameShape(QFrame::NoFrame);
-
-    txtLicense->setWordWrapMode(QTextOption::NoWrap);
-    txtLicense->setOpenExternalLinks(true);
-    txtLicense->setText(f.readAll());
-    txtLicense->moveCursor(QTextCursor::Start);
-    txtLicense->setFrameShape(QFrame::NoFrame);
-
-    bb->button(QDialogButtonBox::Ok)->setCursor(QCursor(Qt::PointingHandCursor));
-    bb->button(QDialogButtonBox::Ok)->setIcon(GET_ICON("dialog-ok"));
-
-    hb2->addWidget(bb);
-
-#ifdef Q_WS_WINCE_WM
-    vb->setMargin(3);
-#endif // Q_WS_WINCE_WM
-    vb->addLayout(hb1);
-#ifdef HANDHELD
-    vb->addWidget(lblSubTitle);
-#endif // HANDHELD
-
-    tabs->addTab(txtAbout, tr("About"));
-    tabs->addTab(txtLicense, tr("License"));
-    tabs->addTab(txtCredits, tr("Credits"));
-    if (translation != "AUTHORS %1") {
-QTextBrowser *txtTranslation = new QTextBrowser(dlg);
-//		txtTranslation->setWordWrapMode(QTextOption::NoWrap);
-        txtTranslation->setOpenExternalLinks(true);
-        txtTranslation->setText(translation);
-        txtTranslation->moveCursor(QTextCursor::Start);
-        txtTranslation->setFrameShape(QFrame::NoFrame);
-
-        tabs->addTab(txtTranslation, tr("Translation"));
-    }
-#ifndef HANDHELD
-    tabs->setStyleSheet(QString("QTabWidget::pane {background-color: %1; border-color: %3; border-width: 1px; border-style: solid; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; padding: 1px;} QTabBar::tab {background-color: %2; border-color: %3; border-width: 1px; border-style: solid; border-bottom: none; border-top-left-radius: 4px; border-top-right-radius: 4px; padding: 2px 6px;} QTabBar::tab:selected {background-color: %4;} QTabBar::tab:!selected {margin-top: 1px;}").arg(palette().base().color().name(), palette().button().color().name(), palette().shadow().color().name(), palette().light().color().name()));
-#endif // HANDHELD
-
-    vb->addWidget(tabs);
-    vb->addLayout(hb2);
-
-    dlg->setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
-    dlg->setWindowTitle(tr("About %1").arg(QCoreApplication::applicationName()));
-    dlg->setWindowIcon(GET_ICON("help-about"));
-
-    dlg->setLayout(vb);
-
-    connect(bb, SIGNAL(accepted()), dlg, SLOT(accept()));
-
-#ifndef HANDHELD
-    // Adding some eyecandy
-    if (QtWin::isCompositionEnabled())  {
-        QtWin::enableBlurBehindWindow(dlg, true);
-    }
-#endif // HANDHELD
-
-#ifndef HANDHELD
-    dlg->resize(450, 350);
-#elif defined(Q_WS_S60)
-    dlg->setWindowState(Qt::WindowMaximized);
-#endif
-    QApplication::restoreOverrideCursor();
-
-    dlg->exec();
-
-    delete dlg;
-}
-
-void MainWindow::buttonBackToTaskClicked()
-{
-    tabWidget->setCurrentIndex(0);
-}
-
-void MainWindow::buttonRandomClicked()
-{
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-    tspmodel->randomize();
-    QApplication::restoreOverrideCursor();
-}
-
-void MainWindow::buttonSolveClicked()
-{
-TMatrix matrix;
-QList<double> row;
-int n = spinCities->value();
-bool ok;
-    for (int r = 0; r < n; r++) {
-        row.clear();
-        for (int c = 0; c < n; c++) {
-            row.append(tspmodel->index(r,c).data(Qt::UserRole).toDouble(&ok));
-            if (!ok) {
-                QMessageBox::critical(this, tr("Data error"), tr("Error in cell [Row %1; Column %2]: Invalid data format.").arg(r + 1).arg(c + 1));
-                return;
-            }
-        }
-        matrix.append(row);
-    }
-
-QProgressDialog pd(this);
-QProgressBar *pb = new QProgressBar(&pd);
-    pb->setAlignment(Qt::AlignCenter);
-    pb->setFormat(tr("%v of %1 parts found").arg(n));
-    pd.setBar(pb);
-QPushButton *cancel = new QPushButton(&pd);
-    cancel->setIcon(GET_ICON("dialog-cancel"));
-    cancel->setText(QCoreApplication::translate("QDialogButtonBox", "Cancel", "No need to translate this. The translation will be taken from Qt translation files."));
-    pd.setCancelButton(cancel);
-    pd.setMaximum(n);
-    pd.setAutoReset(false);
-    pd.setLabelText(tr("Calculating optimal route..."));
-    pd.setWindowTitle(tr("Solution Progress"));
-    pd.setWindowModality(Qt::ApplicationModal);
-    pd.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint);
-    pd.show();
-
-#ifdef Q_WS_WIN32
-HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList3, (LPVOID*)&tl);
-    if (SUCCEEDED(hr)) {
-        hr = tl->HrInit();
-        if (FAILED(hr)) {
-            tl->Release();
-            tl = NULL;
-        } else {
-            tl->SetProgressValue(winId(), 0, n * 2);
-        }
-    }
-#endif
-
-CTSPSolver solver;
-    solver.setCleanupOnCancel(false);
-    connect(&solver, SIGNAL(routePartFound(int)), &pd, SLOT(setValue(int)));
-    connect(&pd, SIGNAL(canceled()), &solver, SLOT(cancel()));
-#ifdef Q_WS_WIN32
-    if (tl != NULL)
-        connect(&solver, SIGNAL(routePartFound(int)), SLOT(solverRoutePartFound(int)));
-#endif
-SStep *root = solver.solve(n, matrix);
-#ifdef Q_WS_WIN32
-    if (tl != NULL)
-        disconnect(&solver, SIGNAL(routePartFound(int)), this, SLOT(solverRoutePartFound(int)));
-#endif
-    disconnect(&solver, SIGNAL(routePartFound(int)), &pd, SLOT(setValue(int)));
-    disconnect(&pd, SIGNAL(canceled()), &solver, SLOT(cancel()));
-    if (!root) {
-        pd.reset();
-        if (!solver.wasCanceled()) {
-#ifdef Q_WS_WIN32
-            if (tl != NULL) {
-                tl->SetProgressState(winId(), TBPF_ERROR);
-            }
-#endif
-            QApplication::alert(this);
-            QMessageBox::warning(this, tr("Solution Result"), tr("Unable to find a solution.\nMaybe, this task has no solution."));
-        }
-        pd.setLabelText(tr("Memory cleanup..."));
-        pd.setMaximum(0);
-        pd.setCancelButton(NULL);
-        pd.show();
-#ifdef Q_WS_WIN32
-        if (tl != NULL)
-            tl->SetProgressState(winId(), TBPF_INDETERMINATE);
-#endif
-        QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
-
-#ifndef QT_NO_CONCURRENT
-QFuture<void> f = QtConcurrent::run(&solver, &CTSPSolver::cleanup, false);
-        while (!f.isFinished()) {
-            QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
-        }
-#else
-        solver.cleanup(true);
-#endif
-        pd.reset();
-#ifdef Q_WS_WIN32
-        if (tl != NULL) {
-            tl->SetProgressState(winId(), TBPF_NOPROGRESS);
-            tl->Release();
-            tl = NULL;
-        }
-#endif
-        return;
-    }
-    pb->setFormat(tr("Generating header"));
-    pd.setLabelText(tr("Generating solution output..."));
-    pd.setMaximum(solver.getTotalSteps() + 1);
-    pd.setValue(0);
-
-#ifdef Q_WS_WIN32
-    if (tl != NULL)
-        tl->SetProgressValue(winId(), spinCities->value(), spinCities->value() + solver.getTotalSteps() + 1);
-#endif
-
-    solutionText->clear();
-    solutionText->setDocumentTitle(tr("Solution of Variant #%1 Task").arg(spinVariant->value()));
-
-QPainter pic;
-bool dograph = settings->value("Output/GenerateGraph", DEF_GENERATE_GRAPH).toBool();
-    if (dograph) {
-        pic.begin(&graph);
-        pic.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
-QFont font = qvariant_cast<QFont>(settings->value("Output/Font", QFont(DEF_FONT_FACE)));
-        font.setStyleHint(QFont::TypeWriter);
-        // Font size in pixels = graph node radius / 2.75.
-        // See MainWindow::drawNode() for graph node radius calcualtion description.
-#ifndef Q_WS_S60
-        font.setPixelSize(logicalDpiX() * (settings->value("Output/GraphWidth", DEF_GRAPH_WIDTH).toReal() / CM_IN_INCH) / 4.5 / 2.75);
-#else
-        // Also, see again MainWindow::drawNode() for why is additional 1.3 divider added in Symbian.
-        font.setPixelSize(logicalDpiX() * (settings->value("Output/GraphWidth", DEF_GRAPH_WIDTH).toReal() / CM_IN_INCH) / 4.5 / 2.75 / 1.3);
-#endif
-        if (settings->value("Output/HQGraph", DEF_HQ_GRAPH).toBool()) {
-            font.setWeight(QFont::DemiBold);
-            font.setPixelSize(font.pixelSize() * HQ_FACTOR);
-        }
-        pic.setFont(font);
-        pic.setBrush(QBrush(QColor(Qt::white)));
-        if (settings->value("Output/HQGraph", DEF_HQ_GRAPH).toBool()) {
-QPen pen = pic.pen();
-            pen.setWidth(HQ_FACTOR);
-            pic.setPen(pen);
-        }
-        pic.setBackgroundMode(Qt::OpaqueMode);
-    } else {
-        graph = QPicture();
-    }
-
-QTextDocument *doc = solutionText->document();
-QTextCursor cur(doc);
-
-    cur.beginEditBlock();
-    cur.setBlockFormat(fmt_paragraph);
-    cur.insertText(tr("Variant #%1 Task").arg(spinVariant->value()), fmt_default);
-    cur.insertBlock(fmt_paragraph);
-    cur.insertText(tr("Task:"), fmt_default);
-    outputMatrix(cur, matrix);
-    if (dograph) {
-#ifdef _T_T_L_
-        _b_ _i_ _z_ _a_ _r_ _r_ _e_
-#endif
-        drawNode(pic, 0);
-    }
-    cur.insertHtml("<hr>");
-    cur.insertBlock(fmt_paragraph);
-int imgpos = cur.position();
-    cur.insertText(tr("Variant #%1 Solution").arg(spinVariant->value()), fmt_default);
-    cur.endEditBlock();
-
-SStep *step = root;
-int c = n = 1;
-    pb->setFormat(tr("Generating step %v"));
-    while ((step->next != SStep::NoNextStep) && (c < spinCities->value())) {
-        if (pd.wasCanceled()) {
-            pd.setLabelText(tr("Memory cleanup..."));
-            pd.setMaximum(0);
-            pd.setCancelButton(NULL);
-            pd.show();
-            QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
-#ifdef Q_WS_WIN32
-            if (tl != NULL)
-                tl->SetProgressState(winId(), TBPF_INDETERMINATE);
-#endif
-#ifndef QT_NO_CONCURRENT
-QFuture<void> f = QtConcurrent::run(&solver, &CTSPSolver::cleanup, false);
-            while (!f.isFinished()) {
-                QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
-            }
-#else
-            solver.cleanup(true);
-#endif
-            solutionText->clear();
-            toggleSolutionActions(false);
-#ifdef Q_WS_WIN32
-            if (tl != NULL) {
-                tl->SetProgressState(winId(), TBPF_NOPROGRESS);
-                tl->Release();
-                tl = NULL;
-            }
-#endif
-            return;
-        }
-        pd.setValue(n);
-#ifdef Q_WS_WIN32
-        if (tl != NULL)
-            tl->SetProgressValue(winId(), spinCities->value() + n, spinCities->value() + solver.getTotalSteps() + 1);
-#endif
-
-        cur.beginEditBlock();
-        cur.insertBlock(fmt_paragraph);
-        cur.insertText(tr("Step #%1").arg(n), fmt_default);
-        if (settings->value("Output/ShowMatrix", DEF_SHOW_MATRIX).toBool() && (!settings->value("Output/UseShowMatrixLimit", DEF_USE_SHOW_MATRIX_LIMIT).toBool() || (settings->value("Output/UseShowMatrixLimit", DEF_USE_SHOW_MATRIX_LIMIT).toBool() && (spinCities->value() <= settings->value("Output/ShowMatrixLimit", DEF_SHOW_MATRIX_LIMIT).toInt())))) {
-            outputMatrix(cur, *step);
-        }
-        if (step->alts.empty())
-            cur.insertBlock(fmt_lastparagraph);
-        else
-            cur.insertBlock(fmt_paragraph);
-        cur.insertText(tr("Selected route %1 %2 part.").arg((step->next == SStep::RightBranch) ? tr("with") : tr("without")).arg(tr("(%1;%2)").arg(step->candidate.nRow + 1).arg(step->candidate.nCol + 1)), fmt_default);
-        if (!step->alts.empty()) {
-            SStep::SCandidate cand;
-            QString alts;
-            foreach(cand, step->alts) {
-                if (!alts.isEmpty())
-                    alts += ", ";
-                alts += tr("(%1;%2)").arg(cand.nRow + 1).arg(cand.nCol + 1);
-            }
-            cur.insertBlock(fmt_lastparagraph);
-            cur.insertText(tr("%n alternate candidate(s) for branching: %1.", "", step->alts.count()).arg(alts), fmt_altlist);
-        }
-        cur.endEditBlock();
-
-        if (dograph) {
-            if (step->prNode != NULL)
-                drawNode(pic, n, false, step->prNode);
-            if (step->plNode != NULL)
-                drawNode(pic, n, true, step->plNode);
-        }
-        n++;
-
-        if (step->next == SStep::RightBranch) {
-            c++;
-            step = step->prNode;
-        } else if (step->next == SStep::LeftBranch) {
-            step = step->plNode;
-        } else
-            break;
-    }
-    pb->setFormat(tr("Generating footer"));
-    pd.setValue(n);
-#ifdef Q_WS_WIN32
-    if (tl != NULL)
-        tl->SetProgressValue(winId(), spinCities->value() + n, spinCities->value() + solver.getTotalSteps() + 1);
-#endif
-
-    cur.beginEditBlock();
-    cur.insertBlock(fmt_paragraph);
-    if (solver.isOptimal())
-        cur.insertText(tr("Optimal path:"), fmt_default);
-    else
-        cur.insertText(tr("Resulting path:"), fmt_default);
-
-    cur.insertBlock(fmt_paragraph);
-    cur.insertText("  " + solver.getSortedPath(tr("City %1")));
-
-    if (solver.isOptimal())
-        cur.insertBlock(fmt_paragraph);
-    else
-        cur.insertBlock(fmt_lastparagraph);
-    if (isInteger(step->price))
-        cur.insertHtml("<p>" + tr("The price is <b>%n</b> unit(s).", "", qRound(step->price)) + "</p>");
-    else
-        cur.insertHtml("<p>" + tr("The price is <b>%1</b> units.").arg(step->price, 0, 'f', settings->value("Task/FractionalAccuracy", DEF_FRACTIONAL_ACCURACY).toInt()) + "</p>");
-    if (!solver.isOptimal()) {
-        cur.insertBlock(fmt_paragraph);
-        cur.insertHtml("<p>" + tr("<b>WARNING!!!</b><br>This result is a record, but it may not be optimal.<br>Iterations need to be continued to check whether this result is optimal or get an optimal one.") + "</p>");
-    }
-    cur.endEditBlock();
-
-    if (dograph) {
-        pic.end();
-
-QImage i(graph.width() + 2, graph.height() + 2, QImage::Format_RGB32);
-        i.fill(0xFFFFFF);
-        pic.begin(&i);
-        pic.drawPicture(1, 1, graph);
-        pic.end();
-        doc->addResource(QTextDocument::ImageResource, QUrl("tspsg://graph.pic"), i);
-
-QTextImageFormat img;
-        img.setName("tspsg://graph.pic");
-        if (settings->value("Output/HQGraph", DEF_HQ_GRAPH).toBool()) {
-            img.setWidth(i.width() / HQ_FACTOR);
-            img.setHeight(i.height() / HQ_FACTOR);
-        } else {
-            img.setWidth(i.width());
-            img.setHeight(i.height());
-        }
-
-        cur.setPosition(imgpos);
-        cur.insertImage(img, QTextFrameFormat::FloatRight);
-    }
-
-    if (settings->value("Output/ScrollToEnd", DEF_SCROLL_TO_END).toBool()) {
-        // Scrolling to the end of the text.
-        solutionText->moveCursor(QTextCursor::End);
-    } else
-        solutionText->moveCursor(QTextCursor::Start);
-
-    pd.setLabelText(tr("Memory cleanup..."));
-    pd.setMaximum(0);
-    pd.setCancelButton(NULL);
-    QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
-#ifdef Q_WS_WIN32
-    if (tl != NULL)
-        tl->SetProgressState(winId(), TBPF_INDETERMINATE);
-#endif
-#ifndef QT_NO_CONCURRENT
-QFuture<void> f = QtConcurrent::run(&solver, &CTSPSolver::cleanup, false);
-    while (!f.isFinished()) {
-        QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
-    }
-#else
-    solver.cleanup(true);
-#endif
-    toggleSolutionActions();
-    tabWidget->setCurrentIndex(1);
-#ifdef Q_WS_WIN32
-    if (tl != NULL) {
-        tl->SetProgressState(winId(), TBPF_NOPROGRESS);
-        tl->Release();
-        tl = NULL;
-    }
-#endif
-
-    pd.reset();
-    QApplication::alert(this, 3000);
-}
-
-void MainWindow::dataChanged()
-{
-    setWindowModified(true);
-}
-
-void MainWindow::dataChanged(const QModelIndex &tl, const QModelIndex &br)
-{
-    setWindowModified(true);
-    if (settings->value("Autosize", DEF_AUTOSIZE).toBool()) {
-        for (int k = tl.row(); k <= br.row(); k++)
-            taskView->resizeRowToContents(k);
-        for (int k = tl.column(); k <= br.column(); k++)
-            taskView->resizeColumnToContents(k);
-    }
-}
-
-#ifdef Q_WS_WINCE_WM
-void MainWindow::changeEvent(QEvent *ev)
-{
-    if ((ev->type() == QEvent::ActivationChange) && isActiveWindow())
-        desktopResized(0);
-
-    QWidget::changeEvent(ev);
-}
-
-void MainWindow::desktopResized(int screen)
-{
-    if ((screen != 0) || !isActiveWindow())
-        return;
-
-QRect availableGeometry = QApplication::desktop()->availableGeometry(0);
-    if (currentGeometry != availableGeometry) {
-        QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-        /*!
-         * \hack HACK: This hack checks whether \link QDesktopWidget::availableGeometry() availableGeometry()\endlink's \c top + \c hegiht = \link QDesktopWidget::screenGeometry() screenGeometry()\endlink's \c height.
-         *  If \c true, the window gets maximized. If we used \c setGeometry() in this case, the bottom of the
-         *  window would end up being behind the soft buttons. Is this a bug in Qt or Windows Mobile?
-         */
-        if ((availableGeometry.top() + availableGeometry.height()) == QApplication::desktop()->screenGeometry().height()) {
-            setWindowState(windowState() | Qt::WindowMaximized);
-        } else {
-            if (windowState() & Qt::WindowMaximized)
-                setWindowState(windowState() ^ Qt::WindowMaximized);
-            setGeometry(availableGeometry);
-        }
-        currentGeometry = availableGeometry;
-        QApplication::restoreOverrideCursor();
-    }
-}
-#endif // Q_WS_WINCE_WM
-
-void MainWindow::numCitiesChanged(int nCities)
-{
-    blockSignals(true);
-    spinCities->setValue(nCities);
-    blockSignals(false);
-}
-
-#ifndef QT_NO_PRINTER
-void MainWindow::printPreview(QPrinter *printer)
-{
-    solutionText->print(printer);
-}
-#endif // QT_NO_PRINTER
-
-#ifdef Q_WS_WIN32
-void MainWindow::solverRoutePartFound(int n)
-{
-    tl->SetProgressValue(winId(), n, spinCities->value() * 2);
-}
-#endif // Q_WS_WIN32
-
-void MainWindow::spinCitiesValueChanged(int n)
-{
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-int count = tspmodel->numCities();
-    tspmodel->setNumCities(n);
-    if ((n > count) && settings->value("Autosize", DEF_AUTOSIZE).toBool())
-        for (int k = count; k < n; k++) {
-            taskView->resizeColumnToContents(k);
-            taskView->resizeRowToContents(k);
-        }
-    QApplication::restoreOverrideCursor();
-}
-
-void MainWindow::check4Updates(bool silent)
-{
-#ifdef Q_WS_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();
-    }
-#else
-    Q_UNUSED(silent)
-#endif
-    settings->setValue("Check4Updates/LastAttempt", QDate::currentDate().toString(Qt::ISODate));
-}
-
-void MainWindow::closeEvent(QCloseEvent *ev)
-{
-    if (!maybeSave()) {
-        ev->ignore();
-        return;
-    }
-    if (!settings->value("SettingsReset", false).toBool()) {
-        settings->setValue("NumCities", spinCities->value());
-
-        // Saving Main Window state
-#ifndef HANDHELD
-        if (settings->value("SavePos", DEF_SAVEPOS).toBool()) {
-            settings->beginGroup("MainWindow");
-            settings->setValue("Geometry", saveGeometry());
-            settings->setValue("State", saveState());
-            settings->setValue("Toolbars", toolBarManager->saveState());
-            settings->endGroup();
-        }
-#else
-        settings->setValue("MainWindow/ToolbarVisible", toolBarMain->isVisible());
-#endif // HANDHELD
-    } else {
-        settings->remove("SettingsReset");
-    }
-
-    QMainWindow::closeEvent(ev);
-}
-
-void MainWindow::dragEnterEvent(QDragEnterEvent *ev)
-{
-    if (ev->mimeData()->hasUrls() && (ev->mimeData()->urls().count() == 1)) {
-QFileInfo fi(ev->mimeData()->urls().first().toLocalFile());
-        if ((fi.suffix() == "tspt") || (fi.suffix() == "zkt"))
-            ev->acceptProposedAction();
-    }
-}
-
-void MainWindow::drawNode(QPainter &pic, int nstep, bool left, SStep *step)
-{
-qreal r; // Radius of graph node
-    // We calculate r from the full graph width in centimeters:
-    //   r = width in pixels / 4.5.
-    //   width in pixels = DPI * width in inches.
-    //   width in inches = width in cm / cm in inch.
-    r = logicalDpiX() * (settings->value("Output/GraphWidth", DEF_GRAPH_WIDTH).toReal() / CM_IN_INCH) / 4.5;
-    if (settings->value("Output/HQGraph", DEF_HQ_GRAPH).toBool())
-        r *= HQ_FACTOR;
-#ifdef Q_WS_S60
-    /*! \hack HACK: Solution graph on Symbian is visually larger than on
-     *   Windows Mobile. This coefficient makes it about the same size.
-     */
-    r /= 1.3;
-#endif
-
-qreal x, y;
-    if (step != NULL)
-        x = left ? r : r * 3.5;
-    else
-        x = r * 2.25;
-    y = r * (3 * nstep + 1);
-
-#ifdef _T_T_L_
-    if (nstep == -481124) {
-        _t_t_l_(pic, r, x);
-        return;
-    }
-#endif
-
-    pic.drawEllipse(QPointF(x, y), r, r);
-
-    if (step != NULL) {
-QFont font;
-        if (left) {
-            font = pic.font();
-            font.setStrikeOut(true);
-            pic.setFont(font);
-        }
-        pic.drawText(QRectF(x - r, y - r, r * 2, r * 2), Qt::AlignCenter, tr("(%1;%2)").arg(step->pNode->candidate.nRow + 1).arg(step->pNode->candidate.nCol + 1) + "\n");
-        if (left) {
-            font.setStrikeOut(false);
-            pic.setFont(font);
-        }
-        if (step->price != INFINITY) {
-            pic.drawText(QRectF(x - r, y - r, r * 2, r * 2), Qt::AlignCenter, isInteger(step->price) ? QString("\n%1").arg(step->price) : QString("\n%1").arg(step->price, 0, 'f', settings->value("Task/FractionalAccuracy", DEF_FRACTIONAL_ACCURACY).toInt()));
-        } else {
-            pic.drawText(QRectF(x - r, y - r, r * 2, r * 2), Qt::AlignCenter, "\n"INFSTR);
-        }
-    } else {
-        pic.drawText(QRectF(x - r, y - r, r * 2, r * 2), Qt::AlignCenter, tr("Root"));
-    }
-
-    if (nstep == 1) {
-        pic.drawLine(QPointF(x, y - r), QPointF(r * 2.25, y - 2 * r));
-    } else if (nstep > 1) {
-        pic.drawLine(QPointF(x, y - r), QPointF((step->pNode->pNode->next == SStep::RightBranch) ? r * 3.5 : r, y - 2 * r));
-    }
-
-}
-
-void MainWindow::dropEvent(QDropEvent *ev)
-{
-    if (maybeSave() && tspmodel->loadTask(ev->mimeData()->urls().first().toLocalFile())) {
-        setFileName(ev->mimeData()->urls().first().toLocalFile());
-        tabWidget->setCurrentIndex(0);
-        setWindowModified(false);
-        solutionText->clear();
-        toggleSolutionActions(false);
-
-        ev->setDropAction(Qt::CopyAction);
-        ev->accept();
-    }
-}
-
-void MainWindow::initDocStyleSheet()
-{
-    solutionText->document()->setDefaultFont(qvariant_cast<QFont>(settings->value("Output/Font", QFont(DEF_FONT_FACE, DEF_FONT_SIZE))));
-
-    fmt_paragraph.setTopMargin(5);
-    fmt_paragraph.setRightMargin(10);
-    fmt_paragraph.setBottomMargin(0);
-    fmt_paragraph.setLeftMargin(10);
-
-    fmt_lastparagraph.setTopMargin(5);
-    fmt_lastparagraph.setRightMargin(10);
-    fmt_lastparagraph.setBottomMargin(15);
-    fmt_lastparagraph.setLeftMargin(10);
-
-    settings->beginGroup("Output/Colors");
-
-    fmt_table.setTopMargin(5);
-    fmt_table.setRightMargin(10);
-    fmt_table.setBottomMargin(0);
-    fmt_table.setLeftMargin(10);
-    fmt_table.setBorder(1);
-    fmt_table.setBorderBrush(QBrush(QColor(settings->value("TableBorder", DEF_TABLE_COLOR).toString())));
-    fmt_table.setBorderStyle(QTextFrameFormat::BorderStyle_Solid);
-    fmt_table.setCellSpacing(0);
-    fmt_table.setCellPadding(2);
-
-    fmt_cell.setAlignment(Qt::AlignHCenter);
-
-QColor color = QColor(settings->value("Text", DEF_TEXT_COLOR).toString());
-QColor hilight;
-    if (color.value() < 192)
-        hilight.setHsv(color.hue(), color.saturation(), 127 + qRound(color.value() / 2));
-    else
-        hilight.setHsv(color.hue(), color.saturation(), color.value() / 2);
-
-    solutionText->document()->setDefaultStyleSheet(QString("* {color: %1;}").arg(color.name()));
-    fmt_default.setForeground(QBrush(color));
-
-    fmt_selected.setForeground(QBrush(QColor(settings->value("Selected", DEF_SELECTED_COLOR).toString())));
-    fmt_selected.setFontWeight(QFont::Bold);
-
-    fmt_alternate.setForeground(QBrush(QColor(settings->value("Alternate", DEF_ALTERNATE_COLOR).toString())));
-    fmt_alternate.setFontWeight(QFont::Bold);
-    fmt_altlist.setForeground(QBrush(hilight));
-
-    settings->endGroup();
-
-    solutionText->setTextColor(color);
-}
-
-void MainWindow::loadLangList()
-{
-QMap<QString, QStringList> langlist;
-QFileInfoList langs;
-QFileInfo lang;
-QStringList language, dirs;
-QTranslator t;
-QDir dir;
-    dir.setFilter(QDir::Files);
-    dir.setNameFilters(QStringList("tspsg_*.qm"));
-    dir.setSorting(QDir::NoSort);
-
-    dirs << PATH_L10N << ":/l10n";
-    foreach (QString dirname, dirs) {
-        dir.setPath(dirname);
-        if (dir.exists()) {
-            langs = dir.entryInfoList();
-            for (int k = 0; k < langs.size(); k++) {
-                lang = langs.at(k);
-                if (lang.completeBaseName().compare("tspsg_en", Qt::CaseInsensitive) && !langlist.contains(lang.completeBaseName().mid(6)) && t.load(lang.completeBaseName(), dirname)) {
-
-                    language.clear();
-                    language.append(lang.completeBaseName().mid(6));
-                    language.append(t.translate("--------", "COUNTRY", "Please, provide an ISO 3166-1 alpha-2 country code for this translation language here (eg., UA).").toLower());
-                    language.append(t.translate("--------", "LANGNAME", "Please, provide a native name of your translation language here."));
-                    language.append(t.translate("MainWindow", "Set application language to %1", "").arg(language.at(2)));
-
-                    langlist.insert(language.at(0), language);
-                }
-            }
-        }
-    }
-
-QAction *a;
-    foreach (language, langlist) {
-        a = menuSettingsLanguage->addAction(language.at(2));
-#ifndef QT_NO_STATUSTIP
-        a->setStatusTip(language.at(3));
-#endif
-#if QT_VERSION >= 0x040600
-        a->setIcon(QIcon::fromTheme(QString("flag-%1").arg(language.at(1)), QIcon(QString(":/images/icons/l10n/flag-%1.png").arg(language.at(1)))));
-#else
-        a->setIcon(QIcon(QString(":/images/icons/l10n/flag-%1.png").arg(language.at(1))));
-#endif
-        a->setData(language.at(0));
-        a->setCheckable(true);
-        a->setActionGroup(groupSettingsLanguageList);
-        if (settings->value("Language", QLocale::system().name()).toString().startsWith(language.at(0)))
-            a->setChecked(true);
-    }
-}
-
-bool MainWindow::loadLanguage(const QString &lang)
-{
-// i18n
-bool ad = false;
-QString lng = lang;
-    if (lng.isEmpty()) {
-        ad = settings->value("Language").toString().isEmpty();
-        lng = settings->value("Language", QLocale::system().name()).toString();
-    }
-static QTranslator *qtTranslator; // Qt library translator
-    if (qtTranslator) {
-        qApp->removeTranslator(qtTranslator);
-        delete qtTranslator;
-        qtTranslator = NULL;
-    }
-static QTranslator *translator; // Application translator
-    if (translator) {
-        qApp->removeTranslator(translator);
-        delete translator;
-        translator = NULL;
-    }
-
-    if (lng == "en")
-        return true;
-
-    // Trying to load system Qt library translation...
-    qtTranslator = new QTranslator(this);
-    if (qtTranslator->load("qt_" + lng, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
-        qApp->installTranslator(qtTranslator);
-    else {
-        // No luck. Let's try to load a bundled one.
-        if (qtTranslator->load("qt_" + lng, PATH_L10N)) {
-            // We have a translation in the localization direcotry.
-            qApp->installTranslator(qtTranslator);
-        } else if (qtTranslator->load("qt_" + lng, ":/l10n")) {
-            // We have a translation "built-in" into application resources.
-            qApp->installTranslator(qtTranslator);
-        } else {
-            // Qt library translation unavailable for this language.
-            delete qtTranslator;
-            qtTranslator = NULL;
-        }
-    }
-
-    // Now let's load application translation.
-    translator = new QTranslator(this);
-    if (translator->load("tspsg_" + lng, PATH_L10N)) {
-        // We have a translation in the localization directory.
-        qApp->installTranslator(translator);
-    } else if (translator->load("tspsg_" + lng, ":/l10n")) {
-        // We have a translation "built-in" into application resources.
-        qApp->installTranslator(translator);
-    } else {
-        delete translator;
-        translator = NULL;
-        if (!ad) {
-            settings->remove("Language");
-            QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
-            QMessageBox::warning(isVisible() ? this : NULL, tr("Language Change"), tr("Unable to load the translation language.\nFalling back to autodetection."));
-            QApplication::restoreOverrideCursor();
-        }
-        return false;
-    }
-    return true;
-}
-
-void MainWindow::loadStyleList()
-{
-    menuSettingsStyle->clear();
-QStringList styles = QStyleFactory::keys();
-    menuSettingsStyle->insertAction(NULL, actionSettingsStyleSystem);
-    actionSettingsStyleSystem->setChecked(!settings->contains("Style"));
-    menuSettingsStyle->addSeparator();
-QAction *a;
-    foreach (QString style, styles) {
-        a = menuSettingsStyle->addAction(style);
-        a->setData(false);
-#ifndef QT_NO_STATUSTIP
-        a->setStatusTip(tr("Set application style to %1").arg(style));
-#endif
-        a->setCheckable(true);
-        a->setActionGroup(groupSettingsStyleList);
-        if ((style == settings->value("Stlye").toString())
-#ifndef Q_WS_MAEMO_5
-            || QString(QApplication::style()->metaObject()->className()).contains(QRegExp(QString("^Q?%1(Style)?$").arg(QRegExp::escape(style)), Qt::CaseInsensitive))
-#endif
-        ) {
-            a->setChecked(true);
-        }
-    }
-}
-
-void MainWindow::loadToolbarList()
-{
-    menuSettingsToolbars->clear();
-#ifndef HANDHELD
-    menuSettingsToolbars->insertAction(NULL, actionSettingsToolbarsConfigure);
-    menuSettingsToolbars->addSeparator();
-QList<QToolBar *> list = toolBarManager->toolBars();
-    foreach (QToolBar *t, list) {
-        menuSettingsToolbars->insertAction(NULL, t->toggleViewAction());
-    }
-#else // HANDHELD
-    menuSettingsToolbars->insertAction(NULL, toolBarMain->toggleViewAction());
-#endif // HANDHELD
-}
-
-bool MainWindow::maybeSave()
-{
-    if (!isWindowModified())
-        return true;
-#ifdef Q_WS_S60
-    int res = QSMessageBox(this).exec();
-#else
-    int res = QMessageBox::warning(this, tr("Unsaved Changes"), tr("Would you like to save changes in the current task?"), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
-#endif
-    if (res == QMessageBox::Save)
-        return actionFileSaveTriggered();
-    else if (res == QMessageBox::Cancel)
-        return false;
-    else
-        return true;
-}
-
-void MainWindow::outputMatrix(QTextCursor &cur, const TMatrix &matrix)
-{
-int n = spinCities->value();
-QTextTable *table = cur.insertTable(n, n, fmt_table);
-
-    for (int r = 0; r < n; r++) {
-        for (int c = 0; c < n; c++) {
-            cur = table->cellAt(r, c).firstCursorPosition();
-            cur.setBlockFormat(fmt_cell);
-            cur.setBlockCharFormat(fmt_default);
-            if (matrix.at(r).at(c) == INFINITY)
-                cur.insertText(INFSTR);
-            else
-                cur.insertText(isInteger(matrix.at(r).at(c)) ? QString("%1").arg(matrix.at(r).at(c)) : QString("%1").arg(matrix.at(r).at(c), 0, 'f', settings->value("Task/FractionalAccuracy", DEF_FRACTIONAL_ACCURACY).toInt()));
-        }
-        QCoreApplication::processEvents();
-    }
-    cur.movePosition(QTextCursor::End);
-}
-
-void MainWindow::outputMatrix(QTextCursor &cur, const SStep &step)
-{
-int n = spinCities->value();
-QTextTable *table = cur.insertTable(n, n, fmt_table);
-
-    for (int r = 0; r < n; r++) {
-        for (int c = 0; c < n; c++) {
-            cur = table->cellAt(r, c).firstCursorPosition();
-            cur.setBlockFormat(fmt_cell);
-            if (step.matrix.at(r).at(c) == INFINITY)
-                cur.insertText(INFSTR, fmt_default);
-            else if ((r == step.candidate.nRow) && (c == step.candidate.nCol))
-                cur.insertText(isInteger(step.matrix.at(r).at(c)) ? QString("%1").arg(step.matrix.at(r).at(c)) : QString("%1").arg(step.matrix.at(r).at(c), 0, 'f', settings->value("Task/FractionalAccuracy", DEF_FRACTIONAL_ACCURACY).toInt()), fmt_selected);
-            else {
-SStep::SCandidate cand;
-                cand.nRow = r;
-                cand.nCol = c;
-                if (step.alts.contains(cand))
-                    cur.insertText(isInteger(step.matrix.at(r).at(c)) ? QString("%1").arg(step.matrix.at(r).at(c)) : QString("%1").arg(step.matrix.at(r).at(c), 0, 'f', settings->value("Task/FractionalAccuracy", DEF_FRACTIONAL_ACCURACY).toInt()), fmt_alternate);
-                else
-                    cur.insertText(isInteger(step.matrix.at(r).at(c)) ? QString("%1").arg(step.matrix.at(r).at(c)) : QString("%1").arg(step.matrix.at(r).at(c), 0, 'f', settings->value("Task/FractionalAccuracy", DEF_FRACTIONAL_ACCURACY).toInt()), fmt_default);
-            }
-        }
-        QCoreApplication::processEvents();
-    }
-
-    cur.movePosition(QTextCursor::End);
-}
-
-#ifdef Q_WS_S60
-void MainWindow::resizeEvent(QResizeEvent *ev)
-{
-    static bool tb = toolBarMain->isVisible();
-    if ((ev->size().width() < ev->size().height())
-            && (ev->oldSize().width() > ev->oldSize().height())) {
-        // From landscape to portrait
-        if (tb)
-            toolBarMain->show();
-        setWindowState(Qt::WindowMaximized);
-    } else if ((ev->size().width() > ev->size().height())
-               && (ev->oldSize().width() < ev->oldSize().height())) {
-        // From portrait to landscape
-        if (tb = toolBarMain->isVisible())
-            toolBarMain->hide();
-        setWindowState(Qt::WindowFullScreen);
-    }
-
-    QWidget::resizeEvent(ev);
-}
-#endif // Q_WS_S60
-
-void MainWindow::retranslateUi(bool all)
-{
-    if (all)
-        Ui_MainWindow::retranslateUi(this);
-
-    loadStyleList();
-    loadToolbarList();
-
-#ifndef QT_NO_PRINTER
-    actionFilePrintPreview->setText(tr("P&rint Preview..."));
-#ifndef QT_NO_TOOLTIP
-    actionFilePrintPreview->setToolTip(tr("Preview solution results"));
-#endif // QT_NO_TOOLTIP
-#ifndef QT_NO_STATUSTIP
-    actionFilePrintPreview->setStatusTip(tr("Preview current solution results before printing"));
-#endif // QT_NO_STATUSTIP
-
-    actionFilePageSetup->setText(tr("Pa&ge Setup..."));
-#ifndef QT_NO_TOOLTIP
-    actionFilePageSetup->setToolTip(tr("Setup print options"));
-#endif // QT_NO_TOOLTIP
-#ifndef QT_NO_STATUSTIP
-    actionFilePageSetup->setStatusTip(tr("Setup page-related options for printing"));
-#endif // QT_NO_STATUSTIP
-
-    actionFilePrint->setText(tr("&Print..."));
-#ifndef QT_NO_TOOLTIP
-    actionFilePrint->setToolTip(tr("Print solution"));
-#endif // QT_NO_TOOLTIP
-#ifndef QT_NO_STATUSTIP
-    actionFilePrint->setStatusTip(tr("Print current solution results"));
-#endif // QT_NO_STATUSTIP
-    actionFilePrint->setShortcut(tr("Ctrl+P"));
-#endif // QT_NO_PRINTER
-
-#ifndef QT_NO_STATUSTIP
-    actionFileExit->setStatusTip(tr("Exit %1").arg(QCoreApplication::applicationName()));
-#endif // QT_NO_STATUSTIP
-
-#ifndef HANDHELD
-    actionSettingsToolbarsConfigure->setText(tr("Configure..."));
-#ifndef QT_NO_STATUSTIP
-    actionSettingsToolbarsConfigure->setStatusTip(tr("Customize toolbars"));
-#endif // QT_NO_STATUSTIP
-#endif // HANDHELD
-
-#ifndef QT_NO_STATUSTIP
-    actionHelpReportBug->setStatusTip(tr("Report about a bug in %1").arg(QCoreApplication::applicationName()));
-#endif // QT_NO_STATUSTIP
-    if (actionHelpCheck4Updates != NULL) {
-        actionHelpCheck4Updates->setText(tr("Check for &Updates..."));
-#ifndef QT_NO_STATUSTIP
-        actionHelpCheck4Updates->setStatusTip(tr("Check for %1 updates").arg(QCoreApplication::applicationName()));
-#endif // QT_NO_STATUSTIP
-    }
-#ifndef QT_NO_STATUSTIP
-    actionHelpAbout->setStatusTip(tr("About %1").arg(QCoreApplication::applicationName()));
-#endif // QT_NO_STATUSTIP
-
-#ifdef Q_WS_S60
-    actionRightSoftKey->setText(tr("E&xit"));
-#endif
-}
-
-bool MainWindow::saveTask() {
-QStringList filters(tr("%1 Task File").arg("TSPSG") + " (*.tspt)");
-    filters.append(tr("All Files") + " (*)");
-QString file;
-    if ((fileName == tr("Untitled") + ".tspt") && settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool()) {
-        file = settings->value(OS"/LastUsed/TaskSavePath").toString();
-        if (!file.isEmpty())
-            file.append("/");
-        file.append(fileName);
-    } else if (fileName.endsWith(".tspt", Qt::CaseInsensitive))
-        file = fileName;
-    else
-        file = QFileInfo(fileName).path() + "/" + QFileInfo(fileName).completeBaseName() + ".tspt";
-
-QFileDialog::Options opts = settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool() ? QFileDialog::Options() : QFileDialog::DontUseNativeDialog;
-    file = QFileDialog::getSaveFileName(this, tr("Task Save"), file, filters.join(";;"), NULL, opts);
-    if (file.isEmpty())
-        return false;
-    else if (settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool())
-        settings->setValue(OS"/LastUsed/TaskSavePath", QFileInfo(file).path());
-    if (QFileInfo(file).suffix().isEmpty()) {
-        file.append(".tspt");
-    }
-
-    if (tspmodel->saveTask(file)) {
-        setFileName(file);
-        setWindowModified(false);
-        return true;
-    }
-    return false;
-}
-
-void MainWindow::setFileName(const QString &fileName)
-{
-    this->fileName = fileName;
-    setWindowTitle(QString("%1[*] - %2").arg(QFileInfo(fileName).completeBaseName()).arg(QCoreApplication::applicationName()));
-}
-
-void MainWindow::setupUi()
-{
-    Ui_MainWindow::setupUi(this);
-
-#ifdef Q_WS_S60
-    setWindowFlags(windowFlags() | Qt::WindowSoftkeysVisibleHint);
-#endif // Q_WS_S60
-
-    // File Menu
-    actionFileNew->setIcon(GET_ICON("document-new"));
-    actionFileOpen->setIcon(GET_ICON("document-open"));
-    actionFileSave->setIcon(GET_ICON("document-save"));
-#ifndef HANDHELD
-    menuFileSaveAs->setIcon(GET_ICON("document-save-as"));
-#endif
-    actionFileExit->setIcon(GET_ICON("application-exit"));
-    // Settings Menu
-#ifndef HANDHELD
-    menuSettingsLanguage->setIcon(GET_ICON("preferences-desktop-locale"));
-#if QT_VERSION >= 0x040600
-    actionSettingsLanguageEnglish->setIcon(QIcon::fromTheme("flag-gb", QIcon(":/images/icons/l10n/flag-gb.png")));
-#else // QT_VERSION >= 0x040600
-    actionSettingsLanguageEnglish->setIcon(QIcon(":/images/icons/l10n/flag-gb.png"));
-#endif // QT_VERSION >= 0x040600
-    menuSettingsStyle->setIcon(GET_ICON("preferences-desktop-theme"));
-#endif // HANDHELD
-    actionSettingsPreferences->setIcon(GET_ICON("preferences-system"));
-    // Help Menu
-#ifndef HANDHELD
-    actionHelpContents->setIcon(GET_ICON("help-contents"));
-    actionHelpContextual->setIcon(GET_ICON("help-contextual"));
-    actionHelpOnlineSupport->setIcon(GET_ICON("applications-internet"));
-    actionHelpReportBug->setIcon(GET_ICON("tools-report-bug"));
-    actionHelpAbout->setIcon(GET_ICON("help-about"));
-    actionHelpAboutQt->setIcon(QIcon(":/trolltech/qmessagebox/images/qtlogo-64.png"));
-#endif
-    // Buttons
-    buttonRandom->setIcon(GET_ICON("roll"));
-    buttonSolve->setIcon(GET_ICON("dialog-ok"));
-    buttonSaveSolution->setIcon(GET_ICON("document-save-as"));
-    buttonBackToTask->setIcon(GET_ICON("go-previous"));
-
-//	action->setIcon(GET_ICON(""));
-
-#if QT_VERSION >= 0x040600
-    setToolButtonStyle(Qt::ToolButtonFollowStyle);
-#endif
-
-#ifndef HANDHELD
-QStatusBar *statusbar = new QStatusBar(this);
-    statusbar->setObjectName("statusbar");
-    setStatusBar(statusbar);
-#endif // HANDHELD
-
-#ifdef Q_WS_WINCE_WM
-    menuBar()->setDefaultAction(menuFile->menuAction());
-
-QScrollArea *scrollArea = new QScrollArea(this);
-    scrollArea->setFrameShape(QFrame::NoFrame);
-    scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-    scrollArea->setWidgetResizable(true);
-    scrollArea->setWidget(tabWidget);
-    setCentralWidget(scrollArea);
-#else
-    setCentralWidget(tabWidget);
-#endif // Q_WS_WINCE_WM
-
-    //! \hack HACK: A little hack for toolbar icons to have a sane size.
-#if defined(HANDHELD) && !defined(Q_WS_MAEMO_5)
-#ifdef Q_WS_S60
-    toolBarMain->setIconSize(QSize(logicalDpiX() / 5.2, logicalDpiY() / 5.2));
-#else
-    toolBarMain->setIconSize(QSize(logicalDpiX() / 4, logicalDpiY() / 4));
-#endif // Q_WS_S60
-#endif // HANDHELD && !Q_WS_MAEMO_5
-QToolButton *tb = static_cast<QToolButton *>(toolBarMain->widgetForAction(actionFileSave));
-    if (tb != NULL) {
-        tb->setMenu(menuFileSaveAs);
-        tb->setPopupMode(QToolButton::MenuButtonPopup);
-    }
-
-//	solutionText->document()->setDefaultFont(settings->value("Output/Font", QFont(DEF_FONT_FAMILY, DEF_FONT_SIZE)).value<QFont>());
-    solutionText->setWordWrapMode(QTextOption::WordWrap);
-
-#ifndef QT_NO_PRINTER
-    actionFilePrintPreview = new QAction(this);
-    actionFilePrintPreview->setObjectName("actionFilePrintPreview");
-    actionFilePrintPreview->setEnabled(false);
-    actionFilePrintPreview->setIcon(GET_ICON("document-print-preview"));
-
-    actionFilePageSetup = new QAction(this);
-    actionFilePageSetup->setObjectName("actionFilePrintSetup");
-//    actionFilePageSetup->setEnabled(false);
-#if QT_VERSION >= 0x040600
-    actionFilePageSetup->setIcon(QIcon::fromTheme("document-page-setup", QIcon(":/trolltech/dialogs/qprintpreviewdialog/images/page-setup-32.png")));
-#else
-    actionFilePageSetup->setIcon(QIcon(":/trolltech/dialogs/qprintpreviewdialog/images/page-setup-32.png"));
-#endif
-
-    actionFilePrint = new QAction(this);
-    actionFilePrint->setObjectName("actionFilePrint");
-    actionFilePrint->setEnabled(false);
-    actionFilePrint->setIcon(GET_ICON("document-print"));
-
-    menuFile->insertAction(actionFileExit, actionFilePrintPreview);
-    menuFile->insertAction(actionFileExit, actionFilePageSetup);
-    menuFile->insertAction(actionFileExit, actionFilePrint);
-    menuFile->insertSeparator(actionFileExit);
-
-    toolBarMain->insertAction(actionSettingsPreferences, actionFilePrint);
-#endif // QT_NO_PRINTER
-
-    groupSettingsLanguageList = new QActionGroup(this);
-#ifdef Q_WS_MAEMO_5
-    groupSettingsLanguageList->addAction(actionSettingsLanguageAutodetect);
-#endif
-    actionSettingsLanguageEnglish->setData("en");
-    actionSettingsLanguageEnglish->setActionGroup(groupSettingsLanguageList);
-    loadLangList();
-    actionSettingsLanguageAutodetect->setChecked(settings->value("Language", "").toString().isEmpty());
-
-    actionSettingsStyleSystem->setData(true);
-    groupSettingsStyleList = new QActionGroup(this);
-#ifdef Q_WS_MAEMO_5
-    groupSettingsStyleList->addAction(actionSettingsStyleSystem);
-#endif
-
-#ifndef HANDHELD
-    actionSettingsToolbarsConfigure = new QAction(this);
-    actionSettingsToolbarsConfigure->setIcon(GET_ICON("configure-toolbars"));
-#endif // HANDHELD
-
-    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);
-
-#ifndef HANDHELD
-    toolBarManager = new QtToolBarManager(this);
-    toolBarManager->setMainWindow(this);
-QString cat = toolBarMain->windowTitle();
-    toolBarManager->addToolBar(toolBarMain, cat);
-#ifndef QT_NO_PRINTER
-    toolBarManager->addAction(actionFilePrintPreview, cat);
-    toolBarManager->addAction(actionFilePageSetup, cat);
-#endif // QT_NO_PRINTER
-    toolBarManager->addAction(actionHelpContents, cat);
-    toolBarManager->addAction(actionHelpContextual, cat);
-    toolBarManager->restoreState(settings->value("MainWindow/Toolbars").toByteArray());
-#else
-    toolBarMain->setVisible(settings->value("MainWindow/ToolbarVisible", true).toBool());
-#endif // HANDHELD
-
-#ifdef Q_WS_S60
-    // Replace Exit on the right soft key with our own exit action.
-    // This makes it translatable.
-    actionRightSoftKey = new QAction(this);
-    actionRightSoftKey->setSoftKeyRole(QAction::NegativeSoftKey);
-    connect(actionRightSoftKey, SIGNAL(triggered()), SLOT(close()));
-    addAction(actionRightSoftKey);
-#endif
-
-    retranslateUi(false);
-
-#ifndef HANDHELD
-    // Adding some eyecandy
-    if (QtWin::isCompositionEnabled() && settings->value("UseTranslucency", DEF_USE_TRANSLUCENCY).toBool())  {
-        toggleTranclucency(true);
-    }
-#endif // HANDHELD
-}
-
-void MainWindow::toggleSolutionActions(bool enable)
-{
-    buttonSaveSolution->setEnabled(enable);
-    actionFileSaveAsSolution->setEnabled(enable);
-    solutionText->setEnabled(enable);
-#ifndef QT_NO_PRINTER
-    actionFilePrint->setEnabled(enable);
-    actionFilePrintPreview->setEnabled(enable);
-#endif // QT_NO_PRINTER
-}
-
-void MainWindow::toggleTranclucency(bool enable)
-{
-#ifndef HANDHELD
-    toggleStyle(labelVariant, enable);
-    toggleStyle(labelCities, enable);
-    toggleStyle(statusBar(), enable);
-    tabWidget->setDocumentMode(enable);
-    QtWin::enableBlurBehindWindow(this, enable);
-#else
-    Q_UNUSED(enable);
-#endif // HANDHELD
-}
-
-void MainWindow::actionHelpOnlineSupportTriggered()
-{
-    QDesktopServices::openUrl(QUrl("http://tspsg.info/goto/support"));
-}
-
-void MainWindow::actionHelpReportBugTriggered()
-{
-    QDesktopServices::openUrl(QUrl("http://tspsg.info/goto/bugtracker"));
-}
-
-#ifdef Q_WS_S60
-QSMessageBox::QSMessageBox(QWidget *parent)
-    : QMessageBox(parent)
-{
-    setIcon(QMessageBox::Warning);
-    setWindowTitle(QApplication::translate("MainWindow", "Unsaved Changes"));
-    setText(QApplication::translate("MainWindow", "Would you like to save changes in the current task?"));
-    setStandardButtons(QMessageBox::Save);
-
-    QMenu *m = new QMenu(this);
-    m->addAction(QApplication::translate("QDialogButtonBox", "Discard", "No need to translate this. The translation will be taken from Qt translation files."),
-                 this, SLOT(discard()));
-    m->addAction(QApplication::translate("QDialogButtonBox", "Cancel", "No need to translate this. The translation will be taken from Qt translation files."),
-                 this, SLOT(cancel()));
-
-    QAction *o = new QAction(QApplication::translate("QtToolBarDialog", "Actions"), this);
-    o->setSoftKeyRole(QAction::NegativeSoftKey);
-    o->setMenu(m);
-    addAction(o);
-}
-
-void QSMessageBox::cancel(){
-    done(QMessageBox::Cancel);
-}
-
-void QSMessageBox::discard() {
-    done(QMessageBox::Discard);
-}
-#endif // Q_WS_S60
Index: trunk/src/mainwindow.h
===================================================================
--- trunk/src/mainwindow.h	(revision 178)
+++ trunk/src/mainwindow.h	(revision 1)
@@ -1,27 +1,20 @@
-/*!
- * \file mainwindow.h
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
+/*
+ *	TSPSG - TSP Solver and Generator
+ *	Copyright (C) 2007 L¸ppa <lacontacts[at]gmail[dot]com>
  *
- *  $Id$
- *  $URL$
+ *	This file is part of TSPSG.
  *
- * \brief Defines MainWindow class.
+ *	TSPSG is free software: you can redistribute it and/or modify
+ *	it under the terms of the GNU General Public License as published by
+ *	the Free Software Foundation, either version 3 of the License, or
+ *	(at your option) any later version.
  *
- *  <b>TSPSG: TSP Solver and Generator</b>
+ *	TSPSG is distributed in the hope that it will be useful,
+ *	but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *	GNU General Public License for more details.
  *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
+ *	You should have received a copy of the GNU General Public License
+ *	along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
  */
 
@@ -29,150 +22,17 @@
 #define MAINWINDOW_H
 
-#include "globals.h"
-
+#include <QMainWindow>
 #include "ui_mainwindow.h"
 #include "settingsdialog.h"
 
-#include "tspmodel.h"
-
-#ifdef Q_WS_WIN32
-    // Forward declaration. A real one is in shobjidl.h
-    struct ITaskbarList3;
-#endif
-
-using namespace TSPSolver;
-
-/*!
- * \brief Class for handling Main Window UI and logic.
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- */
 class MainWindow: public QMainWindow, Ui::MainWindow
 {
-    Q_OBJECT
-
+	Q_OBJECT
 public:
-    MainWindow(QWidget *parent = 0);
-    ~MainWindow();
-
+	MainWindow(QWidget *parent = 0);
 private slots:
-// Actions
-    void actionFileNewTriggered();
-    void actionFileOpenTriggered();
-    bool actionFileSaveTriggered();
-    void actionFileSaveAsTaskTriggered();
-    void actionFileSaveAsSolutionTriggered();
-#ifndef QT_NO_PRINTER
-    void actionFilePrintPreviewTriggered();
-    void actionFilePageSetupTriggered();
-    void actionFilePrintTriggered();
-#endif // QT_NO_PRINTER
-    void actionSettingsPreferencesTriggered();
-    void actionSettingsLanguageAutodetectTriggered(bool checked);
-    void groupSettingsLanguageListTriggered(QAction *action);
-    void actionSettingsStyleSystemTriggered(bool checked);
-    void groupSettingsStyleListTriggered(QAction *action);
-#ifndef HANDHELD
-    void actionSettingsToolbarsConfigureTriggered();
-#endif // HANDHELD
-    void actionHelpOnlineSupportTriggered();
-    void actionHelpReportBugTriggered();
-    void actionHelpCheck4UpdatesTriggered();
-    void actionHelpAboutTriggered();
-// Buttons
-    void buttonBackToTaskClicked();
-    void buttonRandomClicked();
-    void buttonSolveClicked();
-
-    void dataChanged();
-    void dataChanged(const QModelIndex &tl, const QModelIndex &br);
-#ifdef Q_WS_WINCE_WM
-    void changeEvent(QEvent *ev);
-    void desktopResized(int screen);
-#endif // Q_WS_WINCE_WM
-    void numCitiesChanged(int nCities);
-#ifndef QT_NO_PRINTER
-    void printPreview(QPrinter *printer);
-#endif // QT_NO_PRINTER
-#ifdef Q_WS_WIN32
-    void solverRoutePartFound(int n);
-#endif // Q_WS_WIN32
-    void spinCitiesValueChanged(int nCities);
-
-private:
-    QString fileName;
-    QActionGroup *groupSettingsLanguageList;
-    QActionGroup *groupSettingsStyleList;
-#ifndef HANDHELD
-    QAction *actionSettingsToolbarsConfigure;
-    QtToolBarManager *toolBarManager;
-#endif // HANDHELD
-#ifndef QT_NO_PRINTER
-    QPrinter *printer;
-    QAction *actionFilePrintPreview;
-    QAction *actionFilePageSetup;
-    QAction *actionFilePrint;
-#endif // QT_NO_PRINTER
-    QAction *actionHelpCheck4Updates;
-#ifdef Q_WS_S60
-    QAction *actionRightSoftKey;
-#endif
-    QSettings *settings;
-    CTSPModel *tspmodel;
-#ifdef Q_WS_WINCE_WM
-    QRect currentGeometry;
-#endif // Q_WS_WINCE_WM
-
-#ifdef Q_WS_WIN32
-    ITaskbarList3 *tl;
-#endif // Q_WS_WIN32
-
-    // The solution graph SVG
-    QPicture graph;
-
-    // Formats
-    QTextTableFormat fmt_table;
-    QTextBlockFormat fmt_paragraph,
-        fmt_lastparagraph,
-        fmt_cell;
-    QTextCharFormat fmt_default,
-        fmt_selected,
-        fmt_alternate,
-        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);
-    void initDocStyleSheet();
-    void loadLangList();
-    bool loadLanguage(const QString &lang = QString());
-    void loadStyleList();
-    void loadToolbarList();
-    bool maybeSave();
-    void outputMatrix(QTextCursor &cur, const TMatrix &matrix);
-    void outputMatrix(QTextCursor &cur, const SStep &step);
-#ifdef Q_WS_S60
-    void resizeEvent(QResizeEvent *ev);
-#endif // Q_WS_S60
-    void retranslateUi(bool all = true);
-    bool saveTask();
-    void setFileName(const QString &fileName = tr("Untitled") + ".tspt");
-    void setupUi();
-    void toggleSolutionActions(bool enable = true);
-    void toggleTranclucency(bool enable);
+	void ChangeSettings();
 };
 
-#ifdef Q_WS_S60
-// A quickly hacked QMessageBox for Symbian that supports three buttons.
-class QSMessageBox: public QMessageBox {
-    Q_OBJECT
-private slots:
-    void cancel();
-    void discard();
-public:
-    QSMessageBox(QWidget *parent = 0);
-};
-#endif // Q_WS_S60
+#endif // MAINWINDOW_H
 
-#endif // MAINWINDOW_H
Index: trunk/src/os.h
===================================================================
--- trunk/src/os.h	(revision 178)
+++ 	(revision )
@@ -1,181 +1,0 @@
-/*!
- * \file os.h
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- * \warning Arch detection works only for <b>GNU C</b>, <b>Visual Studio</b>, <b>Intel C/C++</b> and <b>MinGW32</b> compilers.
- *  OS detection should work for any compiler.
- *
- * \brief Contains TSPSG target CPU architecture and OS detection.
- *
- *  <b>TSPSG: TSP Solver and Generator</b>
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef OS_H
-#define OS_H
-
-// Some target arch detection.
-/*!
- * \def ARCH
- * \brief The target CPU architecture TSPSG was built for.
- * \warning NOTE: Only for <b>GNU C</b>, <b>Visual Studio</b>, <b>Intel C/C++</b> and <b>MinGW32</b> compilers.
- */
-#if defined(__amd64__) || defined(_M_X64)
-#   define ARCH " (AMD 64-bit)"
-#elif defined(__ia64__) || defined(_M_IA64)
-#   define ARCH " (Intel 64-bit)"
-#elif defined(__i386__) || defined(_M_IX86) || defined(_X86_)
-#   define ARCH " (Intel x86)"
-#elif defined(__powerpc__) || defined(_M_PPC)
-#   define ARCH " (PowerPC)"
-#elif defined(__arm__) || defined(_M_ARM)
-#   define ARCH " (ARM)"
-#elif defined(__mips__) || defined(_M_MRX000)
-#   define ARCH " (MIPS)"
-#else
-#   define ARCH ""
-#endif // ARCH
-
-// Target OS detection. Done by Qt, so should work for any compiler.
-/*!
- * \def OS
- * \brief The target operating system TSPSG was built for.
- */
-/*!
- * \def OSID
- * \brief The target operating system ID.
- *
- * This value will be used in task file metadata.
- */
-#ifdef Q_OS_AIX
-#   define OS "AIX"
-#   define OSID quint8(1)
-#elif defined(Q_OS_BSDI)
-#   define OS "BSD/OS"
-#   define OSID quint8(2)
-#elif defined(Q_OS_CYGWIN)
-#   define OS "Cygwin"
-#   define OSID quint8(3)
-#elif defined(Q_OS_DARWIN)
-#   define OS "Mac OS (Darwin)"
-#   define OSID quint8(4)
-#elif defined(Q_OS_DGUX)
-#   define OS "DG/UX"
-#   define OSID quint8(5)
-#elif defined(Q_OS_DYNIX)
-#   define OS "DYNIX/ptx"
-#   define OSID quint8(6)
-#elif defined(Q_OS_FREEBSD)
-#   define OS "FreeBSD"
-#   define OSID quint8(7)
-#elif defined(Q_OS_HPUX)
-#   define OS "HP-UX"
-#   define OSID quint8(8)
-#elif defined(Q_OS_HURD)
-#   define OS "GNU Hurd"
-#   define OSID quint8(9)
-#elif defined(Q_OS_IRIX)
-#   define OS "SGI Irix"
-#   define OSID quint8(10)
-#elif defined(Q_OS_LINUX)
-#   define OS "Linux"
-#   define OSID quint8(11)
-#elif defined(Q_OS_LYNX)
-#   define OS "LynxOS"
-#   define OSID quint8(12)
-#elif defined(Q_OS_NETBSD)
-#   define OS "NetBSD"
-#   define OSID quint8(13)
-#elif defined(Q_OS_OPENBSD)
-#   define OS "OpenBSD"
-#   define OSID quint8(14)
-#elif defined(Q_OS_OS2EMX)
-#   define OS "OS/2"
-#   define OSID quint8(15)
-#elif defined(Q_OS_OSF)
-#   define OS "HP Tru64 UNIX"
-#   define OSID quint8(16)
-#elif defined(Q_OS_QNX)
-#   define OS "QNX Neutrino"
-#   define OSID quint8(17)
-#elif defined(Q_OS_RELIANT)
-#   define OS "Reliant UNIX"
-#   define OSID quint8(18)
-#elif defined(Q_OS_SCO)
-#   define OS "SCO OpenServer 5"
-#   define OSID quint8(19)
-#elif defined(Q_OS_SOLARIS)
-#   define OS "Sun Solaris"
-#   define OSID quint8(20)
-#elif defined(Q_OS_SYMBIAN)
-#   define OS "Symbian"
-#   define OSID quint8(21)
-#elif defined(Q_OS_ULTRIX)
-#   define OS "DEC Ultrix"
-#   define OSID quint8(22)
-#elif defined(Q_OS_UNIXWARE)
-#   define OS "UnixWare 7/Open UNIX 8"
-#   define OSID quint8(23)
-#elif defined(Q_OS_WIN32)
-#   define OS "Windows"
-#   define OSID quint8(24)
-#elif defined(Q_OS_WINCE_WM)
-#   define OS "Windows Mobile"
-#   define OSID quint8(25)
-#elif defined(Q_OS_WINCE)
-#   define OS "Windows CE"
-#   define OSID quint8(26)
-#elif defined(Q_OS_BSD4)
-#   define OS "BSD 4.4"
-#   define OSID quint8(253)
-#elif defined(Q_OS_UNIX)
-#   define OS "UNIX BSD/SYSV"
-#   define OSID quint8(254)
-#else
-#   define OS "Unknown"
-#   define OSID quint8(255)
-#endif // OS
-
-//! The target platform in the form OS ARCH
-#define PLATFROM OS ARCH
-
-/*!
- * \def COMPILER
- * \brief The compiler TSPSG was built with.
- */
-#ifdef Q_CC_INTEL
-#   define COMPILER "Intel C++"
-#elif defined(Q_CC_MSVC)
-#   define COMPILER "Microsoft Visual C/C++"
-#elif defined(Q_CC_MINGW)
-#   define COMPILER "MinGW GCC"
-#elif defined(Q_CC_GNU)
-#   define COMPILER "GNU C++"
-#elif defined(Q_CC_GCCE)
-#   define COMPILER "GCCE (Symbian GCCE builds)"
-#elif defined(Q_CC_RVCT)
-#   define COMPILER "ARM Realview Compiler Suite"
-#elif defined(Q_CC_NOKIAX86)
-#   define COMPILER "Nokia x86 (Symbian WINSCW builds)"
-#else
-#   define COMPILER "Unknown"
-#endif
-
-#endif // OS_H
Index: trunk/src/pch.h
===================================================================
--- trunk/src/pch.h	(revision 178)
+++ 	(revision )
@@ -1,30 +1,0 @@
-/*!
- * \file pch.h
- * \author Copyright (C) 2007-2010 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- * \brief Precompiled Header (PCH) file
- *
- *  <b>TSPSG: TSP Solver and Generator</b>
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef __cplusplus
-	#include "globals.h"
-#endif // __cplusplus
Index: trunk/src/qtwin.cpp
===================================================================
--- trunk/src/qtwin.cpp	(revision 178)
+++ 	(revision )
@@ -1,236 +1,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Use, modification and distribution is allowed without limitation,
-** warranty, liability or support of any kind.
-**
-****************************************************************************/
-
-#include "qtwin.h"
-#include <QLibrary>
-#include <QApplication>
-#include <QWidget>
-#include <QList>
-#include <QPointer>
-
-#ifdef Q_WS_X11
-#include <QX11Info>
-#endif // Q_WS_X11
-
-#ifdef Q_WS_WIN
-
-#include <qt_windows.h>
-
-// Blur behind data structures
-#define DWM_BB_ENABLE                 0x00000001  // fEnable has been specified
-#define DWM_BB_BLURREGION             0x00000002  // hRgnBlur has been specified
-#define DWM_BB_TRANSITIONONMAXIMIZED  0x00000004  // fTransitionOnMaximized has been specified
-#define WM_DWMCOMPOSITIONCHANGED        0x031E    // Composition changed window message
-
-typedef struct _DWM_BLURBEHIND
-{
-    DWORD dwFlags;
-    BOOL fEnable;
-    HRGN hRgnBlur;
-    BOOL fTransitionOnMaximized;
-} DWM_BLURBEHIND, *PDWM_BLURBEHIND;
-
-typedef struct _MARGINS
-{
-    int cxLeftWidth;
-    int cxRightWidth;
-    int cyTopHeight;
-    int cyBottomHeight;
-} MARGINS, *PMARGINS;
-
-typedef HRESULT (WINAPI *PtrDwmIsCompositionEnabled)(BOOL* pfEnabled);
-typedef HRESULT (WINAPI *PtrDwmExtendFrameIntoClientArea)(HWND hWnd, const MARGINS* pMarInset);
-typedef HRESULT (WINAPI *PtrDwmEnableBlurBehindWindow)(HWND hWnd, const DWM_BLURBEHIND* pBlurBehind);
-typedef HRESULT (WINAPI *PtrDwmGetColorizationColor)(DWORD *pcrColorization, BOOL *pfOpaqueBlend);
-
-static PtrDwmIsCompositionEnabled pDwmIsCompositionEnabled= 0;
-static PtrDwmEnableBlurBehindWindow pDwmEnableBlurBehindWindow = 0;
-static PtrDwmExtendFrameIntoClientArea pDwmExtendFrameIntoClientArea = 0;
-static PtrDwmGetColorizationColor pDwmGetColorizationColor = 0;
-
-
-/*
- * Internal helper class that notifies windows if the
- * DWM compositing state changes and updates the widget
- * flags correspondingly.
- */
-class WindowNotifier : public QWidget
-{
-public:
-    WindowNotifier() { winId(); }
-    void addWidget(QWidget *widget) { widgets.append(widget); }
-    void removeWidget(QWidget *widget) { widgets.removeAll(widget); }
-    bool winEvent(MSG *message, long *result);
-
-private:
-    QWidgetList widgets;
-};
-
-static bool resolveLibs()
-{
-    if (!pDwmIsCompositionEnabled) {
-        QLibrary dwmLib(QString::fromAscii("dwmapi"));
-        pDwmIsCompositionEnabled =(PtrDwmIsCompositionEnabled)dwmLib.resolve("DwmIsCompositionEnabled");
-        pDwmExtendFrameIntoClientArea = (PtrDwmExtendFrameIntoClientArea)dwmLib.resolve("DwmExtendFrameIntoClientArea");
-        pDwmEnableBlurBehindWindow = (PtrDwmEnableBlurBehindWindow)dwmLib.resolve("DwmEnableBlurBehindWindow");
-        pDwmGetColorizationColor = (PtrDwmGetColorizationColor)dwmLib.resolve("DwmGetColorizationColor");
-    }
-    return pDwmIsCompositionEnabled != 0;
-}
-
-#endif
-
-/*!
-  * Chekcs and returns true if Windows DWM composition
-  * is currently enabled on the system.
-  *
-  * To get live notification on the availability of
-  * this feature, you will currently have to
-  * reimplement winEvent() on your widget and listen
-  * for the WM_DWMCOMPOSITIONCHANGED event to occur.
-  *
-  */
-bool QtWin::isCompositionEnabled()
-{
-#ifdef Q_WS_WIN
-    if (resolveLibs()) {
-        HRESULT hr = S_OK;
-        BOOL isEnabled = false;
-        hr = pDwmIsCompositionEnabled(&isEnabled);
-        if (SUCCEEDED(hr))
-            return isEnabled;
-    }
-    return false;
-#elif defined(Q_WS_X11)
-    return QX11Info::isCompositingManagerRunning();
-#else
-    //! \todo TODO: Check for trsnsparency support in other OSes.
-    return false;
-#endif
-}
-
-/*!
-  * Enables Blur behind on a Widget.
-  *
-  * \a enable tells if the blur should be enabled or not
-  */
-bool QtWin::enableBlurBehindWindow(QWidget *widget, bool enable)
-{
-    Q_ASSERT(widget);
-    Q_UNUSED(widget);
-    Q_UNUSED(enable);
-    bool result = false;
-#ifdef Q_WS_WIN
-    if (resolveLibs()) {
-        DWM_BLURBEHIND bb = {0};
-        HRESULT hr = S_OK;
-        bb.fEnable = enable;
-        bb.dwFlags = DWM_BB_ENABLE;
-        bb.hRgnBlur = NULL;
-#endif
-        widget->setAttribute(Qt::WA_TranslucentBackground, enable);
-        widget->setAttribute(Qt::WA_NoSystemBackground, enable);
-#ifdef Q_WS_WIN
-        hr = pDwmEnableBlurBehindWindow(widget->winId(), &bb);
-        if (SUCCEEDED(hr)) {
-            result = true;
-            windowNotifier()->addWidget(widget);
-        }
-    }
-#endif
-    return result;
-}
-
-/*!
-  * ExtendFrameIntoClientArea.
-  *
-  * This controls the rendering of the frame inside the window.
-  * Note that passing margins of -1 (the default value) will completely
-  * remove the frame from the window.
-  *
-  * \note you should not call enableBlurBehindWindow before calling
-  *       this functions
-  *
-  * \a enable tells if the blur should be enabled or not
-  */
-bool QtWin::extendFrameIntoClientArea(QWidget *widget, int left, int top, int right, int bottom)
-{
-
-    Q_ASSERT(widget);
-    Q_UNUSED(widget);
-    Q_UNUSED(left);
-    Q_UNUSED(top);
-    Q_UNUSED(right);
-    Q_UNUSED(bottom);
-
-    bool result = false;
-#ifdef Q_WS_WIN
-    if (resolveLibs()) {
-        QLibrary dwmLib(QString::fromAscii("dwmapi"));
-        HRESULT hr = S_OK;
-        MARGINS m = {left, top, right, bottom};
-        hr = pDwmExtendFrameIntoClientArea(widget->winId(), &m);
-        if (SUCCEEDED(hr)) {
-            result = true;
-            windowNotifier()->addWidget(widget);
-        }
-        widget->setAttribute(Qt::WA_TranslucentBackground, result);
-    }
-#endif
-    return result;
-}
-
-/*!
-  * Returns the current colorizationColor for the window.
-  *
-  * \a enable tells if the blur should be enabled or not
-  */
-QColor QtWin::colorizatinColor()
-{
-    QColor resultColor = QApplication::palette().window().color();
-
-#ifdef Q_WS_WIN
-    if (resolveLibs()) {
-        DWORD color = 0;
-        BOOL opaque = FALSE;
-        QLibrary dwmLib(QString::fromAscii("dwmapi"));
-        HRESULT hr = S_OK;
-        hr = pDwmGetColorizationColor(&color, &opaque);
-        if (SUCCEEDED(hr))
-            resultColor = QColor(color);
-    }
-#endif
-    return resultColor;
-}
-
-#ifdef Q_WS_WIN
-WindowNotifier *QtWin::windowNotifier()
-{
-    static WindowNotifier *windowNotifierInstance = 0;
-    if (!windowNotifierInstance)
-        windowNotifierInstance = new WindowNotifier;
-    return windowNotifierInstance;
-}
-
-
-/* Notify all enabled windows that the DWM state changed */
-bool WindowNotifier::winEvent(MSG *message, long *result)
-{
-    if (message && message->message == WM_DWMCOMPOSITIONCHANGED) {
-        bool compositionEnabled = QtWin::isCompositionEnabled();
-        foreach(QWidget * widget, widgets) {
-            if (widget) {
-                widget->setAttribute(Qt::WA_NoSystemBackground, compositionEnabled);
-            }
-            widget->update();
-        }
-    }
-    return QWidget::winEvent(message, result);
-}
-#endif
Index: trunk/src/qtwin.h
===================================================================
--- trunk/src/qtwin.h	(revision 178)
+++ 	(revision )
@@ -1,37 +1,0 @@
-/*!
- * \file qtwin.h
- *
- * \author Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies).
- *
- *  Use, modification and distribution is allowed without limitation,
- *  warranty, liability or support of any kind.
- */
-
-#ifndef QTWIN_H
-#define QTWIN_H
-
-#include <QColor>
-#include <QWidget>
-
-class WindowNotifier;
-
-/*!
- *  This is a helper class for using the Desktop Window Manager
- *  functionality on Windows 7 and Windows Vista. On other platforms
- *  these functions will simply not do anything.
- */
-class QtWin
-{
-public:
-    static bool enableBlurBehindWindow(QWidget *widget, bool enable = true);
-    static bool extendFrameIntoClientArea(QWidget *widget,
-                                          int left = -1, int top = -1,
-                                          int right = -1, int bottom = -1);
-    static bool isCompositionEnabled();
-    static QColor colorizatinColor();
-
-private:
-    static WindowNotifier *windowNotifier();
-};
-
-#endif // QTWIN_H
Index: trunk/src/resource.h
===================================================================
--- trunk/src/resource.h	(revision 178)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*!
- * \file resource.h
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- * \brief Contains windows resource IDs.
- *
- *  <b>TSPSG: TSP Solver and Generator</b>
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "version.h"
-
-//! Version information resource ID
-#define VS_VERSION_INFO 1
-//! Main application icon resource ID
-#define IDI_APPICON 101
Index: trunk/src/settingsdialog.cpp
===================================================================
--- trunk/src/settingsdialog.cpp	(revision 178)
+++ trunk/src/settingsdialog.cpp	(revision 1)
@@ -1,475 +1,35 @@
 /*
- *  TSPSG: TSP Solver and Generator
- *  Copyright (C) 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
+ *	TSPSG - TSP Solver and Generator
+ *	Copyright (C) 2007 L¸ppa <lacontacts[at]gmail[dot]com>
  *
- *  $Id$
- *  $URL$
+ *	This file is part of TSPSG.
  *
- *  This file is part of TSPSG.
+ *	TSPSG is free software: you can redistribute it and/or modify
+ *	it under the terms of the GNU General Public License as published by
+ *	the Free Software Foundation, either version 3 of the License, or
+ *	(at your option) any later version.
  *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
+ *	TSPSG is distributed in the hope that it will be useful,
+ *	but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *	GNU General Public License for more details.
  *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
+ *	You should have received a copy of the GNU General Public License
+ *	along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "settingsdialog.h"
+#include <QMessageBox>
 
-/*!
- * \brief Class constructor.
- * \param parent Settings Dialog parent widget.
- *
- * Initializes Settings Dialog and creates its layout based on target OS.
- */
 SettingsDialog::SettingsDialog(QWidget *parent)
-    : QDialog(parent), _newFont(false), _newColor(false), _translucency(0)
+	: QDialog(parent)
 {
-    setupUi(this);
-
-    setWindowIcon(GET_ICON("preferences-system"));
-
-    buttonBox->button(QDialogButtonBox::Ok)->setIcon(GET_ICON("dialog-ok"));
-#ifndef QT_NO_STATUSTIP
-    buttonBox->button(QDialogButtonBox::Ok)->setStatusTip(tr("Save new preferences"));
-#endif
-    buttonBox->button(QDialogButtonBox::Ok)->setCursor(QCursor(Qt::PointingHandCursor));
-    buttonBox->button(QDialogButtonBox::Cancel)->setIcon(GET_ICON("dialog-cancel"));
-#ifndef QT_NO_STATUSTIP
-    buttonBox->button(QDialogButtonBox::Cancel)->setStatusTip(tr("Close without saving preferences"));
-#endif
-    buttonBox->button(QDialogButtonBox::Cancel)->setCursor(QCursor(Qt::PointingHandCursor));
-
-    buttonColor->setIcon(GET_ICON("format-text-color"));
-    buttonFont->setIcon(GET_ICON("preferences-desktop-font"));
-    buttonHelp->setIcon(GET_ICON("help-hint"));
-
-QPalette p = bgWhite->palette();
-    p.setColor(QPalette::Window, p.color(QPalette::Base));
-    bgWhite->setPalette(p);
-
-    p = lineHorizontal->palette();
-    p.setColor(QPalette::Window, p.color(QPalette::Text));
-    lineHorizontal->setPalette(p);
-
-// Layout helpers
-QBoxLayout *box;
-QHBoxLayout *hbox;
-#ifndef QT_NO_PRINTER
-    cbHQGraph = new QCheckBox(bgWhite);
-    cbHQGraph->setObjectName("cbHQGraph");
-#ifndef QT_NO_STATUSTIP
-    cbHQGraph->setStatusTip(tr("Higher quality graph looks much better when printing but uglier on the screen"));
-#endif // QT_NO_STATUSTIP
-    cbHQGraph->setText(tr("Draw solution graph in higher quality"));
-    cbHQGraph->setCursor(QCursor(Qt::PointingHandCursor));
-
-    box = static_cast<QBoxLayout *>(tabOutput->layout());
-    hbox = new QHBoxLayout();
-    hbox->addSpacing(10);
-    hbox->addWidget(cbHQGraph);
-    box->insertLayout(box->indexOf(cbGenerateGraph) + 2, hbox);
-    connect(cbGenerateGraph, 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());
-        hbox = new QHBoxLayout();
-        hbox->setSpacing(0);
-        hbox->addWidget(cbCheck4Updates);
-        hbox->addWidget(spinUpdateCheckInterval);
-        hbox->addStretch();
-        box->insertLayout(box->indexOf(cbUseNativeDialogs) + 1, hbox);
-    } else
-        cbCheck4Updates = NULL;
-
-#ifdef HANDHELD
-QVBoxLayout *vbox1; // Layout helper
-
-    // On screens with small height when SIP is shown and the window is resized
-    // there is not enought space for all elements.
-    // So we show the scrollbars to be able to access them.
-QScrollArea *scrollArea = new QScrollArea(this);
-    scrollArea->setFrameShape(QFrame::NoFrame);
-    scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-    scrollArea->setWidgetResizable(true);
-    scrollArea->setWidget(bgWhite);
-
-    bgWhite->layout()->setMargin(0);
-
-    // Central layout
-    vbox1 = new QVBoxLayout(this);
-    vbox1->setMargin(0);
-    vbox1->setSpacing(0);
-    vbox1->addWidget(scrollArea);
-    vbox1->addWidget(bgGrey);
-    setLayout(vbox1);
-#else // HANDHELD
-QVBoxLayout *vbox; // Layout helper
-
-#ifndef HANDHELD
-    if (QtWin::isCompositionEnabled()) {
-        cbUseTranslucency = new QCheckBox(bgWhite);
-        cbUseTranslucency->setObjectName("cbUseTranslucency");
-#ifndef QT_NO_STATUSTIP
-        cbUseTranslucency->setStatusTip(tr("Make Main Window background translucent"));
-#endif // QT_NO_STATUSTIP
-        cbUseTranslucency->setText(tr("Use translucency effects"));
-        cbUseTranslucency->setCursor(QCursor(Qt::PointingHandCursor));
-    }
-#endif // HANDHELD
-
-    cbSaveState = new QCheckBox(bgWhite);
-    cbSaveState->setObjectName("cbSaveState");
-#ifndef QT_NO_STATUSTIP
-    cbSaveState->setStatusTip(tr("Restore main window state and position on application restart"));
-#endif // QT_NO_STATUSTIP
-    cbSaveState->setText(tr("Save main window state and position"));
-    cbSaveState->setCursor(QCursor(Qt::PointingHandCursor));
-
-    imgIcon = new QLabel(this);
-    imgIcon->setObjectName("imgIcon");
-    imgIcon->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding);
-    imgIcon->setFrameShape(QFrame::NoFrame);
-    imgIcon->setPixmap(GET_ICON("preferences-system").pixmap(128, 128));
-    imgIcon->setStyleSheet("background-color: #0080C0; padding-top: 11px;");
-    imgIcon->setAlignment(Qt::AlignTop | Qt::AlignHCenter);
-    imgIcon->setMinimumWidth(150);
-
-    labelHint = new QLabel(bgGrey);
-    labelHint->setObjectName("labelHint");
-    labelHint->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
-    labelHint->setMinimumSize(QSize(250, 28));
-    labelHint->setMaximumSize(QSize(QWIDGETSIZE_MAX, 28));
-    labelHint->setTextFormat(Qt::PlainText);
-//	labelHint->setAlignment(Qt::AlignLeft | Qt::AlignTop);
-    labelHint->setWordWrap(true);
-#ifndef QT_NO_STATUSTIP
-    labelHint->setStatusTip(tr("Hover mouse pointer over dialog elements to get additional help"));
-#endif // QT_NO_STATUSTIP
-
-    lineVertical = new QFrame(this);
-    lineVertical->setObjectName("lineVertical");
-    lineVertical->setFrameShadow(QFrame::Plain);
-    lineVertical->setFrameShape(QFrame::VLine);
-    lineVertical->setLineWidth(2);
-
-    // Top line
-    hbox = new QHBoxLayout();
-    hbox->addWidget(imgIcon);
-    hbox->addWidget(lineVertical);
-    hbox->addWidget(bgWhite);
-
-    box = static_cast<QBoxLayout *>(tabGeneral->layout());
-    box->insertWidget(box->indexOf(cbUseNativeDialogs) + 1, cbSaveState);
-#ifndef HANDHELD
-    if (QtWin::isCompositionEnabled())
-        box->insertWidget(box->indexOf(cbUseNativeDialogs) + 1, cbUseTranslucency);
-#endif // HANDHELD
-
-    // Inserting label for hints to the bottom part (with grey bg)
-    buttons->insertWidget(buttons->indexOf(buttonHelp) + 1, labelHint, 1);
-
-    // Central layout
-    vbox = new QVBoxLayout(this);
-    vbox->setMargin(0);
-    vbox->setSpacing(0);
-    vbox->addLayout(hbox);
-    vbox->addWidget(bgGrey);
-    setLayout(vbox);
-#endif // HANDHELD
-
-#ifdef Q_WS_WINCE_WM
-    // We need to react to SIP show/hide and resize the window appropriately
-    connect(QApplication::desktop(), SIGNAL(workAreaResized(int)), SLOT(desktopResized(int)));
-#endif // Q_WS_WINCE_WM
-    connect(spinRandMin, SIGNAL(valueChanged(int)), SLOT(spinRandMinValueChanged(int)));
-    connect(buttonFont, SIGNAL(clicked()), SLOT(buttonFontClicked()));
-    connect(buttonColor, SIGNAL(clicked()), SLOT(buttonColorClicked()));
-    setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint);
-#if !defined(QT_NO_STATUSTIP) && !defined(HANDHELD)
-    // Setting initial text of dialog hint label to own status tip text.
-    labelHint->setText(labelHint->statusTip());
-#endif // HANDHELD
-
-    settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, "TSPSG", "tspsg", this);
-    settings->remove("SettingsReset");
-
-    cbAutosize->setChecked(settings->value("Autosize", DEF_AUTOSIZE).toBool());
-    cbSaveLastUsed->setChecked(settings->value("SaveLastUsed", DEF_SAVE_LAST_USED).toBool());
-    cbUseNativeDialogs->setChecked(settings->value("UseNativeDialogs", DEF_USE_NATIVE_DIALOGS).toBool());
-#ifndef HANDHELD
-    if (QtWin::isCompositionEnabled())
-        cbUseTranslucency->setChecked(settings->value("UseTranslucency", DEF_USE_TRANSLUCENCY).toBool());
-#endif // HANDHELD
-#ifndef HANDHELD
-    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");
-    cbSymmetricMode->setChecked(settings->value("SymmetricMode", DEF_SYMMETRIC_MODE).toBool());
-    spinFractionalAccuracy->setValue(settings->value("FractionalAccuracy", DEF_FRACTIONAL_ACCURACY).toInt());
-    spinRandMin->setMaximum(MAX_RAND_VALUE);
-    spinRandMin->setValue(settings->value("RandMin",DEF_RAND_MIN).toInt());
-    spinRandMax->setMaximum(MAX_RAND_VALUE);
-    spinRandMax->setValue(settings->value("RandMax",DEF_RAND_MAX).toInt());
-    cbFractionalRandom->setChecked(settings->value("FractionalRandom", DEF_FRACTIONAL_RANDOM).toBool());
-    settings->endGroup();
-
-    settings->beginGroup("Output");
-    cbGenerateGraph->setChecked(settings->value("GenerateGraph", DEF_GENERATE_GRAPH).toBool());
-
-#ifndef QT_NO_PRINTER
-    cbHQGraph->setEnabled(cbGenerateGraph->isChecked());
-    cbHQGraph->setChecked(settings->value("HQGraph", DEF_HQ_GRAPH).toBool());
-#endif
-
-#if !defined(NOSVG) && (QT_VERSION >= 0x040500)
-    comboGraphImageFormat->addItem("svg");
-#endif // NOSVG && QT_VERSION >= 0x040500
-    // 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";
-    foreach (QByteArray format, QImageWriter::supportedImageFormats()) {
-        if (whitelist.contains(format))
-            comboGraphImageFormat->addItem(format);
-    }
-    comboGraphImageFormat->model()->sort(0);
-    comboGraphImageFormat->setCurrentIndex(comboGraphImageFormat->findText(settings->value("GraphImageFormat", DEF_GRAPH_IMAGE_FORMAT).toString(), Qt::MatchFixedString));
-    if (comboGraphImageFormat->currentIndex() < 0)
-        comboGraphImageFormat->setCurrentIndex(comboGraphImageFormat->findText(DEF_GRAPH_IMAGE_FORMAT, Qt::MatchFixedString));
-    labelGraphImageFormat->setEnabled(cbGenerateGraph->isChecked());
-    comboGraphImageFormat->setEnabled(cbGenerateGraph->isChecked());
-    cbEmbedGraphIntoHTML->setChecked(settings->value("EmbedGraphIntoHTML", DEF_EMBED_GRAPH_INTO_HTML).toBool());
-    cbEmbedGraphIntoHTML->setEnabled(cbGenerateGraph->isChecked());
-
-    cbShowMatrix->setChecked(settings->value("ShowMatrix", DEF_SHOW_MATRIX).toBool());
-    cbCitiesLimit->setEnabled(cbShowMatrix->isChecked());
-    cbCitiesLimit->setChecked(settings->value("UseShowMatrixLimit", DEF_USE_SHOW_MATRIX_LIMIT && cbShowMatrix->isChecked()).toBool());
-    spinCitiesLimit->setEnabled(cbShowMatrix->isChecked() && cbCitiesLimit->isChecked());
-    spinCitiesLimit->setValue(settings->value("ShowMatrixLimit", DEF_SHOW_MATRIX_LIMIT).toInt());
-    spinCitiesLimit->setMaximum(MAX_NUM_CITIES);
-    cbScrollToEnd->setChecked(settings->value("ScrollToEnd", DEF_SCROLL_TO_END).toBool());
-
-    font = qvariant_cast<QFont>(settings->value("Font", QFont(DEF_FONT_FACE, DEF_FONT_SIZE)));
-    color = QColor(settings->value("Colors/Text", DEF_TEXT_COLOR).toString());
-    settings->endGroup();
-
-#ifdef HANDHELD
-    setWindowState(Qt::WindowMaximized);
-#else
-    adjustSize();
-#endif // Q_WS_WINCE_WM
+	setupUi(this);
+	connect(buttonOK,SIGNAL(clicked()),this,SLOT(accept()));
+	connect(buttonCancel,SIGNAL(clicked()),this,SLOT(reject()));
+	connect(spinRandMin,SIGNAL(valueChanged(int)),this,SLOT(spinRandMinValueChanged(int)));
+//	setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::MSWindowsFixedSizeDialogHint);
+	setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint);
+	layout()->setSizeConstraint(layout()->SetFixedSize);
 }
 
-/*!
- * \brief Indicates whether or not the font color has been changed.
- * \return \c true if font color changed, otherwise \c false.
- */
-bool SettingsDialog::colorChanged() const
-{
-    return _newColor;
-}
-
-/*!
- * \brief Indicates whether or not the font properties have been changed.
- * \return \c true if font properties changed, otherwise \c false.
- */
-bool SettingsDialog::fontChanged() const
-{
-    return _newFont;
-}
-
-/*!
- * \brief Indicates whether and how the translucency setting was changed
- * \retval -1 the translucency was \em disabled.
- * \retval  0 the translucency <em>didn't change</em>.
- * \retval  1 the translucency was \em enabled.
- */
-qint8 SettingsDialog::translucencyChanged() const
-{
-    return _translucency;
-}
-
-/* Privates **********************************************************/
-
-void SettingsDialog::accept()
-{
-    if (QApplication::keyboardModifiers() & Qt::ShiftModifier) {
-        if (QMessageBox::question(this, tr("Settings Reset"), tr("Do you really want to <b>reset all application settings to their defaults</b>?"), QMessageBox::RestoreDefaults | QMessageBox::Cancel) == QMessageBox::RestoreDefaults) {
-            _newFont = (font != QFont(DEF_FONT_FACE, DEF_FONT_SIZE));
-            _newColor = (color != DEF_TEXT_COLOR);
-            settings->remove("");
-            settings->setValue("SettingsReset", true);
-            QDialog::accept();
-            QMessageBox::information(this->parentWidget(), tr("Settings Reset"), tr("All settings where successfully reset to their defaults.\nIt is recommended to restart the application now."));
-            return;
-        } else
-            return;
-    }
-    settings->setValue("Autosize", cbAutosize->isChecked());
-    settings->setValue("SaveLastUsed", cbSaveLastUsed->isChecked());
-    settings->setValue("UseNativeDialogs", cbUseNativeDialogs->isChecked());
-#ifndef HANDHELD
-    if (QtWin::isCompositionEnabled()) {
-bool old = settings->value("UseTranslucency", DEF_USE_TRANSLUCENCY).toBool();
-        if ((!old && cbUseTranslucency->isChecked()) || (old && !cbUseTranslucency->isChecked())) {
-            _translucency = old ? -1 : 1;
-        } else
-            _translucency = 0;
-        settings->setValue("UseTranslucency", cbUseTranslucency->isChecked());
-    }
-    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");
-    settings->setValue("SymmetricMode", cbSymmetricMode->isChecked());
-    settings->setValue("FractionalAccuracy", spinFractionalAccuracy->value());
-    settings->setValue("RandMin", spinRandMin->value());
-    settings->setValue("RandMax", spinRandMax->value());
-    settings->setValue("FractionalRandom", cbFractionalRandom->isChecked());
-    settings->endGroup();
-
-    settings->beginGroup("Output");
-    settings->setValue("GenerateGraph", cbGenerateGraph->isChecked());
-    if (cbGenerateGraph->isChecked()) {
-#ifndef QT_NO_PRINTER
-        settings->setValue("HQGraph", cbHQGraph->isChecked());
-#endif
-        if (cbGenerateGraph->isChecked()) {
-            if (comboGraphImageFormat->currentIndex() >= 0)
-                settings->setValue("GraphImageFormat", comboGraphImageFormat->currentText());
-            else
-                settings->setValue("GraphImageFormat", DEF_GRAPH_IMAGE_FORMAT);
-        }
-        settings->setValue("EmbedGraphIntoHTML", cbEmbedGraphIntoHTML->isChecked());
-    }
-    settings->setValue("ShowMatrix", cbShowMatrix->isChecked());
-    settings->setValue("UseShowMatrixLimit", cbShowMatrix->isChecked() && cbCitiesLimit->isChecked());
-    if (cbCitiesLimit->isChecked())
-        settings->setValue("ShowMatrixLimit", spinCitiesLimit->value());
-    settings->setValue("ScrollToEnd", cbScrollToEnd->isChecked());
-    if (_newFont)
-        settings->setValue("Font", font);
-    if (_newColor)
-        settings->setValue("Colors/Text", color.name());
-    settings->endGroup();
-    QDialog::accept();
-}
-
-void SettingsDialog::buttonColorClicked()
-{
-QColor color = QColorDialog::getColor(this->color,this);
-    if (color.isValid() && (this->color != color)) {
-        this->color = color;
-        _newColor = true;
-    }
-}
-
-void SettingsDialog::buttonFontClicked()
-{
-bool ok;
-QFont font = QFontDialog::getFont(&ok,this->font,this);
-    if (ok && (this->font != font)) {
-        this->font = font;
-        _newFont = true;
-    }
-}
-
-#ifdef Q_WS_WINCE_WM
-void SettingsDialog::desktopResized(int screen)
-{
-    if (screen != 0)
-        return;
-
-QRect availableGeometry = QApplication::desktop()->availableGeometry(0);
-    if (currentGeometry != availableGeometry) {
-        QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-        /*!
-         * \hack HACK: This hack checks whether \link QDesktopWidget::availableGeometry() availableGeometry()\endlink's \c top + \c hegiht = \link QDesktopWidget::screenGeometry() screenGeometry()\endlink's \c height.
-         *  If \c true, the window gets maximized. If we used \c setGeometry() in this case, the bottom of the
-         *  window would end up being behind the soft buttons. Is this a bug in Qt or Windows Mobile?
-         */
-        if ((availableGeometry.top() + availableGeometry.height()) == QApplication::desktop()->screenGeometry().height()) {
-            setWindowState(windowState() | Qt::WindowMaximized);
-        } else {
-            if (windowState() & Qt::WindowMaximized)
-                setWindowState(windowState() ^ Qt::WindowMaximized);
-            setGeometry(availableGeometry);
-        }
-        currentGeometry = availableGeometry;
-        QApplication::restoreOverrideCursor();
-    }
-}
-
-void SettingsDialog::showEvent(QShowEvent *ev)
-{
-    desktopResized(0);
-
-    QWidget::showEvent(ev);
-}
-#endif // Q_WS_WINCE_WM
-
-void SettingsDialog::spinRandMinValueChanged(int val) {
-    spinRandMax->setMinimum(val);
-}
-
-#if !defined(QT_NO_STATUSTIP) && !defined(HANDHELD)
-bool SettingsDialog::event(QEvent *ev)
-{
-    // Checking for StatusTip event and if tip text is not empty string
-    // setting it as text of the dialog hint label. Otherwise, setting
-    // dialog hint label text to own status tip text.
-    if (ev->type() == QEvent::StatusTip) {
-QString tip = static_cast<QStatusTipEvent *>(ev)->tip();
-        if (tip.length() != 0)
-            labelHint->setText(tip);
-        else
-            labelHint->setText(labelHint->statusTip());
-        return true;
-    } else
-        return QDialog::event(ev);
-}
-#endif // HANDHELD
Index: trunk/src/settingsdialog.h
===================================================================
--- trunk/src/settingsdialog.h	(revision 178)
+++ trunk/src/settingsdialog.h	(revision 1)
@@ -1,27 +1,20 @@
-/*!
- * \file settingsdialog.h
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
+/*
+ *	TSPSG - TSP Solver and Generator
+ *	Copyright (C) 2007 L¸ppa <lacontacts[at]gmail[dot]com>
  *
- *  $Id$
- *  $URL$
+ *	This file is part of TSPSG.
  *
- * \brief Defines SettingsDialog class.
+ *	TSPSG is free software: you can redistribute it and/or modify
+ *	it under the terms of the GNU General Public License as published by
+ *	the Free Software Foundation, either version 3 of the License, or
+ *	(at your option) any later version.
  *
- *  <b>TSPSG: TSP Solver and Generator</b>
+ *	TSPSG is distributed in the hope that it will be useful,
+ *	but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *	GNU General Public License for more details.
  *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
+ *	You should have received a copy of the GNU General Public License
+ *	along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
  */
 
@@ -29,62 +22,17 @@
 #define SETTINGSDIALOG_H
 
-#include "globals.h"
-
+#include <QDialog>
 #include "ui_settingsdialog.h"
 
-/*!
- * \brief Class for handling Settings Dialog UI and logic.
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- */
 class SettingsDialog: public QDialog, Ui::SettingsDialog
 {
-    Q_OBJECT
+	Q_OBJECT
 public:
-    SettingsDialog(QWidget *parent = 0);
-    bool colorChanged() const;
-    bool fontChanged() const;
-    qint8 translucencyChanged() const;
-
-private:
-    bool _newFont;
-    bool _newColor;
-    qint8 _translucency;
-
-    QColor color;
-    QFont font;
-
-    QSettings *settings;
-    QHBoxLayout *layoutCitiesLimit;
-#ifndef HANDHELD
-    QCheckBox *cbUseTranslucency;
-#endif // HANDHELD
-    QCheckBox *cbCheck4Updates;
-    QSpinBox *spinUpdateCheckInterval;
-#ifndef QT_NO_PRINTER
-    QCheckBox *cbHQGraph;
-#endif
-#ifdef Q_WS_WINCE_WM
-    QRect currentGeometry;
-#elif !defined(HANDHELD)
-    QCheckBox *cbSaveState;
-    QLabel *imgIcon;
-    QFrame *lineVertical;
-    QLabel *labelHint;
-
-#ifndef QT_NO_STATUSTIP
-    bool event(QEvent *ev);
-#endif // QT_NO_STATUSTIP
-#endif // Q_WS_WINCE_WM
-
+	SettingsDialog(QWidget *parent = 0);
+	
 private slots:
-    void accept();
-    void buttonColorClicked();
-    void buttonFontClicked();
-#ifdef Q_WS_WINCE_WM
-    void desktopResized(int screen);
-    void showEvent(QShowEvent *ev);
-#endif // Q_WS_WINCE_WM
-    void spinRandMinValueChanged(int val);
+	void spinRandMinValueChanged(int val) { spinRandMax->setMinimum(val + 1); }
 };
 
-#endif // SETTINGSDIALOG_H
+#endif //  SETTINGSDIALOG_H
+
Index: trunk/src/shobjidl.h
===================================================================
--- trunk/src/shobjidl.h	(revision 178)
+++ 	(revision )
@@ -1,95 +1,0 @@
-/*!
- * \file shobjidl.h
- * \author Copyright &copy; Microsoft Corporation
- * \author Extracted and documented by Lёppa <contacts[at]oleksii[dot]name>
- * \version Microsoft Windows SDK v7.0A
- *
- *  $Id$
- *  $URL$
- *
- * \brief This file is a minimal required part of \c %shobjidl.h from <b>Microsoft Windows SDK v7.0A</b>.
- *
- *  This file is an extract of \c %shobjidl.h from <b>Microsoft Windows SDK v7.0A</b>.
- *  It is needed to support <b>Windows 7 Taskbar Extensions</b> (namely, <em>Progress Bars</em>)
- *  and contains minimal required definition of \c ITaskbarList3 interface.
- *
- *  Tested with \b MSVC and \b mingw32. Doesn't need <b>Windows 7 SDK</b> itself.
- *
- * \note Don't forget to link to \b ole32 library when using this file (usually \c -lole32 linker flag is enough).
- */
-
-#ifndef _SHOBJIDL_H
-#define _SHOBJIDL_H
-
-#define INITGUID
-#include <windows.h>
-
-#ifndef DOXYGEN_EXCLUDE
-DEFINE_GUID(CLSID_TaskbarList, 0x56fdf344,0xfd6d,0x11d0,0x95,0x8a,0x00,0x60,0x97,0xc9,0xa0,0x90);
-DEFINE_GUID(IID_ITaskbarList3, 0xea1afb91,0x9e28,0x4b86,0x90,0xe9,0x9e,0x9f,0x8a,0x5e,0xef,0xaf);
-#endif
-
-enum TBPFLAG {
-	/*! Stops displaying progress and returns the button to its normal state. Call this method with this flag to dismiss the progress bar when the operation is complete or cancelled. */
-	TBPF_NOPROGRESS		= 0,
-
-	/*! The progress indicator does not grow in size, but cycles repeatedly along the length of the taskbar button. This indicates activity without specifying what proportion of the progress is complete. Progress is taking place, but there is no prediction as to how long the operation will take. */
-	TBPF_INDETERMINATE	= 0x1,
-
-	/*! The progress indicator grows in size from left to right in proportion to the estimated amount of the operation completed. This is a determinate progress indicator; a prediction is being made as to the duration of the operation. */
-	TBPF_NORMAL			= 0x2,
-
-	/*! The progress indicator turns red to show that an error has occurred in one of the windows that is broadcasting progress. This is a determinate state. If the progress indicator is in the indeterminate state, it switches to a red determinate display of a generic percentage not indicative of actual progress. */
-	TBPF_ERROR			= 0x4,
-
-	/*! The progress indicator turns yellow to show that progress is currently stopped in one of the windows but can be resumed by the user. No error condition exists and nothing is preventing the progress from continuing. This is a determinate state. If the progress indicator is in the indeterminate state, it switches to a yellow determinate display of a generic percentage not indicative of actual progress. */
-	TBPF_PAUSED			= 0x8
-};
-
-#ifndef DOXYGEN_EXCLUDE
-DECLARE_INTERFACE_(ITaskbarList3, IUnknown)
-{
-	/*** IUnknown methods ***/
-	STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppv) PURE;
-	STDMETHOD_(ULONG, AddRef) (THIS) PURE;
-	STDMETHOD_(ULONG, Release) (THIS) PURE;
-	/*** ITaskbarList specific methods ***/
-	STDMETHOD(HrInit) (THIS) PURE;
-	STDMETHOD(AddTab) (THIS_ HWND hwnd) PURE;
-	STDMETHOD(DeleteTab) (THIS_ HWND hwnd) PURE;
-	STDMETHOD(ActivateTab) (THIS_ HWND hwnd) PURE;
-	STDMETHOD(SetActiveAlt) (THIS_ HWND hwnd) PURE;
-	/*** ITaskbarList2 specific methods ***/
-	STDMETHOD(MarkFullscreenWindow) (THIS_ HWND hwnd, BOOL fFullscreen) PURE;
-	/*** ITaskbarList3 specific methods (only used ones) ***/
-	STDMETHOD(SetProgressValue) (THIS_ HWND hwnd, ULONGLONG ullCompleted, ULONGLONG ullTotal) PURE;
-	STDMETHOD(SetProgressState) (THIS_ HWND hwnd, TBPFLAG tbpFlags) PURE;
-};
-#else
-// This block is strictly for doxygen.
-/*!
- * \brief Exposes methods that control the taskbar.
- *
- *  Extends ITaskbarList2 by exposing methods that support the unified launching and switching taskbar button functionality added in Windows 7. This functionality includes thumbnail representations and switch targets based on individual tabs in a tabbed application, thumbnail toolbars, notification and status overlays, and progress indicators. This interface also provides the methods of the ITaskbarList and ITaskbarList2 interfaces, from which it inherits.
- */
-public interface class ITaskbarList3: public ITaskbarList2 {
-	/*!
-	 * \brief Sets the type and state of the progress indicator displayed on a taskbar button.
-	 * \param hwnd The handle of the window in which the progress of an operation is being shown. This window's associated taskbar button will display the progress bar.
-	 * \param tbpFlags Flags that control the current state of the progress button.
-	 * \return Returns S_OK if successful, or an error value otherwise.
-	 *
-	 * \note A call to SetProgressValue() will switch a progress indicator currently in an indeterminate mode (#TBPF_INDETERMINATE) to a normal (determinate) display and clear the #TBPF_INDETERMINATE flag.
-	 */
-	HRESULT SetProgressState(HWND hwnd, TBPFLAG tbpFlags);
-	/*!
-	 * \brief Displays or updates a progress bar hosted in a taskbar button to show the specific percentage completed of the full operation.
-	 * \param hwnd The handle of the window whose associated taskbar button is being used as a progress indicator.
-	 * \param ullCompleted An application-defined value that indicates the proportion of the operation that has been completed at the time the method is called.
-	 * \param ullTotal An application-defined value that specifies the value \a ullCompleted will have when the operation is complete.
-	 */
-	HRESULT SetProgressValue(HWND hwnd, ULONGLONG ullCompleted, ULONGLONG ullTotal);
-};
-#endif
-
-#endif /* _SHOBJIDL_H */
Index: trunk/src/tspmodel.cpp
===================================================================
--- trunk/src/tspmodel.cpp	(revision 178)
+++ 	(revision )
@@ -1,530 +1,0 @@
-/*
- *  TSPSG: TSP Solver and Generator
- *  Copyright (C) 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "tspmodel.h"
-
-/*!
- * \brief Class constructor.
- * \param parent The parent of the table model.
- */
-CTSPModel::CTSPModel(QObject *parent)
-    : QAbstractTableModel(parent), nCities(0)
-{
-    settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, "TSPSG", "tspsg", this);
-}
-
-/*!
- * \brief Resets the table, setting all its elements to 0.
- *
- * \sa randomize()
- */
-void CTSPModel::clear()
-{
-    for (int r = 0; r < nCities; r++)
-        for (int c = 0; c < nCities; c++)
-            if (r != c)
-                table[r][c] = 0;
-    emit dataChanged(index(0,0),index(nCities - 1,nCities - 1));
-}
-
-/*!
- * \brief Returns the column count in the table.
- * \return Number of columns in the table.
- *
- *  Actually, this function returns the number of cities in the current task.
- *
- * \sa numCities(), rowCount()
- */
-int CTSPModel::columnCount(const QModelIndex &) const
-{
-    return nCities;
-}
-
-/*!
- * \brief Returns the data stored under the given \a role for the item referred to by the \a index.
- * \param index An item index to get data from.
- * \param role The role to get data for.
- * \return Corresponding data.
- *
- * \sa setData(), headerData()
- */
-QVariant CTSPModel::data(const QModelIndex &index, int role) const
-{
-    if (!index.isValid())
-        return QVariant();
-    if (role == Qt::TextAlignmentRole)
-        return int(Qt::AlignCenter);
-    else if (role == Qt::FontRole) {
-QFont font;
-        font.setBold(true);
-        return font;
-    } else if (role == Qt::DisplayRole || role == Qt::EditRole) {
-        if (index.row() < nCities && index.column() < nCities)
-            if (table.at(index.row()).at(index.column()) == INFINITY)
-                return tr(INFSTR);
-            else
-                //! \hack HACK: Converting to string to prevent spinbox in edit mode
-                return QVariant(table.at(index.row()).at(index.column())).toString();
-        else
-            return QVariant();
-    } else if (role == Qt::UserRole)
-        return table[index.row()][index.column()];
-    return QVariant();
-}
-
-/*!
- * \brief Returns the item flags for the given \a index.
- * \param index An item index to get flags from.
- * \return Corresponding item flags.
- */
-Qt::ItemFlags CTSPModel::flags(const QModelIndex &index) const
-{
-Qt::ItemFlags flags = QAbstractItemModel::flags(index);
-    if (index.row() != index.column())
-        flags |= Qt::ItemIsEditable;
-    return flags;
-}
-
-/*!
- * \brief Returns the data for the given \a role and \a section in the header with the specified \a orientation.
- * \param section The section to get header data for.
- * \param orientation The orientation to get header data for.
- * \param role The role to get header data for.
- * \return Corresponding header data.
- *
- *  For horizontal headers, the section number corresponds to the column number of items shown beneath it. For vertical headers, the section number typically to the row number of items shown alongside it.
- */
-QVariant CTSPModel::headerData(int section, Qt::Orientation orientation, int role) const
-{
-    if (role == Qt::DisplayRole) {
-        if (orientation == Qt::Vertical)
-            return tr("City %1").arg(section + 1);
-        else
-            return tr("%1").arg(section + 1);
-    }
-    return QVariant();
-}
-
-/*!
- * \brief Loads a task from \a fname.
- * \param fname The name of the file to be loaded.
- * \return \c true on success, otherwise \c false.
- *
- * \sa saveTask()
- */
-bool CTSPModel::loadTask(const QString &fname)
-{
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-QFile f(fname);
-    if (!f.open(QIODevice::ReadOnly)) {
-        QApplication::restoreOverrideCursor();
-        QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Load"), QString(tr("Unable to open task file.\nError: %1")).arg(f.errorString()));
-        QApplication::restoreOverrideCursor();
-        return false;
-    }
-QDataStream ds(&f);
-    ds.setVersion(QDataStream::Qt_4_4);
-quint32 sig;
-    ds >> sig;
-    if (loadError(ds.status())) {
-        return false;
-    }
-    ds.device()->reset();
-    if (sig == TSPT) {
-        if (!loadTSPT(&ds)) {
-            f.close();
-            return false;
-        }
-    } else if ((sig >> 16) == ZKT) {
-        if (!loadZKT(&ds)) {
-            f.close();
-            return false;
-        }
-    } else {
-        f.close();
-        QApplication::restoreOverrideCursor();
-        QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Load"), tr("Unable to load task:") + "\n" + tr("Unknown file format or file is corrupted."));
-        QApplication::restoreOverrideCursor();
-        return false;
-    }
-    f.close();
-    QApplication::restoreOverrideCursor();
-    return true;
-}
-
-/*!
- * \brief Returns the number of cities.
- * \return Number of cities in the current task.
- *
- * \sa columnCount(), rowCount(), setNumCities()
- */
-quint16 CTSPModel::numCities() const
-{
-    return nCities;
-}
-
-/*!
- * \brief Randomizes the table by setting all its values to random ones.
- *
- *  Uses TSPSG settings to determine random values range.
- *
- * \sa clear()
- */
-void CTSPModel::randomize()
-{
-int randMin = settings->value("Task/RandMin", DEF_RAND_MIN).toInt();
-int randMax = settings->value("Task/RandMax", DEF_RAND_MAX).toInt();
-    if (settings->value("Task/SymmetricMode", DEF_SYMMETRIC_MODE).toBool()) {
-        for (int r = 0; r < nCities; r++)
-            for (int c = 0; c < r; c++)
-                table[c][r] = table[r][c] = rand(randMin, randMax);
-    } else {
-        for (int r = 0; r < nCities; r++)
-            for (int c = 0; c < nCities; c++)
-                if (r != c)
-                    table[r][c] = rand(randMin, randMax);
-    }
-    emit dataChanged(index(0,0), index(nCities - 1, nCities - 1));
-}
-
-/*!
- * \brief Returns the row count in the table.
- * \return Number of rows in the table.
- *
- *  Actually, this function returns the number of cities in the current task.
- *
- * \sa columnCount(), numCities()
- */
-int CTSPModel::rowCount(const QModelIndex &) const
-{
-    return nCities;
-}
-
-/*!
- * \brief Saves current task to \a fname.
- * \param fname The name of the file to seve to.
- * \return \c true on success, otherwise \c false.
- *
- * \sa loadTask()
- */
-bool CTSPModel::saveTask(const QString &fname)
-{
-    QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
-QFile f(fname);
-    if (!f.open(QIODevice::WriteOnly)) {
-        QApplication::restoreOverrideCursor();
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Save"), QString(tr("Unable to create task file.\nError: %1\nMaybe, file is read-only?")).arg(f.errorString()));
-        f.remove();
-        return false;
-    }
-QDataStream ds(&f);
-    ds.setVersion(QDataStream::Qt_4_4);
-    if (f.error() != QFile::NoError) {
-        QApplication::restoreOverrideCursor();
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Save"), tr("Unable to save task.\nError: %1").arg(f.errorString()));
-        f.close();
-        f.remove();
-        return false;
-    }
-    // File signature
-    ds << TSPT;
-    if (f.error() != QFile::NoError) {
-        QApplication::restoreOverrideCursor();
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Save"), tr("Unable to save task.\nError: %1").arg(f.errorString()));
-        f.close();
-        f.remove();
-        return false;
-    }
-    // File version
-    ds << TSPT_VERSION;
-    if (f.error() != QFile::NoError) {
-        QApplication::restoreOverrideCursor();
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Save"), tr("Unable to save task.\nError: %1").arg(f.errorString()));
-        f.close();
-        f.remove();
-        return false;
-    }
-    // File metadata version
-    ds << TSPT_META_VERSION;
-    if (f.error() != QFile::NoError) {
-        QApplication::restoreOverrideCursor();
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Save"), tr("Unable to save task.\nError: %1").arg(f.errorString()));
-        f.close();
-        f.remove();
-        return false;
-    }
-    // Metadata
-    ds << OSID;
-    if (f.error() != QFile::NoError) {
-        QApplication::restoreOverrideCursor();
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Save"), tr("Unable to save task.\nError: %1").arg(f.errorString()));
-        f.close();
-        f.remove();
-        return false;
-    }
-    // Number of cities
-    ds << nCities;
-    if (f.error() != QFile::NoError) {
-        QApplication::restoreOverrideCursor();
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Save"), tr("Unable to save task.\nError: %1").arg(f.errorString()));
-        f.close();
-        f.remove();
-        return false;
-    }
-    // Costs
-    for (int r = 0; r < nCities; r++)
-        for (int c = 0; c < nCities; c++)
-            if (r != c) {
-                ds << static_cast<double>(table[r][c]); // We cast to double because double may be float on some platforms and we store double values in file
-                if (f.error() != QFile::NoError) {
-                    QApplication::restoreOverrideCursor();
-                    QMessageBox::critical(QApplication::activeWindow(), tr("Task Save"), tr("Unable to save task.\nError: %1").arg(f.errorString()));
-                    f.close();
-                    f.remove();
-                    return false;
-                }
-            }
-    f.close();
-    QApplication::restoreOverrideCursor();
-    return true;
-}
-
-/*!
- * \brief Sets the \a role data for the item at \a index to \a value.
- * \param index The index of the item to set data at.
- * \param value The value of the item data to be set.
- * \param role The role of the item to set data for.
- * \return \c true on success, otherwise \c false.
- *
- * \sa data()
- */
-bool CTSPModel::setData(const QModelIndex &index, const QVariant &value, int role)
-{
-    if (!index.isValid())
-        return false;
-    if (role == Qt::EditRole && index.row() != index.column()) {
-        if ((value.toString().compare(INFSTR) == 0)
-                || (value.toString().contains(QRegExp("^[^0-9]+$", Qt::CaseInsensitive)))) {
-            table[index.row()][index.column()] = INFINITY;
-        } else {
-bool ok;
-double tmp = value.toDouble(&ok);
-            if (!ok || tmp < 0)
-                return false;
-            else {
-                table[index.row()][index.column()] = tmp;
-                if (settings->value("Task/SymmetricMode", DEF_SYMMETRIC_MODE).toBool())
-                    table[index.column()][index.row()] = tmp;
-            }
-        }
-        emit dataChanged(index,index);
-        return true;
-    }
-    return false;
-}
-
-/*!
- * \brief Sets number of cities in the current task to \a n.
- * \param n Number of cities to set to.
- *
- * \sa numCities()
- */
-void CTSPModel::setNumCities(int n)
-{
-    if (n == nCities)
-        return;
-    emit layoutAboutToBeChanged();
-    table.resize(n);
-    for (int k = 0; k < n; k++) {
-        table[k].resize(n);
-    }
-    if (n > nCities)
-        for (int k = nCities; k < n; k++)
-            table[k][k] = INFINITY;
-    nCities = n;
-    emit layoutChanged();
-}
-
-/* Privates **********************************************************/
-
-inline bool CTSPModel::loadError(QDataStream::Status status)
-{
-QString err;
-    if (status == QDataStream::Ok)
-        return false;
-    else if (status == QDataStream::ReadPastEnd)
-        err = tr("Unexpected end of file. The file could be corrupted.");
-    else if (status == QDataStream::ReadCorruptData)
-        err = tr("Corrupt data read. The file could be corrupted.");
-    else
-        err = tr("Unknown error. The file could be corrupted.");
-    QApplication::restoreOverrideCursor();
-    QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
-    QMessageBox::critical(QApplication::activeWindow(), tr("Task Load"), tr("Unable to load task:") + "\n" + err);
-    QApplication::restoreOverrideCursor();
-    return true;
-}
-
-bool CTSPModel::loadTSPT(QDataStream *ds)
-{
-    // Skipping signature
-    ds->skipRawData(sizeof(TSPT));
-    if (loadError(ds->status()))
-        return false;
-    // File version
-quint8 version;
-    *ds >> version;
-    if (loadError(ds->status()))
-        return false;
-    if (version > TSPT_VERSION) {
-        QApplication::restoreOverrideCursor();
-        QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Load"), tr("Unable to load task:") + "\n"
-            + tr("File version (%1) is newer than this version of %3 supports (%2).\n"
-                 "Please, try to update the application. Also, the file could be corrupted.")
-                 .arg(version).arg(TSPT_VERSION).arg(QApplication::applicationName()));
-        QApplication::restoreOverrideCursor();
-        return false;
-    }
-    // Skipping metadata
-    ds->skipRawData(TSPT_META_SIZE);
-    if (loadError(ds->status()))
-        return false;
-    // Number of cities
-quint16 size;
-    *ds >> size;
-    if (loadError(ds->status()))
-        return false;
-    if (size < 3) {
-        QApplication::restoreOverrideCursor();
-        QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Load"), tr("Unable to load task:") + "\n"
-            + tr("Unexpected data read. The file could be corrupted."));
-        QApplication::restoreOverrideCursor();
-        return false;
-    }
-    if (size > MAX_NUM_CITIES) {
-        QApplication::restoreOverrideCursor();
-        QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Load"), tr("Unable to load task:") + "\n"
-            + tr("The task contains more cities (%1) than this version of %3 supports (%2).\n"
-                 "You might be using an old version of the application or the file could be corrupted.")
-                 .arg(size).arg(MAX_NUM_CITIES).arg(QApplication::applicationName()));
-        QApplication::restoreOverrideCursor();
-        return false;
-    }
-    if (nCities != size) {
-        setNumCities(size);
-        emit numCitiesChanged(size);
-    }
-
-double x; // We need this as double may be float on some platforms and we store double values in file
-    // Travel costs
-    for (int r = 0; r < size; r++)
-        for (int c = 0; c < size; c++)
-            if (r != c) {
-                *ds >> x;
-                table[r][c] = x;
-                if (loadError(ds->status())) {
-                    clear();
-                    return false;
-                }
-            }
-    emit dataChanged(index(0,0),index(nCities - 1,nCities - 1));
-    QApplication::restoreOverrideCursor();
-    return true;
-}
-
-bool CTSPModel::loadZKT(QDataStream *ds)
-{
-    // Skipping signature
-    ds->skipRawData(sizeof(ZKT));
-    if (loadError(ds->status()))
-        return false;
-    // File version
-quint16 version;
-    ds->readRawData(reinterpret_cast<char *>(&version),2);
-    if (loadError(ds->status()))
-        return false;
-    if (version > ZKT_VERSION) {
-        QApplication::restoreOverrideCursor();
-        QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Load"), tr("Unable to load task:") + "\n"
-            + tr("File version (%1) is newer than this version of %3 supports (%2).\n"
-                 "Please, try to update the application. Also, the file could be corrupted.")
-                 .arg(version).arg(TSPT_VERSION).arg(QApplication::applicationName()));
-        QApplication::restoreOverrideCursor();
-        return false;
-    }
-    // Number of cities
-quint8 size;
-    ds->readRawData(reinterpret_cast<char *>(&size),1);
-    if (loadError(ds->status()))
-        return false;
-    if ((size < 3) || (size > 5)) {
-        QApplication::restoreOverrideCursor();
-        QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor));
-        QMessageBox::critical(QApplication::activeWindow(), tr("Task Load"), tr("Unable to load task:") + "\n"
-            + tr("Unexpected data read. The file could be corrupted."));
-        QApplication::restoreOverrideCursor();
-        return false;
-    }
-    if (nCities != size) {
-        setNumCities(size);
-        emit numCitiesChanged(size);
-    }
-    // Travel costs
-double val;
-    for (int r = 0; r < 5; r++)
-        for (int c = 0; c < 5; c++)
-            if ((r != c) && (r < size) && (c < size)) {
-                ds->readRawData(reinterpret_cast<char *>(&val),8);
-                if (loadError(ds->status())) {
-                    clear();
-                    return false;
-                }
-                table[r][c] = val;
-            } else {
-                ds->skipRawData(8);
-                if (loadError(ds->status())) {
-                    clear();
-                    return false;
-                }
-            }
-    emit dataChanged(index(0,0),index(nCities - 1,nCities - 1));
-    QApplication::restoreOverrideCursor();
-    return true;
-}
-
-inline double CTSPModel::rand(int min, int max) const
-{
-double r;
-    if (settings->value("Task/FractionalRandom", DEF_FRACTIONAL_RANDOM).toBool()) {
-double x = qPow(10, settings->value("Task/FractionalAccuracy", DEF_FRACTIONAL_ACCURACY).toInt());
-        r = (double)qRound((double)qrand() / RAND_MAX * (max - min) * x) / x;
-    } else
-        r = qRound((double)qrand() / RAND_MAX * (max - min));
-    return min + r;
-}
Index: trunk/src/tspmodel.h
===================================================================
--- trunk/src/tspmodel.h	(revision 178)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/*!
- * \file tspmodel.h
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- * \brief Defines CTSPModel class.
- *
- *  <b>TSPSG: TSP Solver and Generator</b>
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef TSPMODEL_H
-#define TSPMODEL_H
-
-#include "globals.h"
-
-/*!
- * \brief This class implements table model for manipulating a task.
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- */
-class CTSPModel: public QAbstractTableModel
-{
-    Q_OBJECT
-
-public:
-    CTSPModel(QObject *parent = 0);
-    void clear();
-    int columnCount(const QModelIndex &parent = QModelIndex()) const;
-    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
-    Qt::ItemFlags flags(const QModelIndex &index) const;
-    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
-    bool loadTask(const QString &fname);
-    quint16 numCities() const;
-    void randomize();
-    int rowCount(const QModelIndex &parent = QModelIndex()) const;
-    bool saveTask(const QString &fname);
-    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
-    void setNumCities(int n);
-
-signals:
-    /*!
-     * \brief This signal is emitted whenever the number of cities in the task changes.
-     *
-     * \sa setNumCities()
-     */
-    void numCitiesChanged(int);
-
-private:
-    QSettings *settings;
-    QVector<QVector<double> > table;
-    quint16 nCities;
-    bool loadError(QDataStream::Status);
-    bool loadTSPT(QDataStream *);
-    bool loadZKT(QDataStream *);
-    double rand(int, int) const;
-};
-
-#endif // TSPMODEL_H
Index: trunk/src/tspsolver.cpp
===================================================================
--- trunk/src/tspsolver.cpp	(revision 178)
+++ 	(revision )
@@ -1,439 +1,0 @@
-/*
- *  TSPSG: TSP Solver and Generator
- *  Copyright (C) 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "tspsolver.h"
-
-//! \internal \brief A short for maximum double, used internally in the solution algorithm.
-#define MAX_DOUBLE std::numeric_limits<double>::max()
-
-namespace TSPSolver {
-
-/*!
- * \brief Returns CTSPSolver's version ID.
- * \return A string: <b>\$Id$</b>.
- */
-QString CTSPSolver::getVersionId()
-{
-    return QString("$Id$");
-}
-
-/*!
- * \brief Constructs CTSPSolver object.
- * \param parent A parent object.
- */
-CTSPSolver::CTSPSolver(QObject *parent)
-    : QObject(parent), cc(true), nCities(0), total(0), root(NULL) {}
-
-/*!
- * \brief Cleans up the object and frees up memory used by the solution tree.
- * \param processEvents If set to \c true then \link QCoreApplication::processEvents() QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents)\endlink will be called from time to time while cleaning up.
- * \warning After call to this function a solution tree returned by the solve() function is no longer valid.
- * \note It is not required to call this function manually. This function is always called by solve() at the beginning of the solution process.
- *
- * \sa solve(), setCleanupOnCancel()
- */
-void CTSPSolver::cleanup(bool processEvents)
-{
-    route.clear();
-    mayNotBeOptimal = false;
-    if (root != NULL)
-        deleteTree(root, processEvents);
-}
-
-/*!
- * \brief Returns the sorted optimal path, starting from City 1.
- * \param city A string that represents city elements in the path.
- * \param separator A string that represents separators between cities in the path.
- * \return A string, containing sorted optimal path.
- *
- *  The resulting path will be in the form \a city+\a separator+\a city+...+\a separator+\a city.
- *  \c \%1 in \a city will be replaced by the city number.
- */
-QString CTSPSolver::getSortedPath(const QString &city, const QString &separator) const
-{
-    if (!root || route.isEmpty() || (route.size() != nCities))
-        return QString();
-
-int i = 0; // We start from City 1
-QStringList path;
-    path << city.arg(1);
-    while ((i = route[i]) != 0) {
-        path << city.arg(i + 1);
-    }
-    // And finish in City 1, too
-    path << city.arg(1);
-
-    return path.join(separator);
-}
-
-/*!
- * \brief Returns a total number of steps in the current solution.
- * \return A total number of steps or \c 0 if no solution.
- * \note This is not always the same as the number of cities.
- */
-int CTSPSolver::getTotalSteps() const
-{
-    return total;
-}
-
-/*!
- * \brief Indicates whether or not the solution is definitely optimal.
- * \return \c true if the solution is definitely optimal, otherwise \c false.
- *
- *  The solution may need some further iterations to determine whether or not it is optimal.
- *  In such cases this function returns \c false.
- */
-bool CTSPSolver::isOptimal() const
-{
-    return !mayNotBeOptimal;
-}
-
-/*!
- * \brief Sets whether or not to call cleanup() on solution cancel.
- * \param enable Set to \c true to enable clenup (default).
- *
- *  This may be useful if you want to make cleanup yourself or provide indication of clenup to user.
- *
- * \note Please, note that cleanup() is explicitly called at the start of each solution.
- *       Disabling cleanup and forgetting to do it manually may considerably increase the solution time for large tasks (with more than 15 cities).
- * \sa cleanup()
- */
-void CTSPSolver::setCleanupOnCancel(bool enable)
-{
-    cc = enable;
-}
-
-/*!
- * \brief Solves the given task.
- * \param numCities Number of cities in the task.
- * \param task The matrix of city-to-city travel costs.
- * \return Pointer to the root of the solution tree.
- *
- * \todo TODO: Comment the algorithm.
- */
-SStep *CTSPSolver::solve(int numCities, const TMatrix &task)
-{
-    if (numCities < 3)
-        return NULL;
-
-QMutexLocker locker(&mutex);
-    cleanup();
-    canceled = false;
-    locker.unlock();
-
-    nCities = numCities;
-
-SStep *step = new SStep();
-    step->matrix = task;
-    // We need to distinguish the values forbidden by the user
-    // from the values forbidden by the algorithm.
-    // So we replace user's infinities by the maximum available double value.
-    normalize(step->matrix);
-#ifdef DEBUG
-    qDebug() << step->matrix;
-#endif // DEBUG
-    step->price = align(step->matrix);
-    root = step;
-
-SStep *left, *right;
-int nRow, nCol;
-bool firstStep = true;
-double check = INFINITY;
-    total = 0;
-    while (route.size() < nCities) {
-        step->alts = findCandidate(step->matrix,nRow,nCol);
-
-        while (hasSubCycles(nRow,nCol)) {
-#ifdef DEBUG
-            qDebug() << "Forbidden: (" << nRow << ";" << nCol << ")";
-#endif // DEBUG
-            step->matrix[nRow][nCol] = INFINITY;
-            step->price += align(step->matrix);
-            step->alts = findCandidate(step->matrix,nRow,nCol);
-        }
-
-#ifdef DEBUG
-        qDebug() /*<< step->matrix*/ << "Selected: (" << nRow << ";" << nCol << ")";
-        qDebug() << "Alternate:" << step->alts;
-        qDebug() << "Step price:" << step->price << endl;
-#endif // DEBUG
-
-        locker.relock();
-        if ((nRow == -1) || (nCol == -1) || canceled) {
-            if (canceled && cc)
-                cleanup();
-            return NULL;
-        }
-        locker.unlock();
-
-        // Route with (nRow,nCol) path
-        right = new SStep();
-        right->pNode = step;
-        right->matrix = step->matrix;
-        for (int k = 0; k < nCities; k++) {
-            if (k != nCol)
-                right->matrix[nRow][k] = INFINITY;
-            if (k != nRow)
-                right->matrix[k][nCol] = INFINITY;
-        }
-        right->price = step->price + align(right->matrix);
-        // Forbid the selected route to exclude its reuse in next steps.
-        right->matrix[nCol][nRow] = INFINITY;
-        right->matrix[nRow][nCol] = INFINITY;
-
-        // Route without (nRow,nCol) path
-        left = new SStep();
-        left->pNode = step;
-        left->matrix = step->matrix;
-        left->matrix[nRow][nCol] = INFINITY;
-        left->price = step->price + align(left->matrix);
-
-        step->candidate.nRow = nRow;
-        step->candidate.nCol = nCol;
-        step->plNode = left;
-        step->prNode = right;
-
-        // This matrix is not used anymore. Restoring infinities back.
-        denormalize(step->matrix);
-
-        if (right->price <= left->price) {
-            // Route with (nRow,nCol) path is cheaper
-            step->next = SStep::RightBranch;
-            step = right;
-            route[nRow] = nCol;
-            emit routePartFound(route.size());
-            if (firstStep) {
-                check = left->price;
-                firstStep = false;
-            }
-        } else {
-            // Route without (nRow,nCol) path is cheaper
-            step->next = SStep::LeftBranch;
-            step = left;
-            QCoreApplication::processEvents();
-            if (firstStep) {
-                check = right->price;
-                firstStep = false;
-            }
-        }
-        total++;
-    }
-
-    mayNotBeOptimal = (check < step->price);
-
-    return root;
-}
-
-/*!
- * \brief Indicates whether or not the solution process was canceled.
- * \return \c true if the solution process was canceled, otherwise \c false.
- */
-bool CTSPSolver::wasCanceled() const
-{
-QMutexLocker locker(&mutex);
-    return canceled;
-}
-
-/*!
- * \brief Cancels the solution process.
- */
-void CTSPSolver::cancel()
-{
-QMutexLocker locker(&mutex);
-    canceled = true;
-}
-
-CTSPSolver::~CTSPSolver()
-{
-    if (root != NULL)
-        deleteTree(root);
-}
-
-/* Privates **********************************************************/
-
-double CTSPSolver::align(TMatrix &matrix)
-{
-double r = 0;
-double min;
-    for (int k = 0; k < nCities; k++) {
-        min = findMinInRow(k,matrix);
-        if (min > 0) {
-            r += min;
-            if (min < MAX_DOUBLE)
-                subRow(matrix,k,min);
-        }
-    }
-    for (int k = 0; k < nCities; k++) {
-        min = findMinInCol(k,matrix);
-        if (min > 0) {
-            r += min;
-            if (min < MAX_DOUBLE)
-                subCol(matrix,k,min);
-        }
-    }
-    return (r != MAX_DOUBLE) ? r : INFINITY;
-}
-
-void CTSPSolver::deleteTree(SStep *&root, bool processEvents)
-{
-    if (root == NULL)
-        return;
-SStep *step = root;
-SStep *parent;
-    forever {
-        if (processEvents)
-            QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
-        if (step->plNode != NULL) {
-            // We have left child node - going inside it
-            step = step->plNode;
-            step->pNode->plNode = NULL;
-            continue;
-        } else if (step->prNode != NULL) {
-            // We have right child node - going inside it
-            step = step->prNode;
-            step->pNode->prNode = NULL;
-            continue;
-        } else {
-            // We have no child nodes. Deleting the current one.
-            parent = step->pNode;
-            delete step;
-            if (parent != NULL) {
-                // Going back to the parent node.
-                step = parent;
-            } else {
-                // We came back to the root node. Finishing.
-                root = NULL;
-                break;
-            }
-        }
-    }
-}
-
-void CTSPSolver::denormalize(TMatrix &matrix) const
-{
-    for (int r = 0; r < nCities; r++)
-        for (int c = 0; c < nCities; c++)
-            if ((r != c) && (matrix.at(r).at(c) == MAX_DOUBLE))
-                matrix[r][c] = INFINITY;
-}
-
-QList<SStep::SCandidate> CTSPSolver::findCandidate(const TMatrix &matrix, int &nRow, int &nCol) const
-{
-    nRow = -1;
-    nCol = -1;
-QList<SStep::SCandidate> alts;
-SStep::SCandidate cand;
-double h = -1;
-double sum;
-    for (int r = 0; r < nCities; r++)
-        for (int c = 0; c < nCities; c++)
-            if (matrix.at(r).at(c) == 0) {
-                sum = findMinInRow(r,matrix,c) + findMinInCol(c,matrix,r);
-                if (sum > h) {
-                    h = sum;
-                    nRow = r;
-                    nCol = c;
-                    alts.clear();
-                } else if ((sum == h) && !hasSubCycles(r,c)) {
-                    cand.nRow = r;
-                    cand.nCol = c;
-                    alts.append(cand);
-                }
-            }
-    return alts;
-}
-
-double CTSPSolver::findMinInCol(int nCol, const TMatrix &matrix, int exr) const
-{
-double min = INFINITY;
-    for (int k = 0; k < nCities; k++)
-        if ((k != exr) && (min > matrix.at(k).at(nCol)))
-            min = matrix.at(k).at(nCol);
-    return (min == INFINITY) ? 0 : min;
-}
-
-double CTSPSolver::findMinInRow(int nRow, const TMatrix &matrix, int exc) const
-{
-double min = INFINITY;
-    for (int k = 0; k < nCities; k++) {
-        if (((k != exc)) && (min > matrix.at(nRow).at(k)))
-            min = matrix.at(nRow).at(k);
-    }
-    return (min == INFINITY) ? 0 : min;
-}
-
-bool CTSPSolver::hasSubCycles(int nRow, int nCol) const
-{
-    if ((nRow < 0) || (nCol < 0) || route.isEmpty() || !(route.size() < nCities - 1) || !route.contains(nCol))
-        return false;
-int i = nCol;
-    forever {
-        if ((i = route.value(i)) == nRow)
-            return true;
-        if (!route.contains(i))
-            return false;
-    }
-    return false;
-}
-
-void CTSPSolver::normalize(TMatrix &matrix) const
-{
-    for (int r = 0; r < nCities; r++)
-        for (int c = 0; c < nCities; c++)
-            if ((r != c) && (matrix.at(r).at(c) == INFINITY))
-                matrix[r][c] = MAX_DOUBLE;
-}
-
-void CTSPSolver::subCol(TMatrix &matrix, int nCol, double val)
-{
-    for (int k = 0; k < nCities; k++)
-        if (k != nCol)
-            matrix[k][nCol] -= val;
-}
-
-void CTSPSolver::subRow(TMatrix &matrix, int nRow, double val)
-{
-    for (int k = 0; k < nCities; k++)
-        if (k != nRow)
-            matrix[nRow][k] -= val;
-}
-
-}
-
-#ifdef DEBUG
-QDebug operator<<(QDebug dbg, const TSPSolver::TMatrix &matrix)
-{
-    for (int r = 0; r < matrix.count(); r++) {
-        for (int c = 0; c < matrix.at(r).count(); c++)
-            dbg.space() << QString::number(matrix.at(r).at(c)).leftJustified(5);
-        dbg << endl;
-    }
-    return dbg;
-}
-
-QDebug operator<<(QDebug dbg, const TSPSolver::SStep::SCandidate &cand)
-{
-    dbg.nospace() << "(" << cand.nRow << ";" << cand.nCol << ")";
-    return dbg;
-}
-#endif // DEBUG
Index: trunk/src/tspsolver.h
===================================================================
--- trunk/src/tspsolver.h	(revision 178)
+++ 	(revision )
@@ -1,158 +1,0 @@
-/*!
- * \file tspsolver.h
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- * \brief Defines TSPSolver namespace and everything needed for solving TSP tasks.
- *
- *  <b>TSPSG: TSP Solver and Generator</b>
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef TSPSOLVER_H
-#define TSPSOLVER_H
-
-#include <QtCore>
-#include <limits>
-
-/*!
- * \def INFINITY
- * \brief This value means infinity :-)
- *
- *  Define \c INFINITY if it's not already defined.
- */
-#ifndef INFINITY
-#   define INFINITY std::numeric_limits<double>::infinity()
-#endif
-
-/*!
- * \brief A TSP Solver namespace.
- *
- *  This namespace contains all the stuff required for solving TSP tasks.
- */
-namespace TSPSolver {
-
-//! A matrix of city-to-city travel costs
-typedef QList<QList<double> > TMatrix;
-
-/*!
- * \brief This structure represents one step of solving.
- *
- *  A tree of such elements will represent the solving process.
- */
-struct SStep {
-    //! A structure that represents a candidate for branching
-    struct SCandidate {
-        int nRow; //!< A zero-based row number of the candidate
-        int nCol; //!< A zero-based column number of the candidate
-
-        //! Assigns default values
-        SCandidate() {
-            nCol = nRow = -1;
-        }
-        //! An operator == implementation
-        bool operator ==(const SCandidate &cand) const {
-            return ((cand.nRow == nRow) && (cand.nCol == nCol));
-        }
-    };
-
-    //! An enum that describes possible selection of the next step
-    enum NextStep {
-        NoNextStep, //!< No next step (end of solution)
-        LeftBranch, //!< Left branch was selected for the next step
-        RightBranch //!< Right branch was selected for the next step
-    };
-
-    TMatrix matrix; //!< This step's matrix
-    double price; //!< The price of travel to this step
-
-    SCandidate candidate; //!< A candiadate for branching in the current step
-    QList<SCandidate> alts; //!< A list of alternative branching candidates
-    SStep *pNode; //!< Pointer to the parent step
-    SStep *plNode; //!< Pointer to the left branch step
-    SStep *prNode; //!< Pointer to the right branch step
-    NextStep next; //!< Indicates what branch was selected for the next step
-
-    //! Assigns default values
-    SStep() {
-        price = -1;
-        pNode = plNode = prNode = NULL;
-        next = NoNextStep;
-    }
-};
-
-/*!
- * \brief This class solves Travelling Salesman Problem task.
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- */
-class CTSPSolver: public QObject
-{
-    Q_OBJECT
-
-public:
-    static QString getVersionId();
-
-    CTSPSolver(QObject *parent = NULL);
-    void cleanup(bool processEvents = false);
-    QString getSortedPath(const QString &city, const QString &separator = QString(" -> ")) const;
-    int getTotalSteps() const;
-    bool isOptimal() const;
-    void setCleanupOnCancel(bool enable = true);
-    SStep *solve(int numCities, const TMatrix &task);
-    bool wasCanceled() const;
-    ~CTSPSolver();
-
-public slots:
-    void cancel();
-
-signals:
-    /*!
-     * \brief This signal is emitted once every time a part of the route is found.
-     * \param n Indicates the number of the route parts found.
-     */
-    void routePartFound(int n);
-
-private:
-    bool mayNotBeOptimal, canceled, cc;
-    int nCities, total;
-    SStep *root;
-    QHash<int,int> route;
-    mutable QMutex mutex;
-
-    double align(TMatrix &matrix);
-    void deleteTree(SStep *&root, bool processEvents = false);
-    void denormalize(TMatrix &matrix) const;
-    QList<SStep::SCandidate> findCandidate(const TMatrix &matrix, int &nRow, int &nCol) const;
-    double findMinInCol(int nCol, const TMatrix &matrix, int exr = -1) const;
-    double findMinInRow(int nRow, const TMatrix &matrix, int exc = -1) const;
-    void finishRoute();
-    bool hasSubCycles(int nRow, int nCol) const;
-    void normalize(TMatrix &matrix) const;
-    void subCol(TMatrix &matrix, int nCol, double val);
-    void subRow(TMatrix &matrix, int nRow, double val);
-};
-
-}
-
-#ifdef DEBUG
-QDebug operator<<(QDebug dbg, const TSPSolver::TMatrix &matrix);
-QDebug operator<<(QDebug dbg, const TSPSolver::SStep::SCandidate &candidate);
-#endif // DEBUG
-
-#endif // TSPSOLVER_H
Index: trunk/src/version.h
===================================================================
--- trunk/src/version.h	(revision 178)
+++ 	(revision )
@@ -1,77 +1,0 @@
-/*!
- * \file version.h
- * \author Copyright &copy; 2007-2011 Lёppa <contacts[at]oleksii[dot]name>
- *
- *  $Id$
- *  $URL$
- *
- * \brief Contains TSPSG version information defines.
- *
- *  <b>TSPSG: TSP Solver and Generator</b>
- *
- *  This file is part of TSPSG.
- *
- *  TSPSG is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  TSPSG is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with TSPSG.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef VERSION_H
-#define VERSION_H
-
-#ifndef BUILD_VERSION_MAJOR
-    //! Major version of current TSPSG build
-#   define BUILD_VERSION_MAJOR 0
-#endif // BUILD_VERSION_MAJOR
-#ifndef BUILD_VERSION_MINOR
-    //! Minor version of current TSPSG build
-#   define BUILD_VERSION_MINOR 0
-#endif // BUILD_VERSION_MINOR
-#ifndef BUILD_RELEASE
-    //! TSPSG release number
-#   define BUILD_RELEASE 0
-#endif // BUILD_RELEASE
-
-#ifndef BUILD_NUMBER
-    //! Current TSPSG build number
-#   define BUILD_NUMBER 0
-#endif // BUILD_NUMBER
-
-/*!
- * \def BUILD_STATUS
- * \brief TSPSG build status
- */
-#ifdef DEBUG
-#   ifndef BUILD_STATUS_TYPE
-#       define BUILD_STATUS (debug build BUILD_NUMBER)
-#   else
-#       define BUILD_STATUS (debug BUILD_STATUS_TYPE BUILD_STATUS_NUMBER)
-#   endif
-#else
-#   if !defined(TSPSG_RELEASE_BUILD)
-#       define BUILD_STATUS (nightly build)
-#   elif !defined(BUILD_STATUS_TYPE)
-#       define BUILD_STATUS (build BUILD_NUMBER)
-#   else
-#       define BUILD_STATUS (BUILD_STATUS_TYPE BUILD_STATUS_NUMBER)
-#   endif // TSPSG_RELEASE_BUILD
-#endif // DEBUG
-
-//! \internal \brief A helper for QUOTE(x).
-#define QUOTE_X(x) #x
-//! Used for "conversion" of \a x to quoted string
-#define QUOTE(x) QUOTE_X(x)
-
-//! Full version of TSPSG in the form: \c major.minor.release.build \c status.
-#define BUILD_VERSION QUOTE(BUILD_VERSION_MAJOR.BUILD_VERSION_MINOR.BUILD_RELEASE BUILD_STATUS)
-
-#endif // VERSION_H
