aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Robert C. Helling <helling@atdotde.de>2019-02-02 14:41:53 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-04-08 09:54:19 +0300
commitc6732e9b269f977c08eb0d8b8d14b3822c3b5449 (patch)
tree71658658cac69107e9e909f7033fd59dc6aa6b5b
parent3998cb82453ad9d41bedcd290af3925526cb1767 (diff)
downloadsubsurface-c6732e9b269f977c08eb0d8b8d14b3822c3b5449.tar.gz
Export profile image
With Facebook support gone, we should offer a way to export the profile image. This has been part of the TeX support but this makes it explicit. Signed-off-by: Robert C. Helling <helling@atdotde.de> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--CHANGELOG.md1
-rw-r--r--Documentation/user-manual.txt2
-rw-r--r--desktop-widgets/divelogexportdialog.cpp41
-rw-r--r--desktop-widgets/divelogexportdialog.h2
-rw-r--r--desktop-widgets/divelogexportdialog.ui10
-rw-r--r--profile-widget/profilewidget2.cpp2
-rw-r--r--profile-widget/profilewidget2.h2
7 files changed, 50 insertions, 10 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e868578f7..b11e78033 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
- Desktop: update snap and appdata meta data
- Desktop: make sure cloud storage email addresses are lower case only
- Desktop: Fix editing of dive-time [#1975]
+- 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 6d9956d19..1e510014a 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.txt
@@ -2752,6 +2752,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 5c337f0a5..12b73be2d 100644
--- a/desktop-widgets/divelogexportdialog.cpp
+++ b/desktop-widgets/divelogexportdialog.cpp
@@ -167,6 +167,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());
+ } 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:
@@ -227,6 +231,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)
{
FILE *f;
@@ -275,14 +307,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 f872487d6..cd1c56112 100644
--- a/desktop-widgets/divelogexportdialog.h
+++ b/desktop-widgets/divelogexportdialog.h
@@ -34,6 +34,8 @@ 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);
+ 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 c35bde793..eb51074d2 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();