From 330f0e398444a0348d30152d2a06dfb0ec8963ff Mon Sep 17 00:00:00 2001
From: Rafael <Syping@users.noreply.github.com>
Date: Fri, 8 Apr 2016 19:46:27 +0200
Subject: [PATCH] export bug fixed, UI updated

---
 ExportThread.cpp     |   4 +-
 PictureDialog.cpp    |   4 +-
 PictureDialog.ui     |  64 +++++++---
 ProfileInterface.cpp | 287 +++++++++++++++++++++++--------------------
 ProfileInterface.ui  |   5 +-
 SnapmaticWidget.cpp  |   4 +-
 UserInterface.ui     |   2 +-
 7 files changed, 211 insertions(+), 159 deletions(-)

diff --git a/ExportThread.cpp b/ExportThread.cpp
index 7a3a514..a0155b6 100755
--- a/ExportThread.cpp
+++ b/ExportThread.cpp
@@ -37,7 +37,7 @@ void ExportThread::run()
     {
         if (widget->isSelected())
         {
-            if (profileMap[widget] == "SnapmaticWidget")
+            if (widget->getWidgetType() == "SnapmaticWidget")
             {
                 SnapmaticWidget *picWidget = (SnapmaticWidget*)widget;
                 SnapmaticPicture *picture = picWidget->getPicture();
@@ -73,7 +73,7 @@ void ExportThread::run()
                     }
                 }
             }
-            else if (profileMap[widget] == "SavegameWidget")
+            else if (widget->getWidgetType() == "SavegameWidget")
             {
                 SavegameWidget *sgdWidget = (SavegameWidget*)widget;
                 SavegameData *savegame = sgdWidget->getSavegame();
diff --git a/PictureDialog.cpp b/PictureDialog.cpp
index 17ec637..b7470b6 100755
--- a/PictureDialog.cpp
+++ b/PictureDialog.cpp
@@ -56,8 +56,8 @@ PictureDialog::PictureDialog(ProfileDatabase *profileDB, QWidget *parent) :
 
     // Export menu
     exportMenu = new QMenu(this);
-    exportMenu->addAction(tr("Export as &picture...", "Export as picture"), this, SLOT(exportSnapmaticPicture()));
-    exportMenu->addAction(tr("Export for &import...", "Export for import"), this, SLOT(copySnapmaticPicture()));
+    exportMenu->addAction(tr("Export as &JPG picture..."), this, SLOT(exportSnapmaticPicture()));
+    exportMenu->addAction(tr("Export as &GTA Snapmatic..."), this, SLOT(copySnapmaticPicture()));
     ui->cmdExport->setMenu(exportMenu);
 }
 
diff --git a/PictureDialog.ui b/PictureDialog.ui
index a396926..13e9e41 100755
--- a/PictureDialog.ui
+++ b/PictureDialog.ui
@@ -31,7 +31,7 @@
      <property name="sizePolicy">
       <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
        <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
+       <verstretch>1</verstretch>
       </sizepolicy>
      </property>
      <property name="text">
@@ -86,24 +86,54 @@
        </widget>
       </item>
       <item>
-       <widget class="QPushButton" name="cmdExport">
-        <property name="toolTip">
-         <string>Export picture</string>
+       <layout class="QVBoxLayout" name="vlButtons">
+        <property name="rightMargin">
+         <number>5</number>
         </property>
-        <property name="text">
-         <string>&amp;Export</string>
+        <property name="bottomMargin">
+         <number>5</number>
         </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QPushButton" name="cmdClose">
-        <property name="toolTip">
-         <string>Close</string>
-        </property>
-        <property name="text">
-         <string>&amp;Close</string>
-        </property>
-       </widget>
+        <item>
+         <spacer name="vsButtons">
+          <property name="orientation">
+           <enum>Qt::Vertical</enum>
+          </property>
+          <property name="sizeType">
+           <enum>QSizePolicy::Expanding</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>0</width>
+            <height>0</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <layout class="QHBoxLayout" name="hlButtons">
+          <item>
+           <widget class="QPushButton" name="cmdExport">
+            <property name="toolTip">
+             <string>Export picture</string>
+            </property>
+            <property name="text">
+             <string>&amp;Export</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QPushButton" name="cmdClose">
+            <property name="toolTip">
+             <string>Close</string>
+            </property>
+            <property name="text">
+             <string>&amp;Close</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
       </item>
      </layout>
     </widget>
diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp
index c0398b7..3b60208 100755
--- a/ProfileInterface.cpp
+++ b/ProfileInterface.cpp
@@ -310,7 +310,7 @@ fileDialogPreOpen:
                     }
                     else
                     {
-                        QMessageBox::warning(this, tr("Import copy"), tr("Failed to read Snapmatic picture"));
+                        QMessageBox::warning(this, tr("Import"), tr("Failed to read Snapmatic picture"));
                         picture->deleteLater();
                         delete picture;
                         goto fileDialogPreOpen;
@@ -325,7 +325,7 @@ fileDialogPreOpen:
                     }
                     else
                     {
-                        QMessageBox::warning(this, tr("Import copy"), tr("Failed to read Savegame file"));
+                        QMessageBox::warning(this, tr("Import"), tr("Failed to read Savegame file"));
                         savegame->deleteLater();
                         delete savegame;
                         goto fileDialogPreOpen;
@@ -353,20 +353,20 @@ fileDialogPreOpen:
                         picture->deleteLater();
                         delete savegame;
                         delete picture;
-                        QMessageBox::warning(this, tr("Import copy"), tr("Can't import %1 because of not valid file format").arg("\""+selectedFileName+"\""));
+                        QMessageBox::warning(this, tr("Import"), tr("Can't import %1 because of not valid file format").arg("\""+selectedFileName+"\""));
                         goto fileDialogPreOpen;
                     }
                 }
             }
             else
             {
-                QMessageBox::warning(this, tr("Import copy"), tr("No valid file is selected"));
+                QMessageBox::warning(this, tr("Import"), tr("No valid file is selected"));
                 goto fileDialogPreOpen;
             }
         }
         else
         {
-            QMessageBox::warning(this, tr("Import copy"), tr("No valid file is selected"));
+            QMessageBox::warning(this, tr("Import"), tr("No valid file is selected"));
             goto fileDialogPreOpen;
         }
     }
@@ -381,7 +381,7 @@ bool ProfileInterface::importSnapmaticPicture(SnapmaticPicture *picture, QString
     QString picFileName = picFileInfo.fileName();
     if (picFileName.left(4) != "PGTA")
     {
-        QMessageBox::warning(this, tr("Import copy"), tr("Failed to import copy of Snapmatic picture because the file not begin with PGTA"));
+        QMessageBox::warning(this, tr("Import"), tr("Failed to import the Snapmatic picture, file not begin with PGTA"));
         return false;
     }
     else if (QFile::copy(picPath, profileFolder + "/" + picFileName))
@@ -391,7 +391,7 @@ bool ProfileInterface::importSnapmaticPicture(SnapmaticPicture *picture, QString
     }
     else
     {
-        QMessageBox::warning(this, tr("Import copy"), tr("Failed to import copy of Snapmatic picture because the copy failed"));
+        QMessageBox::warning(this, tr("Import"), tr("Failed to import the Snapmatic picture, can't copy the file into profile"));
         return false;
     }
 }
@@ -427,13 +427,13 @@ bool ProfileInterface::importSavegameData(SavegameData *savegame, QString sgdPat
         }
         else
         {
-            QMessageBox::warning(this, tr("Import copy"), tr("Failed to import copy of Savegame file because the copy failed"));
+            QMessageBox::warning(this, tr("Import"), tr("Failed to import the Savegame, can't copy the file into profile"));
             return false;
         }
     }
     else
     {
-        QMessageBox::warning(this, tr("Import copy"), tr("Failed to import copy of Savegame file because no free Savegame slot left"));
+        QMessageBox::warning(this, tr("Import"), tr("Failed to import the Savegame, no Savegame slot is left"));
         return false;
     }
 }
@@ -482,163 +482,182 @@ void ProfileInterface::deselectAllWidgets()
 
 void ProfileInterface::exportSelected()
 {
-    int exportCount = 0;
-    int exportPictures = 0;
-    int exportSavegames = 0;
-    bool pictureCopyEnabled = false;
-    bool pictureExportEnabled = false;
-
-    QString exportDirectory = QFileDialog::getExistingDirectory(this, tr("Export selected"), profileFolder);
-    if (exportDirectory != "")
+    if (selectedWidgts != 0)
     {
-        foreach (ProfileWidget *widget, widgets.keys())
+        int exportCount = 0;
+        int exportPictures = 0;
+        int exportSavegames = 0;
+        bool pictureCopyEnabled = false;
+        bool pictureExportEnabled = false;
+
+        QString exportDirectory = QFileDialog::getExistingDirectory(this, tr("Export selected"), profileFolder);
+        if (exportDirectory != "")
         {
-            if (widget->isSelected())
+            foreach (ProfileWidget *widget, widgets.keys())
             {
-                if (widget->getWidgetType() == "SnapmaticWidget")
+                if (widget->isSelected())
                 {
-                    exportPictures++;
-                }
-                else if (widget->getWidgetType() == "SavegameWidgets")
-                {
-                    exportSavegames++;
+                    if (widget->getWidgetType() == "SnapmaticWidget")
+                    {
+                        exportPictures++;
+                    }
+                    else if (widget->getWidgetType() == "SavegameWidget")
+                    {
+                        exportSavegames++;
+                    }
                 }
             }
-        }
 
-        if (exportPictures != 0)
-        {
-            QInputDialog inputDialog;
-            QStringList inputDialogItems;
-            inputDialogItems << tr("Export and Copy pictures");
-            inputDialogItems << tr("Export pictures");
-            inputDialogItems << tr("Copy pictures");
-
-            bool itemSelected = false;
-            QString selectedItem = inputDialog.getItem(this, tr("Export selected"), tr("How should we deal with the Snapmatic pictures?"), inputDialogItems, 0, false, &itemSelected, inputDialog.windowFlags()^Qt::WindowContextHelpButtonHint);
-            if (itemSelected)
+            if (exportPictures != 0)
             {
-                if (selectedItem == tr("Export and Copy pictures"))
+                QInputDialog inputDialog;
+                QStringList inputDialogItems;
+                inputDialogItems << tr("JPG pictures and GTA Snapmatic");
+                inputDialogItems << tr("JPG pictures only");
+                inputDialogItems << tr("GTA Snapmatic only");
+
+                bool itemSelected = false;
+                QString selectedItem = inputDialog.getItem(this, tr("Export selected"), tr("Export Snapmatic pictures\n\nJPG pictures make it possible to open the picture with a Image Viewer\nGTA Snapmatic make it possible to import the picture into the game\n\nExport as:"), inputDialogItems, 0, false, &itemSelected, inputDialog.windowFlags()^Qt::WindowContextHelpButtonHint);
+                if (itemSelected)
+                {
+                    if (selectedItem == tr("JPG pictures and GTA Snapmatic"))
+                    {
+                        pictureExportEnabled = true;
+                        pictureCopyEnabled = true;
+                    }
+                    else if (selectedItem == tr("JPG pictures only"))
+                    {
+                        pictureExportEnabled = true;
+                    }
+                    else if (selectedItem == tr("GTA Snapmatic only"))
+                    {
+                        pictureCopyEnabled = true;
+                    }
+                    else
+                    {
+                        pictureExportEnabled = true;
+                        pictureCopyEnabled = true;
+                    }
+                }
+                else
                 {
                     pictureExportEnabled = true;
                     pictureCopyEnabled = true;
                 }
-                else if (selectedItem == tr("Export pictures"))
-                {
-                    pictureExportEnabled = true;
-                }
-                else if (selectedItem == tr("Copy pictures"))
-                {
-                    pictureCopyEnabled = true;
-                }
+            }
+
+            // Counting the exports together
+            exportCount = exportCount + exportSavegames;
+            if (pictureExportEnabled && pictureCopyEnabled)
+            {
+                int exportPictures2 = exportPictures * 2;
+                exportCount = exportCount + exportPictures2;
             }
             else
             {
-                pictureExportEnabled = true;
-                pictureCopyEnabled = true;
+                exportCount = exportCount + exportPictures;
+            }
+
+            QProgressDialog pbDialog(this);
+            pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint);
+            pbDialog.setWindowTitle(tr("Export selected..."));
+            pbDialog.setLabelText(tr("Initializing export..."));
+            pbDialog.setRange(0, exportCount);
+
+            QList<QPushButton*> pbBtn = pbDialog.findChildren<QPushButton*>();
+            pbBtn.at(0)->setDisabled(true);
+
+            QList<QProgressBar*> pbBar = pbDialog.findChildren<QProgressBar*>();
+            pbBar.at(0)->setTextVisible(false);
+
+            ExportThread *exportThread = new ExportThread(widgets, exportDirectory, pictureCopyEnabled, pictureExportEnabled, exportCount);
+            QObject::connect(exportThread, SIGNAL(exportStringUpdate(QString)), &pbDialog, SLOT(setLabelText(QString)));
+            QObject::connect(exportThread, SIGNAL(exportProgressUpdate(int)), &pbDialog, SLOT(setValue(int)));
+            QObject::connect(exportThread, SIGNAL(exportFinished()), &pbDialog, SLOT(close()));
+            exportThread->start();
+
+            pbDialog.exec();
+            QStringList getFailedSavegames = exportThread->getFailedSavegames();
+            QStringList getFailedCopyPictures = exportThread->getFailedCopyPictures();
+            QStringList getFailedExportPictures = exportThread->getFailedExportPictures();
+
+            QString errorStr;
+            QStringList errorList;
+            errorList << getFailedExportPictures;
+            errorList << getFailedCopyPictures;
+            errorList << getFailedSavegames;
+
+            foreach (const QString &curErrorStr, errorList)
+            {
+                errorStr.append(", " + curErrorStr);
+            }
+            if (errorStr != "")
+            {
+                errorStr.remove(0, 2);
+                QMessageBox::warning(this, tr("Export selected"), tr("Export failed with...\n\n%1").arg(errorStr));
+            }
+
+            if (exportThread->isFinished())
+            {
+                exportThread->deleteLater();
+                delete exportThread;
+            }
+            else
+            {
+                QEventLoop threadFinishLoop;
+                QObject::connect(exportThread, SIGNAL(finished()), &threadFinishLoop, SLOT(quit()));
+                threadFinishLoop.exec();
+                exportThread->deleteLater();
+                delete exportThread;
             }
         }
-
-        // Counting the exports together
-        exportCount = exportCount + exportSavegames;
-        if (pictureExportEnabled && pictureCopyEnabled)
-        {
-            int exportPictures2 = exportPictures * 2;
-            exportCount = exportCount + exportPictures2;
-        }
-        else
-        {
-            exportCount = exportCount + exportPictures;
-        }
-
-        QProgressDialog pbDialog(this);
-        pbDialog.setWindowFlags(pbDialog.windowFlags()^Qt::WindowContextHelpButtonHint^Qt::WindowCloseButtonHint);
-        pbDialog.setWindowTitle(tr("Export selected..."));
-        pbDialog.setLabelText(tr("Initializing export..."));
-        pbDialog.setRange(0, exportCount);
-
-        QList<QPushButton*> pbBtn = pbDialog.findChildren<QPushButton*>();
-        pbBtn.at(0)->setDisabled(true);
-
-        QList<QProgressBar*> pbBar = pbDialog.findChildren<QProgressBar*>();
-        pbBar.at(0)->setTextVisible(false);
-
-        ExportThread *exportThread = new ExportThread(widgets, exportDirectory, pictureCopyEnabled, pictureExportEnabled, exportCount);
-        QObject::connect(exportThread, SIGNAL(exportStringUpdate(QString)), &pbDialog, SLOT(setLabelText(QString)));
-        QObject::connect(exportThread, SIGNAL(exportProgressUpdate(int)), &pbDialog, SLOT(setValue(int)));
-        QObject::connect(exportThread, SIGNAL(exportFinished()), &pbDialog, SLOT(close()));
-        exportThread->start();
-
-        pbDialog.exec();
-        QStringList getFailedSavegames = exportThread->getFailedSavegames();
-        QStringList getFailedCopyPictures = exportThread->getFailedCopyPictures();
-        QStringList getFailedExportPictures = exportThread->getFailedExportPictures();
-
-        QString errorStr;
-        QStringList errorList;
-        errorList << getFailedExportPictures;
-        errorList << getFailedCopyPictures;
-        errorList << getFailedSavegames;
-
-        foreach (const QString &curErrorStr, errorList)
-        {
-            errorStr.append(", " + curErrorStr);
-        }
-        if (errorStr != "")
-        {
-            errorStr.remove(0, 2);
-            QMessageBox::warning(this, tr("Export selected"), tr("Export failed with...\n\n%1").arg(errorStr));
-        }
-
-        if (exportThread->isFinished())
-        {
-            exportThread->deleteLater();
-            delete exportThread;
-        }
-        else
-        {
-            QEventLoop threadFinishLoop;
-            QObject::connect(exportThread, SIGNAL(finished()), &threadFinishLoop, SLOT(quit()));
-            threadFinishLoop.exec();
-            exportThread->deleteLater();
-            delete exportThread;
-        }
+    }
+    else
+    {
+        QMessageBox::information(this, tr("Export selected"), tr("No Snapmatic pictures or Savegames files are selected"));
     }
 }
 
 void ProfileInterface::deleteSelected()
 {
-    if (QMessageBox::Yes == QMessageBox::warning(this, tr("Delete selected"), tr("You really want delete the selected content?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No))
+    if (selectedWidgts != 0)
     {
-        foreach (ProfileWidget *widget, widgets.keys())
+        if (QMessageBox::Yes == QMessageBox::warning(this, tr("Remove selected"), tr("You really want remove the selected Snapmatic picutres and Savegame files?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No))
         {
-            if (widget->isSelected())
+            foreach (ProfileWidget *widget, widgets.keys())
             {
-                if (widget->getWidgetType() == "SnapmaticWidget")
+                if (widget->isSelected())
                 {
-                    SnapmaticWidget *picWidget = (SnapmaticWidget*)widget;
-                    SnapmaticPicture *picture = picWidget->getPicture();
-                    QString fileName = picture->getPictureFileName();
-                    if (!QFile::exists(fileName) || QFile::remove(fileName))
+                    if (widget->getWidgetType() == "SnapmaticWidget")
                     {
-                        pictureDeleted_f(picWidget);
+                        SnapmaticWidget *picWidget = (SnapmaticWidget*)widget;
+                        SnapmaticPicture *picture = picWidget->getPicture();
+                        QString fileName = picture->getPictureFileName();
+                        if (!QFile::exists(fileName) || QFile::remove(fileName))
+                        {
+                            pictureDeleted_f(picWidget);
+                        }
                     }
-                }
-                else if (widget->getWidgetType() == "SavegameWidget")
-                {
-                    SavegameWidget *sgdWidget = (SavegameWidget*)widget;
-                    SavegameData *savegame = sgdWidget->getSavegame();
-                    QString fileName = savegame->getSavegameFileName();
-                    if (!QFile::exists(fileName) || QFile::remove(fileName))
+                    else if (widget->getWidgetType() == "SavegameWidget")
                     {
-                        savegameDeleted_f(sgdWidget);
+                        SavegameWidget *sgdWidget = (SavegameWidget*)widget;
+                        SavegameData *savegame = sgdWidget->getSavegame();
+                        QString fileName = savegame->getSavegameFileName();
+                        if (!QFile::exists(fileName) || QFile::remove(fileName))
+                        {
+                            savegameDeleted_f(sgdWidget);
+                        }
                     }
                 }
             }
-        }
-        if (selectedWidgts != 0)
-        {
-            QMessageBox::warning(this, tr("Delete selected"), tr("Failed at delete all selected content"));
+            if (selectedWidgts != 0)
+            {
+                QMessageBox::warning(this, tr("Remove selected"), tr("Failed at remove the complete selected Snapmatic pictures and/or Savegame files"));
+            }
         }
     }
+    else
+    {
+        QMessageBox::information(this, tr("Remove selected"), tr("No Snapmatic pictures or Savegames files are selected"));
+    }
 }
diff --git a/ProfileInterface.ui b/ProfileInterface.ui
index d43bbac..128b4f9 100755
--- a/ProfileInterface.ui
+++ b/ProfileInterface.ui
@@ -14,6 +14,9 @@
    <string>Profile Interface</string>
   </property>
   <layout class="QVBoxLayout" name="vlProfileInterface">
+   <property name="spacing">
+    <number>0</number>
+   </property>
    <property name="leftMargin">
     <number>0</number>
    </property>
@@ -106,7 +109,7 @@
             <x>0</x>
             <y>0</y>
             <width>398</width>
-            <height>251</height>
+            <height>257</height>
            </rect>
           </property>
           <layout class="QVBoxLayout" name="vlProfile">
diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp
index ed92a0f..133e5f2 100755
--- a/SnapmaticWidget.cpp
+++ b/SnapmaticWidget.cpp
@@ -176,8 +176,8 @@ void SnapmaticWidget::contextMenuEvent(QContextMenuEvent *ev)
 {
     QMenu contextMenu(this);
     QMenu exportMenu(tr("&Export"), this);
-    exportMenu.addAction(tr("Export as &picture...", "Export as picture"), this, SLOT(on_cmdExport_clicked()));
-    exportMenu.addAction(tr("Export for &import...", "Export for import"), this, SLOT(on_cmdCopy_clicked()));
+    exportMenu.addAction(tr("Export as &JPG picture"), this, SLOT(on_cmdExport_clicked()));
+    exportMenu.addAction(tr("Export as &GTA Snapmatic"), this, SLOT(on_cmdCopy_clicked()));
     contextMenu.addAction(tr("&View"), this, SLOT(on_cmdView_clicked()));
     contextMenu.addMenu(&exportMenu);
     contextMenu.addAction(tr("&Remove"), this, SLOT(on_cmdDelete_clicked()));
diff --git a/UserInterface.ui b/UserInterface.ui
index d16dc1a..36cc9ee 100755
--- a/UserInterface.ui
+++ b/UserInterface.ui
@@ -166,7 +166,7 @@
   </action>
   <action name="actionExport_selected">
    <property name="text">
-    <string>&amp;Export selected</string>
+    <string>&amp;Export selected...</string>
    </property>
    <property name="shortcut">
     <string>Ctrl+E</string>