diff --git a/PictureDialog.cpp b/PictureDialog.cpp index b5641b3..a00edad 100755 --- a/PictureDialog.cpp +++ b/PictureDialog.cpp @@ -223,13 +223,13 @@ fileDialogPreSave: if (!isSaved) { - QMessageBox::warning(this, tr("Snapmatic Picture Exporter"), tr("Failed to save the picture")); + QMessageBox::warning(this, tr("Export picture"), tr("Failed to save the picture")); goto fileDialogPreSave; } } else { - QMessageBox::warning(this, tr("Snapmatic Picture Exporter"), tr("No valid file is selected")); + QMessageBox::warning(this, tr("Export picture"), tr("No valid file is selected")); goto fileDialogPreSave; } } diff --git a/ProfileInterface.cpp b/ProfileInterface.cpp index 3b6cfa4..bdbaf62 100755 --- a/ProfileInterface.cpp +++ b/ProfileInterface.cpp @@ -55,11 +55,13 @@ ProfileInterface::~ProfileInterface() } foreach(SnapmaticPicture *picture, pictures) { + pictures.removeAll(picture); picture->deleteLater(); delete picture; } foreach(QWidget *widget, widgets) { + widgets.removeAll(widget); widget->deleteLater(); delete widget; } @@ -101,6 +103,7 @@ void ProfileInterface::on_pictureLoaded(SnapmaticPicture *picture, QString pictu ui->vlSnapmatic->addWidget(picWidget); widgets.append(picWidget); pictures.append(picture); + QObject::connect(picWidget, SIGNAL(pictureDeleted()), this, SLOT(on_pictureDeleted())); } void ProfileInterface::on_loadingProgress(int value, int maximum) @@ -118,6 +121,14 @@ void ProfileInterface::on_profileLoaded() ui->cmdCloseProfile->setEnabled(true); } +void ProfileInterface::on_pictureDeleted() +{ + SnapmaticWidget *picWidget = (SnapmaticWidget*)sender(); + widgets.removeAll(picWidget); + picWidget->deleteLater(); + delete picWidget; +} + void ProfileInterface::on_cmdCloseProfile_clicked() { emit profileClosed(); diff --git a/ProfileInterface.h b/ProfileInterface.h index dc1e902..6ea5399 100755 --- a/ProfileInterface.h +++ b/ProfileInterface.h @@ -20,6 +20,7 @@ #define PROFILEINTERFACE_H #include "SnapmaticPicture.h" +#include "SnapmaticWidget.h" #include "ProfileDatabase.h" #include "DatabaseThread.h" #include "ProfileLoader.h" @@ -46,6 +47,7 @@ private slots: void on_pictureLoaded(SnapmaticPicture *picture, QString picturePath); void on_savegameLoaded(SavegameData *savegame, QString savegamePath); void on_loadingProgress(int value, int maximum); + void on_pictureDeleted(); void on_profileLoaded(); private: diff --git a/SavegameData.cpp b/SavegameData.cpp index 37ebe42..ef291e1 100755 --- a/SavegameData.cpp +++ b/SavegameData.cpp @@ -39,6 +39,8 @@ bool SavegameData::readingSavegame() if (!saveFile->open(QFile::ReadOnly)) { lastStep = "1;/1,OpenFile," + convertDrawStringForLog(savegameFileName); + saveFile->deleteLater(); + delete saveFile; return false; } @@ -46,6 +48,9 @@ bool SavegameData::readingSavegame() if (!saveFile->isReadable()) { lastStep = "2;/3,ReadingFile," + convertDrawStringForLog(savegameFileName) + ",1,NOHEADER"; + saveFile->close(); + saveFile->deleteLater(); + delete saveFile; return false; } QByteArray savegameHeaderLine = saveFile->read(savegameHeaderLength); @@ -58,6 +63,9 @@ bool SavegameData::readingSavegame() } } + saveFile->close(); + saveFile->deleteLater(); + delete saveFile; return savegameOk; } diff --git a/SnapmaticPicture.cpp b/SnapmaticPicture.cpp index 04c6846..6954d6d 100755 --- a/SnapmaticPicture.cpp +++ b/SnapmaticPicture.cpp @@ -60,6 +60,8 @@ bool SnapmaticPicture::readingPicture() if (!picFile->open(QFile::ReadOnly)) { lastStep = "1;/1,OpenFile," + convertDrawStringForLog(picFileName); + picFile->deleteLater(); + delete picFile; return false; } @@ -67,6 +69,9 @@ bool SnapmaticPicture::readingPicture() if (!picFile->isReadable()) { lastStep = "2;/3,ReadingFile," + convertDrawStringForLog(picFileName) + ",1,NOHEADER"; + picFile->close(); + picFile->deleteLater(); + delete picFile; return false; } QByteArray snapmaticHeaderLine = picFile->read(snapmaticHeaderLength); @@ -76,6 +81,9 @@ bool SnapmaticPicture::readingPicture() if (!picFile->isReadable()) { lastStep = "2;/3,ReadingFile," + convertDrawStringForLog(picFileName) + ",2,NOHEADER"; + picFile->close(); + picFile->deleteLater(); + delete picFile; return false; } QByteArray jpegHeaderLine = picFile->read(jpegPreHeaderLength); @@ -85,6 +93,9 @@ bool SnapmaticPicture::readingPicture() if (jpegHeaderLine.left(4) != "JPEG") { lastStep = "2;/3,ReadingFile," + convertDrawStringForLog(picFileName) + ",2,NOJPEG"; + picFile->close(); + picFile->deleteLater(); + delete picFile; return false; } @@ -92,6 +103,9 @@ bool SnapmaticPicture::readingPicture() if (!picFile->isReadable()) { lastStep = "2;/3,ReadingFile," + convertDrawStringForLog(picFileName) + ",3,NOPIC"; + picFile->close(); + picFile->deleteLater(); + delete picFile; return false; } QByteArray jpegRawContent = picFile->read(jpegPicStreamLength); @@ -101,17 +115,26 @@ bool SnapmaticPicture::readingPicture() if (!picFile->isReadable()) { lastStep = "2;/3,ReadingFile," + convertDrawStringForLog(picFileName) + ",3,NOJSON"; + picFile->close(); + picFile->deleteLater(); + delete picFile; return picOk; } else if (picFile->read(4) != "JSON") { lastStep = "2;/3,ReadingFile," + convertDrawStringForLog(picFileName) + ",3,CTJSON"; + picFile->close(); + picFile->deleteLater(); + delete picFile; return picOk; } QByteArray jsonRawContent = picFile->read(jsonStreamLength); jsonStr = getSnapmaticJSONString(jsonRawContent); parseJsonContent(); // JSON parsing is own function + picFile->close(); + picFile->deleteLater(); + delete picFile; return picOk; } diff --git a/SnapmaticWidget.cpp b/SnapmaticWidget.cpp index 1cdec19..460873e 100755 --- a/SnapmaticWidget.cpp +++ b/SnapmaticWidget.cpp @@ -21,7 +21,10 @@ #include "SnapmaticPicture.h" #include "DatabaseThread.h" #include "PictureDialog.h" +#include #include +#include +#include SnapmaticWidget::SnapmaticWidget(ProfileDatabase *profileDB, DatabaseThread *threadDB, QWidget *parent) : QWidget(parent), profileDB(profileDB), threadDB(threadDB), @@ -29,6 +32,7 @@ SnapmaticWidget::SnapmaticWidget(ProfileDatabase *profileDB, DatabaseThread *thr { ui->setupUi(this); picPath = ""; + picStr = ""; smpic = 0; } @@ -39,12 +43,14 @@ SnapmaticWidget::~SnapmaticWidget() void SnapmaticWidget::setSnapmaticPicture(SnapmaticPicture *picture, QString picturePath) { - QPixmap SnapmaticPixmap = QPixmap::fromImage(picture->getPicture(), Qt::AutoColor); - SnapmaticPixmap.scaled(ui->labPicture->width(), ui->labPicture->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation); - ui->labPicStr->setText(picture->getPictureStr()); - ui->labPicture->setPixmap(SnapmaticPixmap); smpic = picture; picPath = picturePath; + picStr = picture->getPictureStr(); + + QPixmap SnapmaticPixmap = QPixmap::fromImage(picture->getPicture(), Qt::AutoColor); + SnapmaticPixmap.scaled(ui->labPicture->width(), ui->labPicture->height(), Qt::KeepAspectRatio, Qt::SmoothTransformation); + ui->labPicStr->setText(picStr); + ui->labPicture->setPixmap(SnapmaticPixmap); } void SnapmaticWidget::on_cmdView_clicked() @@ -63,3 +69,24 @@ void SnapmaticWidget::on_cmdView_clicked() picDialog->deleteLater(); delete picDialog; } + +void SnapmaticWidget::on_cmdDelete_clicked() +{ + int uchoice = QMessageBox::question(this, tr("Delete picture"), tr("You're sure to delete %1 from your Snapmatic pictures?").arg(picStr), QMessageBox::No | QMessageBox::Yes, QMessageBox::No); + if (uchoice == QMessageBox::Yes) + { + QFile pictureFile(picPath); + if (!pictureFile.exists()) + { + emit pictureDeleted(); + } + else if(QFile::remove(picPath)) + { + emit pictureDeleted(); + } + else + { + QMessageBox::warning(this, tr("Delete picture"), tr("Failed at deleting %1 from your Snapmatic pictures").arg(picStr)); + } + } +} diff --git a/SnapmaticWidget.h b/SnapmaticWidget.h index c66ad16..c2e3a07 100755 --- a/SnapmaticWidget.h +++ b/SnapmaticWidget.h @@ -39,6 +39,7 @@ public: private slots: void on_cmdView_clicked(); + void on_cmdDelete_clicked(); private: ProfileDatabase *profileDB; @@ -46,6 +47,10 @@ private: Ui::SnapmaticWidget *ui; SnapmaticPicture *smpic; QString picPath; + QString picStr; + +signals: + void pictureDeleted(); }; #endif // SNAPMATICWIDGET_H