From: eshe Date: Tue, 13 Jul 2010 20:34:56 +0000 (+0100) Subject: Improved special field handling in text element. X-Git-Url: http://git.maemo.org/git/?p=jspeed;a=commitdiff_plain;h=992b65c1d24af590bfdb56443950d1983836fc5d Improved special field handling in text element. --- diff --git a/src/textelement.cpp b/src/textelement.cpp index 92bf7fa..98b2fb8 100644 --- a/src/textelement.cpp +++ b/src/textelement.cpp @@ -40,10 +40,14 @@ namespace {"size", true}, {"font", false} }; + + const QString FIELDS[TextElement::FIELD_COUNT] = {"TRIP", "TOTAL", "SPEED", + "MAXSPEED", "AVGSPEED", + "UNIT", "SPEEDUNIT"}; } TextElement::TextElement(Reader* reader): GraphicsElement(reader), -data_(""), format_(""), align_("left"), fontSize_(16), hasSpecialField_(false) +data_(""), format_(""), align_("left"), fontSize_(16) { element_ = new QGraphicsTextItem(); } @@ -130,10 +134,18 @@ void TextElement::addToScene(GraphicsScene* scene) { Location::Fix fix; - QString replaced = data_; + specialFields_.clear(); - hasSpecialField_ = replaceSpecialField(replaced); + for(int i = 0; i < FIELD_COUNT; i++) + { + if(data_.indexOf("{" + FIELDS[i] + "}") != -1) + { + specialFields_.push_back(static_cast(i)); + } + } + QString replaced = data_; + replaceSpecialFields(replaced); updateHtml(replaced); scene->addItem(element_); @@ -141,13 +153,13 @@ void TextElement::addToScene(GraphicsScene* scene) void TextElement::update() { - if(!hasSpecialField_) + if(specialFields_.isEmpty()) { return; } QString replaced = data_; - replaceSpecialField(replaced); + replaceSpecialFields(replaced); updateHtml(replaced); } @@ -157,42 +169,47 @@ void TextElement::updateHtml(QString const& data) element_->setHtml("
"+data+"
"); } -bool TextElement::replaceSpecialField(QString& value) +void TextElement::replaceSpecialFields(QString& value) { - bool found = false; - - if(value.indexOf("{TRIP}") != -1) - { - value = value.replace("{TRIP}", formatString(Odometer::instance().getTrip())); - found = true; - } - - if(value.indexOf("{TOTAL}") != -1) - { - value = value.replace("{TOTAL}", formatString(Odometer::instance().getTotal())); - found = true; - } - - if(value.indexOf("{SPEED}") != -1) - { - value = value.replace("{SPEED}", formatString(Odometer::instance().getLatestFix().speed)); - found = true; - } - - if(value.indexOf("{SPEED_UNIT}") != -1) + for(int i = 0; i < specialFields_.size(); i++) { - value = value.replace("{SPEED_UNIT}", Odometer::getSpeedUnit()); - found = true; - } + Field f = specialFields_.at(i); + Odometer* o = &(Odometer::instance()); - if(value.indexOf("{UNIT}") != -1) - { - value = value.replace("{UNIT}", Odometer::getUnit()); - found = true; + switch(f) + { + case TRIP: + replaceValue(value, f, formatString(o->getTrip())); + break; + case TOTAL: + replaceValue(value, f, formatString(o->getTotal())); + break; + case SPEED: + replaceValue(value, f, formatString(o->getLatestFix().speed)); + break; + case MAXSPEED: + replaceValue(value, f, formatString(o->getMaxSpeed())); + break; + case AVGSPEED: + replaceValue(value, f, formatString(o->getAverageSpeed())); + break; + case UNIT: + replaceValue(value, f, o->getUnit()); + break; + case SPEEDUNIT: + replaceValue(value, f, o->getSpeedUnit()); + break; + default: + qDebug() << "Unknown field: " << f; + } } +} - return found; - +void TextElement::replaceValue(QString& value, + TextElement::Field field, + QString const& replace) +{ + value = value.replace("{" + FIELDS[field] + "}", replace); } QString TextElement::formatString(double val) diff --git a/src/textelement.h b/src/textelement.h index 02e34f8..ec4f7f1 100644 --- a/src/textelement.h +++ b/src/textelement.h @@ -30,6 +30,7 @@ class TextElement : public GraphicsElement { public: enum Attribute {XPOS, YPOS, DATA, FORMAT, WIDTH, ALIGN, COLOR, SIZE, FONT, ATTRIBUTE_COUNT}; + enum Field {TRIP, TOTAL, SPEED, MAXSPEED, AVGSPEED, UNIT, SPEEDUNIT, FIELD_COUNT}; TextElement(Reader* reader); virtual bool setAttribute(QString const& name, QString const& value); virtual void addToScene(GraphicsScene* scene); @@ -37,7 +38,8 @@ public: private: void updateHtml(QString const& data); - bool replaceSpecialField(QString& value); + void replaceSpecialFields(QString& value); + void replaceValue(QString& value, Field field, QString const& replace); QString formatString(double val); QGraphicsTextItem* element_; QString data_; @@ -45,7 +47,7 @@ private: QString align_; int fontSize_; QString fontFile_; - bool hasSpecialField_; + QList specialFields_; }; #endif