{"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();
}
{
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<Field>(i));
+ }
+ }
+ QString replaced = data_;
+ replaceSpecialFields(replaced);
updateHtml(replaced);
scene->addItem(element_);
void TextElement::update()
{
- if(!hasSpecialField_)
+ if(specialFields_.isEmpty())
{
return;
}
QString replaced = data_;
- replaceSpecialField(replaced);
+ replaceSpecialFields(replaced);
updateHtml(replaced);
}
element_->setHtml("<div align='"+align_+"'>"+data+"</div>");
}
-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)
{
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);
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_;
QString align_;
int fontSize_;
QString fontFile_;
- bool hasSpecialField_;
+ QList<Field> specialFields_;
};
#endif