Skip to content
Snippets Groups Projects
RoomInfoListItem.h 3.16 KiB
Newer Older
  • Learn to ignore specific revisions
  • Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    /*
     * nheko Copyright (C) 2017  Konstantinos Sideris <siderisk@auth.gr>
     *
     * This program is free software: you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation, either version 3 of the License, or
     * (at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     */
    
    
    #include <QAction>
    #include <QSharedPointer>
    
    #include <QWidget>
    
    #include "Menu.h"
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    #include "RippleOverlay.h"
    
    #include "RoomSettings.h"
    
    #include "RoomState.h"
    
            QString username;
            QString userid;
            QString body;
            QString timestamp;
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    class RoomInfoListItem : public QWidget
    {
    
            Q_OBJECT
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    
    public:
    
            RoomInfoListItem(QSharedPointer<RoomSettings> settings,
                             RoomState state,
                             QString room_id,
                             QWidget *parent = 0);
    
            ~RoomInfoListItem();
    
            void updateUnreadMessageCount(int count);
            void clearUnreadMessageCount();
            void setState(const RoomState &state);
    
            inline bool isPressed() const;
            inline RoomState state() const;
            inline void setAvatar(const QImage &avatar_image);
            inline int unreadMessageCount() const;
            inline void setDescriptionMessage(const DescInfo &info);
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    
    signals:
    
            void clicked(const QString &room_id);
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    
    public slots:
    
            void setPressedState(bool state);
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    
    protected:
    
            void mousePressEvent(QMouseEvent *event) override;
            void paintEvent(QPaintEvent *event) override;
            void resizeEvent(QResizeEvent *event) override;
            void contextMenuEvent(QContextMenuEvent *event) override;
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    
    private:
    
            QString notificationText();
    
            const int Padding  = 7;
            const int IconSize = 48;
    
            RippleOverlay *ripple_overlay_;
    
            RoomState state_;
    
            QString roomId_;
            QString roomName_;
    
            DescInfo lastMsgInfo_;
    
            QPixmap roomAvatar_;
    
            Menu *menu_;
            QAction *toggleNotifications_;
    
            QSharedPointer<RoomSettings> roomSettings_;
    
            bool isPressed_ = false;
    
            int maxHeight_;
            int unreadMsgCount_ = 0;
    
    inline int
    RoomInfoListItem::unreadMessageCount() const
    
            return unreadMsgCount_;
    
    inline bool
    RoomInfoListItem::isPressed() const
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    {
    
            return isPressed_;
    
    inline RoomState
    RoomInfoListItem::state() const
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    {
    
            return state_;
    
    inline void
    RoomInfoListItem::setAvatar(const QImage &img)
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    {
    
            roomAvatar_ = QPixmap::fromImage(
              img.scaled(IconSize, IconSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
            update();
    
    Konstantinos Sideris's avatar
    Konstantinos Sideris committed
    }
    
    inline void
    RoomInfoListItem::setDescriptionMessage(const DescInfo &info)
    
            lastMsgInfo_ = info;
    
            update();