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; } }
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; } }
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; } } }
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)); } } } }
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())); } }
width2 setw(int length) { return width2(length); }