#include "FieldContentCodec.h" #include "FieldContentPainter.h" FieldContentCodec::FieldContentCodec(FieldContentPainter* painter): painter(painter), imageRx("") { initLoopParams(); } void FieldContentCodec::initLoopParams() { textPos = 0; prevTextPos = 0; } void FieldContentCodec::parse(const QString& text) { painter->startDrawing(); initLoopParams(); this->text = text; while(findNextImage() >= 0) { drawTextChunk(textPos - prevTextPos); drawImage(); textPos += imageRx.matchedLength(); prevTextPos = textPos; } drawTextChunk(-1); painter->endDrawing(); } int FieldContentCodec::findNextImage() { textPos = imageRx.indexIn(text, textPos); return textPos; } void FieldContentCodec::drawTextChunk(int len) { painter->drawText(text.mid(prevTextPos, len)); } void FieldContentCodec::drawImage() { QString imagePath = imageRx.cap(1); if(!QFileInfo(imagePath).exists()) imagePath = ":/images/broken-image.png"; painter->drawImage(imagePath); }