Skip to content
Snippets Groups Projects
CommunitiesListItem.h 2.87 KiB
Newer Older
  • Learn to ignore specific revisions
  • Max Sandholm's avatar
    Max Sandholm committed
    #pragma once
    
    #include <QSharedPointer>
    #include <QWidget>
    
    
    Max Sandholm's avatar
    Max Sandholm committed
    #include "ui/Theme.h"
    
    
    Nicolas Werner's avatar
    Nicolas Werner committed
    class QMouseEvent;
    
    Max Sandholm's avatar
    Max Sandholm committed
    class CommunitiesListItem : public QWidget
    {
            Q_OBJECT
            Q_PROPERTY(QColor highlightedBackgroundColor READ highlightedBackgroundColor WRITE
                         setHighlightedBackgroundColor)
            Q_PROPERTY(
              QColor hoverBackgroundColor READ hoverBackgroundColor WRITE setHoverBackgroundColor)
            Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor)
    
    
            Q_PROPERTY(QColor avatarFgColor READ avatarFgColor WRITE setAvatarFgColor)
            Q_PROPERTY(QColor avatarBgColor READ avatarBgColor WRITE setAvatarBgColor)
    
    
    Max Sandholm's avatar
    Max Sandholm committed
    public:
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
            CommunitiesListItem(QString group_id, QWidget *parent = nullptr);
    
    Max Sandholm's avatar
    Max Sandholm committed
    
    
            void setName(QString name);
    
            bool isPressed() const { return isPressed_; }
            void setAvatar(const QImage &img);
    
    Max Sandholm's avatar
    Max Sandholm committed
    
    
            void setRooms(std::map<QString, bool> room_ids) { room_ids_ = std::move(room_ids); }
    
            void addRoom(const QString &id) { room_ids_[id] = true; }
            void delRoom(const QString &id) { room_ids_.erase(id); }
    
            std::map<QString, bool> rooms() const { return room_ids_; }
    
            bool is_tag() const { return groupId_.startsWith("tag:"); }
    
    
    Max Sandholm's avatar
    Max Sandholm committed
            QColor highlightedBackgroundColor() const { return highlightedBackgroundColor_; }
            QColor hoverBackgroundColor() const { return hoverBackgroundColor_; }
            QColor backgroundColor() const { return backgroundColor_; }
    
    
            QColor avatarFgColor() const { return avatarFgColor_; }
            QColor avatarBgColor() const { return avatarBgColor_; }
    
    
    Max Sandholm's avatar
    Max Sandholm committed
            void setHighlightedBackgroundColor(QColor &color) { highlightedBackgroundColor_ = color; }
            void setHoverBackgroundColor(QColor &color) { hoverBackgroundColor_ = color; }
            void setBackgroundColor(QColor &color) { backgroundColor_ = color; }
    
    
            void setAvatarFgColor(QColor &color) { avatarFgColor_ = color; }
            void setAvatarBgColor(QColor &color) { avatarBgColor_ = color; }
    
            QSize sizeHint() const override
            {
                    return QSize(IconSize + IconSize / 3, IconSize + IconSize / 3);
            }
    
    Max Sandholm's avatar
    Max Sandholm committed
    
    signals:
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
            void clicked(const QString &group_id);
    
    Max Sandholm's avatar
    Max Sandholm committed
    
    public slots:
            void setPressedState(bool state);
    
    protected:
            void mousePressEvent(QMouseEvent *event) override;
            void paintEvent(QPaintEvent *event) override;
    
    private:
    
    Max Sandholm's avatar
    Max Sandholm committed
    
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
            QString resolveName() const;
    
            std::map<QString, bool> room_ids_;
    
    Max Sandholm's avatar
    Max Sandholm committed
    
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
            QString name_;
            QString groupId_;
            QPixmap avatar_;
    
    Max Sandholm's avatar
    Max Sandholm committed
    
    
            QColor highlightedBackgroundColor_;
            QColor hoverBackgroundColor_;
            QColor backgroundColor_;
    
            QColor avatarFgColor_;
            QColor avatarBgColor_;
    
    
    Max Sandholm's avatar
    Max Sandholm committed
            bool isPressed_ = false;
    
    
            RippleOverlay *rippleOverlay_;
    };