-void ChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
- Q_UNUSED(option); Q_UNUSED(widget);
- painter->save();
- painter->setClipRect(boundingRect());
- paintBackground(painter);
-
- layout()->draw(painter, pos(), additionalFormats(), boundingRect());
-
- // layout()->draw(painter, QPointF(0,0), formats, boundingRect());
-
- // Debuging Stuff
- // uncomment partially or all of the following stuff:
- //
- // 0) alternativ painter color for debug stuff
-// if(row() % 2)
-// painter->setPen(Qt::red);
-// else
-// painter->setPen(Qt::blue);
- // 1) draw wordwrap points in the first line
-// if(column() == 2) {
-// ChatLineModel::WrapList wrapList = data(ChatLineModel::WrapListRole).value<ChatLineModel::WrapList>();
-// foreach(ChatLineModel::Word word, wrapList) {
-// if(word.endX > width())
-// break;
-// painter->drawLine(word.endX, 0, word.endX, height());
-// }
-// }
- // 2) draw MsgId over the time column
-// if(column() == 0) {
-// QString msgIdString = QString::number(data(MessageModel::MsgIdRole).value<MsgId>().toInt());
-// QPointF bottomPoint = boundingRect().bottomLeft();
-// bottomPoint.ry() -= 2;
-// painter->drawText(bottomPoint, msgIdString);
-// }
- // 3) draw bounding rect
-// painter->drawRect(_boundingRect.adjusted(0, 0, -1, -1));
-
- painter->restore();
-}
-
-void ChatItem::overlayFormat(UiStyle::FormatList &fmtList, int start, int end, quint32 overlayFmt) const {
- for(int i = 0; i < fmtList.count(); i++) {
- int fmtStart = fmtList.at(i).first;
- int fmtEnd = (i < fmtList.count()-1 ? fmtList.at(i+1).first : data(MessageModel::DisplayRole).toString().length());
-
- if(fmtEnd <= start)
- continue;
- if(fmtStart >= end)
- break;
-
- // split the format if necessary
- if(fmtStart < start) {
- fmtList.insert(i, fmtList.at(i));
- fmtList[++i].first = start;
- }
- if(end < fmtEnd) {
- fmtList.insert(i, fmtList.at(i));
- fmtList[i+1].first = end;
- }
-
- fmtList[i].second |= overlayFmt;
- }
-}
-
-QVector<QTextLayout::FormatRange> ChatItem::additionalFormats() const {
- return selectionFormats();
-}
-
-QVector<QTextLayout::FormatRange> ChatItem::selectionFormats() const {
- if(!hasSelection())
- return QVector<QTextLayout::FormatRange>();
-
- int start, end;
- if(_selectionMode == FullSelection) {
- start = 0;
- end = data(MessageModel::DisplayRole).toString().length();
- } else {
- start = qMin(_selectionStart, _selectionEnd);
- end = qMax(_selectionStart, _selectionEnd);
- }
-
- UiStyle::FormatList fmtList = formatList();
-
- while(fmtList.count() > 1 && fmtList.at(1).first <= start)
- fmtList.removeFirst();
-
- fmtList.first().first = start;
-
- while(fmtList.count() > 1 && fmtList.last().first >= end)
- fmtList.removeLast();
-
- return QtUi::style()->toTextLayoutList(fmtList, end, UiStyle::Selected|data(ChatLineModel::MsgLabelRole).toUInt()).toVector();
-}
-
-bool ChatItem::hasSelection() const {
- if(_selectionMode == NoSelection)
- return false;
- if(_selectionMode == FullSelection)
- return true;
- // partial
- return _selectionStart != _selectionEnd;
+void ChatItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
+{
+ Q_UNUSED(option);
+ Q_UNUSED(widget);
+ painter->save();
+ painter->setClipRect(boundingRect());
+ paintBackground(painter);
+
+ layout()->draw(painter, pos(), additionalFormats(), boundingRect());
+
+ // layout()->draw(painter, QPointF(0,0), formats, boundingRect());
+
+ // Debuging Stuff
+ // uncomment partially or all of the following stuff:
+ //
+ // 0) alternativ painter color for debug stuff
+ // if(row() % 2)
+ // painter->setPen(Qt::red);
+ // else
+ // painter->setPen(Qt::blue);
+ // 1) draw wordwrap points in the first line
+ // if(column() == 2) {
+ // ChatLineModel::WrapList wrapList = data(ChatLineModel::WrapListRole).value<ChatLineModel::WrapList>();
+ // foreach(ChatLineModel::Word word, wrapList) {
+ // if(word.endX > width())
+ // break;
+ // painter->drawLine(word.endX, 0, word.endX, height());
+ // }
+ // }
+ // 2) draw MsgId over the time column
+ // if(column() == 0) {
+ // QString msgIdString = QString::number(data(MessageModel::MsgIdRole).value<MsgId>().toLongLong());
+ // QPointF bottomPoint = boundingRect().bottomLeft();
+ // bottomPoint.ry() -= 2;
+ // painter->drawText(bottomPoint, msgIdString);
+ // }
+ // 3) draw bounding rect
+ // painter->drawRect(_boundingRect.adjusted(0, 0, -1, -1));
+
+ painter->restore();
+}
+
+void ChatItem::overlayFormat(UiStyle::FormatList& fmtList, quint16 start, quint16 end, UiStyle::FormatType overlayFmt) const
+{
+ for (size_t i = 0; i < fmtList.size(); i++) {
+ int fmtStart = fmtList.at(i).first;
+ int fmtEnd = (i < fmtList.size() - 1 ? fmtList.at(i + 1).first : data(MessageModel::DisplayRole).toString().length());
+
+ if (fmtEnd <= start)
+ continue;
+ if (fmtStart >= end)
+ break;
+
+ // split the format if necessary
+ if (fmtStart < start) {
+ fmtList.insert(fmtList.begin() + i, fmtList.at(i));
+ fmtList[++i].first = start;
+ }
+ if (end < fmtEnd) {
+ fmtList.insert(fmtList.begin() + i, fmtList.at(i));
+ fmtList[i + 1].first = end;
+ }
+
+ fmtList[i].second.type |= overlayFmt;
+ }