X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Ftextelement.cpp;h=4f4fab702832a6ad9238a2f670e17ccf557f5e37;hb=37a85d24acdd9a5fd6fbe941cec951c8b86f2345;hp=018786649c0e49e249ad0a39ff0892bc6f75337a;hpb=fdb9b8b2d07ef0695275ad353f40ff068779a82f;p=jspeed diff --git a/src/textelement.cpp b/src/textelement.cpp index 0187866..4f4fab7 100644 --- a/src/textelement.cpp +++ b/src/textelement.cpp @@ -25,6 +25,7 @@ #include "reader.h" #include "odometer.h" #include "graphicsscene.h" +#include "poialerts.h" namespace { @@ -32,22 +33,33 @@ 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"}; } 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(); } @@ -71,6 +83,12 @@ bool TextElement::setAttribute(QString const& name, QString const& value) case YPOS: element_->setY(intVal); break; + case ZPOS: + element_->setZValue(intVal); + break; + case VISIBLEWHEN: + setVisibleWhen(strToVisibleWhen(value)); + break; case DATA: data_ = value; break; @@ -94,6 +112,36 @@ bool TextElement::setAttribute(QString const& name, QString const& value) 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; @@ -101,24 +149,7 @@ bool TextElement::setAttribute(QString const& name, QString const& value) 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; @@ -130,6 +161,40 @@ bool TextElement::setAttribute(QString const& name, QString const& value) } } +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(); @@ -163,8 +228,13 @@ void TextElement::update() updateHtml(replaced); } -void TextElement::updateHtml(QString const& data) +void TextElement::updateHtml(QString data) { + if(uppercase_) + { + data = data.toUpper(); + } + element_->setHtml("
"+data+"
"); } @@ -199,7 +269,22 @@ void TextElement::replaceSpecialFields(QString& value) 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; default: qDebug() << "Unknown field: " << f; @@ -207,6 +292,16 @@ void TextElement::replaceSpecialFields(QString& value) } } +QString TextElement::handleEmpty(double value) +{ + if(value < 0.01) + { + return ""; + } + + return formatString(value); +} + void TextElement::replaceValue(QString& value, TextElement::Field field, QString const& replace)