diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | Documentation/user-manual.txt | 2 | ||||
-rw-r--r-- | desktop-widgets/divelogexportdialog.cpp | 41 | ||||
-rw-r--r-- | desktop-widgets/divelogexportdialog.h | 3 | ||||
-rw-r--r-- | desktop-widgets/divelogexportdialog.ui | 10 | ||||
-rw-r--r-- | profile-widget/profilewidget2.cpp | 2 | ||||
-rw-r--r-- | profile-widget/profilewidget2.h | 2 |
7 files changed, 51 insertions, 10 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 99a32372a..bd1332766 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ +- Export option for profile picture - Desktop: remove support for the "Share on Facebook" feature. Rationale: It is fairly easy to share images on Facebook, thus it was decided that this feature is redundant and should be removed from Subsurface. diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt index e05fcaba1..43c7ca21e 100644 --- a/Documentation/user-manual.txt +++ b/Documentation/user-manual.txt @@ -2759,6 +2759,8 @@ A dive log or part of it can be saved in several formats: * _CSV dive profile_, that includes a large amount of detail for each dive, including the depth profile, temperature and pressure information of each dive. +* _dive profile_, saves the Subsurface dive profile as a .png file + * _HTML_ format, in which the dive(s) are stored in HTML files, readable with an Internet browser. Most modern web browsers are supported, but JavaScript must be enabled. The HTML export cannot be changed or edited. diff --git a/desktop-widgets/divelogexportdialog.cpp b/desktop-widgets/divelogexportdialog.cpp index 15dd7d99f..37fb8cee4 100644 --- a/desktop-widgets/divelogexportdialog.cpp +++ b/desktop-widgets/divelogexportdialog.cpp @@ -169,6 +169,10 @@ void DiveLogExportDialog::on_buttonBox_accepted() filename = QFileDialog::getSaveFileName(this, tr("Export to TeX file"), lastDir, tr("TeX files") + " (*.tex)"); if (!filename.isNull() && !filename.isEmpty()) export_TeX(qPrintable(filename), ui->exportSelected->isChecked(), ui->exportTeX->isChecked()); + } else if (ui->exportProfile->isChecked()) { + filename = QFileDialog::getSaveFileName(this, tr("Save image depths"), lastDir); + if (!filename.isNull() && !filename.isEmpty()) + exportProfile(qPrintable(filename), ui->exportSelected->isChecked()); } break; case 1: @@ -229,6 +233,34 @@ void DiveLogExportDialog::export_depths(const char *filename, const bool selecte free_buffer(&buf); } +void DiveLogExportDialog::exportProfile(const QString filename, const bool selected_only) +{ + struct dive *dive; + int i; + int count = 0; + QFileInfo fi(filename); + + for_each_dive (i, dive) { + if (selected_only && !dive->selected) + continue; + if (count) + saveProfile(dive, fi.completeBaseName().append(QString("-%1.").arg(count)).append(fi.suffix())); + else + saveProfile(dive, filename); + ++count; + } +} + +void DiveLogExportDialog::saveProfile(const struct dive *dive, const QString filename) +{ + ProfileWidget2 *profile = MainWindow::instance()->graphics; + profile->plotDive(dive, true); + profile->setToolTipVisibile(false); + QPixmap pix = profile->grab(); + profile->setToolTipVisibile(true); + pix.save(filename); +} + void DiveLogExportDialog::export_TeX(const char *filename, const bool selected_only, bool plain) { FILE *f; @@ -286,14 +318,7 @@ void DiveLogExportDialog::export_TeX(const char *filename, const bool selected_o if (selected_only && !dive->selected) continue; - ProfileWidget2 *profile = MainWindow::instance()->graphics; - profile->plotDive(dive, true); - profile->setToolTipVisibile(false); - QPixmap pix = QPixmap::grabWidget(profile); - profile->setToolTipVisibile(true); - pix.save(texdir.filePath(QString("profile%1.png").arg(dive->number))); - - + saveProfile(dive, texdir.filePath(QString("profile%1.png").arg(dive->number))); struct tm tm; utc_mkdate(dive->when, &tm); diff --git a/desktop-widgets/divelogexportdialog.h b/desktop-widgets/divelogexportdialog.h index f06ed23dd..d7905dd94 100644 --- a/desktop-widgets/divelogexportdialog.h +++ b/desktop-widgets/divelogexportdialog.h @@ -34,6 +34,9 @@ private: void exportHtmlInit(const QString &filename); void export_depths(const char *filename, const bool selected_only); void export_TeX(const char *filename, const bool selected_only, bool plain); + void exportProfile(const QString filename, const bool selected_only); + void saveProfile(const struct dive *dive, const QString filename); + }; #endif // DIVELOGEXPORTDIALOG_H diff --git a/desktop-widgets/divelogexportdialog.ui b/desktop-widgets/divelogexportdialog.ui index edde0a6a1..fe4827060 100644 --- a/desktop-widgets/divelogexportdialog.ui +++ b/desktop-widgets/divelogexportdialog.ui @@ -182,6 +182,16 @@ </widget> </item> <item> + <widget class="QRadioButton" name="exportProfile"> + <property name="text"> + <string>dive profile</string> + </property> + <attribute name="buttonGroup"> + <string notr="true">exportGroup</string> + </attribute> + </widget> + </item> + <item> <widget class="QRadioButton" name="exportWorldMap"> <property name="text"> <string>Worldmap</string> diff --git a/profile-widget/profilewidget2.cpp b/profile-widget/profilewidget2.cpp index 846465672..3a9fd0c5f 100644 --- a/profile-widget/profilewidget2.cpp +++ b/profile-widget/profilewidget2.cpp @@ -548,7 +548,7 @@ void ProfileWidget2::resetZoom() } // Currently just one dive, but the plan is to enable All of the selected dives. -void ProfileWidget2::plotDive(struct dive *d, bool force, bool doClearPictures) +void ProfileWidget2::plotDive(const struct dive *d, bool force, bool doClearPictures) { static bool firstCall = true; #ifndef SUBSURFACE_MOBILE diff --git a/profile-widget/profilewidget2.h b/profile-widget/profilewidget2.h index 288407381..679abcf1d 100644 --- a/profile-widget/profilewidget2.h +++ b/profile-widget/profilewidget2.h @@ -75,7 +75,7 @@ public: ProfileWidget2(QWidget *parent = 0); void resetZoom(); void scale(qreal sx, qreal sy); - void plotDive(struct dive *d = 0, bool force = false, bool clearPictures = false); + void plotDive(const struct dive *d = 0, bool force = false, bool clearPictures = false); void setupItem(AbstractProfilePolygonItem *item, DiveCartesianAxis *vAxis, int vData, int hData, int zValue); void setPrintMode(bool mode, bool grayscale = false); bool getPrintMode(); |