summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt1
-rw-r--r--subsurface.pro2
-rw-r--r--templatelayout.cpp170
-rw-r--r--templatelayout.h97
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