/* Returns the line number for the given index. */ int TokenContainer::line(int index) const { //This algorithm is a bit more complicated than it should be, //since we have to search for newlines inside comments. //(Comments are tokenized as one token) QByteArray contents = fullText(); int pos=0; int lines=0; for(int t=0; t < index; ++t) { int tokenLength = d->tokens.at(t).length; if((tokenLength == 1) && (text(t) == "\n")) { ++lines; } else if(tokenLength > 2) {// 3 is the minimum size for a comment (// + newline) int newpos = d->tokens.at(t).length; for(int p = pos; p < newpos; ++p) { if(contents[p] == '\n') ++lines; } } pos += d->tokens.at(t).length; } return lines; }
QString DItemDelegate::squeezedText(const QFontMetrics& fm, int width, const QString& text) { QString fullText(text); fullText.replace('\n',' '); return fm.elidedText(text, Qt::ElideRight, width); /* // Home-brewn implementation int textWidth = fm.width(fullText); QString result = fullText; if (textWidth > width) { // start with the dots only QString squeezedText = "..."; int squeezedWidth = fm.width(squeezedText); // estimate how many letters we can add to the dots on both sides int letters = fullText.length() * (width - squeezedWidth) / textWidth; if (width < squeezedWidth) { letters=1; } squeezedText = fullText.left(letters) + "..."; squeezedWidth = fm.width(squeezedText); if (squeezedWidth < width) { // we estimated too short // add letters while text < label do { ++letters; squeezedText = fullText.left(letters) + "..."; squeezedWidth = fm.width(squeezedText); } while (squeezedWidth < width); --letters; squeezedText = fullText.left(letters) + "..."; } else if (squeezedWidth > width) { // we estimated too long // remove letters while text > label do { --letters; squeezedText = fullText.left(letters) + "..."; squeezedWidth = fm.width(squeezedText); } while (letters && squeezedWidth > width); } if (letters >= 5) { result = squeezedText; } } return result; */ }