1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
/*
Sonic Visualiser
An audio file viewer and annotation editor.
Centre for Digital Music, Queen Mary, University of London.
This file copyright 2006-2007 Chris Cannam and QMUL.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version. See the file
COPYING included with this distribution for more information.
*/
#ifndef SV_TEXT_ABBREV_H
#define SV_TEXT_ABBREV_H
#include <QString>
#include <QStringList>
#include <set>
class QFontMetrics;
namespace sv {
class TextAbbrev
{
public:
enum Policy {
ElideEnd,
ElideEndAndCommonPrefixes,
ElideStart,
ElideMiddle
};
/**
* Abbreviate the given text to the given maximum length
* (including ellipsis), using the given abbreviation policy. If
* fuzzy is true, the text will be left alone if it is "not much
* more than" the maximum length.
*
* If ellipsis is non-empty, it will be used to show elisions in
* preference to the default (which is "...").
*/
static QString abbreviate(QString text, int maxLength,
Policy policy = ElideEnd,
bool fuzzy = true,
QString ellipsis = "");
/**
* Abbreviate the given text to the given maximum painted width,
* using the given abbreviation policy. maxWidth is also modified
* so as to return the painted width of the abbreviated text.
*
* If ellipsis is non-empty, it will be used to show elisions in
* preference to the default (which is tr("...")).
*/
static QString abbreviate(QString text,
const QFontMetrics &metrics,
int &maxWidth,
Policy policy = ElideEnd,
QString ellipsis = "");
/**
* Abbreviate all of the given texts to the given maximum length,
* using the given abbreviation policy. If fuzzy is true, texts
* that are "not much more than" the maximum length will be left
* alone.
*
* If ellipsis is non-empty, it will be used to show elisions in
* preference to the default (which is tr("...")).
*/
static QStringList abbreviate(const QStringList &texts, int maxLength,
Policy policy = ElideEndAndCommonPrefixes,
bool fuzzy = true,
QString ellipsis = "");
/**
* Abbreviate all of the given texts to the given maximum painted
* width, using the given abbreviation policy. maxWidth is also
* modified so as to return the maximum painted width of the
* abbreviated texts.
*
* If ellipsis is non-empty, it will be used to show elisions in
* preference to the default (which is tr("...")).
*/
static QStringList abbreviate(const QStringList &texts,
const QFontMetrics &metrics,
int &maxWidth,
Policy policy = ElideEndAndCommonPrefixes,
QString ellipsis = "");
protected:
static QString getDefaultEllipsis();
static int getFuzzLength(QString ellipsis);
static int getFuzzWidth(const QFontMetrics &metrics, QString ellipsis);
static QString abbreviateTo(QString text, int characters,
Policy policy, QString ellipsis);
static QStringList elidePrefixes(const QStringList &texts,
int targetReduction,
QString ellipsis);
static QStringList elidePrefixes(const QStringList &texts,
const QFontMetrics &metrics,
int targetWidthReduction,
QString ellipsis);
static std::set<QString> getCommonPrefixes(const QStringList &texts);
};
} // end namespace sv
#endif
|