Pārlūkot izejas kodu

Initial version of "About Project" tab

Ivan Savenko 2 gadi atpakaļ
vecāks
revīzija
d90fb7eb3f

+ 3 - 0
launcher/CMakeLists.txt

@@ -1,5 +1,6 @@
 set(launcher_SRCS
 		StdInc.cpp
+		aboutProject/aboutproject_moc.cpp
 		modManager/cdownloadmanager_moc.cpp
 		modManager/cmodlist.cpp
 		modManager/cmodlistmodel_moc.cpp
@@ -21,6 +22,7 @@ set(launcher_SRCS
 
 set(launcher_HEADERS
 		StdInc.h
+		aboutProject/aboutproject_moc.h
 		modManager/cdownloadmanager_moc.h
 		modManager/cmodlist.h
 		modManager/cmodlistmodel_moc.h
@@ -41,6 +43,7 @@ set(launcher_HEADERS
 )
 
 set(launcher_FORMS
+		aboutProject/aboutproject_moc.ui
 		modManager/cmodlistview_moc.ui
 		modManager/imageviewer_moc.ui
 		settingsView/csettingsview_moc.ui

+ 64 - 0
launcher/aboutProject/aboutproject_moc.cpp

@@ -0,0 +1,64 @@
+/*
+ * aboutproject_moc.cpp, part of VCMI engine
+ *
+ * Authors: listed in file AUTHORS in main folder
+ *
+ * License: GNU General Public License v2.0 or later
+ * Full text of license available in license.txt file, in main folder
+ *
+ */
+#include "StdInc.h"
+#include "aboutproject_moc.h"
+#include "ui_aboutproject_moc.h"
+
+#include "../updatedialog_moc.h"
+
+#include "../../lib/GameConstants.h"
+#include "../../lib/VCMIDirs.h"
+
+AboutProjectView::AboutProjectView(QWidget * parent)
+	: QWidget(parent)
+	, ui(new Ui::AboutProjectView)
+{
+	ui->setupUi(this);
+
+	ui->lineEditUserDataDir->setText(pathToQString(VCMIDirs::get().userDataPath()));
+	ui->lineEditGameDir->setText(pathToQString(VCMIDirs::get().binaryPath()));
+	ui->lineEditTempDir->setText(pathToQString(VCMIDirs::get().userLogsPath()));
+	ui->lineEditBuildVersion->setText(QString::fromStdString(GameConstants::VCMI_VERSION));
+}
+
+void AboutProjectView::on_updatesButton_clicked()
+{
+	UpdateDialog::showUpdateDialog(true);
+}
+
+void AboutProjectView::on_openGameDataDir_clicked()
+{
+	QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(ui->lineEditGameDir->text()).absoluteFilePath()));
+}
+
+void AboutProjectView::on_openUserDataDir_clicked()
+{
+	QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(ui->lineEditUserDataDir->text()).absoluteFilePath()));
+}
+
+void AboutProjectView::on_openTempDir_clicked()
+{
+	QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(ui->lineEditTempDir->text()).absoluteFilePath()));
+}
+
+void AboutProjectView::on_pushButtonDiscord_clicked()
+{
+	QDesktopServices::openUrl(QUrl("https://discord.gg/chBT42V"));
+}
+
+void AboutProjectView::on_pushButtonSlack_clicked()
+{
+	QDesktopServices::openUrl(QUrl("https://slack.vcmi.eu/"));
+}
+
+void AboutProjectView::on_pushButtonGithub_clicked()
+{
+	QDesktopServices::openUrl(QUrl("https://github.com/vcmi/vcmi"));
+}

+ 49 - 0
launcher/aboutProject/aboutproject_moc.h

@@ -0,0 +1,49 @@
+/*
+ * aboutproject_moc.h, part of VCMI engine
+ *
+ * Authors: listed in file AUTHORS in main folder
+ *
+ * License: GNU General Public License v2.0 or later
+ * Full text of license available in license.txt file, in main folder
+ *
+ */
+#pragma once
+#include "../StdInc.h"
+
+namespace Ui
+{
+class AboutProjectView;
+}
+
+class CModListView;
+
+class AboutProjectView : public QWidget
+{
+	Q_OBJECT
+
+public:
+	explicit AboutProjectView(QWidget * parent = 0);
+
+public slots:
+
+private slots:
+
+
+	void on_updatesButton_clicked();
+
+	void on_openGameDataDir_clicked();
+
+	void on_openUserDataDir_clicked();
+
+	void on_openTempDir_clicked();
+
+	void on_pushButtonDiscord_clicked();
+
+	void on_pushButtonSlack_clicked();
+
+	void on_pushButtonGithub_clicked();
+
+private:
+	Ui::AboutProjectView * ui;
+
+};

+ 283 - 0
launcher/aboutProject/aboutproject_moc.ui

@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AboutProjectView</class>
+ <widget class="QWidget" name="AboutProjectView">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>745</width>
+    <height>389</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <widget class="QPushButton" name="pushButtonSlack">
+   <property name="geometry">
+    <rect>
+     <x>150</x>
+     <y>300</y>
+     <width>229</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>VCMI on Slack</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButtonDiscord">
+   <property name="geometry">
+    <rect>
+     <x>160</x>
+     <y>270</y>
+     <width>229</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>VCMI on Discord</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButtonGithub">
+   <property name="geometry">
+    <rect>
+     <x>150</x>
+     <y>340</y>
+     <width>229</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>VCMI on Github</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelLanguageSocial">
+   <property name="geometry">
+    <rect>
+     <x>160</x>
+     <y>230</y>
+     <width>331</width>
+     <height>16</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Have a question? Found a bug? Want to help? Join us!</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelGameDir">
+   <property name="geometry">
+    <rect>
+     <x>97</x>
+     <y>112</y>
+     <width>277</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Game data directory</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="openTempDir">
+   <property name="geometry">
+    <rect>
+     <x>597</x>
+     <y>170</y>
+     <width>92</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Open</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelTempDir">
+   <property name="geometry">
+    <rect>
+     <x>97</x>
+     <y>170</y>
+     <width>277</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Log files directory</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="openUserDataDir">
+   <property name="geometry">
+    <rect>
+     <x>597</x>
+     <y>141</y>
+     <width>92</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Open</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEditUserDataDir">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
+   <property name="geometry">
+    <rect>
+     <x>380</x>
+     <y>141</y>
+     <width>211</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string notr="true">/home/user/.vcmi</string>
+   </property>
+   <property name="readOnly">
+    <bool>true</bool>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="openGameDataDir">
+   <property name="geometry">
+    <rect>
+     <x>597</x>
+     <y>112</y>
+     <width>92</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Open</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEditGameDir">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
+   <property name="geometry">
+    <rect>
+     <x>380</x>
+     <y>112</y>
+     <width>211</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string notr="true">/usr/share/vcmi</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelUserDataDir">
+   <property name="geometry">
+    <rect>
+     <x>97</x>
+     <y>141</y>
+     <width>277</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>User data directory</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEditTempDir">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
+   <property name="geometry">
+    <rect>
+     <x>380</x>
+     <y>170</y>
+     <width>211</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string notr="true">/home/user/.vcmi</string>
+   </property>
+   <property name="readOnly">
+    <bool>true</bool>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelDataDirs">
+   <property name="geometry">
+    <rect>
+     <x>110</x>
+     <y>90</y>
+     <width>277</width>
+     <height>15</height>
+    </rect>
+   </property>
+   <property name="font">
+    <font>
+     <weight>75</weight>
+     <bold>true</bold>
+    </font>
+   </property>
+   <property name="text">
+    <string>Data Directories</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEditBuildVersion">
+   <property name="geometry">
+    <rect>
+     <x>310</x>
+     <y>40</y>
+     <width>162</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string notr="true"/>
+   </property>
+   <property name="readOnly">
+    <bool>true</bool>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelBuildVersionDesc">
+   <property name="geometry">
+    <rect>
+     <x>130</x>
+     <y>40</y>
+     <width>151</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Build version</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="updatesButton">
+   <property name="geometry">
+    <rect>
+     <x>540</x>
+     <y>60</y>
+     <width>151</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Check for updates</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelDataDirs_2">
+   <property name="geometry">
+    <rect>
+     <x>180</x>
+     <y>210</y>
+     <width>277</width>
+     <height>15</height>
+    </rect>
+   </property>
+   <property name="font">
+    <font>
+     <weight>75</weight>
+     <bold>true</bold>
+    </font>
+   </property>
+   <property name="text">
+    <string>Our Community</string>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 7 - 0
launcher/mainwindow_moc.cpp

@@ -54,6 +54,7 @@ void MainWindow::computeSidePanelSizes()
 		ui->modslistButton,
 		ui->settingsButton,
 		ui->lobbyButton,
+		ui->aboutButton,
 		ui->startEditorButton,
 		ui->startGameButton
 	};
@@ -231,6 +232,12 @@ void MainWindow::on_lobbyButton_clicked()
 	ui->tabListWidget->setCurrentIndex(TabRows::LOBBY);
 }
 
+void MainWindow::on_aboutButton_clicked()
+{
+	ui->startGameButton->setEnabled(true);
+	ui->tabListWidget->setCurrentIndex(TabRows::ABOUT);
+}
+
 void MainWindow::updateTranslation()
 {
 #ifdef ENABLE_QT_TRANSLATIONS

+ 3 - 1
launcher/mainwindow_moc.h

@@ -39,7 +39,8 @@ private:
 		MODS = 0,
 		SETTINGS = 1,
 		LOBBY = 2,
-		SETUP = 3
+		SETUP = 3,
+		ABOUT = 4,
 	};
 
 	void changeEvent(QEvent *event) override;
@@ -66,4 +67,5 @@ private slots:
 	void on_settingsButton_clicked();
 	void on_lobbyButton_clicked();
 	void on_startEditorButton_clicked();
+	void on_aboutButton_clicked();
 };

+ 55 - 2
launcher/mainwindow_moc.ui

@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>800</width>
-    <height>490</height>
+    <width>900</width>
+    <height>536</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -196,6 +196,52 @@
         </property>
        </spacer>
       </item>
+      <item>
+       <widget class="QToolButton" name="aboutButton">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+          <horstretch>1</horstretch>
+          <verstretch>10</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>0</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>16777215</width>
+          <height>16777215</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>About</string>
+        </property>
+        <property name="iconSize">
+         <size>
+          <width>0</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="checkable">
+         <bool>true</bool>
+        </property>
+        <property name="checked">
+         <bool>false</bool>
+        </property>
+        <property name="autoExclusive">
+         <bool>true</bool>
+        </property>
+        <property name="toolButtonStyle">
+         <enum>Qt::ToolButtonTextUnderIcon</enum>
+        </property>
+        <property name="autoRaise">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
       <item>
        <widget class="QToolButton" name="startEditorButton">
         <property name="sizePolicy">
@@ -322,6 +368,7 @@
       <widget class="CSettingsView" name="settingsView"/>
       <widget class="Lobby" name="lobbyView"/>
       <widget class="FirstLaunchView" name="setupView"/>
+      <widget class="AboutProjectView" name="aboutView"/>
      </widget>
     </item>
    </layout>
@@ -353,6 +400,12 @@
    <header>firstLaunch/firstlaunch_moc.h</header>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>AboutProjectView</class>
+   <extends>QWidget</extends>
+   <header>aboutProject/aboutproject_moc.h</header>
+   <container>1</container>
+  </customwidget>
  </customwidgets>
  <resources/>
  <connections/>

+ 0 - 28
launcher/settingsView/csettingsview_moc.cpp

@@ -17,13 +17,11 @@
 #include "../jsonutils.h"
 #include "../languages.h"
 #include "../launcherdirs.h"
-#include "../updatedialog_moc.h"
 
 #include <QFileInfo>
 #include <QGuiApplication>
 
 #include "../../lib/CConfigHandler.h"
-#include "../../lib/VCMIDirs.h"
 
 #ifndef VCMI_MOBILE
 #include <SDL2/SDL.h>
@@ -101,10 +99,6 @@ void CSettingsView::loadSettings()
 	ui->checkBoxRepositoryDefault->setChecked(settings["launcher"]["defaultRepositoryEnabled"].Bool());
 	ui->checkBoxRepositoryExtra->setChecked(settings["launcher"]["extraRepositoryEnabled"].Bool());
 
-	ui->lineEditUserDataDir->setText(pathToQString(VCMIDirs::get().userDataPath()));
-	ui->lineEditGameDir->setText(pathToQString(VCMIDirs::get().binaryPath()));
-	ui->lineEditTempDir->setText(pathToQString(VCMIDirs::get().userLogsPath()));
-
 	ui->comboBoxAutoSave->setCurrentIndex(settings["general"]["saveFrequency"].Integer() > 0 ? 1 : 0);
 
 	Languages::fillLanguages(ui->comboBoxLanguage, false);
@@ -233,7 +227,6 @@ CSettingsView::CSettingsView(QWidget * parent)
 {
 	ui->setupUi(this);
 
-	ui->lineEditBuildVersion->setText(QString::fromStdString(GameConstants::VCMI_VERSION));
 	loadSettings();
 }
 
@@ -309,21 +302,6 @@ void CSettingsView::on_spinBoxNetworkPort_valueChanged(int arg1)
 	node->Float() = arg1;
 }
 
-void CSettingsView::on_openTempDir_clicked()
-{
-	QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(ui->lineEditTempDir->text()).absoluteFilePath()));
-}
-
-void CSettingsView::on_openUserDataDir_clicked()
-{
-	QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(ui->lineEditUserDataDir->text()).absoluteFilePath()));
-}
-
-void CSettingsView::on_openGameDataDir_clicked()
-{
-	QDesktopServices::openUrl(QUrl::fromLocalFile(QFileInfo(ui->lineEditGameDir->text()).absoluteFilePath()));
-}
-
 void CSettingsView::on_comboBoxShowIntro_currentIndexChanged(int index)
 {
 	Settings node = settings.write["video"]["showIntro"];
@@ -336,11 +314,6 @@ void CSettingsView::on_comboBoxAutoSave_currentIndexChanged(int index)
 	node->Integer() = index;
 }
 
-void CSettingsView::on_updatesButton_clicked()
-{
-	UpdateDialog::showUpdateDialog(true);
-}
-
 void CSettingsView::on_comboBoxLanguage_currentIndexChanged(int index)
 {
 	Settings node = settings.write["general"]["language"];
@@ -380,7 +353,6 @@ void CSettingsView::on_listWidgetSettings_currentRowChanged(int currentRow)
 		ui->labelGeneral,
 		ui->labelVideo,
 		ui->labelArtificialIntelligence,
-		ui->labelDataDirs,
 		ui->labelRepositories
 	};
 

+ 0 - 4
launcher/settingsView/csettingsview_moc.h

@@ -40,14 +40,10 @@ private slots:
 	void on_comboBoxNeutralAI_currentTextChanged(const QString & arg1);
 	void on_comboBoxEnemyAI_currentTextChanged(const QString & arg1);
 	void on_spinBoxNetworkPort_valueChanged(int arg1);
-	void on_openTempDir_clicked();
-	void on_openUserDataDir_clicked();
-	void on_openGameDataDir_clicked();
 	void on_comboBoxShowIntro_currentIndexChanged(int index);
 	void on_comboBoxAutoCheck_currentIndexChanged(int index);
 	void on_comboBoxDisplayIndex_currentIndexChanged(int index);
 	void on_comboBoxAutoSave_currentIndexChanged(int index);
-	void on_updatesButton_clicked();
 	void on_comboBoxLanguage_currentIndexChanged(int index);
 	void on_comboBoxCursorType_currentIndexChanged(int index);
 	void on_listWidgetSettings_currentRowChanged(int currentRow);

+ 209 - 322
launcher/settingsView/csettingsview_moc.ui

@@ -79,11 +79,6 @@
        <string>Artificial Intelligence</string>
       </property>
      </item>
-     <item>
-      <property name="text">
-       <string>Data Directories</string>
-      </property>
-     </item>
      <item>
       <property name="text">
        <string>Mod Repositories</string>
@@ -112,96 +107,44 @@
       <property name="geometry">
        <rect>
         <x>0</x>
-        <y>-345</y>
+        <y>-301</y>
         <width>610</width>
-        <height>786</height>
+        <height>649</height>
        </rect>
       </property>
-      <layout class="QGridLayout" name="gridLayout" columnstretch="3,0,1,1,1">
-       <item row="22" column="0">
-        <widget class="QLabel" name="labelDataDirs">
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
-         <property name="text">
-          <string>Data Directories</string>
-         </property>
-        </widget>
-       </item>
-       <item row="5" column="4">
-        <widget class="QPushButton" name="pushButtonTranslation">
-         <property name="text">
-          <string/>
-         </property>
-        </widget>
-       </item>
-       <item row="4" column="0">
-        <widget class="QLabel" name="labelLanguageBase">
-         <property name="text">
-          <string>Heroes III Data Language</string>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="0">
-        <widget class="QLabel" name="labelLanguage">
-         <property name="text">
-          <string>VCMI Language</string>
-         </property>
-        </widget>
-       </item>
-       <item row="25" column="0">
-        <widget class="QLabel" name="labelTempDir">
+      <layout class="QGridLayout" name="gridLayout" columnstretch="3,0,0,0,0">
+       <item row="14" column="0">
+        <widget class="QLabel" name="labelCursorType">
          <property name="text">
-          <string>Log files directory</string>
+          <string>Cursor</string>
          </property>
         </widget>
        </item>
-       <item row="16" column="0">
-        <widget class="QLabel" name="labelArtificialIntelligence">
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
+       <item row="10" column="0">
+        <widget class="QLabel" name="labelFullScreen">
          <property name="text">
-          <string>Artificial Intelligence</string>
+          <string>Fullscreen</string>
          </property>
         </widget>
        </item>
-       <item row="24" column="0">
-        <widget class="QLabel" name="labelUserDataDir">
-         <property name="text">
-          <string>User data directory</string>
-         </property>
-        </widget>
+       <item row="9" column="1" colspan="4">
+        <widget class="QComboBox" name="comboBoxResolution"/>
        </item>
-       <item row="5" column="0">
-        <widget class="QLabel" name="labelTranslation">
-         <property name="text">
-          <string>Heroes III Translation</string>
+       <item row="6" column="1" colspan="4">
+        <widget class="QSpinBox" name="spinBoxNetworkPort">
+         <property name="minimum">
+          <number>1024</number>
          </property>
-        </widget>
-       </item>
-       <item row="8" column="0">
-        <widget class="QLabel" name="labelBuildVersionDesc">
-         <property name="text">
-          <string>Build version</string>
+         <property name="maximum">
+          <number>65535</number>
          </property>
-        </widget>
-       </item>
-       <item row="12" column="0">
-        <widget class="QLabel" name="labelInterfaceScaling">
-         <property name="text">
-          <string>Interface Scaling</string>
+         <property name="value">
+          <number>3030</number>
          </property>
         </widget>
        </item>
-       <item row="7" column="1" colspan="4">
-        <widget class="QComboBox" name="comboBoxAutoSave">
+       <item row="22" column="1" colspan="2">
+        <widget class="QComboBox" name="comboBoxAutoCheck">
          <property name="currentIndex">
           <number>1</number>
          </property>
@@ -217,15 +160,15 @@
          </item>
         </widget>
        </item>
-       <item row="11" column="0">
-        <widget class="QLabel" name="labelFullScreen">
+       <item row="1" column="0">
+        <widget class="QLabel" name="labelLanguage">
          <property name="text">
-          <string>Fullscreen</string>
+          <string>VCMI Language</string>
          </property>
         </widget>
        </item>
-       <item row="0" column="0">
-        <widget class="QLabel" name="labelGeneral">
+       <item row="8" column="0">
+        <widget class="QLabel" name="labelVideo">
          <property name="font">
           <font>
            <weight>75</weight>
@@ -233,221 +176,130 @@
           </font>
          </property>
          <property name="text">
-          <string>General</string>
+          <string>Video</string>
          </property>
         </widget>
        </item>
-       <item row="19" column="0">
-        <widget class="QLabel" name="labelNeutralAI">
+       <item row="6" column="0">
+        <widget class="QLabel" name="labelNetworkPort">
          <property name="text">
-          <string>Neutral AI in battles</string>
-         </property>
-        </widget>
-       </item>
-       <item row="6" column="1" colspan="4">
-        <widget class="QSpinBox" name="spinBoxNetworkPort">
-         <property name="minimum">
-          <number>1024</number>
-         </property>
-         <property name="maximum">
-          <number>65535</number>
-         </property>
-         <property name="value">
-          <number>3030</number>
+          <string>Network port</string>
          </property>
         </widget>
        </item>
-       <item row="21" column="0">
-        <widget class="QLabel" name="labelEnemyAI">
+       <item row="9" column="0">
+        <widget class="QLabel" name="labelResolution">
          <property name="text">
-          <string>Enemy AI in battles</string>
+          <string>Resolution</string>
          </property>
         </widget>
        </item>
-       <item row="7" column="0">
-        <widget class="QLabel" name="labelAutoSave">
+       <item row="22" column="0">
+        <widget class="QLabel" name="labelAutoCheck">
          <property name="text">
-          <string>Autosave</string>
+          <string>Check on startup</string>
          </property>
         </widget>
        </item>
-       <item row="10" column="0">
-        <widget class="QLabel" name="labelResolution">
-         <property name="text">
-          <string>Resolution</string>
+       <item row="23" column="1">
+        <widget class="QCheckBox" name="checkBoxRepositoryDefault">
+         <property name="enabled">
+          <bool>true</bool>
          </property>
-        </widget>
-       </item>
-       <item row="5" column="1" colspan="3">
-        <widget class="QLabel" name="labelTranslationStatus">
          <property name="text">
           <string/>
          </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
         </widget>
        </item>
-       <item row="17" column="1" colspan="4">
-        <widget class="QComboBox" name="comboBoxEnemyPlayerAI">
+       <item row="18" column="1" colspan="4">
+        <widget class="QComboBox" name="comboBoxNeutralAI">
          <property name="currentText">
-          <string notr="true">VCAI</string>
+          <string notr="true">BattleAI</string>
          </property>
          <item>
           <property name="text">
-           <string notr="true">VCAI</string>
+           <string notr="true">BattleAI</string>
           </property>
          </item>
          <item>
           <property name="text">
-           <string notr="true">Nullkiller</string>
+           <string notr="true">StupidAI</string>
           </property>
          </item>
         </widget>
        </item>
-       <item row="8" column="1" colspan="4">
-        <widget class="QLineEdit" name="lineEditBuildVersion">
+       <item row="5" column="4">
+        <widget class="QPushButton" name="pushButtonTranslation">
          <property name="text">
-          <string notr="true"/>
-         </property>
-         <property name="readOnly">
-          <bool>true</bool>
+          <string/>
          </property>
         </widget>
        </item>
-       <item row="19" column="1" colspan="4">
-        <widget class="QComboBox" name="comboBoxNeutralAI">
+       <item row="17" column="1" colspan="4">
+        <widget class="QComboBox" name="comboBoxAlliedPlayerAI">
          <property name="currentText">
-          <string notr="true">BattleAI</string>
+          <string notr="true">VCAI</string>
          </property>
          <item>
           <property name="text">
-           <string notr="true">BattleAI</string>
+           <string notr="true">VCAI</string>
           </property>
          </item>
          <item>
           <property name="text">
-           <string notr="true">StupidAI</string>
+           <string notr="true">Nullkiller</string>
           </property>
          </item>
         </widget>
        </item>
-       <item row="6" column="0">
-        <widget class="QLabel" name="labelNetworkPort">
-         <property name="text">
-          <string>Network port</string>
-         </property>
-        </widget>
-       </item>
-       <item row="25" column="1" colspan="3">
-        <widget class="QLineEdit" name="lineEditTempDir">
-         <property name="enabled">
-          <bool>false</bool>
-         </property>
+       <item row="23" column="2" colspan="3">
+        <widget class="QLineEdit" name="lineEditRepositoryDefault">
          <property name="text">
-          <string notr="true">/home/user/.vcmi</string>
+          <string notr="true"/>
          </property>
          <property name="readOnly">
           <bool>true</bool>
          </property>
         </widget>
        </item>
-       <item row="14" column="1" colspan="4">
-        <widget class="QComboBox" name="comboBoxDisplayIndex"/>
-       </item>
-       <item row="29" column="0">
-        <widget class="QLabel" name="labelRepositoryExtra">
-         <property name="text">
-          <string>Additional repository</string>
-         </property>
-        </widget>
-       </item>
-       <item row="23" column="0">
-        <widget class="QLabel" name="labelGameDir">
-         <property name="text">
-          <string>Game data directory</string>
-         </property>
-        </widget>
-       </item>
-       <item row="13" column="0">
-        <widget class="QLabel" name="labelShowIntro">
-         <property name="text">
-          <string>Show intro</string>
-         </property>
-        </widget>
-       </item>
-       <item row="15" column="0">
-        <widget class="QLabel" name="labelCursorType">
-         <property name="text">
-          <string>Cursor</string>
-         </property>
-        </widget>
-       </item>
-       <item row="24" column="4">
-        <widget class="QPushButton" name="openUserDataDir">
-         <property name="text">
-          <string>Open</string>
-         </property>
-        </widget>
-       </item>
-       <item row="27" column="0">
-        <widget class="QLabel" name="labelAutoCheck">
-         <property name="text">
-          <string>Check on startup</string>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="1" colspan="4">
-        <widget class="QComboBox" name="comboBoxLanguage"/>
-       </item>
-       <item row="24" column="1" colspan="3">
-        <widget class="QLineEdit" name="lineEditUserDataDir">
-         <property name="enabled">
-          <bool>false</bool>
-         </property>
+       <item row="4" column="0">
+        <widget class="QLabel" name="labelLanguageBase">
          <property name="text">
-          <string notr="true">/home/user/.vcmi</string>
-         </property>
-         <property name="readOnly">
-          <bool>true</bool>
+          <string>Heroes III Data Language</string>
          </property>
         </widget>
        </item>
-       <item row="18" column="1" colspan="4">
-        <widget class="QComboBox" name="comboBoxAlliedPlayerAI">
-         <property name="currentText">
-          <string notr="true">VCAI</string>
+       <item row="7" column="1" colspan="4">
+        <widget class="QComboBox" name="comboBoxAutoSave">
+         <property name="currentIndex">
+          <number>1</number>
          </property>
          <item>
           <property name="text">
-           <string notr="true">VCAI</string>
+           <string>Off</string>
           </property>
          </item>
          <item>
           <property name="text">
-           <string notr="true">Nullkiller</string>
+           <string>On</string>
           </property>
          </item>
         </widget>
        </item>
-       <item row="25" column="4">
-        <widget class="QPushButton" name="openTempDir">
+       <item row="24" column="2" colspan="3">
+        <widget class="QLineEdit" name="lineEditRepositoryExtra">
          <property name="text">
-          <string>Open</string>
+          <string notr="true"/>
          </property>
         </widget>
        </item>
-       <item row="9" column="0">
-        <widget class="QLabel" name="labelVideo">
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
-         <property name="text">
-          <string>Video</string>
-         </property>
-        </widget>
+       <item row="4" column="1" colspan="4">
+        <widget class="QComboBox" name="comboBoxLanguageBase"/>
        </item>
-       <item row="20" column="1" colspan="4">
+       <item row="19" column="1" colspan="4">
         <widget class="QComboBox" name="comboBoxFriendlyAI">
          <property name="editable">
           <bool>false</bool>
@@ -467,14 +319,7 @@
          </item>
         </widget>
        </item>
-       <item row="18" column="0">
-        <widget class="QLabel" name="labelAlliedPlayerAI">
-         <property name="text">
-          <string>Adventure Map Allies</string>
-         </property>
-        </widget>
-       </item>
-       <item row="13" column="1" colspan="4">
+       <item row="12" column="1" colspan="4">
         <widget class="QComboBox" name="comboBoxShowIntro">
          <property name="currentIndex">
           <number>1</number>
@@ -491,34 +336,21 @@
          </item>
         </widget>
        </item>
-       <item row="21" column="1" colspan="4">
-        <widget class="QComboBox" name="comboBoxEnemyAI">
-         <property name="editable">
-          <bool>false</bool>
-         </property>
-         <property name="currentText">
-          <string notr="true">BattleAI</string>
+       <item row="24" column="0">
+        <widget class="QLabel" name="labelRepositoryExtra">
+         <property name="text">
+          <string>Additional repository</string>
          </property>
-         <item>
-          <property name="text">
-           <string notr="true">BattleAI</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string notr="true">StupidAI</string>
-          </property>
-         </item>
         </widget>
        </item>
        <item row="17" column="0">
-        <widget class="QLabel" name="labelEnemyPlayerAI">
+        <widget class="QLabel" name="labelAlliedPlayerAI">
          <property name="text">
-          <string>Adventure Map Enemies</string>
+          <string>Adventure Map Allies</string>
          </property>
         </widget>
        </item>
-       <item row="11" column="1" colspan="4">
+       <item row="10" column="1" colspan="4">
         <widget class="QComboBox" name="comboBoxFullScreen">
          <property name="toolTip">
           <string>Select display mode for game
@@ -549,48 +381,53 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
          </item>
         </widget>
        </item>
-       <item row="23" column="4">
-        <widget class="QPushButton" name="openGameDataDir">
-         <property name="text">
-          <string>Open</string>
+       <item row="20" column="1" colspan="4">
+        <widget class="QComboBox" name="comboBoxEnemyAI">
+         <property name="editable">
+          <bool>false</bool>
          </property>
-        </widget>
-       </item>
-       <item row="20" column="0">
-        <widget class="QLabel" name="labelFriendlyAI">
-         <property name="text">
-          <string>Friendly AI in battles</string>
+         <property name="currentText">
+          <string notr="true">BattleAI</string>
          </property>
-        </widget>
-       </item>
-       <item row="10" column="1" colspan="4">
-        <widget class="QComboBox" name="comboBoxResolution"/>
-       </item>
-       <item row="15" column="1" colspan="4">
-        <widget class="QComboBox" name="comboBoxCursorType">
          <item>
           <property name="text">
-           <string>Hardware</string>
+           <string notr="true">BattleAI</string>
           </property>
          </item>
          <item>
           <property name="text">
-           <string>Software</string>
+           <string notr="true">StupidAI</string>
           </property>
          </item>
         </widget>
        </item>
-       <item row="28" column="0">
-        <widget class="QLabel" name="labelRepositoryDefault">
-         <property name="text">
-          <string>Default repository</string>
+       <item row="11" column="1" colspan="4">
+        <widget class="QSpinBox" name="spinBoxInterfaceScaling">
+         <property name="minimum">
+          <number>50</number>
+         </property>
+         <property name="maximum">
+          <number>400</number>
+         </property>
+         <property name="singleStep">
+          <number>10</number>
          </property>
         </widget>
        </item>
-       <item row="4" column="1" colspan="4">
-        <widget class="QComboBox" name="comboBoxLanguageBase"/>
+       <item row="15" column="0">
+        <widget class="QLabel" name="labelArtificialIntelligence">
+         <property name="font">
+          <font>
+           <weight>75</weight>
+           <bold>true</bold>
+          </font>
+         </property>
+         <property name="text">
+          <string>Artificial Intelligence</string>
+         </property>
+        </widget>
        </item>
-       <item row="26" column="0">
+       <item row="21" column="0">
         <widget class="QLabel" name="labelRepositories">
          <property name="font">
           <font>
@@ -603,97 +440,147 @@ Fullscreen Exclusive Mode - game will cover entirety of your screen and will use
          </property>
         </widget>
        </item>
-       <item row="14" column="0">
-        <widget class="QLabel" name="labelDisplayIndex">
+       <item row="1" column="1" colspan="4">
+        <widget class="QComboBox" name="comboBoxLanguage"/>
+       </item>
+       <item row="24" column="1">
+        <widget class="QCheckBox" name="checkBoxRepositoryExtra">
          <property name="text">
-          <string>Display index</string>
+          <string/>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
          </property>
         </widget>
        </item>
-       <item row="28" column="1">
-        <widget class="QCheckBox" name="checkBoxRepositoryDefault">
-         <property name="enabled">
-          <bool>true</bool>
+       <item row="0" column="0">
+        <widget class="QLabel" name="labelGeneral">
+         <property name="font">
+          <font>
+           <weight>75</weight>
+           <bold>true</bold>
+          </font>
          </property>
          <property name="text">
-          <string/>
+          <string>General</string>
          </property>
-         <property name="checked">
-          <bool>true</bool>
+        </widget>
+       </item>
+       <item row="13" column="1" colspan="4">
+        <widget class="QComboBox" name="comboBoxDisplayIndex"/>
+       </item>
+       <item row="20" column="0">
+        <widget class="QLabel" name="labelEnemyAI">
+         <property name="text">
+          <string>Enemy AI in battles</string>
          </property>
         </widget>
        </item>
-       <item row="29" column="2" colspan="3">
-        <widget class="QLineEdit" name="lineEditRepositoryExtra">
+       <item row="11" column="0">
+        <widget class="QLabel" name="labelInterfaceScaling">
          <property name="text">
-          <string notr="true"/>
+          <string>Interface Scaling</string>
          </property>
         </widget>
        </item>
-       <item row="27" column="1" colspan="2">
-        <widget class="QComboBox" name="comboBoxAutoCheck">
-         <property name="currentIndex">
-          <number>1</number>
+       <item row="13" column="0">
+        <widget class="QLabel" name="labelDisplayIndex">
+         <property name="text">
+          <string>Display index</string>
          </property>
+        </widget>
+       </item>
+       <item row="5" column="1" colspan="3">
+        <widget class="QLabel" name="labelTranslationStatus">
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="14" column="1" colspan="4">
+        <widget class="QComboBox" name="comboBoxCursorType">
          <item>
           <property name="text">
-           <string>Off</string>
+           <string>Hardware</string>
           </property>
          </item>
          <item>
           <property name="text">
-           <string>On</string>
+           <string>Software</string>
           </property>
          </item>
         </widget>
        </item>
-       <item row="27" column="3" colspan="2">
-        <widget class="QPushButton" name="updatesButton">
+       <item row="18" column="0">
+        <widget class="QLabel" name="labelNeutralAI">
          <property name="text">
-          <string>Update now</string>
+          <string>Neutral AI in battles</string>
          </property>
         </widget>
        </item>
-       <item row="28" column="2" colspan="3">
-        <widget class="QLineEdit" name="lineEditRepositoryDefault">
+       <item row="5" column="0">
+        <widget class="QLabel" name="labelTranslation">
          <property name="text">
-          <string notr="true"/>
-         </property>
-         <property name="readOnly">
-          <bool>true</bool>
+          <string>Heroes III Translation</string>
          </property>
         </widget>
        </item>
-       <item row="29" column="1">
-        <widget class="QCheckBox" name="checkBoxRepositoryExtra">
+       <item row="19" column="0">
+        <widget class="QLabel" name="labelFriendlyAI">
          <property name="text">
-          <string/>
+          <string>Friendly AI in battles</string>
          </property>
-         <property name="checked">
-          <bool>true</bool>
+        </widget>
+       </item>
+       <item row="22" column="3" colspan="2">
+        <widget class="QPushButton" name="refreshRepositoriesButton">
+         <property name="text">
+          <string>Refresh now</string>
          </property>
         </widget>
        </item>
-       <item row="23" column="1" colspan="3">
-        <widget class="QLineEdit" name="lineEditGameDir">
-         <property name="enabled">
-          <bool>false</bool>
+       <item row="23" column="0">
+        <widget class="QLabel" name="labelRepositoryDefault">
+         <property name="text">
+          <string>Default repository</string>
          </property>
+        </widget>
+       </item>
+       <item row="7" column="0">
+        <widget class="QLabel" name="labelAutoSave">
          <property name="text">
-          <string notr="true">/usr/share/vcmi</string>
+          <string>Autosave</string>
          </property>
         </widget>
        </item>
-       <item row="12" column="1" colspan="4">
-        <widget class="QSpinBox" name="spinBoxInterfaceScaling">
-         <property name="minimum">
-          <number>50</number>
+       <item row="16" column="1" colspan="4">
+        <widget class="QComboBox" name="comboBoxEnemyPlayerAI">
+         <property name="currentText">
+          <string notr="true">VCAI</string>
          </property>
-         <property name="maximum">
-          <number>400</number>
+         <item>
+          <property name="text">
+           <string notr="true">VCAI</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string notr="true">Nullkiller</string>
+          </property>
+         </item>
+        </widget>
+       </item>
+       <item row="12" column="0">
+        <widget class="QLabel" name="labelShowIntro">
+         <property name="text">
+          <string>Show intro</string>
          </property>
-         <property name="singleStep">
-          <number>10</number>
+        </widget>
+       </item>
+       <item row="16" column="0">
+        <widget class="QLabel" name="labelEnemyPlayerAI">
+         <property name="text">
+          <string>Adventure Map Enemies</string>
          </property>
         </widget>
        </item>