#include "reader.h"
#include "odometer.h"
#include "graphicsscene.h"
+#include "poialerts.h"
namespace
{
{
{"xpos", true},
{"ypos", true},
+ {"zpos", true},
+ {"visiblewhen", false},
{"data", false},
{"format", false},
{"width", true},
{"align", false},
{"color", false},
{"size", true},
- {"font", false}
+ {"font", false},
+ {"bold", false},
+ {"italic", false},
+ {"uppercase", false},
+ {"letterspacing", true},
+ {"timeformat", false},
+ {"dateformat", false}
};
const QString FIELDS[TextElement::FIELD_COUNT] = {"TRIP", "TOTAL", "SPEED",
"MAXSPEED", "AVGSPEED",
- "UNIT", "SPEEDUNIT", "TIME"};
+ "UNIT", "SPEEDUNIT", "TIME", "DATE",
+ "POIDISTANCE", "ANGLE", "LATITUDE",
+ "LONGITUDE", "ALTITUDE", "DISTANCEUNIT"};
}
TextElement::TextElement(Reader* reader): GraphicsElement(reader),
-data_(""), format_(""), align_("left"), fontSize_(16)
+data_(""), format_(""), align_("left"), timeFormat_("hh:mm"),
+dateFormat_("dd.MM.yyyy"), fontSize_(16), bold_(false), italic_(false),
+uppercase_(false), letterSpacing_(0)
{
element_ = new QGraphicsTextItem();
}
case YPOS:
element_->setY(intVal);
break;
+ case ZPOS:
+ element_->setZValue(intVal);
+ break;
+ case VISIBLEWHEN:
+ setVisibleWhen(strToVisibleWhen(value));
+ break;
case DATA:
data_ = value;
break;
fontFile_ = value;
fontChanged = true;
break;
+ case BOLD:
+ if(value != "false" && value != "0")
+ {
+ bold_ = true;
+ fontChanged = true;
+ }
+ break;
+ case ITALIC:
+ if(value != "false" && value != "0")
+ {
+ italic_ = true;
+ fontChanged = true;
+ }
+ break;
+ case UPPERCASE:
+ if(value != "false" && value != "0")
+ {
+ uppercase_ = true;
+ }
+ break;
+ case LETTERSPACING:
+ letterSpacing_ = intVal;
+ fontChanged = true;
+ break;
+ case TIMEFORMAT:
+ timeFormat_ = value;
+ break;
+ case DATEFORMAT:
+ dateFormat_ = value;
+ break;
default:
qDebug() << "Unknown attribute: " << attr;
return false;
if(fontChanged)
{
- if(!fontFile_.isEmpty())
- {
- QFont font;
-
- if(getFont(fontFile_, font))
- {
- font.setPointSize(fontSize_);
- element_->setFont(font);
- }
- else
- {
- return false;
- }
- }
- else
- {
- element_->setFont(QFont("Default", fontSize_));
- }
+ return applyFont();
}
return true;
}
}
+bool TextElement::applyFont()
+{
+ QFont font;
+
+ if(!fontFile_.isEmpty())
+ {
+ if(!getFont(fontFile_, font))
+ {
+ return false;
+ }
+ }
+
+ font.setPointSize(fontSize_);
+
+ if(bold_)
+ {
+ font.setBold(true);
+ }
+
+ if(italic_)
+ {
+ font.setItalic(true);
+ }
+
+ if(letterSpacing_)
+ {
+ font.setLetterSpacing(QFont::PercentageSpacing, letterSpacing_);
+ }
+
+ element_->setFont(font);
+
+ return true;
+}
+
void TextElement::addToScene(GraphicsScene* scene)
{
specialFields_.clear();
{
specialFields_.push_back(static_cast<Field>(i));
}
+
}
QString replaced = data_;
updateHtml(replaced);
}
-void TextElement::updateHtml(QString const& data)
+void TextElement::updateHtml(QString data)
{
+ if(uppercase_)
+ {
+ data = data.toUpper();
+ }
+
element_->setHtml("<div align='"+align_+"'>"+data+"</div>");
}
replaceValue(value, f, o->getSpeedUnit());
break;
case TIME:
- replaceValue(value, f, QTime::currentTime().toString("hh:mm"));
+ replaceValue(value, f, QTime::currentTime().toString(timeFormat_));
+ break;
+ case DATE:
+ replaceValue(value, f, QDate::currentDate().toString(dateFormat_));
+ break;
+ case POIDISTANCE:
+ replaceValue(value, f, handleEmpty(PoiAlerts::instance().getCurrentDistance()));
+ break;
+ case ANGLE:
+ replaceValue(value, f, formatString(o->getLatestFix().track));
+ break;
+ case LATITUDE:
+ replaceValue(value, f, handleEmpty(o->getLatestFix().latitude));
+ break;
+ case LONGITUDE:
+ replaceValue(value, f, handleEmpty(o->getLatestFix().longitude));
+ break;
+ case ALTITUDE:
+ replaceValue(value, f, handleEmpty(o->getLatestFix().altitude));
+ break;
+ case DISTANCEUNIT:
+ replaceValue(value, f, o->getMeterUnit());
break;
default:
qDebug() << "Unknown field: " << f;
}
}
+QString TextElement::handleEmpty(double value)
+{
+ if(value < 0.01)
+ {
+ return "";
+ }
+
+ return formatString(value);
+}
+
void TextElement::replaceValue(QString& value,
TextElement::Field field,
QString const& replace)