📄 q3richtext_p.h
字号:
bool ownLine() const { return true; }private: int tmpheight; QColor color; bool shade;};#endifclass Q_COMPAT_EXPORT Q3TextFlow{ friend class Q3TextDocument;#ifndef QT_NO_TEXTCUSTOMITEM friend class Q3TextTableCell;#endifpublic: Q3TextFlow(); virtual ~Q3TextFlow(); virtual void setWidth(int width); int width() const; virtual void setPageSize(int ps); int pageSize() const { return pagesize; } virtual int adjustLMargin(int yp, int h, int margin, int space); virtual int adjustRMargin(int yp, int h, int margin, int space);#ifndef QT_NO_TEXTCUSTOMITEM virtual void registerFloatingItem(Q3TextCustomItem* item); virtual void unregisterFloatingItem(Q3TextCustomItem* item);#endif virtual QRect boundingRect() const; virtual void drawFloatingItems(QPainter* p, int cx, int cy, int cw, int ch, const QPalette &pal, bool selected); virtual int adjustFlow(int y, int w, int h); // adjusts y according to the defined pagesize. Returns the shift. virtual bool isEmpty(); void clear();private: int w; int pagesize;#ifndef QT_NO_TEXTCUSTOMITEM QList<Q3TextCustomItem *> leftItems; QList<Q3TextCustomItem *> rightItems;#endif};inline int Q3TextFlow::width() const { return w; }#ifndef QT_NO_TEXTCUSTOMITEMclass Q3TextTable;class Q_COMPAT_EXPORT Q3TextTableCell : public QLayoutItem{ friend class Q3TextTable;public: Q3TextTableCell(Q3TextTable* table, int row, int column, const QMap<QString, QString> &attr, const Q3StyleSheetItem* style, const Q3TextFormat& fmt, const QString& context, Q3MimeSourceFactory &factory, Q3StyleSheet *sheet, const QString& doc); virtual ~Q3TextTableCell(); QSize sizeHint() const ; QSize minimumSize() const ; QSize maximumSize() const ; Qt::Orientations expandingDirections() const; bool isEmpty() const; void setGeometry(const QRect&) ; QRect geometry() const; bool hasHeightForWidth() const; int heightForWidth(int) const; void adjustToPainter(QPainter*); int row() const { return row_; } int column() const { return col_; } int rowspan() const { return rowspan_; } int colspan() const { return colspan_; } int stretch() const { return stretch_; } Q3TextDocument* richText() const { return richtext; } Q3TextTable* table() const { return parent; } void draw(QPainter* p, int x, int y, int cx, int cy, int cw, int ch, const QPalette &cg, bool selected); QBrush *backGround() const { return background; } virtual void invalidate(); int verticalAlignmentOffset() const; int horizontalAlignmentOffset() const;private: QRect geom; Q3TextTable* parent; Q3TextDocument* richtext; int row_; int col_; int rowspan_; int colspan_; int stretch_; int maxw; int minw; bool hasFixedWidth; QBrush *background; int cached_width; int cached_sizehint; QMap<QString, QString> attributes; int align;};#endif#ifndef QT_NO_TEXTCUSTOMITEMclass Q_COMPAT_EXPORT Q3TextTable: public Q3TextCustomItem{ friend class Q3TextTableCell;public: Q3TextTable(Q3TextDocument *p, const QMap<QString, QString> &attr); virtual ~Q3TextTable(); void adjustToPainter(QPainter *p); void pageBreak(int y, Q3TextFlow* flow); void draw(QPainter* p, int x, int y, int cx, int cy, int cw, int ch, const QPalette &pal, bool selected); bool noErase() const { return true; } bool ownLine() const { return true; } Placement placement() const { return place; } bool isNested() const { return true; } void resize(int nwidth); virtual void invalidate(); virtual bool enter(Q3TextCursor *c, Q3TextDocument *&doc, Q3TextParagraph *¶g, int &idx, int &ox, int &oy, bool atEnd = false); virtual bool enterAt(Q3TextCursor *c, Q3TextDocument *&doc, Q3TextParagraph *¶g, int &idx, int &ox, int &oy, const QPoint &pos); virtual bool next(Q3TextCursor *c, Q3TextDocument *&doc, Q3TextParagraph *¶g, int &idx, int &ox, int &oy); virtual bool prev(Q3TextCursor *c, Q3TextDocument *&doc, Q3TextParagraph *¶g, int &idx, int &ox, int &oy); virtual bool down(Q3TextCursor *c, Q3TextDocument *&doc, Q3TextParagraph *¶g, int &idx, int &ox, int &oy); virtual bool up(Q3TextCursor *c, Q3TextDocument *&doc, Q3TextParagraph *¶g, int &idx, int &ox, int &oy); QString richText() const; int minimumWidth() const; QList<Q3TextTableCell *> tableCells() const { return cells; } bool isStretching() const { return stretch; }private: void format(int w); void addCell(Q3TextTableCell* cell);private: QGridLayout* layout; QList<Q3TextTableCell *> cells; int cachewidth; int fixwidth; int cellpadding; int cellspacing; int border; int outerborder; int stretch; int innerborder; int us_cp, us_ib, us_b, us_ob, us_cs; int us_fixwidth; QMap<QString, QString> attributes; QMap<Q3TextCursor*, int> currCell; Placement place; void adjustCells(int y , int shift); int pageBreakFor;};#endif// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#ifndef QT_NO_TEXTCUSTOMITEMclass Q3TextTableCell;class Q3TextParagraph;#endifstruct Q_COMPAT_EXPORT Q3TextDocumentSelection{ Q3TextCursor startCursor, endCursor; bool swapped; Q_DUMMY_COMPARISON_OPERATOR(Q3TextDocumentSelection)};class Q_COMPAT_EXPORT Q3TextDocument : public QObject{ Q_OBJECT#ifndef QT_NO_TEXTCUSTOMITEM friend class Q3TextTableCell;#endif friend class Q3TextCursor; friend class Q3TextEdit; friend class Q3TextParagraph;public: enum SelectionIds { Standard = 0, Temp = 32000 // This selection must not be drawn, it's used e.g. by undo/redo to // remove multiple lines with removeSelectedText() }; Q3TextDocument(Q3TextDocument *p); virtual ~Q3TextDocument(); Q3TextDocument *parent() const { return par; } Q3TextParagraph *parentParagraph() const { return parentPar; } void setText(const QString &text, const QString &context); QMap<QString, QString> attributes() const { return attribs; } void setAttributes(const QMap<QString, QString> &attr) { attribs = attr; } QString text() const; QString text(int parag) const; QString originalText() const; int x() const; int y() const; int width() const; int widthUsed() const; int visibleWidth() const; int height() const; void setWidth(int w); int minimumWidth() const; bool setMinimumWidth(int needed, int used = -1, Q3TextParagraph *parag = 0); void setY(int y); int leftMargin() const; void setLeftMargin(int lm); int rightMargin() const; void setRightMargin(int rm); Q3TextParagraph *firstParagraph() const; Q3TextParagraph *lastParagraph() const; void setFirstParagraph(Q3TextParagraph *p); void setLastParagraph(Q3TextParagraph *p); void invalidate(); void setPreProcessor(Q3TextPreProcessor *sh); Q3TextPreProcessor *preProcessor() const; void setFormatter(Q3TextFormatter *f); Q3TextFormatter *formatter() const; void setIndent(Q3TextIndent *i); Q3TextIndent *indent() const; QColor selectionColor(int id) const; QColor selectionTextColor(int id) const; bool hasSelectionTextColor(int id) const; void setSelectionColor(int id, const QColor &c); void setSelectionTextColor(int id, const QColor &b); bool hasSelection(int id, bool visible = false) const; void setSelectionStart(int id, const Q3TextCursor &cursor); bool setSelectionEnd(int id, const Q3TextCursor &cursor); void selectAll(int id); bool removeSelection(int id); void selectionStart(int id, int ¶gId, int &index); Q3TextCursor selectionStartCursor(int id); Q3TextCursor selectionEndCursor(int id); void selectionEnd(int id, int ¶gId, int &index); void setFormat(int id, Q3TextFormat *f, int flags); int numSelections() const { return nSelections; } void addSelection(int id); QString selectedText(int id, bool asRichText = false) const; void removeSelectedText(int id, Q3TextCursor *cursor); void indentSelection(int id); Q3TextParagraph *paragAt(int i) const; void addCommand(Q3TextCommand *cmd); Q3TextCursor *undo(Q3TextCursor *c = 0); Q3TextCursor *redo(Q3TextCursor *c = 0); Q3TextCommandHistory *commands() const { return commandHistory; } Q3TextFormatCollection *formatCollection() const; bool find(Q3TextCursor &cursor, const QString &expr, bool cs, bool wo, bool forward); void setTextFormat(Qt::TextFormat f); Qt::TextFormat textFormat() const; bool inSelection(int selId, const QPoint &pos) const; Q3StyleSheet *styleSheet() const { return sheet_; }#ifndef QT_NO_MIME Q3MimeSourceFactory *mimeSourceFactory() const { return factory_; }#endif QString context() const { return contxt; } void setStyleSheet(Q3StyleSheet *s); void setDefaultFormat(const QFont &font, const QColor &color);#ifndef QT_NO_MIME void setMimeSourceFactory(Q3MimeSourceFactory *f) { if (f) factory_ = f; }#endif void setContext(const QString &c) { if (!c.isEmpty()) contxt = c; } void setUnderlineLinks(bool b); bool underlineLinks() const { return underlLinks; } void setPaper(QBrush *brush) { if (backBrush) delete backBrush; backBrush = brush; } QBrush *paper() const { return backBrush; } void doLayout(QPainter *p, int w); void draw(QPainter *p, const QRect& rect, const QPalette &pal, const QBrush *paper = 0); void drawParagraph(QPainter *p, Q3TextParagraph *parag, int cx, int cy, int cw, int ch, QPixmap *&doubleBuffer, const QPalette &pal, bool drawCursor, Q3TextCursor *cursor, bool resetChanged = true); Q3TextParagraph *draw(QPainter *p, int cx, int cy, int cw, int ch, const QPalette &pal, bool onlyChanged = false, bool drawCursor = false, Q3TextCursor *cursor = 0, bool resetChanged = true);#ifndef QT_NO_TEXTCUSTOMITEM static Q3TextCustomItem* tag(Q3StyleSheet *sheet, const QString& name, const QMap<QString, QString> &attr, const QString& context, const Q3MimeSourceFactory& factory, bool emptyTag, Q3TextDocument *doc);#endif#ifndef QT_NO_TEXTCUSTOMITEM void registerCustomItem(Q3TextCustomItem *i, Q3TextParagraph *p); void unregisterCustomItem(Q3TextCustomItem *i, Q3TextParagraph *p);#endif void setFlow(Q3TextFlow *f); void takeFlow(); Q3TextFlow *flow() const { return flow_; } bool isPageBreakEnabled() const { return pages; } void setPageBreakEnabled(bool b) { pages = b; } void setUseFormatCollection(bool b) { useFC = b; } bool useFormatCollection() const { return useFC; }#ifndef QT_NO_TEXTCUSTOMITEM Q3TextTableCell *tableCell() const { return tc; } void setTableCell(Q3TextTableCell *c) { tc = c; }#endif void setPlainText(const QString &text); void setRichText(const QString &text, const QString &context, const Q3TextFormat *initialFormat = 0); QString richText() const; QString plainText() const; bool focusNextPrevChild(bool next); int alignment() const; void setAlignment(int a); int *tabArray() const; int tabStopWidth() const; void setTabArray(int *a); void setTabStops(int tw); void setUndoDepth(int depth) { commandHistory->setUndoDepth(depth); } int undoDepth() const { return commandHistory->undoDepth(); } int length() const; void clear(bool createEmptyParag = false); virtual Q3TextParagraph *createParagraph(Q3TextDocument *, Q3TextParagraph *pr = 0, Q3TextParagraph *nx = 0, bool updateIds = true); void insertChild(Q3TextDocument *dc) { childList.append(dc); } void removeChild(Q3TextDocument *dc) { childList.removeAll(dc); } QList<Q3TextDocument *> children() const { return childList; } bool hasFocusParagraph() const; QString focusHref() const; QString focusName() const; void invalidateOriginalText() { oTextValid = false; oText = QLatin1String(""); }Q_SIGNALS: void minimumWidthChanged(int);private: Q_DISABLE_COPY(Q3TextDocument) void init(); QPixmap *bufferPixmap(const QSize &s); // HTML parser bool hasPrefix(const QChar* doc, int length, int pos, QChar c); bool hasPrefix(const QChar* doc, int length, int pos, const QString& s);#ifndef QT_NO_TEXTCUSTOMITEM Q3TextCustomItem* parseTable(const QMap<QString, QString> &attr, const Q3TextFormat &fmt, const QChar* doc, int length, int& pos, Q3TextParagraph *curpar);#endif bool eatSpace(const QChar* doc, int length, int& pos, bool includeNbsp = false); bool eat(const QChar* doc, int length, int& pos, QChar c); QString parseOpenTag(const QChar* doc, int length, int& pos, QMap<QString, QString> &attr, bool& emptyTag); QString parseCloseTag(const QChar* doc, int length, int& pos); QChar parseHTMLSpecialChar(const QChar* doc, int length, int& pos); QString parseWord(const QChar* doc, int length, int& pos, bool lower = true); QChar parseChar(const QChar* doc, int length, int& pos, Q3StyleSheetItem::WhiteSpaceMode wsm); void setRichTextInternal(const QString &text, Q3TextCursor* cursor = 0, const Q3TextFormat *initialFormat = 0); void setRichTextMarginsInternal(QList< QVector<Q3StyleSheetItem *> *>& styles, Q3TextParagraph* stylesPar); struct Q_COMPAT_EXPORT Focus { Q3TextParagraph *parag; int start, len; QString href; QString name; }; int cx, cy, cw, vw; Q3TextParagraph *fParag, *lParag; Q3TextPreProcessor *pProcessor; struct SelectionColor { QColor background; QColor text; }; QMap<int, SelectionColor> selectionColors; QMap<int, Q3TextDocumentSelection> selections; Q3TextCommandHistory *commandHistory; Q3TextFormatter *pFormatter; Q3TextIndent *indenter; Q3TextFormatCollection *fCollection; Qt::TextFormat txtFormat; uint preferRichText : 1; uint pages : 1; uint useFC : 1; uint withoutDoubleBuffer : 1; uint underlLinks : 1; uint nextDoubleBuffered : 1; uint oTextValid : 1; uint mightHaveCustomItems : 1; int align; int nSelections; Q3TextFlow *flow_; Q3TextDocument *par; Q3TextParagraph *parentPar;#ifndef QT_NO_TEXTCUSTOMITEM Q3TextTableCell *tc;#endif QBrush *backBrush; QPixmap *buf_pixmap; Focus focusIndicator; int minw; int wused; int leftmargin; int rightmargin; Q3TextParagraph *minwParag, *curParag; Q3StyleSheet* sheet_;#ifndef QT_NO_MIME Q3MimeSourceFactory* factory_;#endif QString contxt; QMap<QString, QString> attribs; int *tArray; int tStopWidth; int uDepth; QString oText; QList<Q3TextDocument *> childList; QColor linkColor, bodyText; double scaleFontsFactor; short list_tm,list_bm, list_lm, li_tm, li_bm, par_tm, par_bm;};// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++class Q_COMPAT_EXPORT Q3TextDeleteCommand : public Q3TextCommand{public: Q3TextDeleteCommand(Q3TextDocument *dc, int i, int idx, const QVector<Q3TextStringChar> &str, const QByteArray& oldStyle); Q3TextDeleteCommand(Q3TextParagraph *p, int idx, const QVector<Q3TextStringChar> &str); virtual ~Q3TextDeleteCommand(); Commands type() const { return Delete; } Q3TextCursor *execute(Q3TextCursor *c); Q3TextCursor *unexecute(Q3TextCursor *c);protected: int id, index; Q3TextParagraph *parag; QVector<Q3TextStringChar> text; QByteArray styleInformation;};class Q_COMPAT_EXPORT Q3TextInsertCommand : public Q3TextDeleteCommand{public: Q3TextInsertCommand(Q3TextDocument *dc, int i, int idx, const QVector<Q3TextStringChar> &str, const QByteArray& oldStyleInfo) : Q3TextDeleteCommand(dc, i, idx, str, oldStyleInfo) {} Q3TextInsertCommand(Q3TextParagraph *p, int idx, const QVector<Q3TextStringChar> &str) : Q3TextDeleteCommand(p, idx, str) {} virtual ~Q3TextInsertCommand() {} Commands type() const { return Insert; } Q3TextCursor *execute(Q3TextCursor *c) { return Q3TextDeleteCommand::unexecute(c); } Q3TextCursor *unexecute(Q3TextCursor *c) { return Q3TextDeleteCommand::execute(c); }};class Q_COMPAT_EXPORT Q3TextFormatCommand : public Q3TextCommand{public: Q3TextFormatCommand(Q3TextDocument *dc, int sid, int sidx, int eid, int eidx, const QVector<Q3TextStringChar> &old, Q3TextFormat *f, int fl); virtual ~Q3TextFormatCommand(); Commands type() const { return Format; } Q3TextCursor *execute(Q3TextCursor *c); Q3TextCursor *unexecute(Q3TextCursor *c);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -