#include "chatlinemodel.h"
#include "chatscene.h"
+#include "clickable.h"
#include "uistyle.h"
#include "qtui.h"
ChatItem(const qreal &width, const qreal &height, const QPointF &pos, QGraphicsItem *parent);
public:
- inline const QAbstractItemModel *model() const;
- inline int row() const;
+ const QAbstractItemModel *model() const;
+ int row() const;
virtual ChatLineModel::ColumnType column() const = 0;
inline ChatScene *chatScene() const { return qobject_cast<ChatScene *>(scene()); }
//! A ChatItem for the contents column
class ContentsChatItem : public ChatItem {
- Q_DECLARE_TR_FUNCTIONS(ContentsChatItem);
+ Q_DECLARE_TR_FUNCTIONS(ContentsChatItem)
public:
ContentsChatItem(const qreal &width, const QPointF &pos, QGraphicsItem *parent);
virtual QVector<QTextLayout::FormatRange> additionalFormats() const;
virtual inline void initLayout(QTextLayout *layout) const {
- initLayoutHelper(layout, QTextOption::WrapAnywhere);
+ initLayoutHelper(layout, QTextOption::WrapAtWordBoundaryOrAnywhere);
doLayout(layout);
}
virtual void doLayout(QTextLayout *layout) const;
virtual UiStyle::FormatList formatList() const;
private:
- struct Clickable;
class ActionProxy;
class WrapColumnFinder;
ContentsChatItemPrivate *_data;
ContentsChatItemPrivate *privateData() const;
- QList<Clickable> findClickables() const;
Clickable clickableAt(const QPointF &pos) const;
void endHoverMode();
static ActionProxy _actionProxy;
};
-struct ContentsChatItem::Clickable {
- // Don't change these enums without also changing the regexps in analyze()!
- enum Type {
- Invalid = -1,
- Url = 0,
- Channel = 1,
- Nick = 2
- };
-
- Type type;
- quint16 start;
- quint16 length;
-
- inline Clickable() : type(Invalid) {};
- inline Clickable(Type type_, quint16 start_, quint16 length_) : type(type_), start(start_), length(length_) {};
- inline bool isValid() const { return type != Invalid; }
-};
-
struct ContentsChatItemPrivate {
ContentsChatItem *contentsItem;
- QList<ContentsChatItem::Clickable> clickables;
- ContentsChatItem::Clickable currentClickable;
- ContentsChatItem::Clickable activeClickable;
+ ClickableList clickables;
+ Clickable currentClickable;
+ Clickable activeClickable;
- ContentsChatItemPrivate(const QList<ContentsChatItem::Clickable> &c, ContentsChatItem *parent) : contentsItem(parent), clickables(c) {}
+ ContentsChatItemPrivate(const ClickableList &c, ContentsChatItem *parent) : contentsItem(parent), clickables(c) {}
};
class ContentsChatItem::WrapColumnFinder {
/*************************************************************************************************/
-// Avoid circular include deps
-#include "chatline.h"
-const QAbstractItemModel *ChatItem::model() const { return static_cast<ChatLine *>(parentItem())->model(); }
-int ChatItem::row() const { return static_cast<ChatLine *>(parentItem())->row(); }
-
#endif