📄 q3richtext_p.h
字号:
protected: int startId, startIndex, endId, endIndex; Q3TextFormat *format; QVector<Q3TextStringChar> oldFormats; int flags;};class Q_COMPAT_EXPORT Q3TextStyleCommand : public Q3TextCommand{public: Q3TextStyleCommand(Q3TextDocument *dc, int fParag, int lParag, const QByteArray& beforeChange ); virtual ~Q3TextStyleCommand() {} Commands type() const { return Style; } Q3TextCursor *execute(Q3TextCursor *c); Q3TextCursor *unexecute(Q3TextCursor *c); static QByteArray readStyleInformation( Q3TextDocument* dc, int fParag, int lParag); static void writeStyleInformation( Q3TextDocument* dc, int fParag, const QByteArray& style);private: int firstParag, lastParag; QByteArray before; QByteArray after;};// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++struct Q_COMPAT_EXPORT Q3TextParagraphSelection{ int start, end; Q_DUMMY_COMPARISON_OPERATOR(Q3TextParagraphSelection)};struct Q_COMPAT_EXPORT QTextLineStart{ QTextLineStart() : y(0), baseLine(0), h(0) { } QTextLineStart(int y_, int bl, int h_) : y(y_), baseLine(bl), h(h_), w(0) { }public: int y, baseLine, h; int w;};class Q_COMPAT_EXPORT Q3TextParagraphData{public: Q3TextParagraphData() {} virtual ~Q3TextParagraphData(); virtual void join(Q3TextParagraphData *);};class Q3TextParagraphPseudoDocument;class Q3SyntaxHighlighter;class Q_COMPAT_EXPORT Q3TextParagraph{ friend class Q3TextDocument; friend class Q3TextCursor; friend class Q3SyntaxHighlighter;public: Q3TextParagraph(Q3TextDocument *dc, Q3TextParagraph *pr = 0, Q3TextParagraph *nx = 0, bool updateIds = true); ~Q3TextParagraph(); Q3TextString *string() const; Q3TextStringChar *at(int i) const; // maybe remove later int leftGap() const; int length() const; // maybe remove later void setListStyle(Q3StyleSheetItem::ListStyle ls) { lstyle = ls; changed = true; } Q3StyleSheetItem::ListStyle listStyle() const { return (Q3StyleSheetItem::ListStyle)lstyle; } void setListItem(bool li); bool isListItem() const { return litem; } void setListValue(int v) { list_val = v; } int listValue() const { return list_val > 0 ? list_val : -1; } void setListDepth(int depth); int listDepth() const { return ldepth; }// void setFormat(Q3TextFormat *fm);// Q3TextFormat *paragFormat() const; inline Q3TextDocument *document() const { if (hasdoc) return (Q3TextDocument*) docOrPseudo; return 0; } Q3TextParagraphPseudoDocument *pseudoDocument() const; QRect rect() const; void setHeight(int h) { r.setHeight(h); } void show(); void hide(); bool isVisible() const { return visible; } Q3TextParagraph *prev() const; Q3TextParagraph *next() const; void setPrev(Q3TextParagraph *s); void setNext(Q3TextParagraph *s); void insert(int index, const QString &s); void insert(int index, const QChar *unicode, int len); void append(const QString &s, bool reallyAtEnd = false); void truncate(int index); void remove(int index, int len); void join(Q3TextParagraph *s); void invalidate(int chr); void move(int &dy); void format(int start = -1, bool doMove = true); bool isValid() const; bool hasChanged() const; void setChanged(bool b, bool recursive = false); int lineHeightOfChar(int i, int *bl = 0, int *y = 0) const; Q3TextStringChar *lineStartOfChar(int i, int *index = 0, int *line = 0) const; int lines() const; Q3TextStringChar *lineStartOfLine(int line, int *index = 0) const; int lineY(int l) const; int lineBaseLine(int l) const; int lineHeight(int l) const; void lineInfo(int l, int &y, int &h, int &bl) const; void setSelection(int id, int start, int end); void removeSelection(int id); int selectionStart(int id) const; int selectionEnd(int id) const; bool hasSelection(int id) const; bool hasAnySelection() const; bool fullSelected(int id) const; void setEndState(int s); int endState() const; void setParagId(int i); int paragId() const; bool firstPreProcess() const; void setFirstPreProcess(bool b); void indent(int *oldIndent = 0, int *newIndent = 0); void setExtraData(Q3TextParagraphData *data); Q3TextParagraphData *extraData() const; QMap<int, QTextLineStart*> &lineStartList(); void setFormat(int index, int len, Q3TextFormat *f, bool useCollection = true, int flags = -1); void setAlignment(int a); int alignment() const; void paint(QPainter &painter, const QPalette &pal, Q3TextCursor *cursor = 0, bool drawSelections = false, int clipx = -1, int clipy = -1, int clipw = -1, int cliph = -1); int topMargin() const; int bottomMargin() const; int leftMargin() const; int firstLineMargin() const; int rightMargin() const; int lineSpacing() const;#ifndef QT_NO_TEXTCUSTOMITEM void registerFloatingItem(Q3TextCustomItem *i); void unregisterFloatingItem(Q3TextCustomItem *i);#endif void setFullWidth(bool b) { fullWidth = b; } bool isFullWidth() const { return fullWidth; }#ifndef QT_NO_TEXTCUSTOMITEM Q3TextTableCell *tableCell() const;#endif QBrush *background() const; int documentWidth() const; int documentVisibleWidth() const; int documentX() const; int documentY() const; Q3TextFormatCollection *formatCollection() const; Q3TextFormatter *formatter() const; int nextTab(int i, int x); int *tabArray() const; void setTabArray(int *a); void setTabStops(int tw); void adjustToPainter(QPainter *p); void setNewLinesAllowed(bool b); bool isNewLinesAllowed() const; QString richText() const; void addCommand(Q3TextCommand *cmd); Q3TextCursor *undo(Q3TextCursor *c = 0); Q3TextCursor *redo(Q3TextCursor *c = 0); Q3TextCommandHistory *commands() const; void copyParagData(Q3TextParagraph *parag); void setBreakable(bool b) { breakable = b; } bool isBreakable() const { return breakable; } void setBackgroundColor(const QColor &c); QColor *backgroundColor() const { return bgcol; } void clearBackgroundColor(); void setMovedDown(bool b) { movedDown = b; } bool wasMovedDown() const { return movedDown; } void setDirection(QChar::Direction); QChar::Direction direction() const; void setPaintDevice(QPaintDevice *pd) { paintdevice = pd; } void readStyleInformation(QDataStream& stream); void writeStyleInformation(QDataStream& stream) const;protected: void setColorForSelection(QColor &c, QPainter &p, const QPalette &pal, int selection); void drawLabel(QPainter* p, int x, int y, int w, int h, int base, const QPalette &pal); void drawString(QPainter &painter, const QString &str, int start, int len, int xstart, int y, int baseLine, int w, int h, bool drawSelections, int fullSelectionWidth, Q3TextStringChar *formatChar, const QPalette &pal, bool rightToLeft);private: QMap<int, Q3TextParagraphSelection> &selections() const;#ifndef QT_NO_TEXTCUSTOMITEM QList<Q3TextCustomItem *> &floatingItems() const;#endif inline QBrush backgroundBrush(const QPalette &pal) { if (bgcol) return *bgcol; return pal.brush(QPalette::Base); } void invalidateStyleCache(); QMap<int, QTextLineStart*> lineStarts; QRect r; Q3TextParagraph *p, *n; void *docOrPseudo; uint changed : 1; uint firstFormat : 1; uint firstPProcess : 1; uint needPreProcess : 1; uint fullWidth : 1; uint lastInFrame : 1; uint visible : 1; uint breakable : 1; uint movedDown : 1; uint mightHaveCustomItems : 1; uint hasdoc : 1; uint litem : 1; // whether the paragraph is a list item uint rtext : 1; // whether the paragraph needs rich text margin signed int align : 5; uint /*Q3StyleSheetItem::ListStyle*/ lstyle : 4; int invalid; int state, id; Q3TextString *str; QMap<int, Q3TextParagraphSelection> *mSelections;#ifndef QT_NO_TEXTCUSTOMITEM QList<Q3TextCustomItem *> *mFloatingItems;#endif short utm, ubm, ulm, urm, uflm, ulinespacing; short tabStopWidth, minwidth; int *tArray; Q3TextParagraphData *eData; short list_val; ushort ldepth; QColor *bgcol; QPaintDevice *paintdevice;};// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++class Q_COMPAT_EXPORT Q3TextFormatter{public: Q3TextFormatter(); virtual ~Q3TextFormatter(); virtual int format(Q3TextDocument *doc, Q3TextParagraph *parag, int start, const QMap<int, QTextLineStart*> &oldLineStarts) = 0; virtual int formatVertically(Q3TextDocument* doc, Q3TextParagraph* parag); bool isWrapEnabled(Q3TextParagraph *p) const { if (!wrapEnabled) return false; if (p && !p->isBreakable()) return false; return true;} int wrapAtColumn() const { return wrapColumn;} virtual void setWrapEnabled(bool b); virtual void setWrapAtColumn(int c); virtual void setAllowBreakInWords(bool b) { biw = b; } bool allowBreakInWords() const { return biw; } int minimumWidth() const { return thisminw; } int widthUsed() const { return thiswused; }protected: virtual QTextLineStart *formatLine(Q3TextParagraph *parag, Q3TextString *string, QTextLineStart *line, Q3TextStringChar *start, Q3TextStringChar *last, int align = Qt::AlignAuto, int space = 0);#ifndef QT_NO_COMPLEXTEXT virtual QTextLineStart *bidiReorderLine(Q3TextParagraph *parag, Q3TextString *string, QTextLineStart *line, Q3TextStringChar *start, Q3TextStringChar *last, int align, int space);#endif void insertLineStart(Q3TextParagraph *parag, int index, QTextLineStart *ls); int thisminw; int thiswused;private: bool wrapEnabled; int wrapColumn; bool biw;};// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++class Q_COMPAT_EXPORT Q3TextFormatterBreakInWords : public Q3TextFormatter{public: Q3TextFormatterBreakInWords(); virtual ~Q3TextFormatterBreakInWords() {} int format(Q3TextDocument *doc, Q3TextParagraph *parag, int start, const QMap<int, QTextLineStart*> &oldLineStarts);};// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++class Q_COMPAT_EXPORT Q3TextFormatterBreakWords : public Q3TextFormatter{public: Q3TextFormatterBreakWords(); virtual ~Q3TextFormatterBreakWords() {} int format(Q3TextDocument *doc, Q3TextParagraph *parag, int start, const QMap<int, QTextLineStart*> &oldLineStarts);};// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++class Q_COMPAT_EXPORT Q3TextIndent{public: Q3TextIndent(); virtual ~Q3TextIndent() {} virtual void indent(Q3TextDocument *doc, Q3TextParagraph *parag, int *oldIndent = 0, int *newIndent = 0) = 0;};// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++class Q_COMPAT_EXPORT Q3TextPreProcessor{public: enum Ids { Standard = 0 }; Q3TextPreProcessor(); virtual ~Q3TextPreProcessor() {} virtual void process(Q3TextDocument *doc, Q3TextParagraph *, int, bool = true) = 0; virtual Q3TextFormat *format(int id) = 0;};// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++class Q_COMPAT_EXPORT Q3TextFormat{ friend class Q3TextFormatCollection; friend class Q3TextDocument;public: enum Flags { NoFlags, Bold = 1, Italic = 2, Underline = 4, Family = 8, Size = 16, Color = 32, Misspelled = 64, VAlign = 128, StrikeOut= 256, Font = Bold | Italic | Underline | Family | Size | StrikeOut, Format = Font | Color | Misspelled | VAlign }; enum VerticalAlignment { AlignNormal, AlignSuperScript, AlignSubScript }; Q3TextFormat(); virtual ~Q3TextFormat(); Q3TextFormat(const Q3StyleSheetItem *s); Q3TextFormat(const QFont &f, const QColor &c, Q3TextFormatCollection *parent = 0); Q3TextFormat(const Q3TextFormat &fm); Q3TextFormat makeTextFormat(const Q3StyleSheetItem *style, const QMap<QString,QString>& attr, double scaleFontsFactor) const; Q3TextFormat& operator=(const Q3TextFormat &fm); QColor color() const; QFont font() const; QFontMetrics fontMetrics() const { return fm; } bool isMisspelled() const; VerticalAlignment vAlign() const; int minLeftBearing() const; int minRightBearing() const; int width(const QChar &c) const; int width(const QString &str, int pos) const; int height() const; int ascent() const; int descent() const; int leading() const; bool useLinkColor() const; void setBold(bool b); void setItalic(bool b); void setUnderline(bool b); void setStrikeOut(bool b); void setFamily(const QString &f); void setPointSize(int s); void setFont(const QFont &f); void setColor(const QColor &c); void setMisspelled(bool b); void setVAlign(VerticalAlignment a); bool operator==(const Q3TextFormat &f) const; Q3TextFormatCollection *parent() const; const QString &key() const; static QString getKey(const QFont &f, const QColor &c, bool misspelled, VerticalAlignment vAlign); void addRef(); void removeRef(); QString makeFormatChangeTags(Q3TextFormat* defaultFormat, Q3TextFormat *f, const QString& oldAnchorHref, const QString& anchorHref) const; QString makeFormatEndTags(Q3TextFormat* defaultFormat, const QString& anchorHref) const; static void setPainter(QPainter *p); static QPainter* painter(); bool fontSizesInPixels() { return usePixelSizes; }protected: virtual void generateKey();private: void update(); static void applyFont(const QFont &f);private: QFont fn; QColor col; QFontMetrics fm; uint missp : 1; uint linkColor : 1; uint usePixelSizes : 1; int leftBearing, rightBearing; VerticalAlignment ha; uchar widths[256]; int hei, asc, dsc; Q3TextFormatCollection *collection; int ref; QString k; int logicalFontSize; int stdSize; static QPainter *pntr; static QFontMetrics *pntr_fm; static int pntr_asc; static int pntr_hei; static int pntr_ldg; static int pntr_dsc;};// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++class Q_COMPAT_EXPORT Q3TextFormatCollection{ friend class Q3TextDocument; friend class Q3TextFormat;public: Q3TextFormatCollection(); virtual ~Q3TextFormatCollection(); void setDefaultFormat(Q3TextFormat *f); Q3TextFormat *defaultFormat() const; virtual Q3TextFormat *format(Q3TextFormat *f); virtual Q3TextFormat *format(Q3TextFormat *of, Q3TextFormat *nf, int flags); virtual Q3TextFormat *format(const QFont &f, const QColor &c); virtual void remove(Q3TextFormat *f); virtual Q3TextFormat *createFormat(const Q3TextFormat &f) { return new Q3TextFormat(f); } virtual Q3TextFormat *createFormat(const QFont &f, const QColor &c) { return new Q3TextFormat(f, c, this); } void updateDefaultFormat(const QFont &font, const QColor &c, Q3StyleSheet *sheet); QPaintDevice *paintDevice() const { return paintdevice; } void setPaintDevice(QPaintDevice *);private: void updateKeys();private: Q3TextFormat *defFormat, *lastFormat, *cachedFormat; QHash<QString, Q3TextFormat *> cKey; Q3TextFormat *cres; QFont cfont; QColor ccol; QString kof, knf; int cflags; QPaintDevice *paintdevice;};class Q_COMPAT_EXPORT Q3TextParagraphPseudoDocument{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -