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>
This commit is contained in:
Robert C. Helling 2019-02-02 14:41:53 +01:00
parent c9d8b4f605
commit fe4a230245
7 changed files with 51 additions and 10 deletions

View file

@ -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.

View file

@ -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.

View file

@ -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);

View file

@ -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

View file

@ -181,6 +181,16 @@
</attribute>
</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">

View file

@ -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

View file

@ -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();