Piggyback on mart's patch. Add the ability to set the number of lines in the display, fixes
Icon::Private::elidedText so the display won't be truncated to one line if the whole text doesn't fit, and fixes some crashes. svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=753049
This commit is contained in:
parent
27ce118c91
commit
06295ace02
@ -380,14 +380,14 @@ QVariant AppletHandle::itemChange(GraphicsItemChange change, const QVariant &val
|
|||||||
void AppletHandle::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
|
void AppletHandle::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
|
||||||
{
|
{
|
||||||
Q_UNUSED(event);
|
Q_UNUSED(event);
|
||||||
kDebug() << "hover enter";
|
//kDebug() << "hover enter";
|
||||||
startFading(FadeIn);
|
startFading(FadeIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppletHandle::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
|
void AppletHandle::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
|
||||||
{
|
{
|
||||||
Q_UNUSED(event);
|
Q_UNUSED(event);
|
||||||
kDebug() << "hover leave";
|
//kDebug() << "hover leave";
|
||||||
startFading(FadeOut);
|
startFading(FadeOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -374,6 +374,26 @@ void Icon::actionDestroyed(QObject* action)
|
|||||||
update(); // redraw since an action has been deleted.
|
update(); // redraw since an action has been deleted.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Icon::numDisplayLines()
|
||||||
|
{
|
||||||
|
return d->numDisplayLines;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Icon::setNumDisplayLines(int numLines)
|
||||||
|
{
|
||||||
|
if(numLines > d->maxDisplayLines) {
|
||||||
|
d->numDisplayLines = d->maxDisplayLines;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
d->numDisplayLines = numLines;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QSizeF Icon::sizeHint() const
|
||||||
|
{
|
||||||
|
return currentSize;
|
||||||
|
}
|
||||||
|
|
||||||
QSizeF Icon::Private::displaySizeHint(const QStyleOptionGraphicsItem *option, const qreal width) const
|
QSizeF Icon::Private::displaySizeHint(const QStyleOptionGraphicsItem *option, const qreal width) const
|
||||||
{
|
{
|
||||||
if (text.isEmpty() && infoText.isEmpty()) {
|
if (text.isEmpty() && infoText.isEmpty()) {
|
||||||
@ -390,7 +410,7 @@ QSizeF Icon::Private::displaySizeHint(const QStyleOptionGraphicsItem *option, co
|
|||||||
horizontalMargin[Private::TextMargin].right;
|
horizontalMargin[Private::TextMargin].right;
|
||||||
|
|
||||||
//allow only five lines of text
|
//allow only five lines of text
|
||||||
const int maxHeight = 5*Plasma::Theme::self()->fontMetrics().height();
|
const qreal maxHeight = numDisplayLines*Plasma::Theme::self()->fontMetrics().lineSpacing();
|
||||||
|
|
||||||
// To compute the nominal size for the label + info, we'll just append
|
// To compute the nominal size for the label + info, we'll just append
|
||||||
// the information string to the label
|
// the information string to the label
|
||||||
@ -665,10 +685,6 @@ QString Icon::Private::elidedText(QTextLayout &layout, const QStyleOptionGraphic
|
|||||||
qreal maxHeight = size.height();
|
qreal maxHeight = size.height();
|
||||||
qreal height = 0;
|
qreal height = 0;
|
||||||
|
|
||||||
// If the string contains a single line of text it shouldn't be word wrapped
|
|
||||||
if (text.indexOf(QChar::LineSeparator) == -1)
|
|
||||||
return metrics.elidedText(text, Qt::ElideRight, maxWidth);
|
|
||||||
|
|
||||||
// Elide each line that has already been laid out in the layout.
|
// Elide each line that has already been laid out in the layout.
|
||||||
QString elided;
|
QString elided;
|
||||||
elided.reserve(text.length());
|
elided.reserve(text.length());
|
||||||
@ -684,7 +700,7 @@ QString Icon::Private::elidedText(QTextLayout &layout, const QStyleOptionGraphic
|
|||||||
{
|
{
|
||||||
// Unfortunately, if the line ends because of a line separator, elidedText() will be too
|
// Unfortunately, if the line ends because of a line separator, elidedText() will be too
|
||||||
// clever and keep adding lines until it finds one that's too wide.
|
// clever and keep adding lines until it finds one that's too wide.
|
||||||
if (line.naturalTextWidth() < maxWidth && text[start + length - 1] == QChar::LineSeparator)
|
if (line.naturalTextWidth() < maxWidth && start+length > 0 && text[start + length - 1] == QChar::LineSeparator)
|
||||||
elided += text.mid(start, length - 1);
|
elided += text.mid(start, length - 1);
|
||||||
else
|
else
|
||||||
elided += metrics.elidedText(text.mid(start), Qt::ElideRight, maxWidth);
|
elided += metrics.elidedText(text.mid(start), Qt::ElideRight, maxWidth);
|
||||||
|
@ -154,6 +154,21 @@ public:
|
|||||||
*/
|
*/
|
||||||
QSizeF sizeFromIconSize(const qreal iconWidth) const;
|
QSizeF sizeFromIconSize(const qreal iconWidth) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the number of lines allowed to display
|
||||||
|
*/
|
||||||
|
int numDisplayLines();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param numLines the number of lines to show in the display.
|
||||||
|
*/
|
||||||
|
void setNumDisplayLines(int numLines);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the recommended size of the widget
|
||||||
|
*/
|
||||||
|
QSizeF sizeHint() const;
|
||||||
|
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
/**
|
/**
|
||||||
|
@ -181,12 +181,15 @@ public:
|
|||||||
IconStates states;
|
IconStates states;
|
||||||
Qt::Orientation orientation;
|
Qt::Orientation orientation;
|
||||||
Qt::Alignment alignment;
|
Qt::Alignment alignment;
|
||||||
|
int numDisplayLines;
|
||||||
|
|
||||||
QList<IconAction*> cornerActions;
|
QList<IconAction*> cornerActions;
|
||||||
|
|
||||||
Margin verticalMargin[NMargins];
|
Margin verticalMargin[NMargins];
|
||||||
Margin horizontalMargin[NMargins];
|
Margin horizontalMargin[NMargins];
|
||||||
Margin *activeMargins;
|
Margin *activeMargins;
|
||||||
|
|
||||||
|
static const int maxDisplayLines = 5;
|
||||||
};
|
};
|
||||||
|
|
||||||
Q_DECLARE_OPERATORS_FOR_FLAGS(Icon::Private::IconStates)
|
Q_DECLARE_OPERATORS_FOR_FLAGS(Icon::Private::IconStates)
|
||||||
|
Loading…
Reference in New Issue
Block a user