diff options
author | Gehad elrobey <gehadelrobey@gmail.com> | 2015-04-21 17:23:13 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-06-04 10:07:25 -0700 |
commit | e2ad38189eb81eda213f775302efb44d2ed70c85 (patch) | |
tree | 8cb65bf053d7b1aa72d54ac4b80ee99b52297bc4 | |
parent | 00f4b7b66b43d77119f004b08471b72c4ce4bab5 (diff) | |
download | subsurface-e2ad38189eb81eda213f775302efb44d2ed70c85.tar.gz |
Printing: Add TemplateLayout class
This is the main class to hold Grantlee engine logic.
TemplateLayout::generate() loads QT5Grantlee and initialize the
templates then returns a QString that contains the rendered HTML by
Grantlee library.
Also this class contains the Dive class which holds the logic that
formats the data before passing it to the templates.
Signed-off-by: Gehad elrobey <gehadelrobey@gmail.com>
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-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 |