⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 q3richtext.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    return ok;}void Q3TextCursor::gotoRight(){    if (para->string()->isRightToLeft())        gotoPreviousLetter();    else        gotoNextLetter();}void Q3TextCursor::gotoNextLetter(){   tmpX = -1;#ifndef QT_NO_TEXTCUSTOMITEM    const Q3TextStringChar *tsc = para->at(idx);    if (tsc && tsc->isCustom() && tsc->customItem()->isNested()) {        if (processNesting(EnterBegin))            return;    }#endif    if (idx < para->length() - 1) {        idx = para->string()->nextCursorPosition(idx);    } else if (para->next()) {        para = para->next();        while (!para->isVisible() && para->next())            para = para->next();        idx = 0;    } else if (nestedDepth()) {        pop();        processNesting(Next);        if (idx == -1) {            pop();            if (idx < para->length() - 1) {                idx = para->string()->nextCursorPosition(idx);            } else if (para->next()) {                para = para->next();                idx = 0;            }        }    }}void Q3TextCursor::gotoUp(){    int indexOfLineStart;    int line;    Q3TextStringChar *c = para->lineStartOfChar(idx, &indexOfLineStart, &line);    if (!c)        return;    if (tmpX < 0)        tmpX = x();    if (indexOfLineStart == 0) {        if (!para->prev()) {            if (!nestedDepth())                return;            pop();            processNesting(Up);            if (idx == -1) {                pop();                if (!para->prev())                    return;                idx = tmpX = 0;            } else {                tmpX = -1;                return;            }        }        Q3TextParagraph *p = para->prev();        while (p && !p->isVisible())            p = p->prev();        if (p)            para = p;        int lastLine = para->lines() - 1;        if (!para->lineStartOfLine(lastLine, &indexOfLineStart))            return;        idx = indexOfLineStart;        while (idx < para->length()-1 && para->at(idx)->x < tmpX)            ++idx;        if (idx > indexOfLineStart &&            para->at(idx)->x - tmpX > tmpX - para->at(idx-1)->x)            --idx;    } else {        --line;        int oldIndexOfLineStart = indexOfLineStart;        if (!para->lineStartOfLine(line, &indexOfLineStart))            return;        idx = indexOfLineStart;        while (idx < oldIndexOfLineStart-1 && para->at(idx)->x < tmpX)            ++idx;        if (idx > indexOfLineStart &&            para->at(idx)->x - tmpX > tmpX - para->at(idx-1)->x)            --idx;    }    fixCursorPosition();}void Q3TextCursor::gotoDown(){    int indexOfLineStart;    int line;    Q3TextStringChar *c = para->lineStartOfChar(idx, &indexOfLineStart, &line);    if (!c)        return;    if (tmpX < 0)        tmpX = x();    if (line == para->lines() - 1) {        if (!para->next()) {            if (!nestedDepth())                return;            pop();            processNesting(Down);            if (idx == -1) {                pop();                if (!para->next())                    return;                idx = tmpX = 0;            } else {                tmpX = -1;                return;            }        }        Q3TextParagraph *s = para->next();        while (s && !s->isVisible())            s = s->next();        if (s)            para = s;        if (!para->lineStartOfLine(0, &indexOfLineStart))            return;        int end;        if (para->lines() == 1)            end = para->length();        else            para->lineStartOfLine(1, &end);        idx = indexOfLineStart;        while (idx < end-1 && para->at(idx)->x < tmpX)            ++idx;        if (idx > indexOfLineStart &&            para->at(idx)->x - tmpX > tmpX - para->at(idx-1)->x)            --idx;    } else {        ++line;        int end;        if (line == para->lines() - 1)            end = para->length();        else            para->lineStartOfLine(line + 1, &end);        if (!para->lineStartOfLine(line, &indexOfLineStart))            return;        idx = indexOfLineStart;        while (idx < end-1 && para->at(idx)->x < tmpX)            ++idx;        if (idx > indexOfLineStart &&            para->at(idx)->x - tmpX > tmpX - para->at(idx-1)->x)            --idx;    }    fixCursorPosition();}void Q3TextCursor::gotoLineEnd(){    tmpX = -1;    int indexOfLineStart;    int line;    Q3TextStringChar *c = para->lineStartOfChar(idx, &indexOfLineStart, &line);    if (!c)        return;    if (line == para->lines() - 1) {        idx = para->length() - 1;    } else {        c = para->lineStartOfLine(++line, &indexOfLineStart);        indexOfLineStart--;        idx = indexOfLineStart;    }}void Q3TextCursor::gotoLineStart(){    tmpX = -1;    int indexOfLineStart;    int line;    Q3TextStringChar *c = para->lineStartOfChar(idx, &indexOfLineStart, &line);    if (!c)        return;    idx = indexOfLineStart;}void Q3TextCursor::gotoHome(){    if (topParagraph()->document())        gotoPosition(topParagraph()->document()->firstParagraph());    else        gotoLineStart();}void Q3TextCursor::gotoEnd(){    if (topParagraph()->document() && topParagraph()->document()->lastParagraph()->isValid())        gotoPosition(topParagraph()->document()->lastParagraph(),                      topParagraph()->document()->lastParagraph()->length() - 1);    else        gotoLineEnd();}void Q3TextCursor::gotoPageUp(int visibleHeight){    int targetY  = globalY() - visibleHeight;    Q3TextParagraph* old; int index;    do {        old = para; index = idx;        gotoUp();    } while ((old != para || index != idx)  && globalY() > targetY);}void Q3TextCursor::gotoPageDown(int visibleHeight){    int targetY  = globalY() + visibleHeight;    Q3TextParagraph* old; int index;    do {        old = para; index = idx;        gotoDown();    } while ((old != para || index != idx) && globalY() < targetY);}void Q3TextCursor::gotoWordRight(){    if (para->string()->isRightToLeft())        gotoPreviousWord();    else        gotoNextWord();}void Q3TextCursor::gotoWordLeft(){    if (para->string()->isRightToLeft())        gotoNextWord();    else        gotoPreviousWord();}static bool is_seperator(const QChar &c, bool onlySpace){    if (onlySpace)        return c.isSpace();    return c.isSpace() ||           c == QLatin1Char('\t') ||           c == QLatin1Char('.') ||           c == QLatin1Char(',') ||           c == QLatin1Char(':') ||           c == QLatin1Char(';') ||           c == QLatin1Char('-') ||           c == QLatin1Char('<') ||           c == QLatin1Char('>') ||           c == QLatin1Char('[') ||           c == QLatin1Char(']') ||           c == QLatin1Char('(') ||           c == QLatin1Char(')') ||           c == QLatin1Char('{') ||           c == QLatin1Char('}');}void Q3TextCursor::gotoPreviousWord(bool onlySpace){    gotoPreviousLetter();    tmpX = -1;    Q3TextString *s = para->string();    bool allowSame = false;    if (idx == ((int)s->length()-1))        return;    for (int i = idx; i >= 0; --i) {        if (is_seperator(s->at(i).c, onlySpace)) {            if (!allowSame)                continue;            idx = i + 1;            return;        }        if (!allowSame && !is_seperator(s->at(i).c, onlySpace))            allowSame = true;    }    idx = 0;}void Q3TextCursor::gotoNextWord(bool onlySpace){    tmpX = -1;    Q3TextString *s = para->string();    bool allowSame = false;    for (int i = idx; i < (int)s->length(); ++i) {        if (!is_seperator(s->at(i).c, onlySpace)) {            if (!allowSame)                continue;            idx = i;            return;        }        if (!allowSame && is_seperator(s->at(i).c, onlySpace))            allowSame = true;    }    if (idx < ((int)s->length()-1)) {        gotoLineEnd();    } else if (para->next()) {        Q3TextParagraph *p = para->next();        while (p  && !p->isVisible())            p = p->next();        if (s) {            para = p;            idx = 0;        }    } else {        gotoLineEnd();    }}bool Q3TextCursor::atParagStart(){    return idx == 0;}bool Q3TextCursor::atParagEnd(){    return idx == para->length() - 1;}void Q3TextCursor::splitAndInsertEmptyParagraph(bool ind, bool updateIds){    if (!para->document())        return;    tmpX = -1;    Q3TextFormat *f = 0;    if (para->document()->useFormatCollection()) {        f = para->at(idx)->format();        if (idx == para->length() - 1 && idx > 0)            f = para->at(idx - 1)->format();        if (f->isMisspelled()) {            f->removeRef();            f = para->document()->formatCollection()->format(f->font(), f->color());        }    }    if (atParagEnd()) {        Q3TextParagraph *n = para->next();        Q3TextParagraph *s = para->document()->createParagraph(para->document(), para, n, updateIds);        if (f)            s->setFormat(0, 1, f, true);        s->copyParagData(para);        if (ind) {            int oi, ni;            s->indent(&oi, &ni);            para = s;            idx = ni;        } else {            para = s;            idx = 0;        }    } else if (atParagStart()) {        Q3TextParagraph *p = para->prev();        Q3TextParagraph *s = para->document()->createParagraph(para->document(), p, para, updateIds);        if (f)            s->setFormat(0, 1, f, true);        s->copyParagData(para);        if (ind) {            s->indent();            s->format();            indent();            para->format();        }    } else {        QString str = para->string()->toString().mid(idx, 0xFFFFFF);        Q3TextParagraph *n = para->next();        Q3TextParagraph *s = para->document()->createParagraph(para->document(), para, n, updateIds);        s->copyParagData(para);        s->remove(0, 1);        s->append(str, true);        for (int i = 0; i < str.length(); ++i) {            Q3TextStringChar* tsc = para->at(idx + i);            s->setFormat(i, 1, tsc->format(), true);#ifndef QT_NO_TEXTCUSTOMITEM            if (tsc->isCustom()) {                Q3TextCustomItem * item = tsc->customItem();                s->at(i)->setCustomItem(item);                tsc->loseCustomItem();            }#endif            if (tsc->isAnchor())                s->at(i)->setAnchor(tsc->anchorName(),                                       tsc->anchorHref());        }        para->truncate(idx);        if (ind) {            int oi, ni;            s->indent(&oi, &ni);            para = s;            idx = ni;        } else {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -