Add local per-member radio mute controls on desktop and Android
This commit is contained in:
1 parent
a069d11ef9
commit
7e19cbaf3a
33 files changed
+735
-27
No files matched your search
@@ -10,6 +10,7 @@
|
||||
#include <QDir>
|
||||
extern "C" {
|
||||
#include "chat/invite_link.h"
|
||||
#include "chat/chat_member.h"
|
||||
}
|
||||
|
||||
class InviteLinksTest : public QObject {
|
||||
@@ -305,6 +306,44 @@ private slots:
|
||||
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(60, row.center().y()));
|
||||
QCOMPARE(invites.count(), 1);
|
||||
}
|
||||
|
||||
void radioMuteButtonTargetsMemberAndChangesColor() {
|
||||
QStandardItemModel model;
|
||||
auto* other = new QStandardItem("other"); other->setData(false, Qt::UserRole + 2); model.appendRow(other);
|
||||
auto* self = new QStandardItem("self"); self->setData(true, Qt::UserRole + 2); model.appendRow(self);
|
||||
QListView view; AccountDelegate delegate;
|
||||
view.setModel(&model); view.setItemDelegate(&delegate); view.resize(280, 140); view.show(); QTest::qWait(30);
|
||||
QSignalSpy toggles(&delegate, &AccountDelegate::radioMuteRequested);
|
||||
QSignalSpy invites(&delegate, &AccountDelegate::inviteRequested);
|
||||
connect(&delegate, &AccountDelegate::radioMuteRequested, &model, [&](const QModelIndex& index) {
|
||||
model.setData(index, index.data(Qt::UserRole + 3).toInt() ^ CHAT_MEMBER_FLAG_RADIO_MUTED, Qt::UserRole + 3);
|
||||
});
|
||||
const QModelIndex index = model.index(0, 0);
|
||||
const QRect row = view.visualRect(index);
|
||||
const QPoint button(row.right() - 50, row.center().y());
|
||||
auto colorCount = [&](QRgb color) {
|
||||
QImage image(view.viewport()->size(), QImage::Format_RGB32); image.fill(Qt::white);
|
||||
QStyleOptionViewItem option; option.initFrom(&view); option.rect = row;
|
||||
QPainter painter(&image); delegate.paint(&painter, option, index); painter.end();
|
||||
int count = 0;
|
||||
for (int y = row.top(); y <= row.bottom(); ++y)
|
||||
for (int x = row.right() - 63; x < row.right() - 35; ++x) count += image.pixel(x, y) == color;
|
||||
return count;
|
||||
};
|
||||
QVERIFY(colorCount(QColor("#4CAF50").rgb()) > 0);
|
||||
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, button);
|
||||
QCOMPARE(toggles.count(), 1); QCOMPARE(qvariant_cast<QModelIndex>(toggles.first().first()).row(), 0);
|
||||
QVERIFY(colorCount(QColor("#EF5350").rgb()) > 0); QCOMPARE(colorCount(QColor("#4CAF50").rgb()), 0);
|
||||
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, button);
|
||||
QCOMPARE(toggles.count(), 2); QVERIFY(colorCount(QColor("#4CAF50").rgb()) > 0);
|
||||
const QRect own = view.visualRect(model.index(1, 0));
|
||||
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(own.right() - 50, own.center().y()));
|
||||
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(65, row.center().y()));
|
||||
QCOMPARE(toggles.count(), 2); QCOMPARE(invites.count(), 0);
|
||||
QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::NoModifier, button);
|
||||
QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(65, row.center().y()));
|
||||
QCOMPARE(toggles.count(), 2);
|
||||
}
|
||||
};
|
||||
QTEST_MAIN(InviteLinksTest)
|
||||
#include "test_invite_links.moc"
|
||||
Reference in new issue
Block a user