diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | subsurface.pro | 2 | ||||
-rw-r--r-- | templatelayout.cpp | 170 | ||||
-rw-r--r-- | templatelayout.h | 97 |
4 files changed, 270 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index f69176fe7..a93ccbab5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -260,6 +260,7 @@ set(SUBSURFACE_CORE_LIB_SRCS configuredivecomputer.cpp configuredivecomputerthreads.cpp divesitehelpers.cpp + templatelayout.cpp ${PLATFORM_SRC} ) source_group("Subsurface Core" FILES ${SUBSURFACE_CORE_LIB_SRCS}) diff --git a/subsurface.pro b/subsurface.pro index 18682b439..509feb7bc 100644 --- a/subsurface.pro +++ b/subsurface.pro @@ -67,6 +67,7 @@ HEADERS = \ qthelper.h \ units.h \ divecomputer.h \ + templatelayout.h \ qt-ui/about.h \ qt-ui/completionmodels.h \ qt-ui/divecomputermanagementdialog.h \ @@ -160,6 +161,7 @@ SOURCES = \ profile.c \ gaspressures.c \ divecomputer.cpp \ + templatelayout.cpp \ worldmap-save.c \ save-html.c \ qt-gui.cpp \ diff --git a/templatelayout.cpp b/templatelayout.cpp new file mode 100644 index 000000000..f2d72403b --- /dev/null +++ b/templatelayout.cpp @@ -0,0 +1,170 @@ +#include <string> + +#include "templatelayout.h" +#include "helpers.h" + +TemplateLayout::TemplateLayout() +{ +} + +TemplateLayout::~TemplateLayout() +{ + delete m_engine; +}; + +QString TemplateLayout::generate() +{ + QString htmlContent; + m_engine = new Grantlee::Engine(this); + + QSharedPointer<Grantlee::FileSystemTemplateLoader> m_templateLoader = + QSharedPointer<Grantlee::FileSystemTemplateLoader>(new Grantlee::FileSystemTemplateLoader()); + m_templateLoader->setTemplateDirs(QStringList() << getSubsurfaceDataPath("printing_templates")); + m_engine->addTemplateLoader(m_templateLoader); + + Grantlee::registerMetaType<Dive>(); + + QVariantHash mapping; + QVariantList diveList; + + struct dive *dive; + int i; + for_each_dive (i, dive) { + //TODO check for exporting selected dives only + if (!dive->selected) + continue; + Dive d(dive); + diveList.append(QVariant::fromValue(d)); + } + mapping.insert("dives", diveList); + + Grantlee::Context c(mapping); + + Grantlee::Template t = m_engine->loadByName("base.html"); + if (!t || t->error()) { + qDebug() << "Can't load template"; + return htmlContent; + } + + htmlContent = t->render(&c); + + if (t->error()) { + qDebug() << "Can't render template"; + return htmlContent; + } + + return htmlContent; +} + +Dive::Dive() +{ +} + +Dive::~Dive() +{ +} + +int Dive::number() const +{ + return m_number; +} + +QString Dive::date() const +{ + return m_date; +} + +QString Dive::time() const +{ + return m_time; +} + +QString Dive::location() const +{ + return m_location; +} + +QString Dive::duration() const +{ + return m_duration; +} + +QString Dive::depth() const +{ + return m_depth; +} + +QString Dive::divemaster() const +{ + return m_divemaster; +} + +QString Dive::buddy() const +{ + return m_buddy; +} + +QString Dive::airTemp() const +{ + return m_airTemp; +} + +QString Dive::waterTemp() const +{ + return m_waterTemp; +} + +QString Dive::notes() const +{ + return m_notes; +} + +void Dive::put_divemaster() +{ + if (!dive->divemaster) + m_divemaster = ""; + else + m_divemaster = dive->divemaster; +} + +void Dive::put_date_time() +{ + QDateTime localTime = QDateTime::fromTime_t(dive->when - gettimezoneoffset(displayed_dive.when)); + localTime.setTimeSpec(Qt::UTC); + m_date = localTime.date().toString(QString::fromUtf8("MMM dd, yyyy")); + m_time = localTime.time().toString(QString::fromUtf8("hh:mm a")); +} + +void Dive::put_location() +{ + m_location = QString::fromUtf8(get_dive_location(dive)); +} + +void Dive::put_depth() +{ + m_depth = get_depth_string(dive->dc.maxdepth.mm, true, true); +} + +void Dive::put_duration() +{ + m_duration = QString::number(((dive->duration.seconds) / 60)) + QString::fromUtf8(" min"); +} + +void Dive::put_buddy() +{ + if (!dive->buddy) + m_buddy = ""; + else + m_buddy = dive->buddy; +} + +void Dive::put_temp() +{ + m_airTemp = get_temperature_string(dive->airtemp, true); + m_waterTemp = get_temperature_string(dive->watertemp, true); +} + +void Dive::put_notes() +{ + m_notes = QString::fromUtf8(dive->notes); +} diff --git a/templatelayout.h b/templatelayout.h new file mode 100644 index 000000000..763473796 --- /dev/null +++ b/templatelayout.h @@ -0,0 +1,97 @@ +#ifndef TEMPLATELAYOUT_H +#define TEMPLATELAYOUT_H + +#include <grantlee_templates.h> +#include "mainwindow.h" + +class TemplateLayout : public QObject { + Q_OBJECT +public: + TemplateLayout(); + ~TemplateLayout(); + QString generate(); + +private: + Grantlee::Engine *m_engine; +}; + +class Dive { +private: + int m_number; + QString m_date; + QString m_time; + QString m_location; + QString m_duration; + QString m_depth; + QString m_divemaster; + QString m_buddy; + QString m_airTemp; + QString m_waterTemp; + QString m_notes; + struct dive *dive; + void put_date_time(); + void put_location(); + void put_duration(); + void put_depth(); + void put_divemaster(); + void put_buddy(); + void put_temp(); + void put_notes(); + +public: + Dive(struct dive *dive) + : dive(dive) + { + m_number = dive->number; + put_date_time(); + put_location(); + put_duration(); + put_depth(); + put_divemaster(); + put_buddy(); + put_temp(); + put_notes(); + } + Dive(); + ~Dive(); + int number() const; + QString date() const; + QString time() const; + QString location() const; + QString duration() const; + QString depth() const; + QString divemaster() const; + QString buddy() const; + QString airTemp() const; + QString waterTemp() const; + QString notes() const; +}; + +Q_DECLARE_METATYPE(Dive) + +GRANTLEE_BEGIN_LOOKUP(Dive) +if (property == "number") + return object.number(); +else if (property == "date") + return object.date(); +else if (property == "time") + return object.time(); +else if (property == "location") + return object.location(); +else if (property == "duration") + return object.duration(); +else if (property == "depth") + return object.depth(); +else if (property == "divemaster") + return object.divemaster(); +else if (property == "buddy") + return object.buddy(); +else if (property == "airTemp") + return object.airTemp(); +else if (property == "waterTemp") + return object.waterTemp(); +else if (property == "notes") + return object.notes(); +GRANTLEE_END_LOOKUP + +#endif |