You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.4 KiB
79 lines
2.4 KiB
#pragma once |
|
|
|
#include <QWidget> |
|
|
|
class QTextEdit; |
|
class QPushButton; |
|
class QLabel; |
|
class QProgressBar; |
|
class QTimer; |
|
class EmojiPanel; |
|
class AudioRecorder; |
|
struct attachment_send_req; |
|
|
|
class InputBar : public QWidget { |
|
Q_OBJECT |
|
public: |
|
explicit InputBar(EmojiPanel *emojiPanel, AudioRecorder *recorder, |
|
QWidget *parent = nullptr); |
|
|
|
void setRecordingContext(const QString& mediaDirBase, const QString& channelId); |
|
|
|
/* Общий composer для канала и PM. */ |
|
void setDmMode(bool enabled); |
|
void setMediaEnabled(bool enabled); |
|
|
|
signals: |
|
void sendMessage(const QString &text); |
|
void submitAttachment(const QString& target, struct attachment_send_req* request); |
|
void sendFileAttachment(const QString& target, const QString& mediaSrc, const QString& mediaDest, |
|
const QString& displayName); |
|
void sendImageAttachment(const QString& target, const QString& mediaSrc, const QString& mediaDest, |
|
const QString& displayName); |
|
|
|
protected: |
|
bool eventFilter(QObject *obj, QEvent *event) override; |
|
void resizeEvent(QResizeEvent* event) override; |
|
|
|
private slots: |
|
void onSendClicked(); |
|
void adjustInputHeight(); |
|
void onPttPressed(); |
|
void onPttReleased(); |
|
void onAttachClicked(); |
|
void clearPendingAttachment(); |
|
void onVideoProgressTick(); |
|
void updateRecordingUI(int ms); |
|
void showRecordOverlay(); |
|
void hideRecordOverlay(); |
|
|
|
private: |
|
static QString formatFileSize(qint64 bytes); |
|
|
|
QTextEdit *m_input; |
|
QPushButton *m_emojiBtn; |
|
QPushButton *m_pttBtn; |
|
QPushButton *m_attachBtn = nullptr; |
|
EmojiPanel *m_emojiPanel; |
|
AudioRecorder *m_recorder; |
|
QWidget *m_recordOverlay = nullptr; |
|
QLabel *m_recordLabel = nullptr; |
|
QPushButton *m_cancelRecBtn = nullptr; |
|
QProgressBar *m_levelBar = nullptr; |
|
QWidget *m_attachPreview = nullptr; |
|
QLabel *m_attachPreviewLabel = nullptr; |
|
QPushButton *m_attachClearBtn = nullptr; |
|
bool m_pttActive = false; |
|
bool m_dmMode = false; |
|
QString m_voiceFilePath; |
|
QString m_mediaDirBase; |
|
QString m_channelIdForRecord; |
|
QString m_recordTarget; |
|
QString m_pendingAttachSrc; |
|
QString m_pendingAttachDest; |
|
QString m_pendingAttachName; |
|
qint64 m_pendingAttachSize = 0; |
|
bool m_pendingAttachAsVideo = false; |
|
bool m_pendingAttachAsImage = false; |
|
QTimer *m_videoProgressTimer = nullptr; |
|
};
|
|
|