js8call/JS8_Main/TransmitTextSourceMirror.h
2026-03-25 07:10:18 -05:00

50 lines
1.4 KiB
C++

#ifndef TRANSMITTEXTSOURCEMIRROR_H
#define TRANSMITTEXTSOURCEMIRROR_H
#include "TransmitTextEdit.h"
class QTextDocument;
class TransmitTextEdit::source_mirror final {
public:
struct CursorState {
int anchor = 0;
int position = 0;
};
explicit source_mirror(TransmitTextEdit *owner);
QString plainText() const;
CursorState captureCursorState() const;
void restoreCursorState(const CursorState &state) const;
void replaceVisiblePlainText(const QString &text, bool keepCursor) const;
void syncDocument(const QString &text);
void replaceUnsentText(int sent, const QString &text);
void applyChange(int pos, int rem, const QString &insertedText);
void syncDisplayFromSource(const CursorState &state,
bool keepCursor) const;
void updateSentCache() const;
QTextDocument *document() const;
void beginSuppression();
void endSuppression();
bool isSuppressing() const;
void beginSyncFromSource();
void endSyncFromSource();
bool isSyncingFromSource() const;
void beginInternalMutation();
void endInternalMutation();
bool isInternalMutationActive() const;
private:
TransmitTextEdit *owner_;
QTextDocument *document_ = nullptr;
int suppressionDepth_ = 0;
int syncDepth_ = 0;
int internalMutationDepth_ = 0;
};
#endif // TRANSMITTEXTSOURCEMIRROR_H