Files
utun2/tools/chatgui/src/inputbar.h
T
evgeny a97e8bcc1f docs: update file inventory and module header contracts
Refresh both AGENTS guides and clarify module purpose, usage, ownership, threading, return values and wire formats in headers. Remove the unused timeout_heap freed_count field and unimplemented getter.
2026-10-04 13:10:01 +02:00

87 lines
3.0 KiB
C++

/* Composer канала/PM: текст, emoji, запись голосового и выбор вложений.
* Контекст target фиксируется в запросе вложения; подготовку и отправку выполняет ядро.
* Переданный submitAttachment request должен принять и освободить обработчик сигнала. */
#pragma once
#include <QWidget>
#include <QHash>
#include <QSet>
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);
void updatePreparation(const QString& target, const QByteArray& job, int state);
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 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_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;
QLabel* m_preparationLabel = nullptr;
QHash<QString, QSet<QByteArray>> m_preparations;
QSet<QString> m_preparationErrors;
void showPreparation();
};