Skip to content
Snippets Groups Projects
Select Git revision
  • 5e9090175fa2e6e96fa208cea8c50b4549e1b7e5
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • release/201811
  • release/201808
  • releases/beta1
  • packaging
  • native
  • release-0.2.x
  • 1.0.0
  • 0.2.0
  • 0.1.1
  • 0.1.0
25 results

conversationsfilterwidget.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    conversationsfilterwidget.cpp 3.03 KiB
    /***************************************************************************
     * Copyright (C) 2019-2019 by Savoir-faire Linux                                *
     * Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>          *
     *                                                                         *
     * 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 "conversationsfilterwidget.h"
    
    #include <QPainter>
    #include <QDebug>
    
    #include "ringthemeutils.h"
    #include "lrcinstance.h"
    
    ConversationsFilterWidget::ConversationsFilterWidget(QWidget *parent)
        : QWidget(parent)
    {
    }
    
    void ConversationsFilterWidget::updateBadges()
    {
        using namespace lrc::api::profile;
        updateNotifier(Type::RING);
        updateNotifier(Type::PENDING);
    }
    
    void
    ConversationsFilterWidget::resizeEvent(QResizeEvent* event)
    {
        Q_UNUSED(event);
        updateBadges();
    }
    
    void
    ConversationsFilterWidget::updateNotifier(lrc::api::profile::Type typeFilter)
    {
        using namespace lrc::api::profile;
        handleNotifierOverlay((typeFilter == Type::RING) ? "btnConversations" : "btnInvites",
                              (typeFilter == Type::RING) ? unreadMessagesNotifier_ : pendingInvitesNotifier_,
                              typeFilter);
    }
    
    static inline const QRect
    getNotifierRect(const QRect& buttonRect)
    {
        qreal radius = 9;
        QPointF ellipseCenter(buttonRect.right() - radius * 2, buttonRect.top());
        return QRect(ellipseCenter.x() - radius, ellipseCenter.y() - radius, radius * 2, radius * 2);
    }
    
    void
    ConversationsFilterWidget::handleNotifierOverlay(const QString& buttonName,
        SmartlistSelectorButtonNotifier*& notifier,
        lrc::api::profile::Type filter)
    {
        auto button = this->findChild<QPushButton*>(buttonName);
        if (!button) {
            return;
        }
        if (!notifier) {
            notifier = new SmartlistSelectorButtonNotifier(this);
            button->stackUnder(notifier);
            notifier->setTypeFilter(filter);
            notifier->hide();
            QObject::connect(notifier, SIGNAL(clicked()), button, SLOT(click()));
        } else {
            notifier->setGeometry(getNotifierRect(button->frameGeometry()));
            notifier->show();
        }
    }