mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
export: show progress dialog for TeX exports
The TeX exports may hang the UI for a long time. Show a progress-dialog that is updated after every exported dive and allows the user to cancel the export. This is pretty lame, because it is synchronous (export still runs in UI thread) and therefore the UI still is sluggish. But it is an improvement. Since the TeX-exporting code is in a shared directory (desktop and mobile), this uses a slim interface class. Mobile does not yet use TeX export, but you never know. Better than #ifdefs sprinkled all around, I reckon. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
573de51e48
commit
9ee8807af7
4 changed files with 58 additions and 7 deletions
|
@ -15,8 +15,19 @@
|
|||
#include "core/picture.h"
|
||||
#include "core/pref.h"
|
||||
#include "core/sample.h"
|
||||
#include "core/selection.h"
|
||||
#include "exportfuncs.h"
|
||||
|
||||
// Default implementation of the export callback: do nothing / never cancel
|
||||
void ExportCallback::setProgress(int)
|
||||
{
|
||||
}
|
||||
|
||||
bool ExportCallback::canceled() const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#if !defined(SUBSURFACE_MOBILE)
|
||||
void exportProfile(QString filename, bool selected_only)
|
||||
{
|
||||
|
@ -38,7 +49,7 @@ void exportProfile(QString filename, bool selected_only)
|
|||
}
|
||||
}
|
||||
|
||||
void export_TeX(const char *filename, bool selected_only, bool plain)
|
||||
void export_TeX(const char *filename, bool selected_only, bool plain, ExportCallback &cb)
|
||||
{
|
||||
FILE *f;
|
||||
QDir texdir = QFileInfo(filename).dir();
|
||||
|
@ -91,10 +102,14 @@ void export_TeX(const char *filename, bool selected_only, bool plain)
|
|||
|
||||
put_format(&buf, "\n%%%%%%%%%% Begin Dive Data: %%%%%%%%%%\n");
|
||||
|
||||
int todo = selected_only ? amount_selected : dive_table.nr;
|
||||
int done = 0;
|
||||
for_each_dive (i, dive) {
|
||||
if (cb.canceled())
|
||||
return;
|
||||
if (selected_only && !dive->selected)
|
||||
continue;
|
||||
|
||||
cb.setProgress(done++ * 1000 / todo);
|
||||
exportProfile(dive, texdir.filePath(QString("profile%1.png").arg(dive->number)));
|
||||
struct tm tm;
|
||||
utc_mkdate(dive->when, &tm);
|
||||
|
@ -219,7 +234,6 @@ void export_TeX(const char *filename, bool selected_only, bool plain)
|
|||
dive->maxdepth.mm ? put_format(&buf, "\\def\\%sdepth{%.1f\\%sdepthunit}\n", ssrf, get_depth_units(dive->maxdepth.mm, NULL, &unit), ssrf) : put_format(&buf, "\\def\\%sdepth{}\n", ssrf);
|
||||
|
||||
put_format(&buf, "\\%spage\n", ssrf);
|
||||
|
||||
}
|
||||
|
||||
if (plain)
|
||||
|
@ -235,7 +249,7 @@ void export_TeX(const char *filename, bool selected_only, bool plain)
|
|||
fclose(f);
|
||||
}
|
||||
free_buffer(&buf);
|
||||
|
||||
cb.setProgress(1000);
|
||||
}
|
||||
|
||||
void export_depths(const char *filename, bool selected_only)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue