X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fuistyle.h;h=7911dc7e95d658f655acfcb3ead3e6b06f3a95f8;hp=22ade27a02ea7355617bee9e0aeddddef3faf53c;hb=55049803e1f4215cedaa30935eae4ca2aa5835d2;hpb=2c16b8e356817cb4a4bf7fcd59c0c7429b0100e1 diff --git a/src/uisupport/uistyle.h b/src/uisupport/uistyle.h index 22ade27a..7911dc7e 100644 --- a/src/uisupport/uistyle.h +++ b/src/uisupport/uistyle.h @@ -29,14 +29,16 @@ #include #include +#include "bufferinfo.h" #include "message.h" +#include "networkmodel.h" #include "settings.h" -class UiStyle { - Q_DECLARE_TR_FUNCTIONS(UiStyle) +class UiStyle : public QObject{ + Q_OBJECT public: - UiStyle(); + UiStyle(QObject *parent = 0); virtual ~UiStyle(); typedef QList > FormatList; @@ -49,8 +51,8 @@ public: * Also, we _do_ rely on certain properties of these values in styleString() and friends! */ enum FormatType { - None = 0x00000000, - Invalid = 0x11111111, + Base = 0x00000000, + Invalid = 0xffffffff, // Message Formats (mutually exclusive!) PlainMsg = 0x00000001, @@ -69,19 +71,19 @@ public: DayChangeMsg = 0x0000000e, // Standard Formats - Bold = 0x00000010, - Italic = 0x00000020, - Underline = 0x00000040, - Reverse = 0x00000080, + Bold = 0x00000100, + Italic = 0x00000200, + Underline = 0x00000400, + Reverse = 0x00000800, // Individual parts of a message - Timestamp = 0x00000100, - Sender = 0x00000200, - Contents = 0x00000400, - Nick = 0x00000800, - Hostmask = 0x00001000, - ChannelName = 0x00002000, - ModeFlags = 0x00004000, + Timestamp = 0x00001000, + Sender = 0x00002000, + Contents = 0x00004000, + Nick = 0x00008000, + Hostmask = 0x00010000, + ChannelName = 0x00020000, + ModeFlags = 0x00040000, // URL is special, we want that to take precedence over the rest... Url = 0x00080000 @@ -93,7 +95,30 @@ public: enum MessageLabel { OwnMsg = 0x00000001, - Highlight = 0x00000002 + Highlight = 0x00000002, + Selected = 0x00000004 // must be last! + }; + + enum ItemFormatType { + BufferViewItem = 0x00000001, + NickViewItem = 0x00000002, + + NetworkItem = 0x00000010, + ChannelBufferItem = 0x00000020, + QueryBufferItem = 0x00000040, + IrcUserItem = 0x00000080, + UserCategoryItem = 0x00000100, + + InactiveBuffer = 0x00001000, + ActiveBuffer = 0x00002000, + UnreadBuffer = 0x00004000, + HighlightedBuffer = 0x00008000, + UserAway = 0x00010000 + }; + + enum ColorRole { + MarkerLine, + NumRoles // must be last! }; struct StyledString { @@ -104,36 +129,67 @@ public: class StyledMessage; static FormatType formatType(Message::Type msgType); - static StyledString styleString(const QString &string, quint32 baseFormat = None); + static StyledString styleString(const QString &string, quint32 baseFormat = Base); static QString mircToInternal(const QString &); + static inline QString timestampFormatString() { return _timestampFormatString; } + + QTextCharFormat format(quint32 formatType, quint32 messageLabel); + QFontMetricsF *fontMetrics(quint32 formatType, quint32 messageLabel); + + QList toTextLayoutList(const FormatList &, int textLength, quint32 messageLabel); + + inline const QBrush &brush(ColorRole role) const { return _uiStylePalette.at((int) role); } + inline void setBrush(ColorRole role, const QBrush &brush) { _uiStylePalette[(int) role] = brush; } - QTextCharFormat format(quint32 formatType, quint32 messageLabel = 0); - QFontMetricsF *fontMetrics(quint32 formatType, quint32 messageLabel = 0); + QVariant bufferViewItemData(const QModelIndex &networkModelIndex, int role) const; + QVariant nickViewItemData(const QModelIndex &networkModelIndex, int role) const; - inline QFont defaultFont() const { return _defaultFont; } +public slots: + void reload(); - QList toTextLayoutList(const FormatList &, int textLength, quint32 messageLabel = 0); +signals: + void changed(); protected: void loadStyleSheet(); + QString loadStyleSheet(const QString &name, bool shouldExist = false); - //! Determines the format set to be used for the given hostmask - //int formatSetIndex(const QString &hostmask) const; - //int formatSetIndexForSelf() const; - - QTextCharFormat cachedFormat(quint64 key) const; - QTextCharFormat cachedFormat(quint32 formatType, quint32 messageLabel = 0) const; - void setCachedFormat(const QTextCharFormat &format, quint32 formatType, quint32 messageLabel = 0); - void mergeSubElementFormat(QTextCharFormat &format, quint32 formatType, quint32 messageLabel = 0); + QTextCharFormat format(quint64 key) const; + QTextCharFormat cachedFormat(quint32 formatType, quint32 messageLabel) const; + void setCachedFormat(const QTextCharFormat &format, quint32 formatType, quint32 messageLabel); + void mergeFormat(QTextCharFormat &format, quint32 formatType, quint64 messageLabel); + void mergeSubElementFormat(QTextCharFormat &format, quint32 formatType, quint64 messageLabel); static FormatType formatType(const QString &code); static QString formatCode(FormatType); + static void setTimestampFormatString(const QString &format); + + QVariant itemData(int role, const QTextCharFormat &format) const; + +private slots: + void showUserStateIconsChanged(); private: - QFont _defaultFont; + QVector _uiStylePalette; + QBrush _markerLineBrush; + QHash _formats; QHash _formatCache; QHash _metricsCache; + QHash _listItemFormats; static QHash _formatCodes; + static QString _timestampFormatString; + + QPixmap _channelJoinedIcon; + QPixmap _channelPartedIcon; + QPixmap _userOfflineIcon; + QPixmap _userOnlineIcon; + QPixmap _userAwayIcon; + QPixmap _categoryOpIcon; + QPixmap _categoryVoiceIcon; + int _opIconLimit; + int _voiceIconLimit; + bool _showNickViewIcons; + bool _showBufferViewIcons; }; class UiStyle::StyledMessage : public Message { @@ -145,16 +201,16 @@ public: QString decoratedSender() const; const QString &plainContents() const; - inline FormatType timestampFormat() const { return UiStyle::Timestamp; } - FormatType senderFormat() const; const FormatList &contentsFormatList() const; + + quint8 senderHash() const; + protected: - //! Styling is only needed for calls to plainContents() and contentsFormatList() void style() const; - private: mutable StyledString _contents; + mutable quint8 _senderHash; }; QDataStream &operator<<(QDataStream &out, const UiStyle::FormatList &formatList);