subsurface/desktop-widgets/templatelayout.h
Tomaz Canabrava 25aa80846b Move Dive class from qthelper.h/cpp to it's own file
and rename it to DiveObjectHelper, since it should be an QObject
based class to make it easier on the QML, grantlee and widgets
side to display the dive's internal data.

each Q_PROPERTY defined in the DiveObjectHelper.h file
can be acessed directly via it's name.

So, if you are on a model that  returns a dive, acess it's name
by dive.name

Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-01-08 08:04:44 -08:00

187 lines
5.6 KiB
C++

#ifndef TEMPLATELAYOUT_H
#define TEMPLATELAYOUT_H
#include <grantlee_templates.h>
#include "mainwindow.h"
#include "printoptions.h"
#include "statistics.h"
#include "qthelper.h"
#include "helpers.h"
#include "subsurface-core/subsurface-qt/DiveObjectHelper.h"
int getTotalWork(print_options *printOptions);
void find_all_templates();
extern QList<QString> grantlee_templates, grantlee_statistics_templates;
class TemplateLayout : public QObject {
Q_OBJECT
public:
TemplateLayout(print_options *PrintOptions, template_options *templateOptions);
~TemplateLayout();
QString generate();
QString generateStatistics();
static QString readTemplate(QString template_name);
static void writeTemplate(QString template_name, QString grantlee_template);
private:
Grantlee::Engine *m_engine;
print_options *PrintOptions;
template_options *templateOptions;
signals:
void progressUpdated(int value);
};
class YearInfo {
public:
stats_t *year;
YearInfo(stats_t& year)
:year(&year)
{
}
YearInfo();
~YearInfo();
};
Q_DECLARE_METATYPE(template_options)
Q_DECLARE_METATYPE(print_options)
Q_DECLARE_METATYPE(YearInfo)
#define _CONC_STR(prop, idx) _CONC_STR1(prop, idx)
#define _CONC_STR1(prop, idx) _CONC_STR2(prop ## idx)
#define _CONC_STR2(prop) #prop
#define _RETURN_DIVE_PROPERTY(prop) \
if (property == #prop) return object.prop()
#define _RETURN_DIVE_PROPERTY_IDX(prop, idx) \
if (property == _CONC_STR(prop, idx)) return object.prop(idx)
GRANTLEE_BEGIN_LOOKUP(DiveObjectHelper)
_RETURN_DIVE_PROPERTY(number);
else _RETURN_DIVE_PROPERTY(id);
else _RETURN_DIVE_PROPERTY(date);
else _RETURN_DIVE_PROPERTY(time);
else _RETURN_DIVE_PROPERTY(location);
else _RETURN_DIVE_PROPERTY(duration);
else _RETURN_DIVE_PROPERTY(depth);
else _RETURN_DIVE_PROPERTY(buddy);
else _RETURN_DIVE_PROPERTY(divemaster);
else _RETURN_DIVE_PROPERTY(airTemp);
else _RETURN_DIVE_PROPERTY(waterTemp);
else _RETURN_DIVE_PROPERTY(notes);
else _RETURN_DIVE_PROPERTY(rating);
else _RETURN_DIVE_PROPERTY(sac);
else _RETURN_DIVE_PROPERTY(tags);
else _RETURN_DIVE_PROPERTY(gas);
else _RETURN_DIVE_PROPERTY(suit);
else _RETURN_DIVE_PROPERTY(cylinders);
else _RETURN_DIVE_PROPERTY_IDX(cylinder, 0);
else _RETURN_DIVE_PROPERTY_IDX(cylinder, 1);
else _RETURN_DIVE_PROPERTY_IDX(cylinder, 2);
else _RETURN_DIVE_PROPERTY_IDX(cylinder, 3);
else _RETURN_DIVE_PROPERTY_IDX(cylinder, 4);
else _RETURN_DIVE_PROPERTY_IDX(cylinder, 5);
else _RETURN_DIVE_PROPERTY_IDX(cylinder, 6);
else _RETURN_DIVE_PROPERTY_IDX(cylinder, 7);
else _RETURN_DIVE_PROPERTY(weights);
else _RETURN_DIVE_PROPERTY_IDX(weight, 0);
else _RETURN_DIVE_PROPERTY_IDX(weight, 1);
else _RETURN_DIVE_PROPERTY_IDX(weight, 2);
else _RETURN_DIVE_PROPERTY_IDX(weight, 3);
else _RETURN_DIVE_PROPERTY_IDX(weight, 4);
else _RETURN_DIVE_PROPERTY_IDX(weight, 5);
else _RETURN_DIVE_PROPERTY(maxcns);
else _RETURN_DIVE_PROPERTY(otu);
GRANTLEE_END_LOOKUP
#undef _RETURN_DIVE_PROPERTY
#undef _RETURN_DIVE_PROPERTY_IDX
#undef _CONC_STR
#undef _CONC_STR1
#undef _CONC_STR2
GRANTLEE_BEGIN_LOOKUP(template_options)
if (property == "font") {
switch (object.font_index) {
case 0:
return "Arial, Helvetica, sans-serif";
case 1:
return "Impact, Charcoal, sans-serif";
case 2:
return "Georgia, serif";
case 3:
return "Courier, monospace";
case 4:
return "Verdana, Geneva, sans-serif";
}
} else if (property == "borderwidth") {
return object.border_width;
} else if (property == "font_size") {
return object.font_size / 9.0;
} else if (property == "line_spacing") {
return object.line_spacing;
} else if (property == "color1") {
return object.color_palette.color1.name();
} else if (property == "color2") {
return object.color_palette.color2.name();
} else if (property == "color3") {
return object.color_palette.color3.name();
} else if (property == "color4") {
return object.color_palette.color4.name();
} else if (property == "color5") {
return object.color_palette.color5.name();
} else if (property == "color6") {
return object.color_palette.color6.name();
}
GRANTLEE_END_LOOKUP
GRANTLEE_BEGIN_LOOKUP(print_options)
if (property == "grayscale") {
if (object.color_selected) {
return "";
} else {
return "-webkit-filter: grayscale(100%)";
}
}
GRANTLEE_END_LOOKUP
GRANTLEE_BEGIN_LOOKUP(YearInfo)
if (property == "year") {
return object.year->period;
} else if (property == "dives") {
return object.year->selection_size;
} else if (property == "min_temp") {
const char *unit;
double temp = get_temp_units(object.year->min_temp, &unit);
return object.year->min_temp == 0 ? "0" : QString::number(temp, 'g', 2) + unit;
} else if (property == "max_temp") {
const char *unit;
double temp = get_temp_units(object.year->max_temp, &unit);
return object.year->max_temp == 0 ? "0" : QString::number(temp, 'g', 2) + unit;
} else if (property == "total_time") {
return get_time_string(object.year->total_time.seconds, 0);
} else if (property == "avg_time") {
return get_minutes(object.year->total_time.seconds / object.year->selection_size);
} else if (property == "shortest_time") {
return get_minutes(object.year->shortest_time.seconds);
} else if (property == "longest_time") {
return get_minutes(object.year->longest_time.seconds);
} else if (property == "avg_depth") {
return get_depth_string(object.year->avg_depth);
} else if (property == "min_depth") {
return get_depth_string(object.year->min_depth);
} else if (property == "max_depth") {
return get_depth_string(object.year->max_depth);
} else if (property == "avg_sac") {
return get_volume_string(object.year->avg_sac);
} else if (property == "min_sac") {
return get_volume_string(object.year->min_sac);
} else if (property == "max_sac") {
return get_volume_string(object.year->max_sac);
}
GRANTLEE_END_LOOKUP
#endif