Let KMetaDataWidget and all the child widgets respect the foreground role that might be set by the client. This allows KMetaDataWidget to get embedded inside a tooltip having correct tooltip colors.

svn path=/trunk/KDE/kdebase/apps/; revision=1052509
This commit is contained in:
Peter Penz 2009-11-21 22:50:22 +00:00
parent 3be4adae11
commit 2a02ac7d02
6 changed files with 60 additions and 13 deletions

View file

@ -23,6 +23,7 @@
#include <kglobalsettings.h>
#include <klocale.h>
#include <QEvent>
#include <QLabel>
#include <QTextEdit>
#include <QVBoxLayout>
@ -87,6 +88,14 @@ bool KCommentWidget::isReadOnly() const
return m_readOnly;
}
bool KCommentWidget::event(QEvent* event)
{
if (event->type() == QEvent::Polish) {
m_label->setForegroundRole(foregroundRole());
}
return QWidget::event(event);
}
void KCommentWidget::slotLinkActivated(const QString& link)
{
KDialog dialog(this, Qt::Dialog);

View file

@ -50,6 +50,9 @@ public:
signals:
void commentChanged(const QString& comment);
protected:
virtual bool event(QEvent* event);
private slots:
void slotLinkActivated(const QString& link);

View file

@ -26,6 +26,7 @@
#include <kglobal.h>
#include <klocale.h>
#include <QEvent>
#include <QFontMetrics>
#include <QGridLayout>
#include <QLabel>
@ -177,12 +178,6 @@ KMetaDataWidget::Private::Private(KMetaDataWidget* parent) :
m_ownerInfo = new QLabel(parent);
m_permissionsInfo = new QLabel(parent);
addRow(new QLabel(i18nc("@label", "Type:"), parent), m_typeInfo);
addRow(m_sizeLabel, m_sizeInfo);
addRow(new QLabel(i18nc("@label", "Modified:"), parent), m_modifiedInfo);
addRow(new QLabel(i18nc("@label", "Owner:"), parent), m_ownerInfo);
addRow(new QLabel(i18nc("@label", "Permissions:"), parent), m_permissionsInfo);
#ifdef HAVE_NEPOMUK
m_nepomukActivated = (Nepomuk::ResourceManager::instance()->init() == 0);
if (m_nepomukActivated) {
@ -198,15 +193,10 @@ KMetaDataWidget::Private::Private(KMetaDataWidget* parent) :
m_commentWidget = new KCommentWidget(parent);
connect(m_commentWidget, SIGNAL(commentChanged(const QString&)),
q, SLOT(slotCommentChanged(const QString&)));
addRow(new QLabel(i18nc("@label", "Rating:"), parent), m_ratingWidget);
addRow(new QLabel(i18nc("@label", "Tags:"), parent), m_taggingWidget);
addRow(new QLabel(i18nc("@label", "Comment:"), parent), m_commentWidget);
}
#endif
initMetaInfoSettings();
updateRowsVisibility();
}
KMetaDataWidget::Private::~Private()
@ -230,14 +220,17 @@ void KMetaDataWidget::Private::addRow(QLabel* label, QWidget* infoWidget)
const QFont smallFont = KGlobalSettings::smallestReadableFont();
// use a brighter color for the label and a small font size
QPalette palette = label->palette();
QColor textColor = palette.color(QPalette::Text);
const QPalette::ColorRole role = q->foregroundRole();
QColor textColor = palette.color(role);
textColor.setAlpha(128);
palette.setColor(QPalette::WindowText, textColor);
palette.setColor(role, textColor);
label->setPalette(palette);
label->setForegroundRole(role);
label->setFont(smallFont);
label->setWordWrap(true);
label->setAlignment(Qt::AlignTop | Qt::AlignRight);
infoWidget->setForegroundRole(role);
QLabel* infoLabel = qobject_cast<QLabel*>(infoWidget);
if (infoLabel != 0) {
infoLabel->setFont(smallFont);
@ -642,4 +635,31 @@ QSize KMetaDataWidget::sizeHint() const
return QSize(fixedWidth, height);
}
bool KMetaDataWidget::event(QEvent* event)
{
if (event->type() == QEvent::Polish) {
// The adding of rows is not done in the constructor. This allows the
// client of KMetaDataWidget to set a proper foreground role which
// will be respected by the rows.
d->addRow(new QLabel(i18nc("@label", "Type:"), this), d->m_typeInfo);
d->addRow(d->m_sizeLabel, d->m_sizeInfo);
d->addRow(new QLabel(i18nc("@label", "Modified:"), this), d->m_modifiedInfo);
d->addRow(new QLabel(i18nc("@label", "Owner:"), this), d->m_ownerInfo);
d->addRow(new QLabel(i18nc("@label", "Permissions:"), this), d->m_permissionsInfo);
#ifdef HAVE_NEPOMUK
if (d->m_nepomukActivated) {
d->addRow(new QLabel(i18nc("@label", "Rating:"), this), d->m_ratingWidget);
d->addRow(new QLabel(i18nc("@label", "Tags:"), this), d->m_taggingWidget);
d->addRow(new QLabel(i18nc("@label", "Comment:"), this), d->m_commentWidget);
}
#endif
d->updateRowsVisibility();
}
return QWidget::event(event);
}
#include "kmetadatawidget.moc"

View file

@ -125,6 +125,9 @@ public:
Q_SIGNALS:
void urlActivated(const KUrl& url);
protected:
virtual bool event(QEvent* event);
private:
class Private;
Private* d;

View file

@ -23,6 +23,7 @@
#include <kglobalsettings.h>
#include <klocale.h>
#include <QEvent>
#include <QLabel>
#include <QVBoxLayout>
@ -97,6 +98,14 @@ bool KTaggingWidget::isReadOnly() const
return m_readOnly;
}
bool KTaggingWidget::event(QEvent* event)
{
if (event->type() == QEvent::Polish) {
m_label->setForegroundRole(foregroundRole());
}
return QWidget::event(event);
}
void KTaggingWidget::slotLinkActivated(const QString& link)
{
Q_UNUSED(link);

View file

@ -50,6 +50,9 @@ public:
signals:
void tagsChanged(const QList<Nepomuk::Tag>& tags);
protected:
virtual bool event(QEvent* event);
private slots:
void slotLinkActivated(const QString& link);