#pragma once #include 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; };