#include "chatscene.h"
+#include <utility>
+
#include <QApplication>
#include <QClipboard>
#include <QDesktopServices>
#include <QPersistentModelIndex>
#include <QUrl>
-#ifdef HAVE_KDE4
-# include <KMenuBar>
-#else
-# include <QMenuBar>
-#endif
-
#ifdef HAVE_WEBENGINE
# include <QWebEngineView>
#elif defined HAVE_WEBKIT
const qreal minContentsWidth = 200;
-ChatScene::ChatScene(QAbstractItemModel *model, const QString &idString, qreal width, ChatView *parent)
+ChatScene::ChatScene(QAbstractItemModel *model, QString idString, qreal width, ChatView *parent)
: QGraphicsScene(0, 0, width, 0, (QObject *)parent),
_chatView(parent),
- _idString(idString),
+ _idString(std::move(idString)),
_model(model),
_singleBufferId(BufferId()),
_sceneRect(0, 0, width, 0),
_markerLineJumpPending(false),
_cutoffMode(CutoffRight),
_alwaysBracketSender(false),
- _selectingItem(0),
+ _selectingItem(nullptr),
_selectionStart(-1),
_isSelecting(false),
_clickMode(NoClick),
_clickHandled(true),
_leftButtonPressed(false)
{
- MessageFilter *filter = qobject_cast<MessageFilter *>(model);
+ auto *filter = qobject_cast<MessageFilter *>(model);
if (filter && filter->isSingleBufferFilter()) {
_singleBufferId = filter->singleBufferId();
}
}
-ChatScene::~ChatScene()
-{
-}
-
-
ChatView *ChatScene::chatView() const
{
return _chatView;
ChatLine *ChatScene::chatLine(MsgId msgId, bool matchExact, bool ignoreDayChange) const
{
if (!_lines.count())
- return 0;
+ return nullptr;
QList<ChatLine *>::ConstIterator start = _lines.begin();
QList<ChatLine *>::ConstIterator end = _lines.end();
QList<ChatLine *>::ConstIterator middle;
- int n = int(end - start);
+ auto n = int(end - start);
int half;
while (n > 0) {
return *start;
if (matchExact)
- return 0;
+ return nullptr;
if (start == _lines.begin()) // not (yet?) in our scene
- return 0;
+ return nullptr;
// if we didn't find the exact msgId, take the next-lower one (this makes sense for lastSeen)
if (_lines.at(i)->msgType() != Message::DayChange)
return _lines.at(i);
}
- return 0;
+ return nullptr;
}
// return the next-lower line
return *start;
}
while (start != _lines.begin());
- return 0;
+ return nullptr;
}
ChatItem *ChatScene::chatItemAt(const QPointF &scenePos) const
{
foreach(QGraphicsItem *item, items(scenePos, Qt::IntersectsItemBoundingRect, Qt::AscendingOrder)) {
- ChatLine *line = qgraphicsitem_cast<ChatLine *>(item);
+ auto *line = qgraphicsitem_cast<ChatLine *>(item);
if (line)
return line->itemAt(line->mapFromScene(scenePos));
}
- return 0;
+ return nullptr;
}
bool ChatScene::containsBuffer(const BufferId &id) const
{
- MessageFilter *filter = qobject_cast<MessageFilter *>(model());
+ auto *filter = qobject_cast<MessageFilter *>(model());
if (filter)
return filter->containsBuffer(id);
else
if (atTop) {
for (int i = end; i >= start; i--) {
- ChatLine *line = new ChatLine(i, model(),
+ auto *line = new ChatLine(i, model(),
width,
timestampWidth, senderWidth, contentsWidth,
senderPos, contentsPos);
}
else {
for (int i = start; i <= end; i++) {
- ChatLine *line = new ChatLine(i, model(),
+ auto *line = new ChatLine(i, model(),
width,
timestampWidth, senderWidth, contentsWidth,
senderPos, contentsPos);
// neither pre- or append means we have to do dirty work: move items...
if (!(atTop || atBottom)) {
- ChatLine *line = 0;
+ ChatLine *line = nullptr;
for (int i = 0; i <= end; i++) {
line = _lines.at(i);
line->setPos(0, line->pos().y() - h);
if (_selectingItem) {
int row = _selectingItem->row();
if (row >= start && row <= end)
- setSelectingItem(0);
+ setSelectingItem(nullptr);
}
// remove items from scene
int lineCount = start;
while (lineIter != _lines.end() && lineCount <= end) {
if ((*lineIter) == markerLine()->chatLine())
- markerLine()->setChatLine(0);
+ markerLine()->setChatLine(nullptr);
h += (*lineIter)->height();
delete *lineIter;
lineIter = _lines.erase(lineIter);
moveStart = start;
offset = -offset;
}
- ChatLine *line = 0;
+ ChatLine *line = nullptr;
for (int i = moveStart; i <= moveEnd; i++) {
line = _lines.at(i);
line->setPos(0, line->pos().y() + offset);
{
int curRow = rowByScenePos(pos);
if (curRow < 0) return;
- int curColumn = (int)columnByScenePos(pos);
- ChatLineModel::ColumnType minColumn = (ChatLineModel::ColumnType)qMin(curColumn, _selectionStartCol);
+ auto curColumn = (int)columnByScenePos(pos);
+ auto minColumn = (ChatLineModel::ColumnType)qMin(curColumn, _selectionStartCol);
if (minColumn != _selectionMinCol) {
_selectionMinCol = minColumn;
for (int l = qMin(_selectionStart, _selectionEnd); l <= qMax(_selectionStart, _selectionEnd); l++) {
void ChatScene::initiateDrag(QWidget *source)
{
- QDrag *drag = new QDrag(source);
- QMimeData *mimeData = new QMimeData;
+ auto *drag = new QDrag(source);
+ auto *mimeData = new QMimeData;
mimeData->setText(selection());
drag->setMimeData(mimeData);
void ChatScene::requestBacklog()
{
- MessageFilter *filter = qobject_cast<MessageFilter *>(model());
+ auto *filter = qobject_cast<MessageFilter *>(model());
if (filter)
return filter->requestBacklog();
return;
// ChatLine should be at the bottom of the list
for (int i = itemList.count()-1; i >= 0; i--) {
- ChatLine *line = qgraphicsitem_cast<ChatLine *>(itemList.at(i));
+ auto *line = qgraphicsitem_cast<ChatLine *>(itemList.at(i));
if (line)
return line->row();
}
if (webPreview.previewItem->scene())
removeItem(webPreview.previewItem);
delete webPreview.previewItem;
- webPreview.previewItem = 0;
+ webPreview.previewItem = nullptr;
}
webPreview.previewState = WebPreview::NoPreview;
}
case WebPreview::HidePreview:
if (webPreview.previewItem) {
delete webPreview.previewItem;
- webPreview.previewItem = 0;
+ webPreview.previewItem = nullptr;
}
- webPreview.parentItem = 0;
+ webPreview.parentItem = nullptr;
webPreview.url = QUrl();
webPreview.urlRect = QRectF();
webPreview.previewState = WebPreview::NoPreview;
webPreview.previewState = WebPreview::NoPreview; // we haven't loaded anything yet
break;
case WebPreview::ShowPreview:
- if (parentItem == 0 || webPreview.parentItem == parentItem) {
+ if (parentItem == nullptr || webPreview.parentItem == parentItem) {
if (webPreview.previewItem && webPreview.previewItem->scene())
removeItem(webPreview.previewItem);
}