Index: trunk/i18n/ru.ts
===================================================================
--- trunk/i18n/ru.ts	(revision 30)
+++ trunk/i18n/ru.ts	(revision 31)
@@ -6,12 +6,36 @@
     <name>CTSPModel</name>
     <message>
-        <location filename="../src/tspmodel.cpp" line="52"/>
+        <location filename="../src/tspmodel.cpp" line="51"/>
         <source>City %1</source>
         <translation>Город %1</translation>
     </message>
     <message>
-        <location filename="../src/tspmodel.cpp" line="54"/>
+        <location filename="../src/tspmodel.cpp" line="53"/>
         <source>%1</source>
         <translation></translation>
+    </message>
+    <message>
+        <location filename="../src/tspmodel.cpp" line="165"/>
+        <location filename="../src/tspmodel.cpp" line="177"/>
+        <location filename="../src/tspmodel.cpp" line="203"/>
+        <source>Task Load</source>
+        <translation>Загрузка задания</translation>
+    </message>
+    <message>
+        <location filename="../src/tspmodel.cpp" line="165"/>
+        <source>Unable to load task:
+Unknown file format or file is corrupted.</source>
+        <translation>Невозможно загрузить задание:
+Неизвестный формат файла или файл поврежден.</translation>
+    </message>
+    <message>
+        <location filename="../src/tspmodel.cpp" line="177"/>
+        <location filename="../src/tspmodel.cpp" line="203"/>
+        <source>Unable to load task:
+File version is newer than application supports.
+Please, try to update application.</source>
+        <translation>Невозможно загрузить задание:
+Версия файла новее чем поддерживаемая приложением.
+Пожалуйста, попробуйте обновить приложение.</translation>
     </message>
 </context>
@@ -19,42 +43,76 @@
     <name>MainWindow</name>
     <message>
-        <location filename="../src/mainwindow.cpp" line="125"/>
-        <location filename="../src/mainwindow.cpp" line="246"/>
-        <location filename="../src/mainwindow.cpp" line="255"/>
+        <location filename="../src/mainwindow.cpp" line="124"/>
+        <location filename="../src/mainwindow.cpp" line="279"/>
+        <location filename="../src/mainwindow.cpp" line="288"/>
         <source>Language change</source>
         <translation>Смена языка</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="125"/>
+        <location filename="../src/mainwindow.cpp" line="124"/>
         <source>Unable to load translation language.</source>
         <translation>Невозможно загрузить перевод.</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="192"/>
+        <location filename="../src/mainwindow.cpp" line="159"/>
+        <source>All Supported Formats</source>
+        <translation>Все поддерживаемые форматы</translation>
+    </message>
+    <message>
+        <source>TSPSG Task Files</source>
+        <translation type="obsolete">Файлы задачи TSPSG</translation>
+    </message>
+    <message>
+        <source>ZKomModRd Task Files</source>
+        <translation type="obsolete">Файлы задачи ZKomModRd</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="162"/>
+        <location filename="../src/mainwindow.cpp" line="177"/>
+        <source>All Files</source>
+        <translation>Все файлы</translation>
+    </message>
+    <message>
+        <source>TSPSG Task File</source>
+        <translation type="obsolete">Файл задачи TSPSG</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="160"/>
+        <location filename="../src/mainwindow.cpp" line="161"/>
+        <source>%1 Task Files</source>
+        <translation>Файлы задач %1</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="176"/>
+        <source>%1 Task File</source>
+        <translation>Файл задачи %1</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="225"/>
         <source>Data error</source>
         <translation>Ошибка в данных</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="192"/>
+        <location filename="../src/mainwindow.cpp" line="225"/>
         <source>Error in cell [Row %1; Column %2]: Invalid data format.</source>
         <translation>Ошибка в ячейке [Строка %1; Колонка %2]: Неверный формат данных.</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="201"/>
+        <location filename="../src/mainwindow.cpp" line="234"/>
         <source>Solution error</source>
         <translation>Ошибка при решении</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="201"/>
+        <location filename="../src/mainwindow.cpp" line="234"/>
         <source>There was an error while solving the task.</source>
         <translation>Во время решения задачи возникла ошибка.</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="246"/>
+        <location filename="../src/mainwindow.cpp" line="279"/>
         <source>Language will be autodetected on next application start.</source>
         <translation>Язык будет автоматически определен при следующем запуске приложения.</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="255"/>
+        <location filename="../src/mainwindow.cpp" line="288"/>
         <source>You have language autodetection turned on.
 It needs to be off.
@@ -155,300 +213,319 @@
     </message>
     <message>
+        <location filename="../ui/mainwindow.ce.ui" line="558"/>
+        <location filename="../ui/mainwindow.ui" line="571"/>
+        <source>&amp;Save</source>
+        <translation>Со&amp;хранить</translation>
+    </message>
+    <message>
+        <location filename="../ui/mainwindow.ce.ui" line="283"/>
+        <location filename="../ui/mainwindow.ui" line="264"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Настройки</translation>
+    </message>
+    <message>
         <location filename="../ui/mainwindow.ce.ui" line="262"/>
         <location filename="../ui/mainwindow.ui" line="240"/>
-        <source>&amp;Save</source>
-        <translation>Со&amp;хранить</translation>
-    </message>
-    <message>
-        <location filename="../ui/mainwindow.ce.ui" line="282"/>
-        <location filename="../ui/mainwindow.ui" line="263"/>
-        <source>&amp;Settings</source>
-        <translation>&amp;Настройки</translation>
-    </message>
-    <message>
-        <location filename="../ui/mainwindow.ce.ui" line="292"/>
-        <location filename="../ui/mainwindow.ui" line="273"/>
+        <source>Save &amp;as...</source>
+        <translation>Сохранить &amp;как...</translation>
+    </message>
+    <message>
+        <location filename="../ui/mainwindow.ce.ui" line="293"/>
+        <location filename="../ui/mainwindow.ui" line="274"/>
         <source>&amp;Language</source>
         <translation>Язык / &amp;Language</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="308"/>
-        <location filename="../ui/mainwindow.ui" line="289"/>
+        <location filename="../ui/mainwindow.ce.ui" line="309"/>
+        <location filename="../ui/mainwindow.ui" line="290"/>
         <source>&amp;Help</source>
         <translation>&amp;Помощь</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="348"/>
-        <location filename="../ui/mainwindow.ui" line="361"/>
+        <location filename="../ui/mainwindow.ce.ui" line="349"/>
+        <location filename="../ui/mainwindow.ui" line="362"/>
         <source>Solution st&amp;eps</source>
         <translation>&amp;Ход решения</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="351"/>
-        <location filename="../ui/mainwindow.ui" line="364"/>
+        <location filename="../ui/mainwindow.ce.ui" line="352"/>
+        <location filename="../ui/mainwindow.ui" line="365"/>
         <source>Save solution steps</source>
         <translation>Сохранить ход решения</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="354"/>
-        <location filename="../ui/mainwindow.ui" line="367"/>
+        <location filename="../ui/mainwindow.ce.ui" line="355"/>
+        <location filename="../ui/mainwindow.ui" line="368"/>
         <source>Save solution steps only</source>
         <translation>Сохранить только ход решения</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="362"/>
-        <location filename="../ui/mainwindow.ui" line="375"/>
+        <location filename="../ui/mainwindow.ce.ui" line="363"/>
+        <location filename="../ui/mainwindow.ui" line="376"/>
         <source>Solution &amp;graph</source>
         <translation>&amp;Граф решения</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="365"/>
-        <location filename="../ui/mainwindow.ui" line="378"/>
+        <location filename="../ui/mainwindow.ce.ui" line="366"/>
+        <location filename="../ui/mainwindow.ui" line="379"/>
         <source>Save solution graph</source>
         <translation>Сохранить граф решения</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="368"/>
-        <location filename="../ui/mainwindow.ui" line="381"/>
+        <location filename="../ui/mainwindow.ce.ui" line="369"/>
+        <location filename="../ui/mainwindow.ui" line="382"/>
         <source>Save solution graph only</source>
         <translation>Сохранить только граф решения</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="376"/>
-        <location filename="../ui/mainwindow.ui" line="389"/>
+        <location filename="../ui/mainwindow.ce.ui" line="377"/>
+        <location filename="../ui/mainwindow.ui" line="390"/>
         <source>&amp;Solution</source>
         <translation>&amp;Решение</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="379"/>
-        <location filename="../ui/mainwindow.ui" line="392"/>
+        <location filename="../ui/mainwindow.ce.ui" line="380"/>
+        <location filename="../ui/mainwindow.ui" line="393"/>
         <source>Save solution</source>
         <translation>Сохранить решение</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="382"/>
-        <location filename="../ui/mainwindow.ui" line="395"/>
+        <location filename="../ui/mainwindow.ce.ui" line="383"/>
+        <location filename="../ui/mainwindow.ui" line="396"/>
         <source>Save solution steps and graph</source>
         <translation>Сохранить ход и граф решения</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="391"/>
-        <location filename="../ui/mainwindow.ui" line="404"/>
+        <location filename="../ui/mainwindow.ce.ui" line="392"/>
+        <location filename="../ui/mainwindow.ui" line="405"/>
         <source>&amp;New</source>
         <translation>&amp;Создать</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="394"/>
-        <location filename="../ui/mainwindow.ui" line="407"/>
+        <location filename="../ui/mainwindow.ce.ui" line="395"/>
+        <location filename="../ui/mainwindow.ui" line="408"/>
         <source>New</source>
         <translation>Создать</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="397"/>
-        <location filename="../ui/mainwindow.ui" line="410"/>
+        <location filename="../ui/mainwindow.ce.ui" line="398"/>
+        <location filename="../ui/mainwindow.ui" line="411"/>
         <source>New task</source>
         <translation>Создать задачу</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="400"/>
-        <location filename="../ui/mainwindow.ui" line="413"/>
+        <location filename="../ui/mainwindow.ce.ui" line="401"/>
+        <location filename="../ui/mainwindow.ui" line="414"/>
         <source>Create new task</source>
         <translation>Создать новую задачу</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="403"/>
-        <location filename="../ui/mainwindow.ui" line="416"/>
+        <location filename="../ui/mainwindow.ce.ui" line="404"/>
+        <location filename="../ui/mainwindow.ui" line="417"/>
         <source>Ctrl+N</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="415"/>
-        <location filename="../ui/mainwindow.ui" line="428"/>
+        <location filename="../ui/mainwindow.ce.ui" line="413"/>
+        <location filename="../ui/mainwindow.ui" line="426"/>
         <source>&amp;Open...</source>
         <translation>&amp;Открыть...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="418"/>
-        <location filename="../ui/mainwindow.ui" line="431"/>
+        <location filename="../ui/mainwindow.ce.ui" line="416"/>
+        <location filename="../ui/mainwindow.ui" line="429"/>
         <source>Open...</source>
         <translation>Открыть...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="421"/>
-        <location filename="../ui/mainwindow.ui" line="434"/>
+        <location filename="../ui/mainwindow.ce.ui" line="419"/>
+        <location filename="../ui/mainwindow.ui" line="432"/>
         <source>Open task</source>
         <translation>Открыть задачу</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="424"/>
-        <location filename="../ui/mainwindow.ui" line="437"/>
+        <location filename="../ui/mainwindow.ce.ui" line="422"/>
+        <location filename="../ui/mainwindow.ui" line="435"/>
         <source>Open saved task</source>
         <translation>Открыть сохраненное условие задачи</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="427"/>
-        <location filename="../ui/mainwindow.ui" line="440"/>
+        <location filename="../ui/mainwindow.ce.ui" line="425"/>
+        <location filename="../ui/mainwindow.ui" line="438"/>
         <source>Ctrl+O</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="436"/>
-        <location filename="../ui/mainwindow.ui" line="449"/>
+        <location filename="../ui/mainwindow.ce.ui" line="434"/>
+        <location filename="../ui/mainwindow.ui" line="447"/>
         <source>&amp;Preferences...</source>
         <translation>&amp;Параметры...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="439"/>
-        <location filename="../ui/mainwindow.ui" line="452"/>
+        <location filename="../ui/mainwindow.ce.ui" line="437"/>
+        <location filename="../ui/mainwindow.ui" line="450"/>
         <source>Preferences...</source>
         <translation>Параметры...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="442"/>
-        <location filename="../ui/mainwindow.ui" line="455"/>
+        <location filename="../ui/mainwindow.ce.ui" line="440"/>
+        <location filename="../ui/mainwindow.ui" line="453"/>
         <source>Application preferences</source>
         <translation>Настройка параметров программмы</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="454"/>
-        <location filename="../ui/mainwindow.ui" line="467"/>
+        <location filename="../ui/mainwindow.ce.ui" line="452"/>
+        <location filename="../ui/mainwindow.ui" line="465"/>
         <source>&amp;Contents</source>
         <translation>&amp;Содежание</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="457"/>
-        <location filename="../ui/mainwindow.ui" line="470"/>
+        <location filename="../ui/mainwindow.ce.ui" line="455"/>
+        <location filename="../ui/mainwindow.ui" line="468"/>
         <source>Open help contents</source>
         <translation>Вызвать справку программы</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="469"/>
-        <location filename="../ui/mainwindow.ui" line="482"/>
+        <location filename="../ui/mainwindow.ce.ui" line="467"/>
+        <location filename="../ui/mainwindow.ui" line="480"/>
         <source>&amp;Context help</source>
         <translation>&amp;Контекстная справка</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="472"/>
-        <location filename="../ui/mainwindow.ui" line="485"/>
+        <location filename="../ui/mainwindow.ce.ui" line="470"/>
+        <location filename="../ui/mainwindow.ui" line="483"/>
         <source>Open context help</source>
         <translation>Вызвать контекстную справку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="481"/>
-        <location filename="../ui/mainwindow.ui" line="494"/>
+        <location filename="../ui/mainwindow.ce.ui" line="479"/>
+        <location filename="../ui/mainwindow.ui" line="492"/>
         <source>&amp;About...</source>
         <translation>&amp;Про...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="484"/>
-        <location filename="../ui/mainwindow.ui" line="497"/>
+        <location filename="../ui/mainwindow.ce.ui" line="482"/>
+        <location filename="../ui/mainwindow.ui" line="495"/>
         <source>About...</source>
         <translation>Про...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="487"/>
-        <location filename="../ui/mainwindow.ui" line="500"/>
+        <location filename="../ui/mainwindow.ce.ui" line="485"/>
+        <location filename="../ui/mainwindow.ui" line="498"/>
         <source>About application</source>
         <translation>О программе</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="496"/>
-        <location filename="../ui/mainwindow.ui" line="509"/>
+        <location filename="../ui/mainwindow.ce.ui" line="494"/>
+        <location filename="../ui/mainwindow.ui" line="507"/>
         <source>E&amp;xit</source>
         <translation>В&amp;ыход</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="499"/>
-        <location filename="../ui/mainwindow.ui" line="512"/>
+        <location filename="../ui/mainwindow.ce.ui" line="497"/>
+        <location filename="../ui/mainwindow.ui" line="510"/>
         <source>Exit application</source>
         <translation>Выйти из приложения</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="511"/>
-        <location filename="../ui/mainwindow.ui" line="524"/>
+        <location filename="../ui/mainwindow.ce.ui" line="506"/>
+        <location filename="../ui/mainwindow.ui" line="519"/>
         <source>&amp;Task...</source>
         <translation>&amp;Задачу...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="514"/>
-        <location filename="../ui/mainwindow.ui" line="527"/>
+        <location filename="../ui/mainwindow.ce.ui" line="509"/>
+        <location filename="../ui/mainwindow.ui" line="522"/>
         <source>Task...</source>
         <translation>Задачу...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="517"/>
-        <location filename="../ui/mainwindow.ui" line="530"/>
+        <location filename="../ui/mainwindow.ce.ui" line="512"/>
+        <location filename="../ui/mainwindow.ce.ui" line="561"/>
+        <location filename="../ui/mainwindow.ui" line="525"/>
+        <location filename="../ui/mainwindow.ui" line="577"/>
         <source>Save task</source>
         <translation>Сохранить задачу</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="520"/>
-        <location filename="../ui/mainwindow.ui" line="533"/>
+        <location filename="../ui/mainwindow.ce.ui" line="515"/>
+        <location filename="../ui/mainwindow.ui" line="528"/>
         <source>Save task to file</source>
         <translation>Сохранить условие задачи в файл</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="523"/>
-        <location filename="../ui/mainwindow.ui" line="536"/>
+        <location filename="../ui/mainwindow.ce.ui" line="518"/>
+        <location filename="../ui/mainwindow.ui" line="531"/>
         <source>Ctrl+S</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="534"/>
-        <location filename="../ui/mainwindow.ui" line="547"/>
+        <location filename="../ui/mainwindow.ce.ui" line="529"/>
+        <location filename="../ui/mainwindow.ui" line="542"/>
         <source>&amp;Autodetect</source>
         <translation>&amp;Автоопределение</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="551"/>
+        <location filename="../ui/mainwindow.ce.ui" line="546"/>
         <source>English</source>
         <translation>Английский</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="286"/>
-        <location filename="../ui/mainwindow.ui" line="267"/>
+        <location filename="../ui/mainwindow.ce.ui" line="564"/>
+        <location filename="../ui/mainwindow.ui" line="580"/>
+        <source>Save current task</source>
+        <translation>Сохранить текущую задачу</translation>
+    </message>
+    <message>
+        <location filename="../ui/mainwindow.ce.ui" line="287"/>
+        <location filename="../ui/mainwindow.ui" line="268"/>
         <source>Select language</source>
         <translation>Выбор языка</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="289"/>
-        <location filename="../ui/mainwindow.ui" line="270"/>
+        <location filename="../ui/mainwindow.ce.ui" line="290"/>
+        <location filename="../ui/mainwindow.ui" line="271"/>
         <source>Select application language</source>
         <translation>Выбрать язык приложения</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ui" line="332"/>
+        <location filename="../ui/mainwindow.ui" line="333"/>
         <source>P&amp;rint setup...</source>
         <translation>&amp;Настройка печати...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ui" line="335"/>
+        <location filename="../ui/mainwindow.ui" line="336"/>
         <source>Setup printing</source>
         <translation>Настроить печать</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ui" line="347"/>
+        <location filename="../ui/mainwindow.ui" line="348"/>
         <source>&amp;Print...</source>
         <translation>&amp;Печать...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ui" line="350"/>
+        <location filename="../ui/mainwindow.ui" line="351"/>
         <source>Print solution results</source>
         <translation>Распечатать результаты решения</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ui" line="353"/>
+        <location filename="../ui/mainwindow.ui" line="354"/>
         <source>Ctrl+P</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="537"/>
-        <location filename="../ui/mainwindow.ui" line="550"/>
+        <location filename="../ui/mainwindow.ui" line="574"/>
+        <source>Save</source>
+        <translation>Сохранить</translation>
+    </message>
+    <message>
+        <location filename="../ui/mainwindow.ce.ui" line="532"/>
+        <location filename="../ui/mainwindow.ui" line="545"/>
         <source>Detect language automatically</source>
         <translation>Определять язык автоматически</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="540"/>
-        <location filename="../ui/mainwindow.ui" line="553"/>
+        <location filename="../ui/mainwindow.ce.ui" line="535"/>
+        <location filename="../ui/mainwindow.ui" line="548"/>
         <source>Detect language automatically based on regional settings</source>
         <translation>Определять язык автоматически, основываясь на региональных настройках</translation>
Index: trunk/i18n/uk.ts
===================================================================
--- trunk/i18n/uk.ts	(revision 30)
+++ trunk/i18n/uk.ts	(revision 31)
@@ -6,12 +6,36 @@
     <name>CTSPModel</name>
     <message>
-        <location filename="../src/tspmodel.cpp" line="52"/>
+        <location filename="../src/tspmodel.cpp" line="51"/>
         <source>City %1</source>
         <translation>Місто %1</translation>
     </message>
     <message>
-        <location filename="../src/tspmodel.cpp" line="54"/>
+        <location filename="../src/tspmodel.cpp" line="53"/>
         <source>%1</source>
         <translation></translation>
+    </message>
+    <message>
+        <location filename="../src/tspmodel.cpp" line="165"/>
+        <location filename="../src/tspmodel.cpp" line="177"/>
+        <location filename="../src/tspmodel.cpp" line="203"/>
+        <source>Task Load</source>
+        <translation>Завантаження завдання</translation>
+    </message>
+    <message>
+        <location filename="../src/tspmodel.cpp" line="165"/>
+        <source>Unable to load task:
+Unknown file format or file is corrupted.</source>
+        <translation>Неможливо завантажити завдання:
+Невідомий формат файлу або файл пошкоджено.</translation>
+    </message>
+    <message>
+        <location filename="../src/tspmodel.cpp" line="177"/>
+        <location filename="../src/tspmodel.cpp" line="203"/>
+        <source>Unable to load task:
+File version is newer than application supports.
+Please, try to update application.</source>
+        <translation>Неможливо завантажити завдання:
+Версія файлу новіша ніж підримувана додатком.
+Будь-ласка, спробуйте оновити додаток.</translation>
     </message>
 </context>
@@ -31,61 +55,66 @@
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="286"/>
-        <location filename="../ui/mainwindow.ui" line="267"/>
+        <location filename="../ui/mainwindow.ce.ui" line="287"/>
+        <location filename="../ui/mainwindow.ui" line="268"/>
         <source>Select language</source>
         <translation>Вибір мови</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="289"/>
-        <location filename="../ui/mainwindow.ui" line="270"/>
+        <location filename="../ui/mainwindow.ce.ui" line="290"/>
+        <location filename="../ui/mainwindow.ui" line="271"/>
         <source>Select application language</source>
         <translation>Обрати мову додатку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ui" line="332"/>
+        <location filename="../ui/mainwindow.ui" line="333"/>
         <source>P&amp;rint setup...</source>
         <translation>&amp;Налагодження друку...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ui" line="335"/>
+        <location filename="../ui/mainwindow.ui" line="336"/>
         <source>Setup printing</source>
         <translation>Налагодити друк</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ui" line="347"/>
+        <location filename="../ui/mainwindow.ui" line="348"/>
         <source>&amp;Print...</source>
         <translation>&amp;Друк...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ui" line="350"/>
+        <location filename="../ui/mainwindow.ui" line="351"/>
         <source>Print solution results</source>
         <translation>Роздрукувати результат розв&apos;язку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ui" line="353"/>
+        <location filename="../ui/mainwindow.ui" line="354"/>
         <source>Ctrl+P</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="537"/>
-        <location filename="../ui/mainwindow.ui" line="550"/>
+        <location filename="../ui/mainwindow.ui" line="574"/>
+        <source>Save</source>
+        <translation>Зберегти</translation>
+    </message>
+    <message>
+        <location filename="../ui/mainwindow.ce.ui" line="532"/>
+        <location filename="../ui/mainwindow.ui" line="545"/>
         <source>Detect language automatically</source>
         <translation>Визначати мову автоматично</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="540"/>
-        <location filename="../ui/mainwindow.ui" line="553"/>
+        <location filename="../ui/mainwindow.ce.ui" line="535"/>
+        <location filename="../ui/mainwindow.ui" line="548"/>
         <source>Detect language automatically based on regional settings</source>
-        <translation type="unfinished">Визначати мову автоматично, використовуючи регіональні стандарти</translation>
-    </message>
-    <message>
-        <location filename="../ui/mainwindow.ce.ui" line="523"/>
-        <location filename="../ui/mainwindow.ui" line="536"/>
+        <translation>Визначати мову автоматично, використовуючи регіональні стандарти</translation>
+    </message>
+    <message>
+        <location filename="../ui/mainwindow.ce.ui" line="518"/>
+        <location filename="../ui/mainwindow.ui" line="531"/>
         <source>Ctrl+S</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="403"/>
-        <location filename="../ui/mainwindow.ui" line="416"/>
+        <location filename="../ui/mainwindow.ce.ui" line="404"/>
+        <location filename="../ui/mainwindow.ui" line="417"/>
         <source>Ctrl+N</source>
         <translation></translation>
@@ -170,281 +199,329 @@
     </message>
     <message>
+        <location filename="../ui/mainwindow.ce.ui" line="558"/>
+        <location filename="../ui/mainwindow.ui" line="571"/>
+        <source>&amp;Save</source>
+        <translation>&amp;Зберегти</translation>
+    </message>
+    <message>
+        <location filename="../ui/mainwindow.ce.ui" line="283"/>
+        <location filename="../ui/mainwindow.ui" line="264"/>
+        <source>&amp;Settings</source>
+        <translation>&amp;Налагодження</translation>
+    </message>
+    <message>
         <location filename="../ui/mainwindow.ce.ui" line="262"/>
         <location filename="../ui/mainwindow.ui" line="240"/>
-        <source>&amp;Save</source>
-        <translation>&amp;Зберегти</translation>
-    </message>
-    <message>
-        <location filename="../ui/mainwindow.ce.ui" line="282"/>
-        <location filename="../ui/mainwindow.ui" line="263"/>
-        <source>&amp;Settings</source>
-        <translation>&amp;Налагодження</translation>
-    </message>
-    <message>
-        <location filename="../ui/mainwindow.ce.ui" line="292"/>
-        <location filename="../ui/mainwindow.ui" line="273"/>
+        <source>Save &amp;as...</source>
+        <translation>Зберегти &amp;як...</translation>
+    </message>
+    <message>
+        <location filename="../ui/mainwindow.ce.ui" line="293"/>
+        <location filename="../ui/mainwindow.ui" line="274"/>
         <source>&amp;Language</source>
         <translation>Мова / &amp;Language</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="308"/>
-        <location filename="../ui/mainwindow.ui" line="289"/>
+        <location filename="../ui/mainwindow.ce.ui" line="309"/>
+        <location filename="../ui/mainwindow.ui" line="290"/>
         <source>&amp;Help</source>
         <translation>&amp;Допомога</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="348"/>
-        <location filename="../ui/mainwindow.ui" line="361"/>
+        <location filename="../ui/mainwindow.ce.ui" line="349"/>
+        <location filename="../ui/mainwindow.ui" line="362"/>
         <source>Solution st&amp;eps</source>
         <translation>&amp;Хід розв&apos;язку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="351"/>
-        <location filename="../ui/mainwindow.ui" line="364"/>
+        <location filename="../ui/mainwindow.ce.ui" line="352"/>
+        <location filename="../ui/mainwindow.ui" line="365"/>
         <source>Save solution steps</source>
         <translation>Зберегти хід розв&apos;язку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="354"/>
-        <location filename="../ui/mainwindow.ui" line="367"/>
+        <location filename="../ui/mainwindow.ce.ui" line="355"/>
+        <location filename="../ui/mainwindow.ui" line="368"/>
         <source>Save solution steps only</source>
         <translation>Зберегти тільки хід розв&apos;язку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="362"/>
-        <location filename="../ui/mainwindow.ui" line="375"/>
+        <location filename="../ui/mainwindow.ce.ui" line="363"/>
+        <location filename="../ui/mainwindow.ui" line="376"/>
         <source>Solution &amp;graph</source>
         <translation>&amp;Граф розв&apos;язку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="365"/>
-        <location filename="../ui/mainwindow.ui" line="378"/>
+        <location filename="../ui/mainwindow.ce.ui" line="366"/>
+        <location filename="../ui/mainwindow.ui" line="379"/>
         <source>Save solution graph</source>
         <translation>Зберегти граф розв&apos;язку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="368"/>
-        <location filename="../ui/mainwindow.ui" line="381"/>
+        <location filename="../ui/mainwindow.ce.ui" line="369"/>
+        <location filename="../ui/mainwindow.ui" line="382"/>
         <source>Save solution graph only</source>
         <translation>Зберегти тільки граф розв&apos;язку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="376"/>
-        <location filename="../ui/mainwindow.ui" line="389"/>
+        <location filename="../ui/mainwindow.ce.ui" line="377"/>
+        <location filename="../ui/mainwindow.ui" line="390"/>
         <source>&amp;Solution</source>
         <translation>&amp;Розв&apos;язок</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="379"/>
-        <location filename="../ui/mainwindow.ui" line="392"/>
+        <location filename="../ui/mainwindow.ce.ui" line="380"/>
+        <location filename="../ui/mainwindow.ui" line="393"/>
         <source>Save solution</source>
         <translation>Зберегти розв&apos;язок</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="382"/>
-        <location filename="../ui/mainwindow.ui" line="395"/>
+        <location filename="../ui/mainwindow.ce.ui" line="383"/>
+        <location filename="../ui/mainwindow.ui" line="396"/>
         <source>Save solution steps and graph</source>
         <translation>Зберегти хід та граф розв&apos;язку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="391"/>
-        <location filename="../ui/mainwindow.ui" line="404"/>
+        <location filename="../ui/mainwindow.ce.ui" line="392"/>
+        <location filename="../ui/mainwindow.ui" line="405"/>
         <source>&amp;New</source>
         <translation>&amp;Створити</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="394"/>
-        <location filename="../ui/mainwindow.ui" line="407"/>
+        <location filename="../ui/mainwindow.ce.ui" line="395"/>
+        <location filename="../ui/mainwindow.ui" line="408"/>
         <source>New</source>
         <translation>Створити</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="397"/>
-        <location filename="../ui/mainwindow.ui" line="410"/>
+        <location filename="../ui/mainwindow.ce.ui" line="398"/>
+        <location filename="../ui/mainwindow.ui" line="411"/>
         <source>New task</source>
         <translation>Нове завдання</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="400"/>
-        <location filename="../ui/mainwindow.ui" line="413"/>
+        <location filename="../ui/mainwindow.ce.ui" line="401"/>
+        <location filename="../ui/mainwindow.ui" line="414"/>
         <source>Create new task</source>
         <translation>Створити нове завдання</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="415"/>
-        <location filename="../ui/mainwindow.ui" line="428"/>
+        <location filename="../ui/mainwindow.ce.ui" line="413"/>
+        <location filename="../ui/mainwindow.ui" line="426"/>
         <source>&amp;Open...</source>
         <translation>&amp;Відкрити...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="418"/>
-        <location filename="../ui/mainwindow.ui" line="431"/>
+        <location filename="../ui/mainwindow.ce.ui" line="416"/>
+        <location filename="../ui/mainwindow.ui" line="429"/>
         <source>Open...</source>
         <translation>Відкрити...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="421"/>
-        <location filename="../ui/mainwindow.ui" line="434"/>
+        <location filename="../ui/mainwindow.ce.ui" line="419"/>
+        <location filename="../ui/mainwindow.ui" line="432"/>
         <source>Open task</source>
         <translation>Відкрити завдання</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="424"/>
-        <location filename="../ui/mainwindow.ui" line="437"/>
+        <location filename="../ui/mainwindow.ce.ui" line="422"/>
+        <location filename="../ui/mainwindow.ui" line="435"/>
         <source>Open saved task</source>
         <translation>Відкрити збережене завдання</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="427"/>
-        <location filename="../ui/mainwindow.ui" line="440"/>
+        <location filename="../ui/mainwindow.ce.ui" line="425"/>
+        <location filename="../ui/mainwindow.ui" line="438"/>
         <source>Ctrl+O</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="436"/>
-        <location filename="../ui/mainwindow.ui" line="449"/>
+        <location filename="../ui/mainwindow.ce.ui" line="434"/>
+        <location filename="../ui/mainwindow.ui" line="447"/>
         <source>&amp;Preferences...</source>
         <translation>&amp;Параметри...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="439"/>
-        <location filename="../ui/mainwindow.ui" line="452"/>
+        <location filename="../ui/mainwindow.ce.ui" line="437"/>
+        <location filename="../ui/mainwindow.ui" line="450"/>
         <source>Preferences...</source>
         <translation>Параметри...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="442"/>
-        <location filename="../ui/mainwindow.ui" line="455"/>
+        <location filename="../ui/mainwindow.ce.ui" line="440"/>
+        <location filename="../ui/mainwindow.ui" line="453"/>
         <source>Application preferences</source>
         <translation>Параметри додатку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="454"/>
-        <location filename="../ui/mainwindow.ui" line="467"/>
+        <location filename="../ui/mainwindow.ce.ui" line="452"/>
+        <location filename="../ui/mainwindow.ui" line="465"/>
         <source>&amp;Contents</source>
         <translation>&amp;Зміст</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="457"/>
-        <location filename="../ui/mainwindow.ui" line="470"/>
+        <location filename="../ui/mainwindow.ce.ui" line="455"/>
+        <location filename="../ui/mainwindow.ui" line="468"/>
         <source>Open help contents</source>
         <translation>Відкрити зміст допомоги</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="469"/>
-        <location filename="../ui/mainwindow.ui" line="482"/>
+        <location filename="../ui/mainwindow.ce.ui" line="467"/>
+        <location filename="../ui/mainwindow.ui" line="480"/>
         <source>&amp;Context help</source>
         <translation>&amp;Контекстна допомога</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="472"/>
-        <location filename="../ui/mainwindow.ui" line="485"/>
+        <location filename="../ui/mainwindow.ce.ui" line="470"/>
+        <location filename="../ui/mainwindow.ui" line="483"/>
         <source>Open context help</source>
         <translation>Відкрити контекстну допомогу</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="481"/>
-        <location filename="../ui/mainwindow.ui" line="494"/>
+        <location filename="../ui/mainwindow.ce.ui" line="479"/>
+        <location filename="../ui/mainwindow.ui" line="492"/>
         <source>&amp;About...</source>
         <translation>&amp;Про...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="484"/>
-        <location filename="../ui/mainwindow.ui" line="497"/>
+        <location filename="../ui/mainwindow.ce.ui" line="482"/>
+        <location filename="../ui/mainwindow.ui" line="495"/>
         <source>About...</source>
         <translation>Про...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="487"/>
-        <location filename="../ui/mainwindow.ui" line="500"/>
+        <location filename="../ui/mainwindow.ce.ui" line="485"/>
+        <location filename="../ui/mainwindow.ui" line="498"/>
         <source>About application</source>
         <translation>Про додаток</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="496"/>
-        <location filename="../ui/mainwindow.ui" line="509"/>
+        <location filename="../ui/mainwindow.ce.ui" line="494"/>
+        <location filename="../ui/mainwindow.ui" line="507"/>
         <source>E&amp;xit</source>
         <translation>В&amp;ихід</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="499"/>
-        <location filename="../ui/mainwindow.ui" line="512"/>
+        <location filename="../ui/mainwindow.ce.ui" line="497"/>
+        <location filename="../ui/mainwindow.ui" line="510"/>
         <source>Exit application</source>
         <translation>Вийти з додатку</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="511"/>
-        <location filename="../ui/mainwindow.ui" line="524"/>
+        <location filename="../ui/mainwindow.ce.ui" line="506"/>
+        <location filename="../ui/mainwindow.ui" line="519"/>
         <source>&amp;Task...</source>
         <translation>&amp;Завдання...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="514"/>
-        <location filename="../ui/mainwindow.ui" line="527"/>
+        <location filename="../ui/mainwindow.ce.ui" line="509"/>
+        <location filename="../ui/mainwindow.ui" line="522"/>
         <source>Task...</source>
         <translation>Завдання...</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="517"/>
-        <location filename="../ui/mainwindow.ui" line="530"/>
+        <location filename="../ui/mainwindow.ce.ui" line="512"/>
+        <location filename="../ui/mainwindow.ce.ui" line="561"/>
+        <location filename="../ui/mainwindow.ui" line="525"/>
+        <location filename="../ui/mainwindow.ui" line="577"/>
         <source>Save task</source>
         <translation>Зберегти завдання</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="520"/>
-        <location filename="../ui/mainwindow.ui" line="533"/>
+        <location filename="../ui/mainwindow.ce.ui" line="515"/>
+        <location filename="../ui/mainwindow.ui" line="528"/>
         <source>Save task to file</source>
         <translation>Зберегти завдання до файлу</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="534"/>
-        <location filename="../ui/mainwindow.ui" line="547"/>
+        <location filename="../ui/mainwindow.ce.ui" line="529"/>
+        <location filename="../ui/mainwindow.ui" line="542"/>
         <source>&amp;Autodetect</source>
         <translation>&amp;Автовизначення</translation>
     </message>
     <message>
-        <location filename="../ui/mainwindow.ce.ui" line="551"/>
+        <location filename="../ui/mainwindow.ce.ui" line="546"/>
         <source>English</source>
         <translation>Англійська</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="125"/>
-        <location filename="../src/mainwindow.cpp" line="246"/>
-        <location filename="../src/mainwindow.cpp" line="255"/>
+        <location filename="../ui/mainwindow.ce.ui" line="564"/>
+        <location filename="../ui/mainwindow.ui" line="580"/>
+        <source>Save current task</source>
+        <translation>Зберегти поточне завдання</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="124"/>
+        <location filename="../src/mainwindow.cpp" line="279"/>
+        <location filename="../src/mainwindow.cpp" line="288"/>
         <source>Language change</source>
         <translation>Зміна мови</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="125"/>
+        <location filename="../src/mainwindow.cpp" line="124"/>
         <source>Unable to load translation language.</source>
         <translation>Неможливо завантажити переклад.</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="192"/>
+        <location filename="../src/mainwindow.cpp" line="159"/>
+        <source>All Supported Formats</source>
+        <translation>Усі підтримувані формати</translation>
+    </message>
+    <message>
+        <source>TSPSG Task Files</source>
+        <translation type="obsolete">Файли завдання TSPSG</translation>
+    </message>
+    <message>
+        <source>ZKomModRd Task Files</source>
+        <translation type="obsolete">Файли завдання ZKomModRd</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="162"/>
+        <location filename="../src/mainwindow.cpp" line="177"/>
+        <source>All Files</source>
+        <translation>Усі файли</translation>
+    </message>
+    <message>
+        <source>TSPSG Task File</source>
+        <translation type="obsolete">Файл завдання TSPSG</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="160"/>
+        <location filename="../src/mainwindow.cpp" line="161"/>
+        <source>%1 Task Files</source>
+        <translation>Файли завдань %1</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="176"/>
+        <source>%1 Task File</source>
+        <translation>Файл завдання %1</translation>
+    </message>
+    <message>
+        <location filename="../src/mainwindow.cpp" line="225"/>
         <source>Data error</source>
         <translation>Помилка даних</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="192"/>
+        <location filename="../src/mainwindow.cpp" line="225"/>
         <source>Error in cell [Row %1; Column %2]: Invalid data format.</source>
         <translation>Помилка у комірці  [Рядок %1; Колонка %2]: Невірний формат даних.</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="201"/>
+        <location filename="../src/mainwindow.cpp" line="234"/>
         <source>Solution error</source>
         <translation>Помилка розв&apos;язку</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="201"/>
+        <location filename="../src/mainwindow.cpp" line="234"/>
         <source>There was an error while solving the task.</source>
         <translation>Під час розв&apos;язання задачі виникла помилка.</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="246"/>
+        <location filename="../src/mainwindow.cpp" line="279"/>
         <source>Language will be autodetected on next application start.</source>
         <translation>Мову буде автоматично визначено при наступному запуску додатку.</translation>
     </message>
     <message>
-        <location filename="../src/mainwindow.cpp" line="255"/>
+        <location filename="../src/mainwindow.cpp" line="288"/>
         <source>You have language autodetection turned on.
 It needs to be off.
Index: trunk/src/defines.h
===================================================================
--- trunk/src/defines.h	(revision 30)
+++ 	(revision )
@@ -1,47 +1,0 @@
-/*
- *  TSPSG - TSP Solver and Generator
- *  Copyright (C) 2007-2009 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/>.
- */
-
-#ifndef DEFINES_H
-#define DEFINES_H
-
-// Default values
-#define DEF_RAND_MIN 1
-#define DEF_RAND_MAX 10
-#define DEF_OFFSET 100
-#define DEF_FONT_FAMILY "Courier New"
-#define DEF_FONT_SIZE 12
-#define DEF_FONT_COLOR Qt::black
-
-// Decided, that static array with 100 of cities maximum hard limit
-// will be enough for most cases, but the code will be simplier than
-// when using dynamic lists. If you need more, just change this value
-// and recompile the program ;-)
-#define MAX_CITIES 100
-// This value means infinity :-)
-#ifndef INFINITY
-	#define INFINITY 1.7E+308
-#endif
-// This is string, which represents infinite value in table
-#define INFSTR "-----"
-
-#endif // DEFINES_H
Index: trunk/src/globals.h
===================================================================
--- trunk/src/globals.h	(revision 31)
+++ trunk/src/globals.h	(revision 31)
@@ -0,0 +1,68 @@
+/*
+ *  TSPSG - TSP Solver and Generator
+ *  Copyright (C) 2007-2009 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/>.
+ */
+
+#ifndef GLOBALS_H
+#define GLOBALS_H
+
+// INCLUDES
+#include <QtCore>
+#include <QtGui>
+
+// OS detection
+#include "os.h"
+
+// DEFINES
+// Default values
+#define DEF_RAND_MIN 1
+#define DEF_RAND_MAX 10
+#define DEF_OFFSET 100
+#define DEF_FONT_FAMILY "Courier New"
+#define DEF_FONT_SIZE 12
+#define DEF_FONT_COLOR Qt::black
+
+// TSPSG Task file signature - letters 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 ZK
+#define ZKT quint16(0x5A4B)
+// ZKomModRd Task file version
+#define ZKT_VERSION quint8(1)
+
+// Decided, that static array with 100 of cities maximum hard limit
+// will be enough for most cases, but the code will be simplier than
+// when using dynamic lists. If you need more, just change this value
+// and recompile the program ;-)
+#define MAX_CITIES 100
+// This value means infinity :-)
+#ifndef INFINITY
+	#define INFINITY 1.7E+308
+#endif
+// This is string, which represents infinite value in table
+#define INFSTR "-----"
+
+#endif // GLOBALS_H
Index: trunk/src/main.cpp
===================================================================
--- trunk/src/main.cpp	(revision 30)
+++ trunk/src/main.cpp	(revision 31)
@@ -22,7 +22,4 @@
  */
 
-#include <QApplication>
-#include <QTranslator>
-#include <QMessageBox>
 #include "mainwindow.h"
 
Index: trunk/src/mainwindow.cpp
===================================================================
--- trunk/src/mainwindow.cpp	(revision 30)
+++ trunk/src/mainwindow.cpp	(revision 31)
@@ -22,8 +22,4 @@
  */
 
-#include <QtGui>
-#ifndef Q_OS_WINCE
-	#include <QPrintDialog>
-#endif // Q_OS_WINCE
 #include "mainwindow.h"
 
@@ -44,4 +40,6 @@
 	actionSettingsLanguageAutodetect->setChecked(settings->value("Language","").toString().isEmpty());
 	connect(actionFileNew,SIGNAL(triggered()),this,SLOT(actionFileNewTriggered()));
+	connect(actionFileOpen,SIGNAL(triggered()),this,SLOT(actionFileOpenTriggered()));
+	connect(actionFileSaveTask,SIGNAL(triggered()),this,SLOT(actionFileSaveTaskTriggered()));
 	connect(actionSettingsPreferences,SIGNAL(triggered()),this,SLOT(actionSettingsPreferencesTriggered()));
 	connect(actionSettingsLanguageAutodetect,SIGNAL(triggered(bool)),this,SLOT(actionSettingsLanguageAutodetectTriggered(bool)));
@@ -79,4 +77,5 @@
 	tspmodel->setNumCities(spinCities->value());
 	taskView->setModel(tspmodel);
+	connect(tspmodel,SIGNAL(numCitiesChanged(int)),this,SLOT(numCitiesChanged(int)));
 #ifdef Q_OS_WINCE
 	taskView->resizeColumnsToContents();
@@ -153,4 +152,38 @@
 }
 
+void MainWindow::actionFileOpenTriggered()
+{
+QFileDialog od(this);
+	od.setAcceptMode(QFileDialog::AcceptOpen);
+	od.setFileMode(QFileDialog::ExistingFile);
+QStringList filters(trUtf8("All Supported Formats") + " (*.tspt *.zkt)");
+	filters.append(QString(trUtf8("%1 Task Files")).arg("TSPSG") + " (*.tspt)");
+	filters.append(QString(trUtf8("%1 Task Files")).arg("ZKomModRd") + " (*.zkt)");
+	filters.append(trUtf8("All Files") + " (*)");
+	od.setNameFilters(filters);
+	if (od.exec() != QDialog::Accepted)
+		return;
+QStringList files = od.selectedFiles();
+	if (files.size() < 1)
+		return;
+	tspmodel->loadTask(files.first());
+}
+
+void MainWindow::actionFileSaveTaskTriggered()
+{
+QFileDialog sd(this);
+	sd.setAcceptMode(QFileDialog::AcceptSave);
+QStringList filters(QString(trUtf8("%1 Task File")).arg("TSPSG") + " (*.tspt)");
+	filters.append(trUtf8("All Files") + " (*)");
+	sd.setNameFilters(filters);
+	sd.setDefaultSuffix("tspt");
+	if (sd.exec() != QDialog::Accepted)
+		return;
+QStringList files = sd.selectedFiles();
+	if (files.size() < 1)
+		return;
+	tspmodel->saveTask(files.first());
+}
+
 void MainWindow::actionSettingsPreferencesTriggered()
 {
@@ -209,4 +242,5 @@
 about += QString::fromUtf8("    Copyright (C) 2007-%1 Lёppa <contacts[at]oleksii[dot]name>\n").arg(QDate::currentDate().toString("yyyy"));
 	about += "Qt library versions:\n";
+	about += QString::fromUtf8("    OS: %1\n").arg(OS);
 	about += QString::fromUtf8("    Compile time: %1\n").arg(QT_VERSION_STR);
 	about += QString::fromUtf8("    Runtime: %1\n").arg(qVersion());
@@ -281,2 +315,7 @@
 	QMainWindow::closeEvent(event);
 }
+
+void MainWindow::numCitiesChanged(int nCities)
+{
+	spinCities->setValue(nCities);
+}
Index: trunk/src/mainwindow.h
===================================================================
--- trunk/src/mainwindow.h	(revision 30)
+++ trunk/src/mainwindow.h	(revision 31)
@@ -25,6 +25,5 @@
 #define MAINWINDOW_H
 
-#include <QMainWindow>
-#include <QSettings>
+#include "globals.h"
 #ifdef Q_OS_WINCE
 	#include "ui_mainwindow.ce.h"
@@ -41,10 +40,12 @@
 public:
 	MainWindow(QWidget *parent = 0);
-	void closeEvent(QCloseEvent *event);
+	void closeEvent(QCloseEvent *);
 private slots:
 	void actionFileNewTriggered();
+	void actionFileOpenTriggered();
+	void actionFileSaveTaskTriggered();
 	void actionSettingsPreferencesTriggered();
-	void actionSettingsLanguageAutodetectTriggered(bool checked);
-	void groupSettingsLanguageListTriggered(QAction *action);
+	void actionSettingsLanguageAutodetectTriggered(bool);
+	void groupSettingsLanguageListTriggered(QAction *);
 	void actionHelpAboutTriggered();
 #ifndef Q_OS_WINCE
@@ -53,5 +54,6 @@
 	void buttonSolveClicked();
 	void buttonRandomClicked();
-	void spinCitiesValueChanged(int n);
+	void spinCitiesValueChanged(int);
+	void numCitiesChanged(int);
 private:
 	QSettings *settings;
Index: trunk/src/os.h
===================================================================
--- trunk/src/os.h	(revision 31)
+++ trunk/src/os.h	(revision 31)
@@ -0,0 +1,119 @@
+/*
+ *  TSPSG - TSP Solver and Generator
+ *  Copyright (C) 2007-2009 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/>.
+ */
+
+#ifndef OS_H
+#define OS_H
+
+#ifdef Q_OS_AIX
+	#define OS "AIX"
+	#define OSID quint8(1)
+#elif defined Q_OS_BSD4
+	#define OS "BSD 4.4"
+	#define OSID quint8(2)
+#elif defined Q_OS_BSDI
+	#define OS "BSD/OS"
+	#define OSID quint8(3)
+#elif defined Q_OS_CYGWIN
+	#define OS "Cygwin"
+	#define OSID quint8(4)
+#elif defined Q_OS_DARWIN
+	#define OS "Darwin OS"
+	#define OSID quint8(5)
+#elif defined Q_OS_DGUX
+	#define OS "DG/UX"
+	#define OSID quint8(6)
+#elif defined Q_OS_DYNIX
+	#define OS "DYNIX/ptx"
+	#define OSID quint8(7)
+#elif defined Q_OS_FREEBSD
+	#define OS "FreeBSD"
+	#define OSID quint8(8)
+#elif defined Q_OS_HPUX
+	#define OS "HP-UX"
+	#define OSID quint8(9)
+#elif defined Q_OS_HURD
+	#define OS "GNU Hurd"
+	#define OSID quint8(10)
+#elif defined Q_OS_IRIX
+	#define OS "SGI Irix"
+	#define OSID quint8(11)
+#elif defined Q_OS_LINUX
+	#define OS "Linux"
+	#define OSID quint8(12)
+#elif defined Q_OS_LYNX
+	#define OS "LynxOS"
+	#define OSID quint8(13)
+#elif defined Q_OS_MSDOS
+	#define OS "MS-DOS"
+	#define OSID quint8(14)
+#elif defined Q_OS_NETBSD
+	#define OS "NetBSD"
+	#define OSID quint8(15)
+#elif defined Q_OS_OS2
+	#define OS "OS/2"
+	#define OSID quint8(16)
+#elif defined Q_OS_OPENBSD
+	#define OS "OpenBSD"
+	#define OSID quint8(17)
+#elif defined Q_OS_OS2EMX
+	#define OS "OS/2"
+	#define OSID quint8(18)
+#elif defined Q_OS_OSF
+	#define OS "HP Tru64 UNIX"
+	#define OSID quint8(19)
+#elif defined Q_OS_QNX6
+	#define OS "QNX RTP 6.1"
+	#define OSID quint8(20)
+#elif defined Q_OS_QNX
+	#define OS "QNX"
+	#define OSID quint8(21)
+#elif defined Q_OS_RELIANT
+	#define OS "Reliant UNIX"
+	#define OSID quint8(22)
+#elif defined Q_OS_SCO
+	#define OS "SCO OpenServer 5"
+	#define OSID quint8(23)
+#elif defined Q_OS_SOLARIS
+	#define OS "Sun Solaris"
+	#define OSID quint8(24)
+#elif defined Q_OS_ULTRIX
+	#define OS "DEC Ultrix"
+	#define OSID quint8(25)
+#elif defined Q_OS_UNIX
+	#define OS "UNIX BSD/SYSV"
+	#define OSID quint8(26)
+#elif defined Q_OS_UNIXWARE
+	#define OS "UnixWare 7/Open UNIX 8"
+	#define OSID quint8(27)
+#elif defined Q_OS_WIN32
+	#define OS "Windows"
+	#define OSID quint8(28)
+#elif defined Q_OS_WINCE
+	#define OS "Windows CE"
+	#define OSID quint8(29)
+#else
+	#define OS "Unknown"
+	#define OSID quint8(255)
+#endif
+
+#endif // OS_H
Index: trunk/src/settingsdialog.cpp
===================================================================
--- trunk/src/settingsdialog.cpp	(revision 30)
+++ trunk/src/settingsdialog.cpp	(revision 31)
@@ -22,9 +22,4 @@
  */
 
-#include <QMessageBox>
-#include <QStatusTipEvent>
-#include <QFontDialog>
-#include <QColorDialog>
-#include "defines.h"
 #include "settingsdialog.h"
 
Index: trunk/src/settingsdialog.h
===================================================================
--- trunk/src/settingsdialog.h	(revision 30)
+++ trunk/src/settingsdialog.h	(revision 31)
@@ -25,6 +25,5 @@
 #define SETTINGSDIALOG_H
 
-#include <QDialog>
-#include <QSettings>
+#include "globals.h"
 #ifdef Q_OS_WINCE
 	#include "ui_settingsdialog.ce.h"
Index: trunk/src/tspmodel.cpp
===================================================================
--- trunk/src/tspmodel.cpp	(revision 30)
+++ trunk/src/tspmodel.cpp	(revision 31)
@@ -22,5 +22,4 @@
  */
 
-#include <QtGui>
 #include "tspmodel.h"
 
@@ -109,5 +108,5 @@
 }
 
-int CTSPModel::numCities() const
+quint16 CTSPModel::numCities() const
 {
 	return nCities;
@@ -116,6 +115,6 @@
 void CTSPModel::setNumCities(int n)
 {
-int randMin = settings->value("MinCost",DEF_RAND_MIN).toInt();
-int randMax = settings->value("MaxCost",DEF_RAND_MAX).toInt();
+// int randMin = settings->value("MinCost",DEF_RAND_MIN).toInt();
+// int randMax = settings->value("MaxCost",DEF_RAND_MAX).toInt();
 	if (n == nCities)
 		return;
@@ -127,5 +126,5 @@
 					table[r][c] = INFINITY;
 				else
-					table[r][c] = rand(randMin,randMax);
+					table[r][c] = 0; // rand(randMin,randMax);
 		}
 		for (int r = nCities; r < n; r++) {
@@ -134,5 +133,5 @@
 					table[r][c] = INFINITY;
 				else
-					table[r][c] = rand(randMin,randMax);
+					table[r][c] = 0; // rand(randMin,randMax);
 		}
 	}
@@ -148,4 +147,100 @@
 				table[r][c] = 0;
 	emit dataChanged(index(0,0),index(nCities - 1,nCities - 1));
+}
+
+void CTSPModel::loadTask(QString fname)
+{
+QFile f(fname);
+	f.open(QIODevice::ReadOnly);
+QDataStream ds(&f);
+	ds.setVersion(QDataStream::Qt_4_4);
+quint32 sig;
+	ds >> sig;
+	ds.device()->reset();
+	if (sig == TSPT)
+		loadTSPT(&ds);
+	else if ((sig >> 16) == ZKT)
+		loadZKT(&ds);
+	else
+		QMessageBox(QMessageBox::Critical,trUtf8("Task Load"),trUtf8("Unable to load task:\nUnknown file format or file is corrupted."),QMessageBox::Ok).exec();
+	f.close();
+}
+
+void CTSPModel::loadTSPT(QDataStream *ds)
+{
+	// Skipping signature
+	ds->skipRawData(sizeof(TSPT));
+	// File version
+quint8 version;
+	*ds >> version;
+	if (version > TSPT_VERSION) {
+		QMessageBox(QMessageBox::Critical,trUtf8("Task Load"),trUtf8("Unable to load task:\nFile version is newer than application supports.\nPlease, try to update application."),QMessageBox::Ok).exec();
+		return;
+	}
+	// Skipping metadata
+	ds->skipRawData(TSPT_META_SIZE);
+	// Cities number
+quint16 size;
+	*ds >> size;
+	if (nCities != size)
+		emit numCitiesChanged(size);
+	// Costs
+	for (int r = 0; r < size; r++)
+		for (int c = 0; c < size; c++)
+			if (r != c)
+				*ds >> table[r][c];
+	emit dataChanged(index(0,0),index(nCities - 1,nCities - 1));
+}
+
+void CTSPModel::loadZKT(QDataStream *ds)
+{
+	// Skipping signature
+	ds->skipRawData(sizeof(ZKT));
+	// File version
+quint16 version;
+	ds->readRawData(reinterpret_cast<char *>(&version),2);
+	if (version > ZKT_VERSION) {
+		QMessageBox(QMessageBox::Critical,trUtf8("Task Load"),trUtf8("Unable to load task:\nFile version is newer than application supports.\nPlease, try to update application."),QMessageBox::Ok).exec();
+		return;
+	}
+	// Cities number
+quint8 size;
+	ds->readRawData(reinterpret_cast<char *>(&size),1);
+	if (nCities != size)
+		emit numCitiesChanged(size);
+	// Costs
+double val;
+	for (int r = 0; r < size; r++)
+		for (int c = 0; c < size; c++)
+			if (r != c) {
+				ds->readRawData(reinterpret_cast<char *>(&val),8);
+				table[r][c] = val;
+			} else
+				ds->skipRawData(8);
+	emit dataChanged(index(0,0),index(nCities - 1,nCities - 1));
+}
+
+void CTSPModel::saveTask(QString fname)
+{
+QFile f(fname);
+	f.open(QIODevice::WriteOnly);
+QDataStream ds(&f);
+	ds.setVersion(QDataStream::Qt_4_4);
+	// File signature
+	ds << TSPT;
+	// File version
+	ds << TSPT_VERSION;
+	// File metadata version
+	ds << TSPT_META_VERSION;
+	// Metadata
+	ds << OSID;
+	// Number of cities
+	ds << nCities;
+	// Costs
+	for (int r = 0; r < nCities; r++)
+		for (int c = 0; c < nCities; c++)
+			if (r != c)
+				ds << table[r][c];
+	f.close();
 }
 
Index: trunk/src/tspmodel.h
===================================================================
--- trunk/src/tspmodel.h	(revision 30)
+++ trunk/src/tspmodel.h	(revision 31)
@@ -25,7 +25,5 @@
 #define TSPMODEL_H
 
-#include <QAbstractTableModel>
-#include <QSettings>
-#include "defines.h"
+#include "globals.h"
 
 class CTSPModel: public QAbstractTableModel
@@ -40,13 +38,19 @@
 	bool setData(const QModelIndex &, const QVariant &, int);
 	Qt::ItemFlags flags(const QModelIndex &) const;
-	int numCities() const;
+	quint16 numCities() const;
 	void setNumCities(int);
 	void clear();
+	void loadTask(QString);
+	void saveTask(QString);
 	void randomize();
+signals:
+	void numCitiesChanged(int);
 private:
 	QSettings *settings;
 	double table[MAX_CITIES][MAX_CITIES];
-	int nCities;
+	quint16 nCities;
 	int rand(int, int);
+	void loadZKT(QDataStream *);
+	void loadTSPT(QDataStream *);
 };
 
Index: trunk/src/tspsolver.h
===================================================================
--- trunk/src/tspsolver.h	(revision 30)
+++ trunk/src/tspsolver.h	(revision 31)
@@ -25,5 +25,5 @@
 #define TSPSOLVER_H
 
-#include <QtCore>
+#include "globals.h"
 
 typedef QList<double *> tMatrix;
Index: trunk/ui/mainwindow.ce.ui
===================================================================
--- trunk/ui/mainwindow.ce.ui	(revision 30)
+++ trunk/ui/mainwindow.ce.ui	(revision 31)
@@ -255,10 +255,10 @@
      <string>&amp;File</string>
     </property>
-    <widget class="QMenu" name="menuFileSave">
+    <widget class="QMenu" name="menuFileSaveAs">
      <property name="statusTip">
       <string/>
      </property>
      <property name="title">
-      <string>&amp;Save</string>
+      <string>Save &amp;as...</string>
      </property>
      <property name="icon">
@@ -274,5 +274,6 @@
     <addaction name="actionFileNew"/>
     <addaction name="actionFileOpen"/>
-    <addaction name="menuFileSave"/>
+    <addaction name="actionFileSave"/>
+    <addaction name="menuFileSaveAs"/>
     <addaction name="separator"/>
     <addaction name="actionFileExit"/>
@@ -405,7 +406,4 @@
   </action>
   <action name="actionFileOpen">
-   <property name="enabled">
-    <bool>false</bool>
-   </property>
    <property name="icon">
     <iconset resource="../resources/tspsg.qrc">
@@ -501,7 +499,4 @@
   </action>
   <action name="actionFileSaveTask">
-   <property name="enabled">
-    <bool>false</bool>
-   </property>
    <property name="icon">
     <iconset resource="../resources/tspsg.qrc">
@@ -550,4 +545,22 @@
    <property name="text">
     <string>English</string>
+   </property>
+  </action>
+  <action name="actionFileSave">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
+   <property name="icon">
+    <iconset resource="../resources/tspsg.qrc">
+     <normaloff>:/images/buttons/buttons/Save.png</normaloff>:/images/buttons/buttons/Save.png</iconset>
+   </property>
+   <property name="text">
+    <string>&amp;Save</string>
+   </property>
+   <property name="toolTip">
+    <string>Save task</string>
+   </property>
+   <property name="statusTip">
+    <string>Save current task</string>
    </property>
   </action>
Index: trunk/ui/mainwindow.ui
===================================================================
--- trunk/ui/mainwindow.ui	(revision 30)
+++ trunk/ui/mainwindow.ui	(revision 31)
@@ -236,7 +236,7 @@
      <string>&amp;File</string>
     </property>
-    <widget class="QMenu" name="menuFileSave">
+    <widget class="QMenu" name="menuFileSaveAs">
      <property name="title">
-      <string>&amp;Save</string>
+      <string>Save &amp;as...</string>
      </property>
      <property name="icon">
@@ -252,5 +252,6 @@
     <addaction name="actionFileNew"/>
     <addaction name="actionFileOpen"/>
-    <addaction name="menuFileSave"/>
+    <addaction name="actionFileSave"/>
+    <addaction name="menuFileSaveAs"/>
     <addaction name="separator"/>
     <addaction name="actionFilePrintSetup"/>
@@ -418,7 +419,4 @@
   </action>
   <action name="actionFileOpen">
-   <property name="enabled">
-    <bool>false</bool>
-   </property>
    <property name="icon">
     <iconset resource="../resources/tspsg.qrc">
@@ -514,7 +512,4 @@
   </action>
   <action name="actionFileSaveTask">
-   <property name="enabled">
-    <bool>false</bool>
-   </property>
    <property name="icon">
     <iconset resource="../resources/tspsg.qrc">
@@ -563,4 +558,25 @@
    <property name="text">
     <string notr="true">English</string>
+   </property>
+  </action>
+  <action name="actionFileSave">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
+   <property name="icon">
+    <iconset resource="../resources/tspsg.qrc">
+     <normaloff>:/images/buttons/buttons/Save.png</normaloff>:/images/buttons/buttons/Save.png</iconset>
+   </property>
+   <property name="text">
+    <string>&amp;Save</string>
+   </property>
+   <property name="iconText">
+    <string>Save</string>
+   </property>
+   <property name="toolTip">
+    <string>Save task</string>
+   </property>
+   <property name="statusTip">
+    <string>Save current task</string>
    </property>
   </action>
