X-Git-Url: http://git.maemo.org/git/?p=jspeed;a=blobdiff_plain;f=src%2Ftextelement.cpp;h=d42b4239a4e3efad8a942113d8792c154d67f110;hp=5779d1c82d5c324ac51be236d52842eaa1155f33;hb=896cef4efae239e6ece29a288812425ec9e366e5;hpb=8e096b9ac91af0adc17ff4c5b74ca3061cd55cdb diff --git a/src/textelement.cpp b/src/textelement.cpp index 5779d1c..d42b423 100644 --- a/src/textelement.cpp +++ b/src/textelement.cpp @@ -18,12 +18,14 @@ #include #include +#include #include #include #include "textelement.h" #include "reader.h" #include "odometer.h" #include "graphicsscene.h" +#include "poialerts.h" namespace { @@ -31,22 +33,34 @@ 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"}; + "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(); } @@ -70,6 +84,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; @@ -93,6 +113,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; @@ -100,24 +150,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; @@ -129,6 +162,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(); @@ -139,6 +206,7 @@ void TextElement::addToScene(GraphicsScene* scene) { specialFields_.push_back(static_cast(i)); } + } QString replaced = data_; @@ -161,8 +229,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+"
"); } @@ -196,12 +269,46 @@ void TextElement::replaceSpecialFields(QString& value) case SPEEDUNIT: replaceValue(value, f, o->getSpeedUnit()); break; + case TIME: + 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) @@ -223,3 +330,9 @@ QString TextElement::formatString(double val) return result; } + + +QGraphicsItem* TextElement::getElement() const +{ + return element_; +}