1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
#pragma once
#include "activitydetector.h"
#include <Quotient/eventitem.h>
#include <QtQml/QQmlNetworkAccessManagerFactory>
#include <QtQuickWidgets/QQuickWidget>
#include <QtCore/QBasicTimer>
class ChatRoomWidget;
class MessageEventModel;
class QuaternionRoom;
class TimelineWidget : public QQuickWidget {
Q_OBJECT
public:
TimelineWidget(ChatRoomWidget* chatRoomWidget);
~TimelineWidget() override;
QString selectedText() const;
QuaternionRoom* currentRoom() const;
Q_INVOKABLE Qt::KeyboardModifiers getModifierKeys() const;
Q_INVOKABLE bool isHistoryRequestRunning() const;
signals:
void resourceRequested(const QString& idOrUri, const QString& action = {});
void roomSettingsRequested();
void showStatusMessage(const QString& message, int timeout = 0) const;
void pageUpPressed();
void pageDownPressed();
void openExternally(int currentIndex);
void showDetails(int currentIndex);
void viewPositionRequested(int index);
void animateMessage(int currentIndex);
void historyRequestChanged();
public slots:
void setRoom(QuaternionRoom* room);
void focusInput();
void spotlightEvent(const QString& eventId);
void onMessageShownChanged(int visualIndex, bool shown, bool hasReadMarker);
void markShownAsRead();
void saveFileAs(const QString& eventId);
void showMenu(int index, const QString& hoveredLink,
const QString& selectedText, bool showingDetails);
void reactionButtonClicked(const QString& eventId, const QString& key);
void setGlobalSelectionBuffer(const QString& text);
void ensureLastReadEvent();
private:
MessageEventModel* m_messageModel;
QString m_selectedText;
using timeline_index_t = Quotient::TimelineItem::index_t;
std::vector<timeline_index_t> indicesOnScreen;
timeline_index_t indexToMaybeRead;
QBasicTimer maybeReadTimer;
bool readMarkerOnScreen;
ActivityDetector activityDetector;
QFuture<void> historyRequest;
class NamFactory : public QQmlNetworkAccessManagerFactory {
public:
QNetworkAccessManager* create(QObject* parent) override;
};
NamFactory namFactory;
ChatRoomWidget* roomWidget() const;
void reStartShownTimer();
void timerEvent(QTimerEvent* qte) override;
bool pendingMarkRead() const;
};
|