From ed559f3ce9e97f2c00f7e6d2ed9387959883a257 Mon Sep 17 00:00:00 2001
From: Syping <schiedelrafael@keppe.org>
Date: Mon, 1 May 2017 05:05:55 +0200
Subject: [PATCH] DPI awareness and latest changes from gta5sync

---
 .travis.yml          |   6 +-
 AboutDialog.cpp      |   5 +
 AppEnv.cpp           |  18 ++-
 AppEnv.h             |   3 +
 ImportDialog.cpp     |  12 +-
 ImportDialog.h       |   2 +
 OptionsDialog.cpp    |   4 +
 PictureDialog.cpp    |  72 +++++++---
 ProfileInterface.cpp |   6 +
 ProfileInterface.ui  |   9 +-
 SavegameDialog.cpp   |   5 +
 SavegameDialog.ui    |   2 +-
 SavegameWidget.cpp   |   8 ++
 SavegameWidget.ui    |   7 +-
 SnapmaticEditor.cpp  |   5 +
 SnapmaticPicture.cpp |   1 +
 SnapmaticWidget.cpp  |   4 +
 UserInterface.cpp    |  11 +-
 config.h             |   4 +-
 gta5view.pro         |   6 +-
 lang/gta5sync_ru.ts  | 336 +++++++++++++++++++++++--------------------
 res/app.rc           |   8 +-
 res/gta5view.desktop |  22 +--
 res/gta5view.png     | Bin 0 -> 7189 bytes
 24 files changed, 343 insertions(+), 213 deletions(-)
 create mode 100644 res/gta5view.png

diff --git a/.travis.yml b/.travis.yml
index a4bbfb3..9a051ae 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -24,15 +24,15 @@ before_script:
   - echo "Grand Theft Auto V Snapmatic and Savegame viewer" > ./description-pak
 
 script:
-  - qmake -qt=5 "DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Developer\\\\\\\"" "DEFINES+=GTA5SYNC_DAILYB=\\\\\\\"$PACKAGE_VERSION-dev2\\\\\\\"" ../gta5view.pro
+  - qmake -qt=5 "DEFINES+=GTA5SYNC_BUILDTYPE=\\\\\\\"Developer\\\\\\\"" "DEFINES+=GTA5SYNC_DAILYB=\\\\\\\"$PACKAGE_VERSION-dev4\\\\\\\"" ../gta5view.pro
   - make -j 4
-  - sudo checkinstall -D --default --nodoc --pkgname=gta5view --pkgversion=$PACKAGE_VERSION --pkgrelease=dev2 --pkggroup=utility --maintainer="Syping on Travis \<travisci@syping.de\>"  --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5 --pakdir=../package
+  - sudo checkinstall -D --default --nodoc --pkgname=gta5view --pkgversion=$PACKAGE_VERSION --pkgrelease=dev4 --pkggroup=utility --maintainer="Syping on Travis \<travisci@syping.de\>"  --requires=libqt5core5a,libqt5gui5,libqt5network5,libqt5widgets5 --pakdir=../package
 
 deploy:
   provider: releases
   api_key:
     secure: "o7VneEz1aHfdVwZvOZLfopf6uJWNrFsZaBvunTmXFzpmNFhlNS1qwqgMUkIA2yBRbZ3wIzVs4vfwIHv7W9yE/PqK+AYL+R8+AwKGrwlgT4HqJNuk6VM/LNJ6GwT/qkQuaoOVw29bUjmzzgIRdHmw53SlJv6Hh1VE8HphlTT//aex6nCfcFhUZ0BETdZDWz5FSHwL3NalUoqfKfQrJeky5RXzCyCANQC2tKt0bV46GaWIgWrDo2KCTNqPtRWWf5GDmnkXE5IYRMQ3mXvO9iYh0v5Y2jo4PiXGUiFUU6Z3aAWFAiPdGclrBO697cf3lCTzDMhuCETR153qFYsLShUlFf61ITAmCeHAWETjZDri0lmPONo3GoNB6alGfYEA51qw14kXakrTpICtTJj7gw/gtUYOabW6hrzmieNzMBIy62RikDPjyakFnuwW2qNHRlD65e0jYv+6nCpb6E+OV16Ysh1zhV2vTfpfzVmSuyu2J+ELqXD3OZCXRSPpDIih9UQ8335p8FBji6jHORcgym/TRgdgRmENibh8tLzWp+UjpWHuWfcpvZgOskjfwU0iDMCayMJ7tDpOhXHcAhDRnd6XRIiOJ5YZCzflj2nEwmt3YUd7DwXS/AU+WHOmcNQBjXBxF/FJa35XXcy3HKJM5TTKqtph3medo30us5yXHeG6NNg="
-  file: "../package/gta5view_$PACKAGE_VERSION-dev2_amd64.deb"
+  file: "../package/gta5view_$PACKAGE_VERSION-dev4_amd64.deb"
   skip_cleanup: true
   on:
     tags: true
diff --git a/AboutDialog.cpp b/AboutDialog.cpp
index 871d21a..31edc7d 100755
--- a/AboutDialog.cpp
+++ b/AboutDialog.cpp
@@ -19,6 +19,7 @@
 #include <QStringBuilder>
 #include "AboutDialog.h"
 #include "ui_AboutDialog.h"
+#include "AppEnv.h"
 #include "config.h"
 
 AboutDialog::AboutDialog(QWidget *parent) :
@@ -51,6 +52,10 @@ AboutDialog::AboutDialog(QWidget *parent) :
     {
         ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close"));
     }
+
+    // DPI calculation
+    qreal screenRatio = AppEnv::screenRatio();
+    resize(375 * screenRatio, 260 * screenRatio);
 }
 
 AboutDialog::~AboutDialog()
diff --git a/AppEnv.cpp b/AppEnv.cpp
index 52ba5fd..d5b9c08 100755
--- a/AppEnv.cpp
+++ b/AppEnv.cpp
@@ -20,10 +20,14 @@
 #include "AppEnv.h"
 #include "StringParser.h"
 #include "StandardPaths.h"
-#include <QDir>
-#include <QDebug>
 #include <QtGlobal>
+#include <QDesktopWidget>
+#include <QApplication>
 #include <QSettings>
+#include <QScreen>
+#include <QDebug>
+#include <QRect>
+#include <QDir>
 #include <iostream>
 using namespace std;
 
@@ -130,3 +134,13 @@ QUrl AppEnv::getPlayerFetchingUrl(QString crewID, QString pageNumber)
 {
     return QUrl(QString("https://socialclub.rockstargames.com/crewsapi/GetMembersList?crewId=%1&pageNumber=%2").arg(crewID, pageNumber));
 }
+
+qreal AppEnv::screenRatio()
+{
+#if QT_VERSION >= 0x050000
+    qreal dpi = QGuiApplication::primaryScreen()->logicalDotsPerInch();
+#else
+    qreal dpi = qApp->desktop()->logicalDpiX();
+#endif
+    return (dpi / 96);
+}
diff --git a/AppEnv.h b/AppEnv.h
index 56aefcd..332b6e1 100755
--- a/AppEnv.h
+++ b/AppEnv.h
@@ -37,6 +37,9 @@ public:
     static QByteArray getUserAgent();
     static QUrl getCrewFetchingUrl(QString crewID);
     static QUrl getPlayerFetchingUrl(QString crewID, QString pageNumber);
+
+    // Screen Stuff
+    static qreal screenRatio();
 };
 
 #endif // APPENV_H
diff --git a/ImportDialog.cpp b/ImportDialog.cpp
index ebce66c..19de296 100644
--- a/ImportDialog.cpp
+++ b/ImportDialog.cpp
@@ -18,6 +18,7 @@
 
 #include "ImportDialog.h"
 #include "ui_ImportDialog.h"
+#include "AppEnv.h"
 #include <QPainter>
 #include <QPixmap>
 #include <QImage>
@@ -26,8 +27,6 @@
 // IMAGES VALUES
 #define snapmaticResolutionW 960
 #define snapmaticResolutionH 536
-#define snapmaticResolutionLW 430
-#define snapmaticResolutionLH 240
 #define snapmaticAvatarResolution 470
 #define snapmaticAvatarPlacementW 145
 #define snapmaticAvatarPlacementH 66
@@ -50,6 +49,15 @@ ImportDialog::ImportDialog(QWidget *parent) :
     }
 
     ui->rbKeep->setChecked(true);
+
+    qreal screenRatio = AppEnv::screenRatio();
+    snapmaticResolutionLW = 430 * screenRatio;
+    snapmaticResolutionLH = 240 * screenRatio;
+    setMinimumSize(430 * screenRatio, 380 * screenRatio);
+    setMaximumSize(430 * screenRatio, 380 * screenRatio);
+    setFixedSize(430 * screenRatio, 380 * screenRatio);
+    ui->vlButtom->setSpacing(6 * screenRatio);
+    ui->vlButtom->setContentsMargins(9 * screenRatio, 6 * screenRatio, 9 * screenRatio, 9 * screenRatio);
 }
 
 ImportDialog::~ImportDialog()
diff --git a/ImportDialog.h b/ImportDialog.h
index 0503dd3..1da27fd 100644
--- a/ImportDialog.h
+++ b/ImportDialog.h
@@ -53,6 +53,8 @@ private:
     QImage workImage;
     QImage newImage;
     bool doImport;
+    int snapmaticResolutionLW;
+    int snapmaticResolutionLH;
 };
 
 #endif // IMPORTDIALOG_H
diff --git a/OptionsDialog.cpp b/OptionsDialog.cpp
index 68bc8f9..f42c3c3 100755
--- a/OptionsDialog.cpp
+++ b/OptionsDialog.cpp
@@ -70,6 +70,10 @@ OptionsDialog::OptionsDialog(ProfileDatabase *profileDB, QWidget *parent) :
         ui->cmdCancel->setIcon(QIcon::fromTheme("dialog-cancel"));
     }
 
+    // DPI calculation
+    qreal screenRatio = AppEnv::screenRatio();
+    resize(435 * screenRatio, 405 * screenRatio);
+
     setupTreeWidget();
     setupLanguageBox();
     setupRadioButtons();
diff --git a/PictureDialog.cpp b/PictureDialog.cpp
index dca0ef3..24ec3ee 100755
--- a/PictureDialog.cpp
+++ b/PictureDialog.cpp
@@ -26,6 +26,7 @@
 #include "StringParser.h"
 #include "GlobalString.h"
 #include "UiModLabel.h"
+#include "AppEnv.h"
 
 #ifdef GTA5SYNC_WIN
 #if QT_VERSION >= 0x050200
@@ -118,7 +119,15 @@ void PictureDialog::setupPictureDialog(bool withDatabase_)
     withDatabase = withDatabase_;
 
     // Avatar area
-    avatarAreaPicture = QImage(":/img/avatararea.png");
+    qreal screenRatio = AppEnv::screenRatio();
+    if (screenRatio != 1)
+    {
+        avatarAreaPicture = QImage(":/img/avatararea.png").scaledToHeight(536 * screenRatio, Qt::FastTransformation);
+    }
+    else
+    {
+        avatarAreaPicture = QImage(":/img/avatararea.png");
+    }
     avatarLocX = 145;
     avatarLocY = 66;
     avatarSize = 470;
@@ -147,6 +156,7 @@ void PictureDialog::setupPictureDialog(bool withDatabase_)
 
     installEventFilter(this);
     installEventFilter(ui->labPicture);
+    ui->labPicture->setFixedSize(960 * screenRatio, 536 * screenRatio);
     ui->labPicture->setFocusPolicy(Qt::StrongFocus);
 }
 
@@ -343,28 +353,29 @@ void PictureDialog::dialogPreviousPictureRequested()
 void PictureDialog::renderOverlayPicture()
 {
     // Generating Overlay Preview
-    QRect preferedRect = QRect(0, 0, 200, 160);
+    qreal screenRatio = AppEnv::screenRatio();
+    QRect preferedRect = QRect(0, 0, 200 * screenRatio, 160 * screenRatio);
     QString overlayText = tr("Key 1 - Avatar Preview Mode\nKey 2 - Toggle Overlay\nArrow Keys - Navigate");
     QImage overlayImage(1, 1, QImage::Format_ARGB32_Premultiplied);
     overlayImage.fill(Qt::transparent);
 
     QPainter overlayPainter(&overlayImage);
     QFont overlayPainterFont;
-    overlayPainterFont.setPixelSize(12);
+    overlayPainterFont.setPixelSize(12 * screenRatio);
     overlayPainter.setFont(overlayPainterFont);
     QRect overlaySpace = overlayPainter.boundingRect(preferedRect, Qt::AlignLeft | Qt::AlignTop | Qt::TextDontClip | Qt::TextWordWrap, overlayText);
     overlayPainter.end();
 
     int hOverlay = Qt::AlignTop;
-    if (overlaySpace.height() < 74)
+    if (overlaySpace.height() < 74 * screenRatio)
     {
         hOverlay = Qt::AlignVCenter;
-        preferedRect.setHeight(71);
-        overlaySpace.setHeight(80);
+        preferedRect.setHeight(71 * screenRatio);
+        overlaySpace.setHeight(80 * screenRatio);
     }
     else
     {
-        overlaySpace.setHeight(overlaySpace.height() + 6);
+        overlaySpace.setHeight(overlaySpace.height() + 6 * screenRatio);
     }
 
     overlayImage = overlayImage.scaled(overlaySpace.size());
@@ -374,13 +385,13 @@ void PictureDialog::renderOverlayPicture()
     overlayPainter.drawText(preferedRect, Qt::AlignLeft | hOverlay | Qt::TextDontClip | Qt::TextWordWrap, overlayText);
     overlayPainter.end();
 
-    if (overlaySpace.width() < 194)
+    if (overlaySpace.width() < 194 * screenRatio)
     {
-        overlaySpace.setWidth(200);
+        overlaySpace.setWidth(200 * screenRatio);
     }
     else
     {
-        overlaySpace.setWidth(overlaySpace.width() + 6);
+        overlaySpace.setWidth(overlaySpace.width() + 6 * screenRatio);
     }
 
     QImage overlayBorderImage(overlaySpace.width(), overlaySpace.height(), QImage::Format_ARGB6666_Premultiplied);
@@ -390,7 +401,7 @@ void PictureDialog::renderOverlayPicture()
     overlayTempImage.fill(Qt::transparent);
     QPainter overlayTempPainter(&overlayTempImage);
     overlayTempPainter.drawImage(0, 0, overlayBorderImage);
-    overlayTempPainter.drawImage(3, 3, overlayImage);
+    overlayTempPainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayImage);
     overlayTempPainter.end();
 }
 
@@ -502,35 +513,58 @@ void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture)
 
 void PictureDialog::renderPicture()
 {
+    qreal screenRatio = AppEnv::screenRatio();
     if (!previewMode)
     {
         if (overlayEnabled)
         {
-            QPixmap overlayAreaPixmap(960, 536);
+            QPixmap overlayAreaPixmap(960 * screenRatio, 536 * screenRatio);
             overlayAreaPixmap.fill(Qt::transparent);
             QPainter overlayAreaPainter(&overlayAreaPixmap);
-            overlayAreaPainter.drawImage(0, 0, snapmaticPicture);
-            overlayAreaPainter.drawImage(3, 3, overlayTempImage);
+            if (screenRatio == 1)
+            {
+                overlayAreaPainter.drawImage(0, 0, snapmaticPicture);
+                overlayAreaPainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayTempImage);
+            }
+            else
+            {
+                overlayAreaPainter.drawImage(0, 0, snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation));
+                overlayAreaPainter.drawImage(3 * screenRatio, 3 * screenRatio, overlayTempImage);
+            }
             overlayAreaPainter.end();
             ui->labPicture->setPixmap(overlayAreaPixmap);
         }
         else
         {
-            ui->labPicture->setPixmap(QPixmap::fromImage(snapmaticPicture));
+            if (screenRatio != 1)
+            {
+                ui->labPicture->setPixmap(QPixmap::fromImage(snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation)));
+            }
+            else
+            {
+                ui->labPicture->setPixmap(QPixmap::fromImage(snapmaticPicture));
+            }
         }
     }
     else
     {
         // Generating Avatar Preview
-        QPixmap avatarPixmap(960, 536);
+        QPixmap avatarPixmap(960 * screenRatio, 536 * screenRatio);
         QPainter snapPainter(&avatarPixmap);
         QFont snapPainterFont;
-        snapPainterFont.setPixelSize(12);
-        snapPainter.drawImage(0, 0, snapmaticPicture);
+        snapPainterFont.setPixelSize(12 * screenRatio);
+        if (screenRatio == 1)
+        {
+            snapPainter.drawImage(0, 0, snapmaticPicture);
+        }
+        else
+        {
+            snapPainter.drawImage(0, 0, snapmaticPicture.scaledToHeight(536 * screenRatio, Qt::SmoothTransformation));
+        }
         snapPainter.drawImage(0, 0, avatarAreaPicture);
         snapPainter.setPen(QColor::fromRgb(255, 255, 255, 255));
         snapPainter.setFont(snapPainterFont);
-        snapPainter.drawText(QRect(3, 3, 140, 60), Qt::AlignLeft | Qt::TextWordWrap, tr("Avatar Preview Mode\nPress 1 for Default View"));
+        snapPainter.drawText(QRect(3 * screenRatio, 3 * screenRatio, 140 * screenRatio, 60 * screenRatio), Qt::AlignLeft | Qt::TextWordWrap, tr("Avatar Preview Mode\nPress 1 for Default View"));
         snapPainter.end();
         ui->labPicture->setPixmap(avatarPixmap);
     }
diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp
index 8a74524..0c33024 100755
--- a/ProfileInterface.cpp
+++ b/ProfileInterface.cpp
@@ -28,6 +28,7 @@
 #include "ProfileLoader.h"
 #include "ExportThread.h"
 #include "ImportDialog.h"
+#include "AppEnv.h"
 #include "config.h"
 #include <QProgressDialog>
 #include <QProgressBar>
@@ -73,6 +74,11 @@ ProfileInterface::ProfileInterface(ProfileDatabase *profileDB, CrewDatabase *cre
     {
         ui->cmdCloseProfile->setIcon(QIcon::fromTheme("dialog-close"));
     }
+
+    // DPI calculation
+    qreal screenRatio = AppEnv::screenRatio();
+    ui->hlButtons->setSpacing(6 * screenRatio);
+    ui->hlButtons->setContentsMargins(9 * screenRatio, 9 * screenRatio, 9 * screenRatio, 9 * screenRatio);
 }
 
 ProfileInterface::~ProfileInterface()
diff --git a/ProfileInterface.ui b/ProfileInterface.ui
index 0e33355..1186939 100755
--- a/ProfileInterface.ui
+++ b/ProfileInterface.ui
@@ -27,7 +27,7 @@
     <number>0</number>
    </property>
    <property name="bottomMargin">
-    <number>9</number>
+    <number>0</number>
    </property>
    <item>
     <widget class="QStackedWidget" name="swProfile">
@@ -108,8 +108,8 @@
            <rect>
             <x>0</x>
             <y>0</y>
-            <width>398</width>
-            <height>256</height>
+            <width>98</width>
+            <height>28</height>
            </rect>
           </property>
           <layout class="QVBoxLayout" name="vlProfile">
@@ -160,6 +160,9 @@
      <property name="rightMargin">
       <number>9</number>
      </property>
+     <property name="bottomMargin">
+      <number>9</number>
+     </property>
      <item>
       <widget class="QLabel" name="labVersion">
        <property name="text">
diff --git a/SavegameDialog.cpp b/SavegameDialog.cpp
index b9ee746..99447ce 100755
--- a/SavegameDialog.cpp
+++ b/SavegameDialog.cpp
@@ -1,6 +1,7 @@
 #include "SavegameDialog.h"
 #include "ui_SavegameDialog.h"
 #include "SavegameCopy.h"
+#include "AppEnv.h"
 #include <QMessageBox>
 
 SavegameDialog::SavegameDialog(QWidget *parent) :
@@ -18,6 +19,10 @@ SavegameDialog::SavegameDialog(QWidget *parent) :
     {
         ui->cmdClose->setIcon(QIcon::fromTheme("dialog-close"));
     }
+
+    // DPI calculation
+    qreal screenRatio = AppEnv::screenRatio();
+    resize(400 * screenRatio, 105 * screenRatio);
 }
 
 SavegameDialog::~SavegameDialog()
diff --git a/SavegameDialog.ui b/SavegameDialog.ui
index 75a2cc7..a0a5e52 100755
--- a/SavegameDialog.ui
+++ b/SavegameDialog.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>400</width>
-    <height>104</height>
+    <height>105</height>
    </rect>
   </property>
   <property name="windowTitle">
diff --git a/SavegameWidget.cpp b/SavegameWidget.cpp
index 200713d..6783bf9 100755
--- a/SavegameWidget.cpp
+++ b/SavegameWidget.cpp
@@ -23,6 +23,7 @@
 #include "StandardPaths.h"
 #include "SavegameData.h"
 #include "SavegameCopy.h"
+#include "AppEnv.h"
 #include <QFileDialog>
 #include <QMessageBox>
 #include <QSettings>
@@ -46,6 +47,13 @@ SavegameWidget::SavegameWidget(QWidget *parent) :
     ui->cmdDelete->setVisible(false);
     ui->cbSelected->setVisible(false);
 
+    qreal screenRatio = AppEnv::screenRatio();
+    ui->labSavegamePic->setFixedSize(48 * screenRatio, 27 * screenRatio);
+
+    QPixmap savegamePixmap(":/img/savegame.png");
+    if (screenRatio != 1) savegamePixmap = savegamePixmap.scaledToHeight(ui->labSavegamePic->height(), Qt::SmoothTransformation);
+    ui->labSavegamePic->setPixmap(savegamePixmap);
+
     QString exportSavegameStr = tr("Export Savegame...");
     Q_UNUSED(exportSavegameStr)
 
diff --git a/SavegameWidget.ui b/SavegameWidget.ui
index d148f66..81ea544 100755
--- a/SavegameWidget.ui
+++ b/SavegameWidget.ui
@@ -50,9 +50,6 @@
         <property name="text">
          <string/>
         </property>
-        <property name="pixmap">
-         <pixmap resource="res/app.qrc">:/img/savegame.png</pixmap>
-        </property>
        </widget>
       </item>
       <item>
@@ -130,8 +127,6 @@
    </item>
   </layout>
  </widget>
- <resources>
-  <include location="res/app.qrc"/>
- </resources>
+ <resources/>
  <connections/>
 </ui>
diff --git a/SnapmaticEditor.cpp b/SnapmaticEditor.cpp
index b4cbb0a..046ce8e 100644
--- a/SnapmaticEditor.cpp
+++ b/SnapmaticEditor.cpp
@@ -20,6 +20,7 @@
 #include "ui_SnapmaticEditor.h"
 #include "SnapmaticPicture.h"
 #include "StringParser.h"
+#include "AppEnv.h"
 #include <QTextDocument>
 #include <QInputDialog>
 #include <QMessageBox>
@@ -44,6 +45,10 @@ SnapmaticEditor::SnapmaticEditor(CrewDatabase *crewDB, QWidget *parent) :
 
     snapmaticTitle = "";
     smpic = 0;
+
+    // DPI calculation
+    qreal screenRatio = AppEnv::screenRatio();
+    resize(400 * screenRatio, 360 * screenRatio);
 }
 
 SnapmaticEditor::~SnapmaticEditor()
diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp
index b13aff0..d5cbf29 100755
--- a/SnapmaticPicture.cpp
+++ b/SnapmaticPicture.cpp
@@ -813,6 +813,7 @@ bool SnapmaticPicture::exportPicture(const QString &fileName, const QString form
     }
     else
     {
+        delete picFile;
         return false;
     }
 }
diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp
index 4f28c0c..ddb9b73 100755
--- a/SnapmaticWidget.cpp
+++ b/SnapmaticWidget.cpp
@@ -24,6 +24,7 @@
 #include "PictureDialog.h"
 #include "PictureExport.h"
 #include "StringParser.h"
+#include "AppEnv.h"
 #include "config.h"
 #include <QMessageBox>
 #include <QPixmap>
@@ -87,6 +88,9 @@ void SnapmaticWidget::setSnapmaticPicture(SnapmaticPicture *picture)
     picStr = picture->getPictureStr();
     QObject::connect(picture, SIGNAL(updated()), this, SLOT(snapmaticUpdated()));
 
+    qreal screenRatio = AppEnv::screenRatio();
+    ui->labPicture->setFixedSize(48 * screenRatio, 27 * screenRatio);
+
     QPixmap SnapmaticPixmap = QPixmap::fromImage(picture->getImage().scaled(ui->labPicture->width(), ui->labPicture->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::AutoColor);
     ui->labPicStr->setText(picStr + "\n" + picTitl + "");
     ui->labPicture->setPixmap(SnapmaticPixmap);
diff --git a/UserInterface.cpp b/UserInterface.cpp
index d546bfd..60e7afb 100755
--- a/UserInterface.cpp
+++ b/UserInterface.cpp
@@ -78,6 +78,12 @@ UserInterface::UserInterface(ProfileDatabase *profileDB, CrewDatabase *crewDB, D
         ui->actionExit->setIcon(QIcon::fromTheme("application-exit"));
 #endif
     }
+
+    // DPI calculation
+    qreal screenRatio = AppEnv::screenRatio();
+    resize(625 * screenRatio, 500 * screenRatio);
+    ui->vlUserInterface->setSpacing(6 * screenRatio);
+    ui->vlUserInterface->setContentsMargins(9 * screenRatio, 9 * screenRatio, 9 * screenRatio, 9 * screenRatio);
 }
 
 void UserInterface::setupDirEnv()
@@ -139,11 +145,12 @@ void UserInterface::setupDirEnv()
 
 void UserInterface::setupProfileUi()
 {
+    qreal screenRatio = AppEnv::screenRatio();
     if (GTAV_Profiles.length() == 0)
     {
         QPushButton *changeDirBtn = new QPushButton(tr("Select &GTA V Folder..."), ui->swSelection);
         changeDirBtn->setObjectName("cmdChangeDir");
-        changeDirBtn->setMinimumSize(0, 40);
+        changeDirBtn->setMinimumSize(0, 40 * screenRatio);
         changeDirBtn->setAutoDefault(true);
         ui->vlButtons->addWidget(changeDirBtn);
         profileBtns.append(changeDirBtn);
@@ -154,7 +161,7 @@ void UserInterface::setupProfileUi()
     {
         QPushButton *profileBtn = new QPushButton(GTAV_Profile, ui->swSelection);
         profileBtn->setObjectName(GTAV_Profile);
-        profileBtn->setMinimumSize(0, 40);
+        profileBtn->setMinimumSize(0, 40 * screenRatio);
         profileBtn->setAutoDefault(true);
         ui->vlButtons->addWidget(profileBtn);
         profileBtns.append(profileBtn);
diff --git a/config.h b/config.h
index 71257a2..dfe4780 100755
--- a/config.h
+++ b/config.h
@@ -1,5 +1,5 @@
 /*****************************************************************************
-* gta5sync GRAND THEFT AUTO V SYNC
+* gta5view Grand Theft Auto V Profile Viewer
 * Copyright (C) 2016-2017 Syping
 *
 * This program is free software: you can redistribute it and/or modify
@@ -50,7 +50,7 @@
 
 #ifndef GTA5SYNC_APPVER
 #ifndef GTA5SYNC_DAILYB
-#define GTA5SYNC_APPVER "1.4.0-dev3"
+#define GTA5SYNC_APPVER "1.4.0-dev4"
 #else
 #define GTA5SYNC_APPVER QString("%1").arg(GTA5SYNC_DAILYB)
 #endif
diff --git a/gta5view.pro b/gta5view.pro
index 7bace77..80327dd 100755
--- a/gta5view.pro
+++ b/gta5view.pro
@@ -21,11 +21,10 @@ QT       += core gui network
 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 greaterThan(QT_MAJOR_VERSION, 4): greaterThan(QT_MINOR_VERSION, 1): win32: QT += winextras
 
-DEFINES += GTA5SYNC_DISABLED # disabling sync (remove it for building gta5sync)
+DEFINES += GTA5SYNC_DISABLED
 
 DEPLOYMENT.display_name = gta5view
 TARGET = gta5view
-
 TEMPLATE = app
 
 SOURCES += main.cpp \
@@ -118,6 +117,7 @@ DISTFILES += res/app.rc \
     res/gta5sync_de.ts \
     res/gta5sync_fr.ts \
     res/gta5view.exe.manifest \
+    res/gta5view.png \
     lang/qtbase_ru.qm \
     lang/gta5sync_ru.ts \
     lang/qt_ru.qm \
@@ -157,6 +157,6 @@ isEqual(QT_MAJOR_VERSION, 4): SOURCES += qjson4/QJsonArray.cpp \
 unix: !macx: appfiles.path = $$(INSTALL_PATH)/share/applications
 unix: !macx: appfiles.files = $$PWD/res/gta5view.desktop
 unix: !macx: pixmaps.path = $$(INSTALL_PATH)/share/pixmaps
-unix: !macx: pixmaps.files = $$PWD/res/gta5view.xpm
+unix: !macx: pixmaps.files = $$PWD/res/gta5view.png
 unix: !macx: target.path = $$(INSTALL_PATH)/bin
 unix: !macx: INSTALLS += target pixmaps appfiles
diff --git a/lang/gta5sync_ru.ts b/lang/gta5sync_ru.ts
index bd2cb52..cbfb4ed 100755
--- a/lang/gta5sync_ru.ts
+++ b/lang/gta5sync_ru.ts
@@ -40,18 +40,26 @@ Copyright &amp;copy; &lt;a href=&quot;%5&quot;&gt;%6&lt;/a&gt; %7&lt;br/&gt;%8 i
         <translation type="obsolete">Закрыть</translation>
     </message>
     <message>
-        <location filename="../AboutDialog.cpp" line="39"/>
+        <location filename="../AboutDialog.cpp" line="40"/>
         <source>A project for viewing Grand Theft Auto V Snapmatic&lt;br/&gt;
 Pictures and Savegames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../AboutDialog.cpp" line="37"/>
+        <location filename="../AboutDialog.cpp" line="38"/>
         <source>A project for viewing and sync Grand Theft Auto V Snapmatic&lt;br/&gt;
 Pictures and Savegames</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>CrewDatabase</name>
+    <message>
+        <location filename="../CrewDatabase.cpp" line="64"/>
+        <source>No Crew</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 <context>
     <name>ExportDialog</name>
     <message>
@@ -315,44 +323,44 @@ Pictures and Savegames</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../OptionsDialog.cpp" line="125"/>
+        <location filename="../OptionsDialog.cpp" line="129"/>
         <source>System</source>
         <comment>System like PC System</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../OptionsDialog.cpp" line="125"/>
+        <location filename="../OptionsDialog.cpp" line="129"/>
         <source>%1 (%2 if available)</source>
         <comment>System like PC System = %1, System Language like Deutsch = %2</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../OptionsDialog.cpp" line="284"/>
         <location filename="../OptionsDialog.cpp" line="288"/>
+        <location filename="../OptionsDialog.cpp" line="292"/>
         <source>%1</source>
         <comment>%1</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../OptionsDialog.cpp" line="284"/>
+        <location filename="../OptionsDialog.cpp" line="288"/>
         <source>The new Custom Folder will initialize after you restart %1.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../OptionsDialog.cpp" line="288"/>
+        <location filename="../OptionsDialog.cpp" line="292"/>
         <source>The language change will take effect after you restart %1.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../OptionsDialog.cpp" line="298"/>
+        <location filename="../OptionsDialog.cpp" line="302"/>
         <source>No Profile</source>
         <comment>No Profile, as default</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../OptionsDialog.cpp" line="306"/>
         <location filename="../OptionsDialog.cpp" line="310"/>
-        <location filename="../OptionsDialog.cpp" line="312"/>
+        <location filename="../OptionsDialog.cpp" line="314"/>
+        <location filename="../OptionsDialog.cpp" line="316"/>
         <source>Profile: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -389,7 +397,6 @@ Pictures and Savegames</source>
     </message>
     <message>
         <location filename="../PictureDialog.ui" line="167"/>
-        <location filename="../PictureExport.cpp" line="221"/>
         <source>&amp;Export</source>
         <translation type="unfinished"></translation>
     </message>
@@ -400,6 +407,7 @@ Pictures and Savegames</source>
     </message>
     <message>
         <location filename="../PictureExport.cpp" line="89"/>
+        <location filename="../PictureExport.cpp" line="221"/>
         <source>Export</source>
         <translation type="unfinished">Экспорт</translation>
     </message>
@@ -413,54 +421,54 @@ Pictures and Savegames</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../PictureDialog.cpp" line="128"/>
+        <location filename="../PictureDialog.cpp" line="132"/>
         <source>Export as &amp;JPG picture...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PictureDialog.cpp" line="129"/>
+        <location filename="../PictureDialog.cpp" line="133"/>
         <source>Export as &amp;GTA Snapmatic...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PictureDialog.cpp" line="343"/>
+        <location filename="../PictureDialog.cpp" line="347"/>
         <source>Key 1 - Avatar Preview Mode
 Key 2 - Toggle Overlay
 Arrow Keys - Navigate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PictureDialog.cpp" line="402"/>
-        <location filename="../PictureDialog.cpp" line="474"/>
+        <location filename="../PictureDialog.cpp" line="406"/>
+        <location filename="../PictureDialog.cpp" line="478"/>
         <source>Snapmatic Picture Viewer</source>
         <translation>Просмотрщик фотографий Snapmatic</translation>
     </message>
     <message>
-        <location filename="../PictureDialog.cpp" line="402"/>
-        <location filename="../PictureDialog.cpp" line="474"/>
+        <location filename="../PictureDialog.cpp" line="406"/>
+        <location filename="../PictureDialog.cpp" line="478"/>
         <source>Failed at %1</source>
         <translation>Ошибка при %1</translation>
     </message>
     <message>
-        <location filename="../PictureDialog.cpp" line="529"/>
+        <location filename="../PictureDialog.cpp" line="533"/>
         <source>Avatar Preview Mode
 Press 1 for Default View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PictureDialog.cpp" line="463"/>
-        <location filename="../PictureDialog.cpp" line="473"/>
+        <location filename="../PictureDialog.cpp" line="467"/>
+        <location filename="../PictureDialog.cpp" line="477"/>
         <source>No player</source>
         <translation>Игроков нет</translation>
     </message>
     <message>
-        <location filename="../PictureDialog.cpp" line="466"/>
-        <location filename="../PictureDialog.cpp" line="473"/>
+        <location filename="../PictureDialog.cpp" line="470"/>
+        <location filename="../PictureDialog.cpp" line="477"/>
         <source>No crew</source>
         <translation>Без группы</translation>
     </message>
     <message>
-        <location filename="../PictureDialog.cpp" line="473"/>
+        <location filename="../PictureDialog.cpp" line="477"/>
         <source>Unknown Location</source>
         <translation type="unfinished"></translation>
     </message>
@@ -573,27 +581,27 @@ Press 1 for Default View</source>
         <translation>Загружается файл %1 из %2</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.ui" line="169"/>
+        <location filename="../ProfileInterface.ui" line="166"/>
         <source>%1 %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.ui" line="195"/>
+        <location filename="../ProfileInterface.ui" line="192"/>
         <source>Import exported file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.ui" line="198"/>
+        <location filename="../ProfileInterface.ui" line="195"/>
         <source>&amp;Import...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.ui" line="214"/>
+        <location filename="../ProfileInterface.ui" line="211"/>
         <source>Close profile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.ui" line="217"/>
+        <location filename="../ProfileInterface.ui" line="214"/>
         <source>&amp;Close</source>
         <translation type="unfinished"></translation>
     </message>
@@ -606,29 +614,29 @@ Press 1 for Default View</source>
         <translation type="obsolete">Закрыть профиль</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="111"/>
+        <location filename="../ProfileInterface.cpp" line="108"/>
         <source>Loading...</source>
         <translation>Загрузка...</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="369"/>
-        <location filename="../ProfileInterface.cpp" line="406"/>
+        <location filename="../ProfileInterface.cpp" line="384"/>
+        <location filename="../ProfileInterface.cpp" line="421"/>
         <source>Import...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="370"/>
-        <location filename="../ProfileInterface.cpp" line="460"/>
-        <location filename="../ProfileInterface.cpp" line="465"/>
-        <location filename="../ProfileInterface.cpp" line="492"/>
-        <location filename="../ProfileInterface.cpp" line="508"/>
-        <location filename="../ProfileInterface.cpp" line="658"/>
-        <location filename="../ProfileInterface.cpp" line="663"/>
-        <location filename="../ProfileInterface.cpp" line="681"/>
-        <location filename="../ProfileInterface.cpp" line="686"/>
-        <location filename="../ProfileInterface.cpp" line="697"/>
-        <location filename="../ProfileInterface.cpp" line="734"/>
-        <location filename="../ProfileInterface.cpp" line="740"/>
+        <location filename="../ProfileInterface.cpp" line="385"/>
+        <location filename="../ProfileInterface.cpp" line="475"/>
+        <location filename="../ProfileInterface.cpp" line="480"/>
+        <location filename="../ProfileInterface.cpp" line="507"/>
+        <location filename="../ProfileInterface.cpp" line="523"/>
+        <location filename="../ProfileInterface.cpp" line="673"/>
+        <location filename="../ProfileInterface.cpp" line="678"/>
+        <location filename="../ProfileInterface.cpp" line="696"/>
+        <location filename="../ProfileInterface.cpp" line="701"/>
+        <location filename="../ProfileInterface.cpp" line="712"/>
+        <location filename="../ProfileInterface.cpp" line="749"/>
+        <location filename="../ProfileInterface.cpp" line="755"/>
         <source>Import</source>
         <translation type="unfinished"></translation>
     </message>
@@ -637,138 +645,138 @@ Press 1 for Default View</source>
         <translation type="vanished">Все файлы профиля (SGTA* PGTA*)</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="375"/>
-        <location filename="../UserInterface.cpp" line="335"/>
+        <location filename="../ProfileInterface.cpp" line="390"/>
+        <location filename="../UserInterface.cpp" line="344"/>
         <source>Savegames files (SGTA*)</source>
         <translation>Файлы сохранения (SGTA*)</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="376"/>
-        <location filename="../UserInterface.cpp" line="336"/>
+        <location filename="../ProfileInterface.cpp" line="391"/>
+        <location filename="../UserInterface.cpp" line="345"/>
         <source>Snapmatic pictures (PGTA*)</source>
         <translation>Картинка Snapmatic (PGTA*)</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="378"/>
-        <location filename="../UserInterface.cpp" line="337"/>
+        <location filename="../ProfileInterface.cpp" line="393"/>
+        <location filename="../UserInterface.cpp" line="346"/>
         <source>All files (**)</source>
         <translation>Все файлы (**)</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="407"/>
         <location filename="../ProfileInterface.cpp" line="422"/>
+        <location filename="../ProfileInterface.cpp" line="437"/>
         <source>Import file %1 of %2 files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="460"/>
+        <location filename="../ProfileInterface.cpp" line="475"/>
         <source>Import failed with...
 
 %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="492"/>
-        <location filename="../UserInterface.cpp" line="377"/>
+        <location filename="../ProfileInterface.cpp" line="507"/>
+        <location filename="../UserInterface.cpp" line="386"/>
         <source>Failed to read Snapmatic picture</source>
         <translation>Не удалось загрузить картинку Snapmatic</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="508"/>
-        <location filename="../UserInterface.cpp" line="393"/>
+        <location filename="../ProfileInterface.cpp" line="523"/>
+        <location filename="../UserInterface.cpp" line="402"/>
         <source>Failed to read Savegame file</source>
         <translation>Не удалось загрузить файл сохранения</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="658"/>
+        <location filename="../ProfileInterface.cpp" line="673"/>
         <source>Can&apos;t import %1 because of not valid file format</source>
         <translation>Не получилось импортировать %1 из-за неправильного формата файла</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="465"/>
-        <location filename="../ProfileInterface.cpp" line="663"/>
-        <location filename="../UserInterface.cpp" line="425"/>
+        <location filename="../ProfileInterface.cpp" line="480"/>
+        <location filename="../ProfileInterface.cpp" line="678"/>
+        <location filename="../UserInterface.cpp" line="434"/>
         <source>No valid file is selected</source>
         <translation>Выбранный файл неверен</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="60"/>
+        <location filename="../ProfileInterface.cpp" line="61"/>
         <source>Enabled pictures: %1 of %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="373"/>
+        <location filename="../ProfileInterface.cpp" line="388"/>
         <source>Importable files (*.g5e *.jpg *.png SGTA* PGTA*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="377"/>
+        <location filename="../ProfileInterface.cpp" line="392"/>
         <source>All image files (*.jpg *.png)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="681"/>
+        <location filename="../ProfileInterface.cpp" line="696"/>
         <source>Failed to import the Snapmatic picture, file not begin with PGTA or end with .g5e</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="686"/>
+        <location filename="../ProfileInterface.cpp" line="701"/>
         <source>Failed to import the Snapmatic picture, the picture is already in the game</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="697"/>
+        <location filename="../ProfileInterface.cpp" line="712"/>
         <source>Failed to import the Snapmatic picture, can&apos;t copy the file into profile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="734"/>
+        <location filename="../ProfileInterface.cpp" line="749"/>
         <source>Failed to import the Savegame, can&apos;t copy the file into profile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="740"/>
+        <location filename="../ProfileInterface.cpp" line="755"/>
         <source>Failed to import the Savegame, no Savegame slot is left</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="826"/>
-        <location filename="../ProfileInterface.cpp" line="844"/>
+        <location filename="../ProfileInterface.cpp" line="841"/>
+        <location filename="../ProfileInterface.cpp" line="859"/>
         <source>JPG pictures and GTA Snapmatic</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="827"/>
-        <location filename="../ProfileInterface.cpp" line="849"/>
+        <location filename="../ProfileInterface.cpp" line="842"/>
+        <location filename="../ProfileInterface.cpp" line="864"/>
         <source>JPG pictures only</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="828"/>
-        <location filename="../ProfileInterface.cpp" line="853"/>
+        <location filename="../ProfileInterface.cpp" line="843"/>
+        <location filename="../ProfileInterface.cpp" line="868"/>
         <source>GTA Snapmatic only</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="940"/>
-        <location filename="../ProfileInterface.cpp" line="983"/>
+        <location filename="../ProfileInterface.cpp" line="953"/>
+        <location filename="../ProfileInterface.cpp" line="995"/>
         <source>No Snapmatic pictures or Savegames files are selected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="948"/>
-        <location filename="../ProfileInterface.cpp" line="977"/>
-        <location filename="../ProfileInterface.cpp" line="983"/>
+        <location filename="../ProfileInterface.cpp" line="961"/>
+        <location filename="../ProfileInterface.cpp" line="989"/>
+        <location filename="../ProfileInterface.cpp" line="995"/>
         <source>Remove selected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="948"/>
+        <location filename="../ProfileInterface.cpp" line="961"/>
         <source>You really want remove the selected Snapmatic picutres and Savegame files?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="977"/>
+        <location filename="../ProfileInterface.cpp" line="989"/>
         <source>Failed at remove the complete selected Snapmatic pictures and/or Savegame files</source>
         <translation type="unfinished"></translation>
     </message>
@@ -789,30 +797,30 @@ Press 1 for Default View</source>
         <translation type="obsolete">Не получилось имортировать копию сохранения, потому что не осталось свободных под них слотов</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="803"/>
-        <location filename="../ProfileInterface.cpp" line="841"/>
-        <location filename="../ProfileInterface.cpp" line="918"/>
-        <location filename="../ProfileInterface.cpp" line="940"/>
+        <location filename="../ProfileInterface.cpp" line="818"/>
+        <location filename="../ProfileInterface.cpp" line="856"/>
+        <location filename="../ProfileInterface.cpp" line="933"/>
+        <location filename="../ProfileInterface.cpp" line="953"/>
         <source>Export selected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="841"/>
+        <location filename="../ProfileInterface.cpp" line="856"/>
         <source>%1Export Snapmatic pictures%2&lt;br&gt;&lt;br&gt;JPG pictures make it possible to open the picture with a Image Viewer&lt;br&gt;GTA Snapmatic make it possible to import the picture into the game&lt;br&gt;&lt;br&gt;Export as:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="884"/>
+        <location filename="../ProfileInterface.cpp" line="899"/>
         <source>Export selected...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="885"/>
+        <location filename="../ProfileInterface.cpp" line="900"/>
         <source>Initializing export...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="918"/>
+        <location filename="../ProfileInterface.cpp" line="933"/>
         <source>Export failed with...
 
 %1</source>
@@ -826,13 +834,13 @@ Press 1 for Default View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UserInterface.cpp" line="333"/>
+        <location filename="../UserInterface.cpp" line="342"/>
         <source>All profile files (*.g5e SGTA* PGTA*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="374"/>
-        <location filename="../UserInterface.cpp" line="334"/>
+        <location filename="../ProfileInterface.cpp" line="389"/>
+        <location filename="../UserInterface.cpp" line="343"/>
         <source>GTA V Export (*.g5e)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -854,7 +862,7 @@ Press 1 for Default View</source>
     <name>SavegameDialog</name>
     <message>
         <location filename="../SavegameDialog.ui" line="14"/>
-        <location filename="../SavegameDialog.cpp" line="29"/>
+        <location filename="../SavegameDialog.cpp" line="33"/>
         <source>Savegame Viewer</source>
         <translation>Просмотрщик сохранений</translation>
     </message>
@@ -882,7 +890,7 @@ Press 1 for Default View</source>
         <translation type="obsolete">Закрыть</translation>
     </message>
     <message>
-        <location filename="../SavegameDialog.cpp" line="29"/>
+        <location filename="../SavegameDialog.cpp" line="33"/>
         <source>Failed at %1</source>
         <translation>Ошибка при %1</translation>
     </message>
@@ -974,34 +982,34 @@ Press 1 for Default View</source>
         <translation>Не удалось удалить сохранение %1</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1106"/>
+        <location filename="../ProfileInterface.cpp" line="1118"/>
         <source>&amp;View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1108"/>
+        <location filename="../ProfileInterface.cpp" line="1120"/>
         <source>&amp;Remove</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1112"/>
-        <location filename="../ProfileInterface.cpp" line="1123"/>
+        <location filename="../ProfileInterface.cpp" line="1124"/>
+        <location filename="../ProfileInterface.cpp" line="1135"/>
         <source>&amp;Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1113"/>
+        <location filename="../ProfileInterface.cpp" line="1125"/>
         <source>&amp;Deselect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1114"/>
-        <location filename="../ProfileInterface.cpp" line="1124"/>
+        <location filename="../ProfileInterface.cpp" line="1126"/>
+        <location filename="../ProfileInterface.cpp" line="1136"/>
         <source>Select &amp;All</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1117"/>
+        <location filename="../ProfileInterface.cpp" line="1129"/>
         <source>&amp;Deselect All</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1011,7 +1019,7 @@ Press 1 for Default View</source>
         <translation>Копировать сохранение</translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1107"/>
+        <location filename="../ProfileInterface.cpp" line="1119"/>
         <source>&amp;Export</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1071,7 +1079,7 @@ Press 1 for Default View</source>
     <message>
         <location filename="../SnapmaticEditor.ui" line="14"/>
         <location filename="../SnapmaticEditor.ui" line="81"/>
-        <location filename="../SnapmaticEditor.cpp" line="247"/>
+        <location filename="../SnapmaticEditor.cpp" line="239"/>
         <source>Snapmatic Properties</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1082,13 +1090,11 @@ Press 1 for Default View</source>
     </message>
     <message>
         <location filename="../SnapmaticEditor.ui" line="50"/>
-        <location filename="../SnapmaticEditor.ui" line="87"/>
         <source>Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../SnapmaticEditor.ui" line="57"/>
-        <location filename="../SnapmaticEditor.ui" line="108"/>
         <source>Selfie</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1099,96 +1105,116 @@ Press 1 for Default View</source>
     </message>
     <message>
         <location filename="../SnapmaticEditor.ui" line="71"/>
-        <location filename="../SnapmaticEditor.ui" line="115"/>
         <source>Mugshot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.ui" line="101"/>
+        <location filename="../SnapmaticEditor.ui" line="94"/>
         <source>Director</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.ui" line="94"/>
+        <location filename="../SnapmaticEditor.ui" line="104"/>
+        <source>Snapmatic Values</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../SnapmaticEditor.ui" line="113"/>
+        <location filename="../SnapmaticEditor.cpp" line="194"/>
+        <source>Crew: %1 (%2)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../SnapmaticEditor.ui" line="87"/>
         <source>Meme</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.ui" line="125"/>
-        <location filename="../SnapmaticEditor.cpp" line="297"/>
+        <location filename="../SnapmaticEditor.cpp" line="289"/>
         <source>Snapmatic Title</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.ui" line="140"/>
-        <location filename="../SnapmaticEditor.cpp" line="200"/>
+        <location filename="../SnapmaticEditor.ui" line="126"/>
+        <location filename="../SnapmaticEditor.cpp" line="179"/>
         <source>Title: %1 (%2)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.ui" line="156"/>
-        <location filename="../SnapmaticEditor.cpp" line="204"/>
-        <location filename="../SnapmaticEditor.cpp" line="208"/>
+        <location filename="../SnapmaticEditor.ui" line="136"/>
+        <location filename="../SnapmaticEditor.cpp" line="183"/>
+        <location filename="../SnapmaticEditor.cpp" line="187"/>
         <source>Appropriate: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.ui" line="169"/>
+        <location filename="../SnapmaticEditor.ui" line="149"/>
         <source>Extras</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.ui" line="175"/>
+        <location filename="../SnapmaticEditor.ui" line="155"/>
         <source>Qualify as Avatar automatically at apply</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.ui" line="188"/>
+        <location filename="../SnapmaticEditor.ui" line="168"/>
         <source>Qualify as Avatar allows you to use this Snapmatic as a Social Club profile picture</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.ui" line="238"/>
+        <location filename="../SnapmaticEditor.ui" line="218"/>
         <source>&amp;Apply</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.ui" line="251"/>
+        <location filename="../SnapmaticEditor.ui" line="231"/>
         <source>&amp;Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.cpp" line="199"/>
+        <location filename="../SnapmaticEditor.cpp" line="178"/>
+        <location filename="../SnapmaticEditor.cpp" line="193"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.cpp" line="204"/>
+        <location filename="../SnapmaticEditor.cpp" line="183"/>
         <source>Yes</source>
         <comment>Yes, should work fine</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.cpp" line="208"/>
+        <location filename="../SnapmaticEditor.cpp" line="187"/>
         <source>No</source>
         <comment>No, could lead to issues</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.cpp" line="247"/>
+        <location filename="../SnapmaticEditor.cpp" line="239"/>
         <source>Patching of Snapmatic Properties failed because of I/O Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../SnapmaticEditor.cpp" line="297"/>
+        <location filename="../SnapmaticEditor.cpp" line="289"/>
         <source>New Snapmatic title:</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../SnapmaticEditor.cpp" line="314"/>
+        <source>Snapmatic Crew</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../SnapmaticEditor.cpp" line="314"/>
+        <source>New Snapmatic crew:</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SnapmaticPicture</name>
     <message>
-        <location filename="../SnapmaticPicture.cpp" line="370"/>
+        <location filename="../SnapmaticPicture.cpp" line="363"/>
         <source>PHOTO - %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1232,85 +1258,85 @@ Press 1 for Default View</source>
     </message>
     <message>
         <location filename="../SnapmaticWidget.ui" line="149"/>
-        <location filename="../SnapmaticWidget.cpp" line="150"/>
-        <location filename="../SnapmaticWidget.cpp" line="163"/>
+        <location filename="../SnapmaticWidget.cpp" line="159"/>
+        <location filename="../SnapmaticWidget.cpp" line="168"/>
         <source>Delete picture</source>
         <translation>Удалить картинку</translation>
     </message>
     <message>
-        <location filename="../SnapmaticWidget.cpp" line="150"/>
+        <location filename="../SnapmaticWidget.cpp" line="159"/>
         <source>Are you sure to delete %1 from your Snapmatic pictures?</source>
         <translation>Уверены, что хотите удалить %1 из коллекции картинок Snapmatic?</translation>
     </message>
     <message>
-        <location filename="../SnapmaticWidget.cpp" line="163"/>
+        <location filename="../SnapmaticWidget.cpp" line="168"/>
         <source>Failed at deleting %1 from your Snapmatic pictures</source>
         <translation>Не удалось удалить %1 из колелкции картинок Snapmatic </translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1065"/>
+        <location filename="../ProfileInterface.cpp" line="1077"/>
         <source>Edi&amp;t</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1068"/>
+        <location filename="../ProfileInterface.cpp" line="1080"/>
         <source>Show &amp;In-game</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1072"/>
+        <location filename="../ProfileInterface.cpp" line="1084"/>
         <source>Hide &amp;In-game</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1074"/>
+        <location filename="../ProfileInterface.cpp" line="1086"/>
         <source>&amp;Edit Properties...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1075"/>
+        <location filename="../ProfileInterface.cpp" line="1087"/>
         <source>&amp;Export</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1076"/>
+        <location filename="../ProfileInterface.cpp" line="1088"/>
         <source>Export as &amp;JPG picture...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1077"/>
+        <location filename="../ProfileInterface.cpp" line="1089"/>
         <source>Export as &amp;GTA Snapmatic...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1078"/>
+        <location filename="../ProfileInterface.cpp" line="1090"/>
         <source>&amp;View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1081"/>
+        <location filename="../ProfileInterface.cpp" line="1093"/>
         <source>&amp;Remove</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1085"/>
-        <location filename="../ProfileInterface.cpp" line="1096"/>
+        <location filename="../ProfileInterface.cpp" line="1097"/>
+        <location filename="../ProfileInterface.cpp" line="1108"/>
         <source>&amp;Select</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1086"/>
+        <location filename="../ProfileInterface.cpp" line="1098"/>
         <source>&amp;Deselect</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1087"/>
-        <location filename="../ProfileInterface.cpp" line="1097"/>
+        <location filename="../ProfileInterface.cpp" line="1099"/>
+        <location filename="../ProfileInterface.cpp" line="1109"/>
         <source>Select &amp;All</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../ProfileInterface.cpp" line="1090"/>
+        <location filename="../ProfileInterface.cpp" line="1102"/>
         <source>&amp;Deselect All</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1520,15 +1546,15 @@ Press 1 for Default View</source>
     </message>
     <message>
         <location filename="../UserInterface.cpp" line="62"/>
-        <location filename="../UserInterface.cpp" line="214"/>
+        <location filename="../UserInterface.cpp" line="213"/>
         <source>Select Profile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../UserInterface.ui" line="306"/>
-        <location filename="../OptionsDialog.cpp" line="444"/>
+        <location filename="../OptionsDialog.cpp" line="448"/>
         <location filename="../UserInterface.cpp" line="93"/>
-        <location filename="../UserInterface.cpp" line="474"/>
+        <location filename="../UserInterface.cpp" line="488"/>
         <source>Select GTA V Folder...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1545,20 +1571,20 @@ Press 1 for Default View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UserInterface.cpp" line="330"/>
+        <location filename="../UserInterface.cpp" line="339"/>
         <source>Open File...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UserInterface.cpp" line="377"/>
-        <location filename="../UserInterface.cpp" line="393"/>
-        <location filename="../UserInterface.cpp" line="420"/>
-        <location filename="../UserInterface.cpp" line="425"/>
+        <location filename="../UserInterface.cpp" line="386"/>
+        <location filename="../UserInterface.cpp" line="402"/>
+        <location filename="../UserInterface.cpp" line="429"/>
+        <location filename="../UserInterface.cpp" line="434"/>
         <source>Open File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UserInterface.cpp" line="420"/>
+        <location filename="../UserInterface.cpp" line="429"/>
         <source>Can&apos;t open %1 because of not valid file format</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/res/app.rc b/res/app.rc
index 1f7cbcb..8ec6e6c 100755
--- a/res/app.rc
+++ b/res/app.rc
@@ -7,8 +7,8 @@ CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "gta5view.exe.manifest"
 #include <windows.h>
 
 VS_VERSION_INFO     VERSIONINFO
-FILEVERSION         1, 4, 0, 0
-PRODUCTVERSION      1, 4, 0, 0
+FILEVERSION         1, 4, 0, 4
+PRODUCTVERSION      1, 4, 0, 4
 FILEFLAGSMASK       0x3fL
 FILEFLAGS           0
 FILEOS              VOS_NT_WINDOWS32
@@ -25,12 +25,12 @@ BEGIN
         BEGIN
             VALUE   "CompanyName",      "Syping"
             VALUE   "FileDescription",  "gta5view\0"
-            VALUE   "FileVersion",      "1.4.0-dev3\0"
+            VALUE   "FileVersion",      "1.4.0-dev4\0"
             VALUE   "InternalName",     "gta5view\0"
             VALUE   "LegalCopyright",   "Copyright � 2016-2017 Syping\0"
             VALUE   "OriginalFilename", "gta5view.exe\0"
             VALUE   "ProductName",      "gta5view\0"
-            VALUE   "ProductVersion",   "1.4.0-dev3\0"
+            VALUE   "ProductVersion",   "1.4.0-dev4\0"
         END
     END
 END
diff --git a/res/gta5view.desktop b/res/gta5view.desktop
index 168bfd0..28c99d7 100644
--- a/res/gta5view.desktop
+++ b/res/gta5view.desktop
@@ -1,11 +1,11 @@
-[Desktop Entry]
-Version=1.0
-Encoding=UTF-8
-Type=Application
-Name=gta5view
-Comment=gta5view
-Categories=Qt;Application;Utility;
-Exec=gta5view
-Icon=gta5view
-Terminal=false
-StartupNotify=false
+[Desktop Entry]
+Version=1.0
+Encoding=UTF-8
+Type=Application
+Name=gta5view
+Comment=gta5view
+Categories=Qt;Application;Utility;
+Exec=gta5view
+Icon=gta5view
+Terminal=false
+StartupNotify=false
diff --git a/res/gta5view.png b/res/gta5view.png
new file mode 100644
index 0000000000000000000000000000000000000000..bf41d479af7bb427e459e294b9b3f99f84de21a8
GIT binary patch
literal 7189
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
A?*IS*

literal 0
HcmV?d00001