Пример #1
0
void StringConfig::updateItem(int r, int item)
{
    QFontMetrics fm = parent->fontMetrics();

    int y = r * fm.lineSpacing();

    int tw=0;
    QString s;
    int i=0;
    for (; !(s=text(r,i)).isNull(); ++i) {
        int w = fm.width(s);
        tw += w;
    }
    bool spread = spreadRow(r) && width2() > tw;
    int xw = spread ? (width2()-tw)/(i-1) : 3;
    int x = spread ? (width2()-tw-xw*(i-1))/2 : 2;

    i=0;
    for (; !(s=text(r,i)).isNull(); ++i) {
        int w = fm.width(s)+xw;
        if ( i == item ) {
            parent->update(QRect(x-xw/2,y+1+fm.descent(),w,fm.lineSpacing()));
            return;
        }
        x += w;
    }
}
Пример #2
0
void StringConfig::pickInRow(int r, int xpos, bool press)
{
    QFontMetrics fm = parent->fontMetrics();

    int tw=0;
    QString s;
    int i=0;
    for (; !(s=text(r,i)).isNull(); ++i) {
        int w = fm.width(s);
        tw += w;
    }
    bool spread = spreadRow(r) && width2() > tw;
    int xw = spread ? (width2()-tw)/(i-1) : 3;
    int x = spread ? (width2()-tw-xw*(i-1))/2 : 2;

    i=0;
    for (; !(s=text(r,i)).isNull(); ++i) {
        int x2 = x + fm.width(s)+xw;
        if ( xpos >= x && xpos < x2 ) {
            pick(press, r, i);
            return;
        }
        x = x2;
    }
}
Пример #3
0
void StringConfig::draw(QPainter* p)
{
    QFontMetrics fm = p->fontMetrics();

    for (int r=0; r<nrows; r++) {
        p->translate(0,fm.lineSpacing());
        p->setPen(rowColor(r));

        int tw=0;
        QString s;
        int i=0;
        for (; !(s=text(r,i)).isNull(); ++i) {
            int w = fm.width(s);
            tw += w;
        }
        bool spread = spreadRow(r);// && parent->width() > tw;
        int xw = spread ? (width2()-tw)/(i-1) : 3;
        int x = spread ? (width2()-tw-xw*(i-1))/2 : 2;

        i=0;
        for (; !(s=text(r,i)).isNull(); ++i) {
            int w = fm.width(s)+xw;
            if ( highlight(r,i) ) {
                p->fillRect(x-xw/2,1+fm.descent()-fm.lineSpacing(),w,fm.lineSpacing(),Qt::black);
                p->setPen(Qt::white);
            }else{
                p->setPen(Qt::black);
            }
            p->drawText(x,-fm.descent()-1,s);
            x += w;
        }
    }
}
Пример #4
0
void DictFilterConfig::add(const QString& set)
{
    QFontMetrics fm = parent->fontMetrics();
    input.append(set.toLower());
    matches.clear();
//visit=0;
//lvisit=0;
    int length_bitarray = 0;
    if ( input.count() > 4 ) {
        scanLengths(Qtopia::addedDawg().root(),0,length_bitarray);
        scanLengths(Qtopia::fixedDawg().root(),0,length_bitarray);
    } else {
        length_bitarray = 0xffffffff;
    }
    for (int len=input.count(); len<22 /* 32 */; ++len) {
        if ( length_bitarray & (1<<len) ) {
            scan(Qtopia::addedDawg().root(),0,"",len,true);
            scan(Qtopia::fixedDawg().root(),0,"",len,true);
            int x = 2;
            for (QStringList::Iterator it=matches.begin(); it!=matches.end(); ++it) {
                x += fm.width(*it)+intermatchmargin;
                if ( x >= width2() ) {
                    return; // RETURN - No point finding more
                }
            }
        }
        if ( len == 1 && input.count() == 1 ) {
            // Allow all single-characters to show as "matches"
            for ( int i=0; i<(int)set.length(); i++ ) {
                QChar ch = set[i].toLower();
                matches.append(QString(ch));
            }
        }
    }
}
Пример #5
0
void PickboardConfig::updateRows(int from, int to)
{
    if ( from != to ) { // (all)
        parent->update();
    } else {
        QFontMetrics fm = parent->fontMetrics();
        parent->update(QRect(0,1+fm.descent() + from * fm.lineSpacing(), width2(),
            fm.lineSpacing()));
    }
}
Пример #6
0
 width2 setw(int length) { return width2(length); }