diff --git a/PictureDialog.cpp b/PictureDialog.cpp index ef2ca3f..18fdf29 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -43,6 +43,7 @@ PictureDialog::PictureDialog(ProfileDatabase *profileDB, QWidget *parent) : ui->cmdExport->setEnabled(0); plyrsList = QStringList(); picTitl = ""; + picPath = ""; crewID = ""; locX = ""; locY = ""; @@ -55,9 +56,10 @@ PictureDialog::~PictureDialog() delete ui; } -void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, bool readOk) +void PictureDialog::setSnapmaticPicture(SnapmaticPicture *picture, QString picturePath, bool readOk) { // Showing error if reading error + picPath = picturePath; smpic = picture; if (!readOk) { @@ -262,7 +264,7 @@ fileDialogPreSave: if (!isSaved) { - QMessageBox::warning(this, tr("Export picture"), tr("Failed to save current picture")); + QMessageBox::warning(this, tr("Export picture"), tr("Failed to export current Snapmatic picture")); goto fileDialogPreSave; } } @@ -276,3 +278,72 @@ fileDialogPreSave: settings.setValue("ExportPicture", fileDialog.saveState()); settings.endGroup(); } + +void PictureDialog::on_cmdCopy_clicked() +{ + QSettings settings("Syping", "gta5sync"); + settings.beginGroup("FileDialogs"); + +fileDialogPreSave: + QFileInfo sgdFileInfo(picPath); + QFileDialog fileDialog(this); + fileDialog.setFileMode(QFileDialog::AnyFile); + fileDialog.setViewMode(QFileDialog::Detail); + fileDialog.setAcceptMode(QFileDialog::AcceptSave); + fileDialog.setOption(QFileDialog::DontUseNativeDialog, true); + fileDialog.setOption(QFileDialog::DontConfirmOverwrite, true); + fileDialog.setDefaultSuffix(""); + fileDialog.setWindowFlags(fileDialog.windowFlags()^Qt::WindowContextHelpButtonHint); + fileDialog.setWindowTitle(tr("Copy picture")); + + QStringList filters; + filters << tr("Snapmatic pictures (PGTA*)"); + filters << tr("All files (**)"); + fileDialog.setNameFilters(filters); + + QList<QUrl> sidebarUrls = SidebarGenerator::generateSidebarUrls(fileDialog.sidebarUrls()); + + fileDialog.setSidebarUrls(sidebarUrls); + fileDialog.restoreState(settings.value("CopyPicture","").toByteArray()); + fileDialog.selectFile(sgdFileInfo.fileName()); + + if (fileDialog.exec()) + { + QStringList selectedFiles = fileDialog.selectedFiles(); + if (selectedFiles.length() == 1) + { + QString selectedFile = selectedFiles.at(0); + + if (QFile::exists(selectedFile)) + { + if (QMessageBox::Yes == QMessageBox::warning(this, tr("Copy picture"), tr("Overwrite %1 with current Snapmatic picture?").arg("\""+selectedFile+"\""), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) + { + if (!QFile::remove(selectedFile)) + { + QMessageBox::warning(this, tr("Copy picture"), tr("Failed to overwrite %1 with current Snapmatic picture").arg("\""+selectedFile+"\"")); + goto fileDialogPreSave; + } + } + else + { + goto fileDialogPreSave; + } + } + + bool isCopied = QFile::copy(picPath, selectedFile); + if (!isCopied) + { + QMessageBox::warning(this, tr("Copy picture"), tr("Failed to copy current Snapmatic picture")); + goto fileDialogPreSave; + } + } + else + { + QMessageBox::warning(this, tr("Copy picture"), tr("No valid file is selected")); + goto fileDialogPreSave; + } + } + + settings.setValue("CopyPicture", fileDialog.saveState()); + settings.endGroup(); +} diff --git a/PictureDialog.h b/PictureDialog.h index c280e71..4175080 100755 --- a/PictureDialog.h +++ b/PictureDialog.h @@ -32,7 +32,7 @@ class PictureDialog : public QDialog Q_OBJECT public: explicit PictureDialog(ProfileDatabase *profileDB, QWidget *parent = 0); - void setSnapmaticPicture(SnapmaticPicture *picture, bool readOk); + void setSnapmaticPicture(SnapmaticPicture *picture, QString picPath, bool readOk); ~PictureDialog(); public slots: @@ -41,6 +41,7 @@ public slots: private slots: void on_cmdClose_clicked(); void on_cmdExport_clicked(); + void on_cmdCopy_clicked(); private: ProfileDatabase *profileDB; @@ -50,6 +51,7 @@ private: QString windowTitleStr; QStringList plyrsList; QString picTitl; + QString picPath; QString crewID; QString locX; QString locY; diff --git a/PictureDialog.ui b/PictureDialog.ui index f885561..510b176 100755 --- a/PictureDialog.ui +++ b/PictureDialog.ui @@ -89,6 +89,13 @@ </property> </widget> </item> + <item> + <widget class="QPushButton" name="cmdCopy"> + <property name="text"> + <string>Copy</string> + </property> + </widget> + </item> <item> <widget class="QPushButton" name="cmdClose"> <property name="toolTip"> diff --git a/SavegameWidget.ui b/SavegameWidget.ui index 97f845c..0cbbd6c 100755 --- a/SavegameWidget.ui +++ b/SavegameWidget.ui @@ -20,7 +20,7 @@ <string/> </property> <property name="pixmap"> - <pixmap resource="app.qrc">:/img/savegame.png</pixmap> + <pixmap resource="res/app.qrc">:/img/savegame.png</pixmap> </property> </widget> </item> @@ -63,7 +63,7 @@ </layout> </widget> <resources> - <include location="app.qrc"/> + <include location="res/app.qrc"/> </resources> <connections/> </ui> diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index 9c8d65b..ee927ff 100755 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -57,7 +57,7 @@ void SnapmaticWidget::on_cmdView_clicked() { PictureDialog *picDialog = new PictureDialog(profileDB, this); picDialog->setWindowFlags(picDialog->windowFlags()^Qt::WindowContextHelpButtonHint); - picDialog->setSnapmaticPicture(smpic, true); + picDialog->setSnapmaticPicture(smpic, picPath, true); picDialog->setModal(true); // be ready for playerName updated diff --git a/SnapmaticWidget.ui b/SnapmaticWidget.ui index 6a9cdec..572bc36 100755 --- a/SnapmaticWidget.ui +++ b/SnapmaticWidget.ui @@ -65,13 +65,6 @@ </property> </widget> </item> - <item> - <widget class="QPushButton" name="cmdCopy"> - <property name="text"> - <string>Copy</string> - </property> - </widget> - </item> <item> <widget class="QPushButton" name="cmdDelete"> <property name="text"> diff --git a/gta5sync.pro b/gta5sync.pro index 08ee038..f380140 100755 --- a/gta5sync.pro +++ b/gta5sync.pro @@ -71,7 +71,8 @@ FORMS += \ UserInterface.ui TRANSLATIONS += \ - res/gta5sync_de.ts + res/gta5sync_de.ts \ + res/gta5sync_ru.ts RESOURCES += \ res/app.qrc diff --git a/main.cpp b/main.cpp index 9089f9c..2ea06a9 100755 --- a/main.cpp +++ b/main.cpp @@ -245,7 +245,7 @@ int main(int argc, char *argv[]) bool readOk = picture.readingPictureFromFile(arg1); picDialog->setWindowFlags(picDialog->windowFlags()^Qt::WindowContextHelpButtonHint); picDialog->setWindowIcon(IconLoader::loadingAppIcon()); - picDialog->setSnapmaticPicture(&picture, readOk); + picDialog->setSnapmaticPicture(&picture, arg1, readOk); int crewID = picture.getCrewNumber(); if (crewID != 0) { crewDB->addCrew(crewID); } diff --git a/res/gta5sync_de.qm b/res/gta5sync_de.qm index ee250ff..db2baff 100755 Binary files a/res/gta5sync_de.qm and b/res/gta5sync_de.qm differ diff --git a/res/gta5sync_de.ts b/res/gta5sync_de.ts index 9354c95..9f56ab5 100755 --- a/res/gta5sync_de.ts +++ b/res/gta5sync_de.ts @@ -11,7 +11,7 @@ <message utf8="true"> <location filename="../AboutDialog.ui" line="59"/> <source><span style=" font-weight:600;">gta5sync</span><br/><br/>A project for viewing and sync Grand Theft Auto 5 Snapmatic Pictures and Savegames<br/><br/>Project version: %1<br/>Compiled with Qt %2<br/>Running with Qt %3<br/><br/>Copyright © <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a></source> - <translation type="unfinished"></translation> + <translation><span style=" font-weight:600;">gta5sync</span><br/><br/>Ein Projekt zum ansehen und synchronisieren von Grand Theft Auto 5 Snapmatic Bilder und Spielständen<br/><br/>Projektversion: %1<br/>Gebaut mit Qt %2<br/>Läuft auf Qt %3<br/><br/>Copyright © <a href="https://github.com/Syping/">Syping</a> 2016<br/>gta5sync is lizenziert unter <a href="https://www.gnu.org/licenses/gpl-3.0.html#content">GNU GPLv3</a></translation> </message> <message> <location filename="../AboutDialog.ui" line="104"/> @@ -58,58 +58,93 @@ </message> <message> <location filename="../PictureDialog.ui" line="95"/> - <location filename="../PictureDialog.ui" line="98"/> + <source>Copy</source> + <translation>Kopieren</translation> + </message> + <message> + <location filename="../PictureDialog.ui" line="102"/> + <location filename="../PictureDialog.ui" line="105"/> <source>Close</source> <translation>Schließen</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="63"/> - <location filename="../PictureDialog.cpp" line="110"/> + <location filename="../PictureDialog.cpp" line="66"/> + <location filename="../PictureDialog.cpp" line="113"/> <source>Snapmatic Picture Viewer</source> <translation>Snapmatic Bildansicht</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="63"/> - <location filename="../PictureDialog.cpp" line="110"/> + <location filename="../PictureDialog.cpp" line="66"/> + <location filename="../PictureDialog.cpp" line="113"/> <source>Failed at %1</source> <translation>Fehlgeschlagen bei %1</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="99"/> - <location filename="../PictureDialog.cpp" line="109"/> + <location filename="../PictureDialog.cpp" line="102"/> + <location filename="../PictureDialog.cpp" line="112"/> <source>No player</source> <translation>Keine Spieler</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="102"/> - <location filename="../PictureDialog.cpp" line="109"/> + <location filename="../PictureDialog.cpp" line="105"/> + <location filename="../PictureDialog.cpp" line="112"/> <source>No crew</source> <translation>Keine Crew</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="167"/> + <location filename="../PictureDialog.cpp" line="170"/> <source>JPEG picture (*.jpg)</source> <translation>JPEG Bild (*.jpg)</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="168"/> + <location filename="../PictureDialog.cpp" line="171"/> <source>Portable Network Graphics (*.png)</source> <translation>Portable Network Graphics (*.png)</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="267"/> + <location filename="../PictureDialog.cpp" line="249"/> + <location filename="../PictureDialog.cpp" line="319"/> <source>Overwrite %1 with current Snapmatic picture?</source> <translation>Überschreibe %1 mit aktuellen Snapmatic Bild?</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="271"/> + <location filename="../PictureDialog.cpp" line="253"/> + <location filename="../PictureDialog.cpp" line="323"/> <source>Failed to overwrite %1 with current Snapmatic picture</source> <translation>Fehlgeschlagen beim Überschreiben von %1 mit aktuellen Snapmatic Bild</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="285"/> + <location filename="../PictureDialog.cpp" line="267"/> + <source>Failed to export current Snapmatic picture</source> + <translation>Fehlgeschlagen beim Exportieren vom aktuellen Snapmatic Bild</translation> + </message> + <message> + <location filename="../PictureDialog.cpp" line="297"/> + <location filename="../PictureDialog.cpp" line="319"/> + <location filename="../PictureDialog.cpp" line="323"/> + <location filename="../PictureDialog.cpp" line="336"/> + <location filename="../PictureDialog.cpp" line="342"/> + <source>Copy picture</source> + <translation>Bild kopieren</translation> + </message> + <message> + <location filename="../PictureDialog.cpp" line="300"/> + <source>Snapmatic pictures (PGTA*)</source> + <translation>Snapmatic Bilder (PGTA*)</translation> + </message> + <message> + <location filename="../PictureDialog.cpp" line="301"/> + <source>All files (**)</source> + <translation>Alle Dateien (**)</translation> + </message> + <message> + <location filename="../PictureDialog.cpp" line="336"/> + <source>Failed to copy current Snapmatic picture</source> + <translation>Fehlgeschlagen beim Kopieren vom Snapmatic Bild</translation> + </message> + <message> <source>Failed to save current picture</source> - <translation>Fehlgeschlagen beim Speichern vom aktuellen Bild</translation> + <translation type="obsolete">Fehlgeschlagen beim Speichern vom aktuellen Bild</translation> </message> <message> <source>JPEG picture (*.jpg);;Portable Network Graphics (*.png)</source> @@ -117,11 +152,11 @@ </message> <message> <location filename="../PictureDialog.ui" line="85"/> - <location filename="../PictureDialog.cpp" line="163"/> + <location filename="../PictureDialog.cpp" line="166"/> + <location filename="../PictureDialog.cpp" line="249"/> + <location filename="../PictureDialog.cpp" line="253"/> <location filename="../PictureDialog.cpp" line="267"/> - <location filename="../PictureDialog.cpp" line="271"/> - <location filename="../PictureDialog.cpp" line="285"/> - <location filename="../PictureDialog.cpp" line="291"/> + <location filename="../PictureDialog.cpp" line="273"/> <source>Export picture</source> <translation>Bild exportieren</translation> </message> @@ -134,7 +169,8 @@ <translation type="obsolete">Beim Speichern des Bildes ist ein Fehler aufgetreten</translation> </message> <message> - <location filename="../PictureDialog.cpp" line="291"/> + <location filename="../PictureDialog.cpp" line="273"/> + <location filename="../PictureDialog.cpp" line="342"/> <source>No valid file is selected</source> <translation>Keine gültige Datei wurde ausgewählt</translation> </message> @@ -154,16 +190,16 @@ </message> <message> <location filename="../ProfileInterface.ui" line="179"/> - <location filename="../ProfileInterface.cpp" line="164"/> - <location filename="../ProfileInterface.cpp" line="221"/> - <location filename="../ProfileInterface.cpp" line="236"/> - <location filename="../ProfileInterface.cpp" line="264"/> - <location filename="../ProfileInterface.cpp" line="271"/> - <location filename="../ProfileInterface.cpp" line="277"/> - <location filename="../ProfileInterface.cpp" line="292"/> - <location filename="../ProfileInterface.cpp" line="302"/> - <location filename="../ProfileInterface.cpp" line="338"/> - <location filename="../ProfileInterface.cpp" line="344"/> + <location filename="../ProfileInterface.cpp" line="165"/> + <location filename="../ProfileInterface.cpp" line="199"/> + <location filename="../ProfileInterface.cpp" line="214"/> + <location filename="../ProfileInterface.cpp" line="242"/> + <location filename="../ProfileInterface.cpp" line="249"/> + <location filename="../ProfileInterface.cpp" line="255"/> + <location filename="../ProfileInterface.cpp" line="270"/> + <location filename="../ProfileInterface.cpp" line="280"/> + <location filename="../ProfileInterface.cpp" line="316"/> + <location filename="../ProfileInterface.cpp" line="322"/> <source>Import copy</source> <translation>Kopie importieren</translation> </message> @@ -181,68 +217,68 @@ <translation>Profil schließen</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="87"/> + <location filename="../ProfileInterface.cpp" line="88"/> <source>Loading...</source> <translation>Lade...</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="168"/> + <location filename="../ProfileInterface.cpp" line="169"/> <source>All profile files (SGTA* PGTA*)</source> <translation>Alle Profildateien (SGTA* PGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="169"/> + <location filename="../ProfileInterface.cpp" line="170"/> <source>Savegames files (SGTA*)</source> <translation>Spielstanddateien (SGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="170"/> + <location filename="../ProfileInterface.cpp" line="171"/> <source>Snapmatic pictures (PGTA*)</source> <translation>Snapmatic Bilder (PGTA*)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="171"/> + <location filename="../ProfileInterface.cpp" line="172"/> <source>All files (**)</source> <translation>Alle Dateien (**)</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="221"/> + <location filename="../ProfileInterface.cpp" line="199"/> <source>Failed to read Snapmatic picture</source> <translation>Fehler beim Lesen vom Snapmatic Bild</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="236"/> + <location filename="../ProfileInterface.cpp" line="214"/> <source>Failed to read Savegame file</source> <translation>Fehler beim Lesen von Spielstanddatei</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="264"/> + <location filename="../ProfileInterface.cpp" line="242"/> <source>Can't import %1 because of not valid file format</source> <translation>Kann %1 nicht importieren weil das Dateiformat nicht gültig ist</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="271"/> - <location filename="../ProfileInterface.cpp" line="277"/> + <location filename="../ProfileInterface.cpp" line="249"/> + <location filename="../ProfileInterface.cpp" line="255"/> <source>No valid file is selected</source> <translation>Keine gültige Datei wurde ausgewählt</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="292"/> + <location filename="../ProfileInterface.cpp" line="270"/> <source>Failed to import copy of Snapmatic picture because the file not begin with PGTA</source> <translation>Fehlgeschlagenen beim Import vom Snapmatic Bild weil die Datei nicht mit PGTA begint </translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="302"/> + <location filename="../ProfileInterface.cpp" line="280"/> <source>Failed to import copy of Snapmatic picture because the copy failed</source> <translation>Fehlgeschlagenen beim Import vom Snapmatic Bild weil kopieren fehlgeschlagen ist</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="338"/> + <location filename="../ProfileInterface.cpp" line="316"/> <source>Failed to import copy of Savegame file because the copy failed</source> <translation>Fehlgeschlagenen beim Import vom Spielstand weil kopieren fehlgeschlagen ist</translation> </message> <message> - <location filename="../ProfileInterface.cpp" line="344"/> + <location filename="../ProfileInterface.cpp" line="322"/> <source>Failed to import copy of Savegame file because no free Savegame slot left</source> <translation>Fehlgeschlagenen beim Import vom Spielstand weil kein Spielstandslot mehr übrig ist</translation> </message> @@ -294,52 +330,52 @@ <translation>Löschen</translation> </message> <message> - <location filename="../SavegameWidget.cpp" line="55"/> - <location filename="../SavegameWidget.cpp" line="68"/> + <location filename="../SavegameWidget.cpp" line="56"/> + <location filename="../SavegameWidget.cpp" line="69"/> <source>Delete savegame</source> <translation>Savegame löschen</translation> </message> <message> - <location filename="../SavegameWidget.cpp" line="55"/> + <location filename="../SavegameWidget.cpp" line="56"/> <source>Are you sure to delete %1 from your savegames?</source> <translation>Bist du sicher %1 von deinen Spielständen zu löschen?</translation> </message> <message> - <location filename="../SavegameWidget.cpp" line="68"/> + <location filename="../SavegameWidget.cpp" line="69"/> <source>Failed at deleting %1 from your savegames</source> <translation>Fehlgeschlagen beim Löschen %1 von deinen Spielständen</translation> </message> <message> - <location filename="../SavegameWidget.cpp" line="88"/> - <location filename="../SavegameWidget.cpp" line="133"/> - <location filename="../SavegameWidget.cpp" line="137"/> - <location filename="../SavegameWidget.cpp" line="150"/> - <location filename="../SavegameWidget.cpp" line="156"/> + <location filename="../SavegameWidget.cpp" line="89"/> + <location filename="../SavegameWidget.cpp" line="111"/> + <location filename="../SavegameWidget.cpp" line="115"/> + <location filename="../SavegameWidget.cpp" line="128"/> + <location filename="../SavegameWidget.cpp" line="134"/> <source>Copy savegame</source> <translation>Spielstand kopieren</translation> </message> <message> - <location filename="../SavegameWidget.cpp" line="91"/> + <location filename="../SavegameWidget.cpp" line="92"/> <source>Savegame files (SGTA*)</source> <translation>Spielstanddateien (SGTA*)</translation> </message> <message> - <location filename="../SavegameWidget.cpp" line="92"/> + <location filename="../SavegameWidget.cpp" line="93"/> <source>All files (**)</source> <translation>Alle Dateien (**)</translation> </message> <message> - <location filename="../SavegameWidget.cpp" line="133"/> + <location filename="../SavegameWidget.cpp" line="111"/> <source>Overwrite %1 with current savegame?</source> <translation>Überschreibe %1 mit aktuellen Spielstand?</translation> </message> <message> - <location filename="../SavegameWidget.cpp" line="137"/> + <location filename="../SavegameWidget.cpp" line="115"/> <source>Failed to overwrite %1 with current savegame</source> <translation>Fehlgeschlagen beim Überschreiben von %1 mit aktuellen Spielstand </translation> </message> <message> - <location filename="../SavegameWidget.cpp" line="150"/> + <location filename="../SavegameWidget.cpp" line="128"/> <source>Failed to copy current savegame</source> <translation>Fehlgeschlagen beim Kopieren vom Spielstand</translation> </message> @@ -348,7 +384,7 @@ <translation type="obsolete">Beim Kopieren vom Spielstand ist ein Fehler aufgetreten</translation> </message> <message> - <location filename="../SavegameWidget.cpp" line="156"/> + <location filename="../SavegameWidget.cpp" line="134"/> <source>No valid file is selected</source> <translation>Keine gültige Datei wurde ausgewählt</translation> </message>